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