Обсуждение статьи "Советник на базе универсального аппроксиматора MLP" - страница 2 12 Новый комментарий Andrey Dik 2025.08.06 19:47 #11 Eric Ruvalcaba #:Большое спасибо за то, что поделились этой статьей и своим пониманием. Отличная идея. Я реализовал некоторые независимые операции с позициями и заставил их работать на хеджирующем счете (мой брокер). Вы лучшие. Супер! John_Freeman 2026.01.03 07:08 #12 Уважаемый автор, несколько раз перечитал код TargetFunction() и кажется вы сделали несколько ошибок. 1. При расчете прибыли по позиции вы делаете двойное суммирование профита. if (!truTradeTime [h]) { if (posType != 0) { // Если есть открытая позиция posClPrice = rates [h].open; // Закрываем по цене открытия бара profit = (posClPrice - posOpPrice) * signal - 0.00003; // Комиссия if (profit > 0.0) allProfit += profit; else allLoss += -profit; if (posType == 1) buys++; else sells++; allProfit += profit; posType = 0; // Сбрасываем позицию } continue; // Пропускаем не торговое время } if ((posType == 1 && signal == -1) || (posType == -1 && signal == 1)) { posClPrice = rates [h].open; // Закрываем по цене открытия текущего бара profit = (posClPrice - posOpPrice) * signal - 0.00003; // Расчёт прибыли // Учёт прибыли/убытка if (profit > 0.0) allProfit += profit; else allLoss += -profit; // Статистика по сделкам if (posType == 1) buys++; else sells++; allProfit += profit; posType = 0; // Позиция закрыта } 2. При расчете показателя приспособленности не используется коэффициент ko. double ko = 1.0; if (sells == 0 || buys == 0) return -DBL_MAX; if (sells / buys > 1.5 || buys / sells > 1.5) ko = 0.001; return (allProfit / (allLoss + DBL_EPSILON)) * dealsNumb; Andrey Dik 2026.01.03 19:25 #13 John_Freeman #: Уважаемый автор, несколько раз перечитал код TargetFunction() и кажется вы сделали несколько ошибок. 1. При расчете прибыли по позиции вы делаете двойное суммирование профита. 2. При расчете показателя приспособленности не используется коэффициент ko. 1. Да, вы правы, уберите в конце обоих блоков кода строчки allProfit += profit;чтобы получилось так:f (!truTradeTime [h]) { if (posType != 0) { // Если есть открытая позиция posClPrice = rates [h].open; // Закрываем по цене открытия бара profit = (posClPrice - posOpPrice) * signal - 0.00003; // Комиссия if (profit > 0.0) allProfit += profit; else allLoss += -profit; if (posType == 1) buys++; else sells++; //allProfit += profit; posType = 0; // Сбрасываем позицию } continue; // Пропускаем не торговое время } if ((posType == 1 && signal == -1) || (posType == -1 && signal == 1)) { posClPrice = rates [h].open; // Закрываем по цене открытия текущего бара profit = (posClPrice - posOpPrice) * signal - 0.00003; // Расчёт прибыли // Учёт прибыли/убытка if (profit > 0.0) allProfit += profit; else allLoss += -profit; // Статистика по сделкам if (posType == 1) buys++; else sells++; //allProfit += profit; posType = 0; // Позиция закрыта }2. Да, ko не используется. 12 Новый комментарий
Большое спасибо за то, что поделились этой статьей и своим пониманием. Отличная идея. Я реализовал некоторые независимые операции с позициями и заставил их работать на хеджирующем счете (мой брокер).
Вы лучшие.
Супер!
Уважаемый автор, несколько раз перечитал код TargetFunction() и кажется вы сделали несколько ошибок.
1. При расчете прибыли по позиции вы делаете двойное суммирование профита.
2. При расчете показателя приспособленности не используется коэффициент ko.Уважаемый автор, несколько раз перечитал код TargetFunction() и кажется вы сделали несколько ошибок.
1. При расчете прибыли по позиции вы делаете двойное суммирование профита.
2. При расчете показателя приспособленности не используется коэффициент ko.