BUY и SELL ордеры должны чередоваться, по этому я ввёл "BS" которая запоминает прежнее состояние.
почему-то вот только в BUY заходит, пишет "BUY order opened : ......" но
не выполняет.
BS следовательно всё время FALSE.
Видимо тут что-то не так, но я не вижу что
Спасибо
Вот так должно работать. Лишние кривые скобки бывают лишними но не в этом случае.
bool BS=FALSE; int ticket; void OnTick() { if(BS==FALSE) { ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("BUY order opened : ",OrderOpenPrice()); BS=TRUE; } } else { Print("Error opening BUY order : ",GetLastError()); BS=FALSE; } } else { ticket=OrderSend(Symbol(),OP_SELL,1,price,3,stoploss,takeprofit,"My order",16384,0,clrRed); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("SELL order opened : ",OrderOpenPrice()); BS=FALSE; } } else { Print("Error opening SELL order : ",GetLastError()); BS=TRUE; } } }
BUY и SELL ордеры должны чередоваться, по этому я ввёл "BS" которая запоминает прежнее состояние.
почему-то вот только в BUY заходит, пишет "BUY order opened : ......" но
не выполняет.
BS следовательно всё время FALSE.
Видимо тут что-то не так, но я не вижу что
Спасибо
После if() и else полагается выполняемые действия заключать в фигурные скобки. А вы не всегда это делаете. Сделайте правильно, а потом уже разбирайтесь дальше, а может и будет работать правильно.
P.S . Ну вот пока писал уже подсказали.
После if() и else полагается выполняемые действия заключать в фигурные скобки. А вы не всегда это делаете. Сделайте правильно, а потом уже разбирайтесь дальше, а может и будет работать правильно.
Вот так, без кривых скобок тоже будет работать
bool BS=FALSE; int ticket; void OnTick() { if(BS==FALSE) { ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) //Print("BUY order opened : ",OrderOpenPrice()); BS=TRUE; } else //Print("Error opening BUY order : ",GetLastError()); BS=FALSE; } else { ticket=OrderSend(Symbol(),OP_SELL,1,price,3,stoploss,takeprofit,"My order",16384,0,clrRed); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) //Print("SELL order opened : ",OrderOpenPrice()); BS=FALSE; } else //Print("Error opening SELL order : ",GetLastError()); BS=TRUE; } }
И ещё вариант
bool BS=FALSE; int ticket; void OnTick() { if(BS==FALSE) { ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) //Print("BUY order opened : ",OrderOpenPrice()); BS=TRUE; } else Print("Error opening BUY order : ",GetLastError()); //BS=FALSE; } else { ticket=OrderSend(Symbol(),OP_SELL,1,price,3,stoploss,takeprofit,"My order",16384,0,clrRed); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) //Print("SELL order opened : ",OrderOpenPrice()); BS=FALSE; } else Print("Error opening SELL order : ",GetLastError()); //BS=TRUE; } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
BUY и SELL ордеры должны чередоваться, по этому я ввёл "BS" которая запоминает прежнее состояние.
почему-то вот только в BUY заходит, пишет "BUY order opened : ......" но
BS=TRUE;
не выполняет.
BS следовательно всё время FALSE.
Видимо тут что-то не так, но я не вижу что
Спасибо