Добрый день! Подскажите как это так?
Одинаковый советник стоит на демо и на реал-микро ДЦ "Альпари".
Работает он по сформированым барам и естественно в одном баре может
быть только один ордер.
Смотрю и вижу чудо на демо открылся ордер а на реале 2 в одном баре.
Проанализировав свой код....
вижу что это невозможно, тогда смотрю лог а там "
". ВЫВОД: хоть и ошибка 138-новые цены ДЦ открывает позу а советник мой из-за ошибки исполняет еще ордер со 2-й попытки. Что так может быть ? Или ДЦ будет всегда считать что я по умолчанию соглашаюсь на новые цены ?
на таком рынке это частая ошибка
как вариант разумный SLIPPAGE решит проблему! у ВАС он = 3, что может не нравится некоторым ДЦ
---
как варант сейчас на таком рынке
прекрасно видно в каком ДЦ работать комфортней!
конкуренция вещь нормальная - ищите сейчас ВАШ лучший ДЦ
---
не спрашивайте толкько список дц где работа идет хорошо у меня его нет
на таком рынке это частая ошибка
как вариант разумный SLIPPAGE решит проблему! у ВАС он = 3, что может не нравится некоторым ДЦ
---
как варант сейчас на таком рынке
прекрасно видно в каком ДЦ работать комфортней!
конкуренция вещь нормальная - ищите сейчас ВАШ лучший ДЦ
---
не спрашивайте толкько список дц где работа идет хорошо у меня его нет
ДЦ тут вероятнее всего не причем, скорее ошибка в коде, просто приведенный фрагмент которого не позволяет ее увидеть во всей красе. Выложите код удалив "драгоценые" условия входов/выходов - будем посмотреть.
//+------------------------------------------------------------------+ int start() { if(Time[0] == prevtime) return(0); prevtime = Time[0]; if (IsTradeAllowed()==false) { Print("Торговля запрещена "); return(0); } UpravlenieTrailingStop(); int ticket = -1; double napr = OpredelitNapr(); int spread=MarketInfo("EURUSD",MODE_SPREAD); if(spread>dopustimiySpread) { Print("Торговля запрещена из-за spread ="+spread); return(0); } else { //Print("spread ="+spread); } if (!CheckTradeTime()) napr=0;//если пятница после 14 и понедельник до 2 то не торгуем // check for long or short position possibility double loti; if(napr > 0) { //long loti = (lots*getUvelichLot(OP_BUY))+getUvelichRisk(OP_BUY); Print("loti="+loti); ///////////в цикл на 5 попыток for(int tb=1;tb<6;tb++) { RefreshRates(); ticket = OrderSend(Symbol(), OP_BUY, loti, Ask, 3, Bid - sl * Point, Bid + tp * Point, "AI", MagicNumber, 0, Blue); if(ticket < 0) { prevtime = Time[1]; Print("!_!_Ошибка №"+tb+" при попытке установить ордер на OP_BUY код ош="+GetLastError()); Sleep(2000); } else { MagicNumber++; Sleep(6000); break; } } } else if(napr < 0) { // short loti = (lots*getUvelichLot(OP_SELL))+getUvelichRisk(OP_SELL); Print("loti="+loti); for(int ts=1;ts<6;ts++) { RefreshRates(); ticket = OrderSend(Symbol(), OP_SELL, loti, Bid, 3, Ask + sl * Point, Ask - tp * Point, "AI", MagicNumber, 0, Red); if(ticket < 0) { prevtime = Time[1]; Print("!_!_Ошибка №"+ts+" при попытке установить ордер на OP_SELL код ош="+GetLastError()); Sleep(2000); } else { MagicNumber++; Sleep(6000); break; } } } return(0); } //+------------------------------------------------------------------+
ну вот код
prevtime = Time[1];
При неудачной попытке значение prevtime меняется.
Ну и представьте, что на первой итерации была ошибка, а со второй - ордер открылся. Что будет на следующем тике?
Это как раз правильно, ограничение работы "раз на бар", после ошибки открытия, в цикле ордер откроется со второго раза, при этом потом start запустится на бар еще раз
А вот Хирург совершенно прав. Если уж Вы так обрабатываете ошибку, добавьте еще prevtime = Time[0] в else :
else { prevtime = Time[0]; MagicNumber++; Sleep(6000); break; }
for(int tb=1;tb<6;tb++) { RefreshRates(); ticket = OrderSend(Symbol(), OP_BUY, loti, Ask, 3, Bid - sl * Point, Bid + tp * Point, "AI", MagicNumber, 0, Blue); if(ticket < 0) { prevtime = Time[1]; Print("!_!_Ошибка №"+tb+" при попытке установить ордер на OP_BUY код ош="+GetLastError()); Sleep(2000); }такое происходит после того как хотябы 1 раз неустановился ордер, Флаг prevtime = Time[1]; "обнуляется" даже если при 2 проходе цикла ордер вседаки установился
имеется ввиду что получив на тике 5 попыток отлупа
система будет отдыхать целый следующий бар! при этом наличие сигнала ВПОЛНЕ и ВЕРОЯТНО существует!
это как раз и есть неверно!
необходимо взвести флаг на вход! и сбросить флаг только после успешного входа! или если сигнал отменился
ну или квант... закончиля
---
квант на одном тике отрабатывать не совсем верно!
---
допустим
получен сигнал -
на тике бъем на вход раз 5
не пробили! вышли
на втором тике после сигнала входим и долбим далше!
а тут система на втором тике уже в отлупе полном!
---
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день! Подскажите как это так? Одинаковый советник стоит на демо и на реал-микро ДЦ "Альпари". Работает он по сформированым барам и естественно в одном баре может быть только один ордер. Смотрю и вижу чудо на демо открылся ордер а на реале 2 в одном баре. Проанализировав свой код....
вижу что это невозможно, тогда смотрю лог а там "
". ВЫВОД: хоть и ошибка 138-новые цены ДЦ открывает позу а советник мой из-за ошибки исполняет еще ордер со 2-й попытки. Что так может быть ? Или ДЦ будет всегда считать что я по умолчанию соглашаюсь на новые цены ?