Для вставки кода используй кнопочку SRC.
Расставь фигурные скобки по глубине залегания.
Тогда, м.б. и сам разберешься. Но :
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
if(OrderSymbol()!=Symbol()) continue;
словами, если ордер невыбран, то если он с другой пары, идем на следуюшую итерацию.
Бред
Для вставки кода используй кнопочку SRC.
Расставь фигурные скобки по глубине залегания.
Тогда, м.б. и сам разберешься. Но :
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
if(OrderSymbol()!=Symbol()) continue;
словами, если ордер невыбран, то если он с другой пары, идем на следуюшую итерацию.
Бред
Вот код:
if(OrderSell==1) { for(cnt=0;cnt<OrdersTotal();cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_SELL && OrderProfit()<-Spred && OP>MA33 && CL<MA33) { for(q=0;q<1;q++) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-TP*Point,Red); OrderSend(Symbol(), OP_SELL, Lots*5, Bid, Slip, Bid+SL*Point, Bid-TP*Point, "Ордер SELL",Red); } } } } if(OrderBuy==1) { for(cnt=0;cnt<OrdersTotal();cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_BUY && OrderProfit()<-Spred && OP<MA33 && CL>MA33) { for(q=0;q<1;q++) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,Red); OrderSend(Symbol(), OP_BUY, Lots*5, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green); } } } }
Где здесь ошибка? Почему открывает множество ордеров?
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green);
Здесь все нормально! При Lots открывается только один ордер! А при Lots*5 много?
попробуйте вот этот код. может получится.
bool Lock=false; // заглушка if(OrderSell==1) { for(cnt=0;cnt<OrdersTotal();cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_SELL && OrderProfit()<-Spred && OP>MA33 && CL<MA33) { for(q=0;q<1;q++) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-TP*Point,Red); if(OrderSend(Symbol(), OP_SELL, Lots*5, Bid, Slip, Bid+SL*Point, Bid-TP*Point, "Ордер SELL",Red) && !Lock){ Lock=true; } } } } } if(OrderBuy==1) { for(cnt=0;cnt<OrdersTotal();cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_BUY && OrderProfit()<-Spred && OP<MA33 && CL>MA33) { for(q=0;q<1;q++) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,Red); if(OrderSend(Symbol(), OP_BUY, Lots*5, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green) && !Lock){ Lock=true; } } } } }
попробуйте вот этот код. может получится.
bool Lock=false; // заглушка if(OrderSell==1) { for(cnt=0;cnt<OrdersTotal();cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_SELL && OrderProfit()<-Spred && OP>MA33 && CL<MA33) { for(q=0;q<1;q++) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-TP*Point,Red); if(OrderSend(Symbol(), OP_SELL, Lots*5, Bid, Slip, Bid+SL*Point, Bid-TP*Point, "Ордер SELL",Red) && !Lock){ Lock=true; } } } } } Lock=false; // заглушка if(OrderBuy==1) { for(cnt=0;cnt<OrdersTotal();cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_BUY && OrderProfit()<-Spred && OP<MA33 && CL>MA33) { for(q=0;q<1;q++) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,Red); if(OrderSend(Symbol(), OP_BUY, Lots*5, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green) && !Lock){ Lock=true; } } } } }
Вообще-то, конструкция -
for(q=0;q<1;q++) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,Red); if(OrderSend(Symbol(), OP_BUY, Lots*5, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green) && !Lock){ Lock=true; } }
равнозначна
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,Red); if(OrderSend(Symbol(), OP_BUY, Lots*5, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green) && !Lock) {Lock=true;}
И еще один совет: для хорошей читабельности вложений,
открывающую и закрывающую скобки ( {} ) ставь строго по вертикали (на одном расстоянии от борта).
И еще -
int Total=OrdersTotal();
if(OrderSell==1) { for(cnt=0; cnt<Total; cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_SELL && OrderProfit()<-Spred && OP>MA33 && CL<MA33) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-TP*Point,Red); OrderSend(Symbol(), OP_SELL, Lots*5, Bid, Slip, Bid+SL*Point, Bid-TP*Point, "Ордер SELL",Red); } } } if(OrderBuy==1) { for(cnt=0; cnt<Total; cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_BUY && OrderProfit()<-Spred && OP<MA33 && CL>MA33) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,Red); OrderSend(Symbol(), OP_BUY, Lots*5, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green); } } }
Я так думаю.
Не вдаваясь в логику
&& OrderProfit()<-Spred && OP<MA33 && CL>MA33
и&& OrderProfit()<-Spred && OP>MA33 && CL<MA33
лучше так. тут сразу видно какая скобка закрыта, а какая нет.
bool Lock=false; // Заглушка if(OrderSell==1){ for(cnt=0;cnt<OrdersTotal();cnt++){ if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)){ if(OrderType()==OP_SELL && OrderProfit()<-Spred && OP>MA33 && CL<MA33){ for(q=0;q<1;q++){ OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-TP*Point,Red); if(OrderSend(Symbol(), OP_SELL, Lots*5, Bid, Slip, Bid+SL*Point, Bid-TP*Point, "Ордер SELL",Red) && !Lock){ Lock=true; } } } } } } Lock=false; // Заглушка if(OrderBuy==1){ for(cnt=0;cnt<OrdersTotal();cnt++){ if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)){ if(OrderType()==OP_BUY && OrderProfit()<-Spred && OP<MA33 && CL>MA33){ for(q=0;q<1;q++){ OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,Red); if(OrderSend(Symbol(), OP_BUY, Lots*5, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green) && !Lock){ Lock=true; } } } } } }
И еще -
Я так думаю.
Не вдаваясь в логику
int Total=OrdersTotal(); if(OrderSell==1) { for(cnt=0; cnt<Total; cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_SELL && OrderProfit()<-Spred && OP>MA33 && CL<MA33) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-TP*Point,Red); OrderSend(Symbol(), OP_SELL, Lots*5, Bid, Slip, Bid+SL*Point, Bid-TP*Point, "Ордер SELL",Red); } } } if(OrderBuy==1) { for(cnt=0; cnt<Total; cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_BUY && OrderProfit()<-Spred && OP<MA33 && CL>MA33) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,Red); OrderSend(Symbol(), OP_BUY, Lots*5, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green); } } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравстуйте!
У меня такая проблема! Мне нужно прикрутить мартингейл к советнику.
При достижении определённого убытка нужно выбрать убыточный ордер, модифицировать его тейк профит, и открыть такой же ордер, как и модифицированный, только с другим лотом.
Вроде бы с кодом разобрался. Но возникла проблема. При открытии нового ордера с другим лотом, их открывается огромное множество! А нужно, что бы открывался один. При открытии нового ордера с тем же лотом, всё работает нормально, а с другим лотом их открывается столько, сколько тиков при данном условии.
Вот код:
if(OrderSell==1 || OrderBuy==1)
{
for(cnt=0;cnt<OrdersTotal();cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
if(OrderSymbol()!=Symbol()) continue;
if(OrderType()==OP_SELL && OrderProfit()<-Spred && OP>MA33 && CL<MA33)
{
for(q=0;q<1;q++){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-TP*Point,Red);
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slip, Bid+SL*Point, Bid-TP*Point, "Ордер SELL",Red);}
}
if(OrderType()==OP_BUY && OrderProfit()<-Spred && OP<MA33 && CL>MA33)
{
for(q=0;q<1;q++){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,Red);
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green);}
}
}
}
Работает нормально!
if(OrderSell==1 || OrderBuy==1)
{
for(cnt=0;cnt<OrdersTotal();cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
if(OrderSymbol()!=Symbol()) continue;
if(OrderType()==OP_SELL && OrderProfit()<-Spred && OP>MA33 && CL<MA33)
{
for(q=0;q<1;q++){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-TP*Point,Red);
OrderSend(Symbol(), OP_SELL, Lots*2, Bid, Slip, Bid+SL*Point, Bid-TP*Point, "Ордер SELL",Red);}
}
if(OrderType()==OP_BUY && OrderProfit()<-Spred && OP<MA33 && CL>MA33)
{
for(q=0;q<1;q++){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point,Red);
OrderSend(Symbol(), OP_BUY, Lots*2, Ask, Slip, Ask-SL*Point, Ask+TP*Point, "Ордер BUY",Green);}
}
}
}
Ненормально!
Помогите разобраться, где ошибка?
Заранее благодарю за подсказку!