EA中如何计算止损和止赢
[原创转载] macy01.blogcn.com 一般一个EA中会定义止损水平和止赢水平,一般大家定义的参数都是int型,即点数。例如下面的变量定义: extern int _SlipPage = 2; //最大允许滑点数 extern int _StopLoss = 30; //止损水平 extern int _TakeProfit = 100; //赢利水平 extern int _Magic = 0; //订单Migc号码 在使用OrderSend开仓的时候,并不能够直接将上面的参数传递给OrderSend,因为OrderSend需要的是真实的市场价位,例如EURUSD开多仓位置为1.5000,则对应止损为1.4970,止赢为1.5100;对于其他货币小数位数可能不同,例如USDJPY。注意事项为: (1)如果没有经过转换,或者价位设置错误(例如多单的止损高于入场价位),则会返回错误码130: errorDescription="无效的止损(invalid stops)"; (2)在传入OrderSend时,最好使用NormalizeDouble(stopLoss,Digits)将参数处理为小数位数合适的Double类型 转换的代码如下面所示: void Trade() { double openLots = LotsMgmt(); //开仓手数 int ticket; //订单编号 double stopLoss=0, takeProfit=0; if(CheckForOpen()==OPEN_BUY) { //计算止赢点位 if(_TakeProfit==0) takeProfit=0; else takeProfit=Ask+_TakeProfit*Point; //计算止损点位 if(_StopLoss==0) stopLoss=0; else stopLoss=Ask-_StopLoss*Point; //这里止损和止赢必须使用NormalizeDouble处理和相应货币的小数位数对应 ticket=OrderSend(Symbol(), OP_BUY, openLots, Ask, _SlipPage, NormalizeDouble(stopLoss,Digits),NormalizeDouble(takeProfit,Digits), ORDER_COMMENT, _Magic, 0, Red); if(ticket==-1) Print("Error Occured : "+ErrorDescription(GetLastError())); } if(CheckForOpen()==OPEN_SELL) { //计算止赢点位 if(_TakeProfit==0) takeProfit=0; else takeProfit=Bid-_TakeProfit*Point; //计算止损点位 if(_StopLoss==0) stopLoss=0; else stopLoss=Bid+_StopLoss*Point; //这里止损和止赢必须使用NormalizeDouble处理和相应货币的小数位数对应 ticket=OrderSend(Symbol(), OP_SELL, openLots, Bid, _SlipPage, NormalizeDouble(stopLoss,Digits),NormalizeDouble(takeProfit,Digits), ORDER_COMMENT, _Magic, 0, Green); if(ticket==-1) Print("Error Occured : "+ErrorDescription(GetLastError())); } } |
打赏
最新创建圈子
- 新闻EA运行效果图圈 2019-05-05
圈主:admin 帖子:1