OrderModify 130在反向测试时返回给我,但我还没有找到修复它的方法,这是由于什么原因?
日志:
2021.09.14 16:27:56.485 2021.01.13 05:00:00 XXXX XAUUSD,H4: OrderModify error 130
2021.09.14 16:27:56.485 2021.01.13 05:00:00 XXX XAUUSD,H4: open #17 buy 1.17 XAUUSD at 1859.80 ok
2021.09.14 16:27:56.485 2021.01.13 05:00:00 XX XAUUSD,H4: lots:1.172578644923699,mod:0.01
2021.09.14 16:27:56.485 2021.01.13 05:00:00 XXXX XAUUSD,H4: lots:0.0,Last_Position_Size:1.160968955369999,Lot_Size_Mod:1.0
2021.09.14 16:27:56.485 2021.01.13 05:00:00 XXX XAUUSD,H4: BUY entry, Nearest_Up_Level:1855.3,Close[2]:1855.21,Close[1]:1859.73void OpenTrade(string sym, int tmode, double tsize){
int err = 0, ticket = 0;
double TP = 0, SL = 0;
if(!IsTradeAllowed()){
while(true){
if(IsTradeAllowed()) break;
Sleep(100);
}
}
RefreshRates();
if (tmode == OP_BUY){
err = 1;
while(err > 0){
RefreshRates();
//if (TakeProfit > 0) TP = Ask + TakeProfit * Point * mp;
//else TP = 0;
TP = BUY_TP_Price;
//Print("Current TP distance:", (TP - Ask) / Point / mp);
if ((TP - Ask) / Point / mp < Min_TP_Distance) TP = Next_BUY_TP_Price;
if (Stop_Loss > 0) SL = Ask - Stop_Loss * Point * mp;
else SL = 0;
ticket = OrderSend(sym, OP_BUY, tsize, Ask, 0, 0, 0, "", Magic_Number, 0, Green);
err = GetLastError();
// Print(sym+" Buy open, err:",err);
if (err == 3 || err == 64 || err == 65 || err == 130 || err == 131 || err == 133 || err == 134 || err == 148 || err == 4110 || err == 143 ) err = 0;
if (err != 0) Sleep(1000);
}
if (ticket > 0 && (TP > 0 || SL > 0)){
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
bool result = OrderModify(ticket, OrderOpenPrice(), SL*_Point, TP*_Point, 0, CLR_NONE);
}
}
if (tmode == OP_SELL){
err = 1;
while(err > 0){
RefreshRates();
//if (TakeProfit > 0) TP = Bid - TakeProfit * Point * mp;
//else TP = 0;
TP = SELL_TP_Price;
Print("Current TP distance:", (Bid - TP) / Point / mp, ",TP:",TP);
if ((Bid - TP) / Point / mp < Min_TP_Distance) TP = Next_SELL_TP_Price;
if (Stop_Loss > 0) SL = Bid + Stop_Loss * Point * mp;
else SL = 0;
ticket= OrderSend(sym, OP_SELL, tsize, Bid, 0, 0, 0, "", Magic_Number, 0, Red);
err = GetLastError();
//Print(sym+" Sell open, err:",err);
if (err == 3 || err == 64 || err == 65 || err == 130 || err == 131 || err == 133 || err == 134 || err == 148 || err == 4111) err = 0;
if (err != 0) Sleep(1000);
}
if (ticket > 0 && (TP > 0 || SL > 0)){
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
bool result = OrderModify(ticket, OrderOpenPrice(), SL*_Point, TP*_Point, 0, CLR_NONE);
}
}
}发布于 2021-09-14 15:17:39
错误代码130为ERR_INVALID_STOPS (参见Error Codes)。
这是由于您没有正确地使用OrderModify而导致的。
止损获利应该是Levels而不是Pips。将您的代码修改为:
bool result;
if(OrderType()==OP_BUY) result=OrderModify(ticket, OrderOpenPrice(), NormalizeDouble(OrderOpenPrice()-SL*_Point, Digits), NormalizeDouble(OrderOpenPrice()+TP*_Point, Digits), 0, CLR_NONE);
else result=OrderModify(ticket, OrderOpenPrice(), NormalizeDouble(OrderOpenPrice()+SL*_Point, Digits), NormalizeDouble(OrderOpenPrice()-TP*_Point, Digits), 0, CLR_NONE);将您的级别标准化为Digits也是一个很好的实践,我已经在上面的代码中包含了这一点。
https://stackoverflow.com/questions/69179720
复制相似问题