WorkOrders(); if(Type==4) ES=OrderModify(Ticket,Enter,SL,TP,0,CLR_NONE); else ES=OrderSend(Symbol(),OP_BUYSTOP,Lot,Enter,0,SL,TP,0,magic,0,CLR_NONE); WorkOrders(); if(Type==5) ES=OrderModify(Ticket,Enter,SL,TP,0,CLR_NONE); else ES=OrderSend(Symbol(),OP_SELLSTOP,Lot,Enter,0,SL,TP,0,magic,0,CLR_NONE); bool WorkOrders(){ //for (int i=OrdersTotal()-1;i>=0;i--){ for(int i=0;i<=OrdersTotal();i++){ if (!OrderSelect(i,SELECT_BY_POS)) continue; if (OrderSymbol()!=Symbol()) continue; if (OrderMagicNumber()!=magic) continue; if (OrderType()<4) continue; //OpenPrise=OrderOpenPrice(); Type =OrderType(); Ticket =OrderTicket(); return(true);} return(false); }Добрался до ПК.
bool WorkOrders(){ int countB, countSS, ordertype; for (int i=OrdersTotal()-1;i>=0;i--){ if (!OrderSelect(i,SELECT_BY_POS)) continue; if (OrderSymbol()!=Symbol()) continue; if (OrderMagicNumber()!=magic) continue; ordertype=OrderType(); if (ordertype==4||ordertype==5){ Ticket =OrderTicket(); ES=OrderModify(Ticket,Enter,SL,TP,0,CLR_NONE); // лучше ссылку на сам блок с модификацией где и реквоти и обработка ошибок, sl, tp ......... if (ordertype==4) countBS++; if (ordertype==5) countSS++; continue; } } if (countBS==0)ES=OrderSend(Symbol(),OP_BUYSTOP, Lot,Enter,0,SL,TP,0,magic,0,CLR_NONE);// и опять, лучше ссылку на блок с открытием ордера if (countSS==0)ES=OrderSend(Symbol(),OP_SELLSTOP,Lot,Enter,0,SL,TP,0,magic,0,CLR_NONE); return; }что-то типа етого повернее вашего должно быть
Спасибо Сергей. Кажется все работает как надо... буду тестировать дальше.
В чем мои ошибки были?
1 - Цикл в обратном направлении
2- Новый ордер только, если нет отложенника в данном направлении
...
Спасибо Сергей. Кажется все работает как надо... буду тестировать дальше.
В чем мои ошибки были?
1 - Цикл в обратном направлении
2- Новый ордер только, если нет отложенника в данном направлении
...
Я не сильно опытен, но перед написанием чего-то, всегда лучше потратить лишнюю минуту на построение плана (в голове или на бумажке или на компе) а так же обдумать детали будущего кода (лаконичность, оперативность),
чем нестись на пролом и писать что-то некоректное в котором дальнейше надо найти и понять причину неисправности.
3) логическая ошибка цыкла перебора (выход с цыкла как только находит ордер типа 4 или 5 а вдруг 5-й самый последний??? или 4-й???);
4) использование несколько раз цыкла перебора ( можно все в одном организовать);
5) на бай и селл разные стопы тейки и цены должны быть, обработка ошибок, реквот, ....... (не знаю или вы все ето организовывали)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужна ваша помощь с отслеживанием и контролем выставленных ордеров по типу...
Накатал я вот что: (пишу с сотового, нет кнопки вставить как код)
WorkOrders();
if(Type==4) ES=OrderModify(Ticket,Enter,SL,TP,0,CLR_NONE);
else EB=OrderSend(Symbol(),OP_BUYSTOP,Lot,Enter,0,SL,TP,0,magic,0,CLR_NONE);
WorkOrders();
if(Type==5) ES=OrderModify(Ticket,Enter,SL,TP,0,CLR_NONE);
else ES=OrderSend(Symbol(),OP_SELLSTOP,Lot,Enter,0,SL,TP,0,magic,0,CLR_NONE);
bool WorkOrders(){
//for (int i=OrdersTotal()-1;i>=0;i--){
for(int i=0;i if (!OrderSelect(i,SELECT_BY_POS)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderMagicNumber()!=magic) continue;
if (OrderType() //OpenPrise=OrderOpenPrice();
Type =OrderType();
Ticket =OrderTicket();
return(true);}
return(false);
}
Суть такая... Если есть открытый ордер, то его не трогаем. А вот стоп ордера проверяем и если их нет, то ставим, если есть уже такой ордер, то переносим его вместо установки нового... В итоге стоп ордеров максимум должно быть всего два - сел и бай, а открытых хоть сколько, их не трогать.
Результат моего творения работает не так, сначала все хорошо и даже модификация отрабатывает... Но потом, что-то происходит и стоп ордера остаются на месте, начинают ставиться каждый раз новые.
Заранее спасибо.