Задача следующая .. открывается 2 отложенных ордера .. необходимо при открытии одного их ордеров ..второй удалился.
int start(){ //---- int TekOrd; int magik = 127001; if(OrdersTotal()>0){ TekOrd=SelectOrder(Symbol(),OP_BUY,magik); if(TekOrd>0){ //Если Сработал BUY TekOrd=SelectOrder(Symbol(),OP_SELLSTOP,magik); if(TekOrd>0){ //Удалим если есть отложенный SELL if(!OrderDelete(TekOrd,Black)){Print("Неудалось удалить SELLSTOP ",TekOrd);} }} TekOrd=SelectOrder(Symbol(),OP_SELL,magik); if(TekOrd>0){ //Если Сработал SELL TekOrd=SelectOrder(Symbol(),OP_BUYSTOP,magik); if(TekOrd>0){ //Удалим если есть отложенный BUY if(!OrderDelete(TekOrd,Black)){Print("Неудалось удалить BUYSTOP ",TekOrd);} }}} //---- return(0); } //+------------------------------------------------------------------+ int SelectOrder(string Sym,int Tip,int magik){ int TotOrd=OrdersTotal(); int OrdTick=-1; for(int OrdPos=TotOrd-1;OrdPos>=0;OrdPos--){ if(OrderSelect(OrdPos, SELECT_BY_POS, MODE_TRADES)==true){ if(OrderSymbol()==Sym){ //Есть ли ордера с нужным символом if(OrderType()==Tip){ //Если ли нужный тип ордера if(magik==0){magik=OrderMagicNumber();} //Если магик = 0,неучитывать if(OrderMagicNumber() == magik){ //Есть ли ордера с нужным Магик номером OrdTick = OrderTicket(); break; //Запишем в переменную его тикет и прервем цикл }}}}} return(OrdTick); //Возвращает тикет найденного ордера или -1 }надеюсь подойдет
.. немножко не понял код .. у меня была в ТЗ опечатка... открывается два отложеных ордера .. после открытие одного из ордеров второй надо удалить.
нужно удалить неоткрывшийся ордер .. а тут я что то не пойму где удаляется оредр :(
по вашему коду не получается задуманное :(
Задача следующая .. открывается 2 отложенных ордера .. необходимо при открытии одного их ордеров ..второй удалился.
int i; int g; if (total >1) { OrderSelect(total-1, SELECT_BY_POS); if (OrderType()==4 || OrderType()==5) i=1; OrderSelect(total, SELECT_BY_POS); if (OrderType()==4 || OrderType()==5) g=1; Print ("i=",i," g=",g); if (i==1 || g==0) { OrderSelect(2, SELECT_BY_POS); OrderDelete(OrderTicket()); Print ("Order=",OrderTicket()); } if (i==0 || g==1) { OrderSelect(2, SELECT_BY_POS); OrderDelete(OrderTicket()); Print ("Order=",OrderTicket()); } }
следующий код почему то не работает .. причину никак не могу понять :(.. постоянно пишет что Order=0 и i=1 g=0.
Так у вас определяется total? Если как OrdersTotal(), то функция возвращает общее количество открытых и отложенных ордеров, а нумерация ордеров попозиционно начинается с нуля, во 2-м стоит OrderSelect(total...), а нужно total-2 для вашего варианта.
.. немножко не понял код .. у меня была в ТЗ опечатка... открывается два отложеных ордера .. после открытие одного из ордеров второй надо удалить.
нужно удалить неоткрывшийся ордер .. а тут я что то не пойму где удаляется оредр :(
по вашему коду не получается задуманное :(
Именно то что вы описали и выполняет этот код:
Так понятнее?
xeon - большое Вам спсб. помогли ..
интересно почему мой вариант не работал .. тотал -2 тоже пробывал :(
xeon - большое Вам спсб. помогли ..
интересно почему мой вариант не работал .. тотал -2 тоже пробывал :(
Ну а ниже выделенной мной строки, что идет? Если ордера всего два, то их порядковые номера 0 и 1, а у вас
OrderSelect(2, SELECT_BY_POS);Внимательнее надо быть, особено после ответа про total.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Задача следующая .. открывается 2 отложенных ордера .. необходимо при открытии одного их ордеров ..второй удалился.
следующий код почему то не работает .. причину никак не могу понять :(.. постоянно пишет что Order=0 и i=1 g=0.