Добрый день.
Описание проблемы:
1. Вычисляю суммарный профит по Buy
2. Если он положительный и приходит сигнал на продажу даю команду на закрытие позиций
3. Советник закрывает прибыльную позицию и перестает дальше закрывать остальные т.к. суммарный профит стал отрицательным.
Вопрос:
Как сделать так, чтобы советник не начинал анализировать рынок пока не отработает команду по закрытию ордеров Buy
вот код закрытия:
...
//+------------------------------------------------------------------+ void CloseThisSymbolAll(string symbol, int cmd, int magic, int slippage) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber()!=magic) continue; if(OrderSymbol()!=symbol) continue; if(OrderType()>1) continue; double pp=(cmd==OP_BUY)?MarketInfo(OrderSymbol(),MODE_BID):MarketInfo(OrderSymbol(),MODE_ASK); color cl=(cmd==OP_BUY)?clrBlue:clrRed; bool res=(OrderClose(OrderTicket(),OrderLots(),pp,slippage,cl)); } } } //+------------------------------------------------------------------+
Это только в общем приближении, т.к. нет никаких обработок кодов возврата сервера. Вместо OrderClose() нужно вызывать полноценную функцию закрытия позиций с обработкой всех ошибок...
Но для тестера пойдёт.
ЗЫ. Не проверял. "На коленке" набросал.
ЗЫ. Не проверял. "На коленке" набросал.
Будет пытаться закрыть все ордера, и селл и бай, только для селл рр будет нулевым и выскочит ошибка.
Измени
if(OrderType()>1) continue;
на
if(OrderType()!= cmd) continue;
Будет пытаться закрыть все ордера, и селл и бай, только для селл рр будет нулевым и выскочит ошибка.
Измени
на
Ну-у-у ... вполне... ага...
Последствия "письма второпях на коленке" :)))
Большое спасибо всем.
Почему мой код не работает корректно при долгом исполнении брокера?
Большое спасибо всем.
Почему мой код не работает корректно при долгом исполнении брокера?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Описание проблемы:
1. Вычисляю суммарный профит по Buy
2. Если он положительный и приходит сигнал на продажу даю команду на закрытие позиций
3. Советник закрывает прибыльную позицию и перестает дальше закрывать остальные т.к. суммарный профит стал отрицательным.
Вопрос:
Как сделать так, чтобы советник не начинал анализировать рынок пока не отработает команду по закрытию ордеров Buy
вот код закрытия:
// Функция закрытия позиций
void CloseThisSymbolAll(int CmdClose)
{
for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY)
{
if (CmdClose == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue);
}
if (OrderType() == OP_SELL)
{
if (CmdClose == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red);
}
Sleep(10);
}
}
}