Ошибки, баги, вопросы - страница 3692 1...368536863687368836893690369136923693369436953696369736983699...3776 Новый комментарий Aleksei Kuznetsov 2025.12.27 11:41 #36911 Забыл упомянуть - тест по реальным тикам. fxsaber 2025.12.27 12:33 #36912 Aleksei Kuznetsov #: Вроде код элементарный. Что не так? Вызов расчета эквити только в конце OnTick. Aleksei Kuznetsov 2025.12.27 13:12 #36913 fxsaber #: Вызов расчета эквити только в конце OnTick. Так и сделано в приложеном коде. void OnTick(void) { //--- if(SelectPosition()) CheckForClose(); else CheckForOpen(); Equity(AccountInfoDouble(ACCOUNT_EQUITY)); //--- } В моем коде тоже в конце. Пробовал и в начале - без изменений. fxsaber 2025.12.27 13:17 #36914 Aleksei Kuznetsov #: Так и сделано в приложеном коде. Я отвечал на процитированный вопрос. Функция должна вызываться в начале OnTick и после каждой торговой операции. Последнее - не всегда возможно со стороны пользователя. Например, на одном тике срабатывание отложки и SL/TP-уровня другой позиции. Плавающий стоп-левел Опускаю руки 😒 Возможно ли реализовать в Aleksei Kuznetsov 2025.12.27 14:09 #36915 fxsaber #: Я отвечал на процитированный вопрос. Функция должна вызываться в начале OnTick и после каждой торговой операции. Последнее - не всегда возможно со стороны пользователя. Например, на одном тике срабатывание отложки и SL/TP-уровня другой позиции. Добавил перерасчет эквити везде: void OnTick(void){ Equity(AccountInfoDouble(ACCOUNT_EQUITY)); if(SelectPosition()) CheckForClose(); else CheckForOpen(); Equity(AccountInfoDouble(ACCOUNT_EQUITY)); } void OnTrade(void){ Equity(AccountInfoDouble(ACCOUNT_EQUITY));} Без изменений.Эквити отличаются. Да и советник редко торгует - не на каждом тике. И мой тестовый тоже, а в нем отличия на ~$20. fxsaber 2025.12.27 14:43 #36916 Aleksei Kuznetsov #: Без изменений.Эквити отличаются. OnTrade - это не после торговой операции, которая находится в OnTick. Добавьте такое изменение в этот советник. class CTrade2 : public CTrade { public: virtual bool OrderSend(const MqlTradeRequest &request,MqlTradeResult &result) override { const bool Res = this.CTrade::OrderSend(request, result); if (Res) Equity(::AccountInfoDouble(ACCOUNT_EQUITY)); return(Res); } }; // CTrade ExtTrade; CTrade2 ExtTrade; Aleksei Kuznetsov 2025.12.27 15:10 #36917 Добавил и после торговых операций. Без изменений. Отличия на ~$1.5 Код приложен. if(signal!=WRONG_VALUE) { if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100) ExtTrade.PositionOpen(_Symbol,signal,TradeSizeOptimized(), SymbolInfoDouble(_Symbol,signal==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK), 0,0); Equity(AccountInfoDouble(ACCOUNT_EQUITY)); } ... if(signal) { if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100) ExtTrade.PositionClose(_Symbol,3); Equity(AccountInfoDouble(ACCOUNT_EQUITY)); } К тому же в МТ тестере просадка эквити всегда меньше. Скорее там что-то не учитывается. Если бы не учитывалось у меня - то у меня просадка была бы меньше. Файлы: test.mq5 19 kb Не работает трейлинг-стоп. Т.е. Улучшаем рейтинг торговых сигналов Обсуждение статьи "Модель продолжения fxsaber 2025.12.27 16:44 #36918 Aleksei Kuznetsov #: Добавил и после торговых операций. Без изменений. Отличия на ~$1.5 Код приложен. Поставьте начальный баланс 123456. И в абсолюте просадка уже будет отличаться на сотни единиц даже в режиме по пипсам. Похоже, все же баг на совсем ровном месте. ЗЫ Проблема даже с одной позицией. void OnTick(void) { static bool FirstRun = true; Equity(AccountInfoDouble(ACCOUNT_EQUITY)); //--- if(SelectPosition()) { CheckForClose(); FirstRun = false; } else if (FirstRun) CheckForOpen(); //--- } Как сделать большие круглые Как определить угол наклона Очень похоже на баг Aleksei Kuznetsov 2025.12.27 17:09 #36919 fxsaber #: Поставьте начальный баланс 123456. И в абсолюте просадка уже будет отличаться на сотни единиц даже в режиме по пипсам. Похоже, все же баг на совсем ровном месте. ЗЫ Проблема даже с одной позицией. Увеличил на порядок баланс - отличия абс просадки тоже на порядок увеличились. Там лот в % берется, поэтому растут вместе. Функция совсем простая. В ней негде ошибиться. Тоже думаю, что это баг тестера. fxsaber 2025.12.27 17:17 #36920 Aleksei Kuznetsov #: Функция совсем простая. В ней негде ошибиться. Тоже думаю, что это баг тестера. Курьез даже с одной позицией. void Equity(double equity){ static double max_e=0,DDe,DDEq; EQUITYMIN=fmin(equity,EQUITYMIN); max_e = fmax(equity, max_e); DDe = max_e - equity; DDEq = DDe / max_e * 100.0; if(EQUITY_DD < DDe) { EQUITY_DD = DDe; EQUITYDD_PERCENT = DDEq; if ((EQUITY_DD == 2090) && // Сюда прописываем число, равное максимальной просадке, что показывает функция. (DDe <= EQUITY_DD)) // Если равно оставить, то MT5-просадка будет правильной. Иначе - нет. ExtTrade.PositionClose(_Symbol,3); }//макс просадка в деньгах и % if(EQUITY_DDREL_PERCENT < DDEq){EQUITY_DDREL_PERCENT = DDEq; EQUITY_DD_RELATIVE = DDe;}// момент максимальной просадки в % }Если закрыть позицию раньше, то просадка больше, чем если закрыть позже. Баг 100%. 1...368536863687368836893690369136923693369436953696369736983699...3776 Новый комментарий
Вроде код элементарный. Что не так?
Вызов расчета эквити только в конце OnTick.
Так и сделано в приложеном коде.
В моем коде тоже в конце.
Пробовал и в начале - без изменений.
Так и сделано в приложеном коде.
Я отвечал на процитированный вопрос.
Функция должна вызываться в начале OnTick и после каждой торговой операции.
Последнее - не всегда возможно со стороны пользователя. Например, на одном тике срабатывание отложки и SL/TP-уровня другой позиции.
Я отвечал на процитированный вопрос.
Функция должна вызываться в начале OnTick и после каждой торговой операции.
Последнее - не всегда возможно со стороны пользователя. Например, на одном тике срабатывание отложки и SL/TP-уровня другой позиции.
Добавил перерасчет эквити везде:
Без изменений.Эквити отличаются.
Да и советник редко торгует - не на каждом тике. И мой тестовый тоже, а в нем отличия на ~$20.
Без изменений.Эквити отличаются.
OnTrade - это не после торговой операции, которая находится в OnTick.
Добавьте такое изменение в этот советник.
Добавил и после торговых операций. Без изменений. Отличия на ~$1.5 Код приложен.
К тому же в МТ тестере просадка эквити всегда меньше. Скорее там что-то не учитывается.
Если бы не учитывалось у меня - то у меня просадка была бы меньше.
Добавил и после торговых операций. Без изменений. Отличия на ~$1.5 Код приложен.
Поставьте начальный баланс 123456. И в абсолюте просадка уже будет отличаться на сотни единиц даже в режиме по пипсам.
Похоже, все же баг на совсем ровном месте.
ЗЫ Проблема даже с одной позицией.
Поставьте начальный баланс 123456. И в абсолюте просадка уже будет отличаться на сотни единиц даже в режиме по пипсам.
Похоже, все же баг на совсем ровном месте.
ЗЫ Проблема даже с одной позицией.
Увеличил на порядок баланс - отличия абс просадки тоже на порядок увеличились. Там лот в % берется, поэтому растут вместе.
Функция совсем простая. В ней негде ошибиться. Тоже думаю, что это баг тестера.
Функция совсем простая. В ней негде ошибиться. Тоже думаю, что это баг тестера.