У меня в советнике открывается одновременно два ордера Buy или Sell
Сначала было просто
ticket2 = OrderSend(Symbol(), cmd, lot, price, 3, stoploss, takeprofit2, "Order_2", magicNumber2, 0, Green);
но после тестирования увидел что не всегда одновременно две позиции открывается, пытаюсь это исправить
Написал такую функцию для этого.... не знаю правильно ли.
Написал такую функцию для этого.... не знаю правильно ли.
Вы же открываете 2 ордера в одном направлении. А писали, что надо 2 противоположных.
да, в одном направлении, не в противоположном
Сорри, это я в вашей фразе два ордера Buy или Sell вместо или прочитал и ))
По логике нормально, но нет никаких проверок на правильность лота, цены, стопов и тейков. Или они заранее делаются?
Сорри, это я в вашей фразе два ордера Buy или Sell вместо или прочитал и ))
По логике нормально, но нет никаких проверок на правильность лота, цены, стопов и тейков. Или они заранее делаются?
да, это раньше делаю
У меня в советнике открывается одновременно два ордера Buy или Sell
Сначала было просто
ticket2 = OrderSend(Symbol(), cmd, lot, price, 3, stoploss, takeprofit2, "Order_2", magicNumber2, 0, Green);
но после тестирования увидел что не всегда одновременно две позиции открывается, пытаюсь это исправить
Написал такую функцию для этого.... не знаю правильно ли.
На скорую руку набросала код:
void OrderSendX(int cmd,double price,double stoploss,double takeprofit1,double takeprofit2) { int count=1,ticket=-1,magicNumber=0,error=0,slippage=3; double takeprofit=0.0; color ordColor=clrNONE; while(count<=2) { switch(count) { case 1: takeprofit=takeprofit1; magicNumber=magicNumber1; ordColor=clrRed;break; case 2: takeprofit=takeprofit2; magicNumber=magicNumber2; ordColor=clrGreen;break; } for(int repeat=1;repeat<=5;repeat++) { static int repeatCount=1; ticket=-1; ResetLastError(); ticket=OrderSend(_Symbol,cmd,lot,price,slippage,stoploss,takeprofit,"Order_"+IntegerToString(count),magicNumber,0,ordColor); error=_LastError; if(ticket>0 && error<=1) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { count++; break; } else { Print("OrderSend завершилась с ошибкой #",error); slippage=slippage*repeat; if(cmd==OP_BUY) price=MarketInfo(_Symbol,MODE_ASK); if(cmd==OP_SELL) price=MarketInfo(_Symbol,MODE_BID); } } if(ticket<0) { Print("OrderSend завершилась с ошибкой #",error); slippage=slippage*repeat; int slp=1000*repeat; Sleep(slp); RefreshRates(); if(cmd==OP_BUY) price=MarketInfo(_Symbol,MODE_ASK); if(cmd==OP_SELL) price=MarketInfo(_Symbol,MODE_BID); } repeatCount++; if(repeatCount>=count*10) { Print("OrderSend завершилась с неудачей!"); return; } } } return; }
На скорую руку набросала код:
спасибо огромное

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
У меня в советнике открывается одновременно два ордера Buy или Sell
ticket1 = OrderSend(Symbol(), cmd, lot, price, 3, stoploss, takeprofit1, "Order_1", magicNumber1, 0, Red);Сначала было просто
ticket2 = OrderSend(Symbol(), cmd, lot, price, 3, stoploss, takeprofit2, "Order_2", magicNumber2, 0, Green);
но после тестирования увидел что не всегда одновременно две позиции открывается, пытаюсь это исправить
Написал такую функцию для этого.... не знаю правильно ли.
int ticket1 = -1; int ticket2 = -1;