我正在尝试修改我的市场订单,以便在仓位获得100点差价时平仓。对于我的经纪人来说,这也是StopLevels
约为20-30点。它通过“for(){...}
循环”功能
MagicNumber
是其所在图表的时间范围编号(即 240
= 4H, 60
= 1H )我没有设定TakeProfit
价格& 最初没有StopLoss
价格。
EA 在交易达到100点利润(加上行程水平)时,并未将SL
添加为等于开盘价。利润点达到130多点。
我的代码位于 OP_SELL
订单的下方 - 任何帮助都将不胜感激。此致,托德
/*Global Declarations*/
double pnlPoints;
double price, sl, tp;
double point;
int stopLevel;
int breakeven;
double newSL;
/*Local Declaratons*/
pnlPoints = 0;
point = MarketInfo( Symbol(), MODE_POINT );
stopLevel = int( MarketInfo( Symbol(), MODE_STOPLEVEL )
+ MarketInfo( Symbol(), MODE_SPREAD )
);
sl = NormalizeDouble( OrderStopLoss(), Digits );
tp = OrderTakeProfit();
breakeven = 100;
for( int s = OrdersTotal() - 1; s >= 0; s-- )
{ if ( ( OrderSelect( s, SELECT_BY_POS, MODE_TRADES ) ) == true )
price = MarketInfo( Symbol(), MODE_ASK );
newSL = NormalizeDouble( OrderOpenPrice(), Digits );
pnlPoints = ( OrderOpenPrice() - price ) / point;
if ( OP_SELL == OrderType() )
if ( Period() == OrderMagicNumber() )
if ( stopLevel < ( newSL - price ) / point )
if ( breakeven < pnlPoints )
if ( newSL != sl )
ModSell = OrderModify( OrderTicket(),
OrderOpenPrice(),
newSL,
tp,
buycolor
);
else if ( ModBuy == false )
{ Print( "OrderModify failed with error #",
GetLastError()
);
}
}
答案 0 :(得分:0)
OrderModify()
后,使用自我调试/日记Print( StringFormat( ... ) )
来记录实际OrderModify()
调用中使用的所有指示值以及远程执行( {server-side | StrategyTester})报告了问题。
当前代码未进入此类自我诊断,并且根本未检查 ModSell
,仅在不确定时检查 ModBuy
在{strong> for(){...}
之后newSL == sl
代码执行路径访问某个部分的条件/巧合(以及所有上述条件也偶然得到满足)< / p>
tp
如上所述,
/*Local Declarations*/
...
tp = OrderTakeProfit();
引入合理怀疑,重新使用(固有不确定值,因为没人知道, OrderSelect()
是设置 db.Pool
指针的最后一个,决定来自db.Pool
此OrderTakeProfit()
db.Pool
的记录意外阅读(如果for(){...}
已经存在任何记录)在整个db.Pool
遍历内OrderModify()
记录将无法满足正确设置的条件在下一系列OrderModify()
来电中获取优惠价格。
这似乎是有效的,符合Broker的{{1}}值的未处理例外的根本原因或来源。
答案 1 :(得分:0)
试试这个:
if (newSL != sl ) {
ModSell = OrderModify( OrderTicket(),
OrderOpenPrice(),
OrderOpenPrice(),
0,
OrderExpiration(),
clrRed
);
if(ModBuy == false )
Print( "OrderModify failed with error #", GetLastError());
}
如果无法设置停止,请检查专家标签是否有错误消息。
此外,您需要注意只有在正确的图表时间范围内才会发生StopLoss;否则,它甚至不会进入if语句。