Здравствуйте уважаемые господа трейдеры и программисты!
Столкнулся с таким явлением, как правильно закрывать ордера. Допустим, что в рынке 4 ордера бай, и 3 ордера селл. При достижении определенного профита, все ордера должны закрыться по одной цене! Так и должно быть. Но у меня закрывает так:
То есть на каждом тике. Что у меня не правильно в коде?
Для циклического закрытия нужно развернуть цикл. Иначе после закрытия одного ордера происходит пропуск следующего.
for (int i = OrdersTotal() - 1; i >= 0; --i)
Для циклического закрытия нужно развернуть цикл. Иначе после закрытия одного ордера происходит пропуск следующего.
Ничего не выходит. Даже не все ордера закрывает!
Ничего не выходит. Даже не все ордера закрывает!
Покажите, как пытаетесь.
Покажите, как пытаетесь.
С закрытием всех ордеров разобрался. А так закрывает на каждом тике.
У меня два варианта закрытия. Про профиту Buy и по профиту Sell. Профит это линии, при достижении которых должны закрыться все ордера.
Примеры кода:
if(TpStop(OP_BUY)>0)//профит buy if(Profit()>0){ if(Bid>=TpStop(OP_BUY))CloseOrders(OP_BUY,MAGIC,clrGray); if(Ask>=TpStop(OP_BUY))CloseOrders(OP_SELL,MAGIC,clrGray); } if(TpStop(OP_SELL)>0)//профит Sell if(Profit()>0){ if(Bid<=TpStop(OP_SELL))CloseOrders(OP_BUY,MAGIC,clrGray); if(Ask<=TpStop(OP_SELL))CloseOrders(OP_SELL,MAGIC,clrGray); }
//------------------------Функция закрытия ордеров-------------------+ bool CloseOrders(int Op,int magic, color Clcol){ double price; string op; if(Op==OP_BUY){ RefreshRates(); price=NormalizeDouble(Bid,Digits); op="BUY"; } if(Op==OP_SELL){ RefreshRates(); price=NormalizeDouble(Ask,Digits); op="SELL"; } for(int i=OrdersTotal()-1; i>=0;--i){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){ if(OrderType()==Op) if(OrderMagicNumber()==magic){ RefreshRates(); if(OrderClose(OrderTicket(),OrderLots(),price,Slip,Clcol)){ Print("Ордер №",OrderTicket()," : ",op," : "," закрыт по цене = ",price); return(true); } Print("Ордер №",OrderTicket()," : ",op," : "," не закрыт! Ошибка: ",GetLastError()); } } } return(false); }
Закрытие всех ордеров происходит по одному на каждом тике.
Мне нужно, что бы закрывались все одновременно по одинаковой цене.
Вернее так должно быть!
Открывайте локирующий ордер и далее закрывайте всё через CloseBy
Закрытие всех ордеров происходит по одному на каждом тике.
Тогда уберите return после успешного закрытия ордера. В этом случае не будете ждать следующего тика.
Тогда уберите return после успешного закрытия ордера. В этом случае не будете ждать следующего тика.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте уважаемые господа трейдеры и программисты!
Столкнулся с таким явлением, как правильно закрывать ордера. Допустим, что в рынке 4 ордера бай, и 3 ордера селл. При достижении определенного профита, все ордера должны закрыться по одной цене! Так и должно быть. Но у меня закрывает так:
То есть на каждом тике. Что у меня не правильно в коде?
Вариант закрытия
Сама функция закрытия