查看:1213回复:23
2楼
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
参量:
symbol - 交易货币对。
cmd - 购买方式。可以是购买方式列举的任意值。
volume - 购买手数。
price - 收盘价格。
slippage - 最大允许滑点数。
stoploss - 止损水平。
takeprofit - 赢利水平。
comment - 注解文本。注解的最后部分可以由服务器改变。
magic - 定单指定码。可以作为用户指定识别码使用。
expiration - 定单有效时间(只限挂单)。
arrow_color - 图表上箭头颜色。如果参量丢失或存在CLR_NONE价格值不会在图表中画出。
即,当定单被放置时,可以给定单指定独有的数字。这个数字将用于区分其他定单。当手动交易时,不使用(尽可能)这个特性,但是在智能交易(自动交易)运作时,此特性是不可替代的。
3楼
范例1: 在客户端内交易者和智能交易同时运行。
任务: 智能交易的运行必须按照它自己的形式计算,对于手动开仓不会干涉。
解决: 开仓的智能交易必须指定独特的MagicNumber(零除外)。接下来的日子里,智能交易只会管理提前设定的 MagicNumber 的定单。
范例 2: 在客户端内两个不同计算方法的智能交易同时运行。
任务: 智能交易只管理自己的定单。.
解决: 当开仓时,每个智能交易必须使用自己的 MagicNumber(零除外)。接下来的日子里,智能交易只会管理提前设定的MagicNumber的定单。
范例 3: 在客户端内几个智能交易,交易者和协助智能交易执行的不标准追踪止损同时运行。
任务: 交易的智能交易必须按照自己的形式计算,并且不干涉手动开仓。协助智能交易执行的追踪止损可以在手动开仓处修改,但是其他智能交易不能够开仓。
解决: 智能交易必须使用独有的MagicNumbers并且管理自己的仓位。协助智能交易修改的这些仓位,其 MagicNumber等于 0。
以上三个范例都很现实,用户可以提前解决问题。在这三个范例情况中,都是使用MagicNumber来解决问题的。这不是唯一解决问题的途径,但是最简单的途径。
韬客社区www.talkfx.co
4楼
//获得最新订单的开仓价 start函数里的使用:
==================================================
double LastBuyOpenPrice;
LastBuyOpenPrice=GetBuyOrderOpenPrice();
==================================================
//函数定义
double GetBuyOrderOpenPrice()//如果没有指定的持仓单,则返回-1
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderType()==OP_BUY )
{
return(OrderOpenPrice());
}
}
return(-1);
韬客社区www.talkfx.co
5楼
// 如果在搜索中生成错误,转至下一个仓位
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print("OrderSelect( ", z, ", SELECT_BY_POS ) - 错误 #",
_GetLastError );
continue;
}
请教高手,这个语句是必须的吗?不写会妨碍EA的执行效果吗?
韬客社区www.talkfx.co
6楼
使用函数的智能交易程序稍稍慢了一点
韬客社区www.talkfx.co
7楼
return是可以跳出双重for循环
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
return "success";
}
}
这个语法是可以跳出for循环的,尽管是双重循环。
韬客社区www.talkfx.co
9楼
Lots = 0.1
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
这个的代码的意思是,假设我们的可用保证金小于100的话,我们就停止开仓。其目的主要是保护我们的资金,不然我们的资金无限制的开仓
韬客社区www.talkfx.co
10楼
报警开关之写法一
for (i=limit-1;i>=0;i--) {
if(......&& Time[0]>bartime &&.....){
Alert(Symbol(), " ", ......);
bartime=Time[0];
}
}
韬客社区www.talkfx.co
12楼
return :表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定。 return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。 如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。
总结:return -1和0其实是没什么区别的,只是大家习惯性更倾向于返回-1为错,返回0为正确而已!程序是自己写的,如果程序员要把-1当作正确返回也是可行的!
韬客社区www.talkfx.co
13楼
RefreshRates(); 刷新预定义变量和系列数组的数据
是开平仓失败时重新要价的
重新要价是按原来的价格吗?
没准
你手动下单的时候,有时候行情速度太快,会提示你价格已经变动了,是否按照最新价格下单
ea下单也有这个问题,一般都是判断下单失败后,调用一下这函数,刷新一下价格。
挂单一般没这问题
韬客社区www.talkfx.co
14楼
要善于使用print作为排错方法,输出关键位置的数值,来帮助自己判断程序是否正确
韬客社区www.talkfx.co
15楼
不知是否一分钟数据太多,我的mt4不能进行backward test了,没有反应,想进1分钟图就死掉, 怎么办好?
有两种可能:
1、历史数据太多。方法: 到History目录里,进入你当前账号所在目录,删掉历史文件
2、图表加载的指标编的的不好,计算量过大。方法:找一下图表上是哪个指标,到indicator目录下将这个指标的ex4删除,然后重新进入MT4看看
韬客社区www.talkfx.co
16楼
通过全局变量可以让某个值在各个函数中传递,各个函数也都可以修改这个变量的值,起到一种互通有无的作用
韬客社区www.talkfx.co
发表于:2019-02-14 08:29只看该作者
17楼
代码不严谨,MQL4有更新了
韬客社区www.talkfx.co
18楼
如玉是天使 发表于 2019-2-14 16:29
代码不严谨,MQL4有更新了
韬客社区www.talkfx.co
发表于:2019-02-14 08:38只看该作者
19楼
你是刚开始学习吗?建议学习牛大的视频,在FX520网站上,现在的代码要求有些小地方有改动
韬客社区www.talkfx.co
20楼
如玉是天使 发表于 2019-2-14 16:38
你是刚开始学习吗?建议学习牛大的视频,在FX520网站上,现在的代码要求有些小地方有改动
韬客社区www.talkfx.co