КОД робота №1
КОД робота №2
КОД робота №1
КОД робота №2
Пожалуйста, вставляйте код правильно: СНАЧАЛА нажимаете кнопку , И ТОЛЬКО ПОТОМ вставляете код в окно.
Но так как Ваше сообщение получится сильно большим, Вам нужно не вставлять код, а прикрепить свой код при помощи кнопки
Пожалуйста, вставляйте код правильно: СНАЧАЛА нажимаете кнопку , И ТОЛЬКО ПОТОМ вставляете код в окно.
Но так как Ваше сообщение получится сильно большим, Вам нужно не вставлять код, а прикрепить свой код при помощи кнопки
Исправил, очень прошу помочь разобраться
Исправил, очень прошу помочь разобраться
На всякий случай: учитывается, что на ФОРТС неттинг? Т.е., по факту, по каждому символу есть только одна позиция, равная сумме позиций, открытых всеми роботами и вручную. И, в частности, Magic и Ticket позиции будут соответствовать тому роботу, который первым её открыл, до тех пор, пока она не будет закрыта (==0).
На всякий случай: учитывается, что на ФОРТС неттинг? Т.е., по факту, по каждому символу есть только одна позиция, равная сумме позиций, открытых всеми роботами и вручную. И, в частности, Magic и Ticket позиции будут соответствовать тому роботу, который первым её открыл, до тех пор, пока она не будет закрыта (==0).
не совсем понял если честно про что было это уточнение. у меня на 1 фьючерсе работатет 1 робот со своим Magic. Или вы не об этом? и как это может влиять на трал?
не совсем понял если честно про что было это уточнение. у меня на 1 фьючерсе работатет 1 робот со своим Magic. Или вы не об этом? и как это может влиять на трал?
Если один и нет параллельной торговли руками, то никак. Я же написал - на всякий случай, потому как это не очевидно.
Ещё одно "на всякий случай": проверялось ли, что функция trade.PositionModify() на реальной торговле действительно каждый раз выставляет те TP/SL, которые запрашивались?
Если один и нет параллельной торговли руками, то никак. Я же написал - на всякий случай, потому как это не очевидно.
Ещё одно "на всякий случай": проверялось ли, что функция trade.PositionModify() на реальной торговле действительно каждый раз выставляет те TP/SL, которые запрашивались?
TP/SL выставляются без проблем, был нюанс при неправильном выставлении sl в момент перехода сессий в течении дня , но он решён и проблем с этим нет. если без БУ и трала всё работает отлично в роботе №1 , но нужен и БУ и трал так как нет возможности автоматизировать SL и TP под волотильность.
1. Выкидываем Ваши функции:
//+------------------------------------------------------------------+ int Hour() { MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); return(tm.hour); } //+------------------------------------------------------------------+ int Minute() { MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); return(tm.min); } //+------------------------------------------------------------------+ int DayOfWeek() { MqlDateTime tm; TimeCurrent(tm); return(tm.day_of_week); } //+------------------------------------------------------------------+ int Day() { MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); return(tm.day); }
вставляем одну:
bool GetTime(int &d_o_week, int &hour, int &min, int &sec) { MqlDateTime tm; tm.year = 0; TimeToStruct(TimeCurrent(),tm); if(tm.year > 0) { d_o_week = tm.day_of_week; hour = tm.hour; min = tm.min; sec = tm.sec; return(true); } return(false); }
2. Выкидываем (отмеченное желтым)
int MyMarkets() { BuyCount=0; SellCount=0; for(int i=0; i<PositionsTotal(); i++) if(PositionGetSymbol(i)==_Symbol) if(PositionGetInteger(POSITION_MAGIC)==Magic) { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) BuyCount++; if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) SellCount++; } return(BuyCount+SellCount); }
Используем
if(PositionSelect(Symbol()) == true) { //Извлекаем данные }
Далее посмотрю в дебагере как Ваш код будет работать на демо (завтра)
TP/SL выставляются без проблем, был нюанс при неправильном выставлении sl в момент перехода сессий в течении дня , но он решён и проблем с этим нет. если без БУ и трала всё работает отлично в роботе №1 , но нужен и БУ и трал так как нет возможности автоматизировать SL и TP под волотильность.
Вот и надо для начала понять - это трал/БУ выставляют неправильные TP/SL, или они выставляют(пытаются) правильные, но те почему-то не выставляются (ещё вариант - выставляются правильные, но не срабатывают - это отдельная история).
И уже от этого плясать дальше.
Ещё не помешало бы везде где к цене применяется
NormalizeDouble(prise);
поменять на
//+------------------------------------------------------------------+ double IsNormalizePrice(double price) { double tick_size = 0; SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE, tick_size); return(NormalizeDouble(MathRound(price / tick_size) * tick_size, _Digits)); } //+------------------------------------------------------------------+
Возможно с ценой, что то не так, вот он и не срабатывает вовремя.
И нормализовать цену лучше когда сравниваем со стоплосом, а не когда отправляем торговый запрос на модификацию.
тип так
if(pp-op>=TrailingStart*_Point) { double newStoploss = IsNormalizePrice(pp-(TrailingStart+TrailingStep-1)*_Point); if(sl<newStoploss || sl==0) trade.PositionModify(ticket,newStoploss,tp); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день, есть рабочая торговая система для торговли на мос бирже. Захотелось автоматизировать и был написан робот №1. Робот имел функции стоп/профит/трал/БУ/реверс. Как результат робот в тестере открывает правильно по сигналу и правильно работает и отдельно с тралом и отдельно с БУ и в связке.
Но при торговле на реале возникает ошибка трала:
К примеру уровень срабатывания трала=50п. а шаг=20п. трал может сработать если цена дошла до 50п и перенести стоп на 0п, а может и нет и перенести на 20п стоп когда цена дойдёт до 70п. Или может сработать и перенести на 0, но если цена пройдёт ещё 20п, может и не сработать и сработать только когда цена пройдёт сразу 40п(то есть 2 шага). А может и правильно сработать полностью. И каждый раз это по разному и нет закономерности на разных фьючерсах такая ситуация. Спред колеблется не более 5 п. Так что вряд ли он тут виноват.
В результате в тестере работает в реале нет. Так как эту проблему решить не удалось было принято решение делать робота №2.
У которого эти функции будут виртуальными, но тут получилось ещё хуже. Робот №2 и в реале и в тестере так же как и первый открывается правильно по сигналу. Но в тестере он работает только при моделировании"цены открытия" , на других вариантах выдаёт полную чушь.
В реале открывается правильно, но дальше может закрыться по стопу правильно, а трал и бу не сработают вообще и закроется по профиту. Или просто закроется не понятно по каким причинам ни трал,ни бу, ни профит не должны были сработать, а робот просто закрывает сделку и ни к одному значению нельзя привязать его закрытие чистый рандом.
уже думал что дело в брокере но на брокере ОТКРЫТИЕ и БКС один и тот же результат. ПРОШУ ПОМОГИТЕ!!! дело в коде или всё таки в брокере. Готов ответить на любые вопросы!