0
Я оптимизировал на EURCHF — отличные результаты. На EURUSD просадка значительно выше. Результат принципиально зависит от валюты. От М1 до Н1. тесты проходят с необъяснимыми результатами.
Я оптимизирую по ценам открытия. Потом прогоняю по тикам. Возможно, по-этому результаты не совсем корелируются.

Пробуйте.
Удачи.

Попробую загрузить новый советник вдепозитарий. www.opentraders.ru/downloads/3949/
Хрен там.

Уважаемый OSS5 поделитесь, как это у вас получается?

avatar

kvashnin007

  • 2 февраля 2025, 20:02
0
enum ENUM_ST StartClose и Comby. Два варианта, которые практически никогда не выбираются при оптимизаии. Т.е. практической пользы от них нет. Вывод: удаляем. Придумал два более действенных варианта сокращения ордеров. Сулят повышение прибыльности. Пробуем.
Попозже. Пока действует только Average (Профитный закрывает убыточный в + MinimalProfit).

Кроме того сокращаются уже два ордера одного направления. Представим картину: открыли сел, а цена пошла вверх. Открыли еще селл удвоенным лотом, а цена раз… и пошла вниз. В какой-то момент закроются два ордера с минимальной прибылью, а цена все валит и валит вниз. Без нас. Обидно.
По-этому ввел внешнюю переменную int CountAwerage, задающую при каком количестве ордеров начинается их сокращение. При CountAwerage=3 сокращаться начнут первый и третий ордера. Второй будет в работе. Скорее всего CountAwerage=2 будет оптимальным. Но мы всегда сможем удалить эту переменную.

Итак на сегодня шапка имеет версию 1.1 и выглялит так:

//+------------------------------------------------------------------+
//|                                                     KAE Grid.mq4 |
//|                                                   Copyright 2025 |
//|                                             kvashnin007@gmil.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025"
#property version   "1.1"
#property strict
//************************************************************************************************/
//*                                                                                              */
//************************************************************************************************/
enum ENUM_ST           // Вариант сокращения ордеров
  {
   Average       = 0,  // Профитный закрывает убыточный в + MinimalProfit
   StartClose    = 1,  // Оставляем Start от профитного закрываем убыточный
   NoProfitClose = 2   // При профите  + MinimalProfit закрываем убыточный
  };
//************************************************************************************************/
input bool         MM                  = false;    // Мани Менеджмент
input double       Risk                = 0.5;      // Риск на сделку % в процентах от свободной маржи.
input double       StartLots           = 0.03;     // Start lot
input double       CoeffLots           = 2.0;      // Увеличение лота
input double       MaximalLots         = 2.56;     // Maximal Lots 
//---
input ENUM_ST      CloseOrder          = Average;  // Type close orders
input int          CountAverage        = 2;        // Минимальное количество ордеров для сокращения
input int          StopLoss            = 0;        // Stop Loss (in pips)
input int          TakeProfit          = 390;      // Take Profit (in pips)
input int          PointOrderStep      = 270;      // Point order step (in pips)
input int          MinimalProfit       = 70;       // Minimal profit for close grid (in pips)
//---
input int          MagicNumber         = 1961;     // Magic Number (in number)
input int          Slippage            = 30;       // Slippage (in pips)
//---
//************************************************************************************************/
avatar

kvashnin007

  • 2 февраля 2025, 19:37
0
Еще одно правило, которого стараюсь придерживаться:
переменных для оптимизации должно быть как можно неньше. в связи с тем, что мои примочки опирались на индикатор линейной регрессии, необходимость в нем отпала.
Картинка еще красивее:

<code>//************************************************************************************************/
enum ENUM_ST
  {
   Awerage      = 0,  // All close All
   StartClose   = 1,  // Start close Start
   Comby        = 2   // Start close All
  };
//************************************************************************************************/
input ENUM_ST      iCloseOrder         = Awerage;  // Type close orders
input int          StopLoss            = 20;       // Stop Loss (in pips)
input int          iTakeProfit         = 300;      // Take Profit (in pips)
input bool         MM                  = false;    // Мани Менеджмент
input double       Risk                = 0.5;      // Риск на сделку % в процентах от свободной маржи.
input double       iStartLots          = 0.01;     // Start lot
input double       CoeffLots           = 2.0;      // Увеличение лота
input double       iMaximalLots        = 2.56;     // Maximal Lots 
input int          iPointOrderStep     = 390;      // Point order step (in pips)
input int          iMinimalProfit      = 70;       // Minimal profit for close grid (in pips)
input int          iMagicNumber        = 227;      // Magic Number (in number)
input int          iSlippage           = 30;       // Slippage (in pips)
//---
//************************************************************************************************/
//*                                                                                              */
</code>


Что изменилось в работе советника?
Заметного ничего. Так, мелочи.

Слегка подоходнее и с слегка меньшей просадкой.

Зато код советкика сократился процентов на 40. Время оптимизациисократилось более чем в три раза.

Было:



Стало:


avatar

kvashnin007

  • 2 февраля 2025, 14:03
0
Начнем! Что в начале советника?
Внешние и глобальные переменные.

Вообще, я переменные стараюсь называть понятными именами. Потом легче разбираться с кодом. Вам когда нибудь попадались декомпилированные советники? Кто видел — поймет. Это АКСИОМА.

Глобальные переменные (как и локальные) тоже обзывать надо понятно.

И так, что мы имеем:

//************************************************************************************************/
enum type 
  {
   reversP  =1,     // Revers Part
   revers   =2,     // Revers
   speed    =3,     // Speed
   vsa      =4,     // VSA
   volume   =5      // Volume
  };
enum ENUM_ST
  {
   Awerage      = 0,  // All close All
   StartClose   = 1,  // Start close Start
   Comby        = 2   // Start close All
  };
//************************************************************************************************/
input ENUM_ST      iCloseOrder         = Awerage;  // Type close orders
input int          StopLoss            = 20;       // Stop Loss (in pips)
input int          iTakeProfit         = 300;      // Take Profit (in pips)
input bool         MM                  = false;    // Мани Менеджмент
input double       Risk                = 0.5;      // Риск на сделку % в процентах от свободной маржи.
input double       iStartLots          = 0.01;     // Start lot
input double       CoeffLots           = 2.0;      // Увеличение лота
input double       iMaximalLots        = 2.56;     // Maximal Lots 
input int          iPointOrderStep     = 390;      // Point order step (in pips)
input int          iMinimalProfit      = 70;       // Minimal profit for close grid (in pips)
input int          iMagicNumber        = 227;      // Magic Number (in number)
input int          iSlippage           = 30;       // Slippage (in pips)
//---
input int          period              = 6;        //Period
input int          t3_period           = 1;
input double       B                   = 0.7;
input type         t                   = revers;   //Type Signals
double slopeBuffer[];

double e1,e2,e3,e4,e5,e6,
       c1,c2,c3,c4,
       n,
       w1,w2,
       b2,b3,
       t3;
double ExtUp[], ExtDn[], ExtMd[], ExtBuyArrow[], ExtSellArrow[],
       BBUp[], BBDn[], BBMd[], 
       priceUp[], priceDn[], signalUp[], signalDn[];
//************************************************************************************************/


Весело? Не очень.
Начну с enum type. Пытался понаделать разные примочки к основному коду. Положительного эффекта с гулькин… нос. А вот оптимизация зависает от слова совсем.

Предлагаю убрать. Еще немного мусор почистить.

В итоге получится следующая картинка. На прямую заменить строки не получится. Там еще в основном коде поменять кое чего надо. Так что ссылку на версию 1.1 дам. Если получится.

//************************************************************************************************/
enum ENUM_ST
  {
   Awerage      = 0,  // All close All
   StartClose   = 1,  // Start close Start
   Comby        = 2   // Start close All
  };
//************************************************************************************************/
input ENUM_ST      iCloseOrder         = Awerage;  // Type close orders
input int          StopLoss            = 20;       // Stop Loss (in pips)
input int          iTakeProfit         = 300;      // Take Profit (in pips)
input bool         MM                  = false;    // Мани Менеджмент
input double       Risk                = 0.5;      // Риск на сделку % в процентах от свободной маржи.
input double       iStartLots          = 0.01;     // Start lot
input double       CoeffLots           = 2.0;      // Увеличение лота
input double       iMaximalLots        = 2.56;     // Maximal Lots 
input int          iPointOrderStep     = 390;      // Point order step (in pips)
input int          iMinimalProfit      = 70;       // Minimal profit for close grid (in pips)
input int          iMagicNumber        = 227;      // Magic Number (in number)
input int          iSlippage           = 30;       // Slippage (in pips)
//---
input int          period              = 6;        //Period
input int          t3_period           = 1;
input double       B                   = 0.7;
//---
double slopeBuffer[];
double e1,e2,e3,e4,e5,e6,
       c1,c2,c3,c4,
       n,
       w1,w2,
       b2,b3,
       t3;
double ExtUp[], ExtDn[], ExtMd[], ExtBuyArrow[], ExtSellArrow[],
       BBUp[], BBDn[], BBMd[], 
       priceUp[], priceDn[], signalUp[], signalDn[];
//************************************************************************************************/
//*                                                                                              */
//************************************************************************************************/
avatar

kvashnin007

  • 2 февраля 2025, 13:21
0
Итого мы имеем советник, над которым поработаем с целью получить рабочий советник для торговли на рынке.
avatar

kvashnin007

  • 2 февраля 2025, 12:41
0
Прогнозировать цену — глупая затея.
Только математика и вероятности.
Прогнозы для лохов. Их все равно отимеют.
Еще и быстрее и по самое не хочу.

От нейросетей здесь та же польза, что и от экстраполяции.

Обрати лучше внимание на смартмани. Там хоть проанализированы особенности действий крупняка, который, чтобы заработать, будет поступать именно так.
По другому не получится. Садишься с ним в вагон и… на Майами.
avatar

kvashnin007

  • 30 января 2025, 18:57
0
Андрей, а зачем ты мне все это рассказываешь? Цель то в чем?
avatar

kvashnin007

  • 30 января 2025, 18:46
0
Импульс часто сопровождаетя скачком спреда. По-этому не помешает его контроль.
Это были неуловимые сигналы для работы, по росту импульса.
Не забывай за работу на откате.
avatar

kvashnin007

  • 29 января 2025, 23:28
0
вчера смотрел советник секрет импульс, но даже близко сделать не удалось.


Тут с наскока не выйдет.

Когда открывать сделку?
Там в описании что-то за fvg писали на младших TF во времена американской сессии.
Время работы ты задать можешь. А как открываться?

Когдато задавался подобными вопросами. Правда там стратегия другая. То, что на картинке, это выбор полос, которые обрабатываются по своему алгоритму.

Дам картинки. Должны натолкнуть на мысли.

ПЕРВАЯ: как определять имбаланс по уму.



ВТОРАЯ: как определять импульсную свечу, тоже, по уму.



Посмотри. Может натолкнет на здравые мысли.
avatar

kvashnin007

  • 29 января 2025, 23:16
0
Много хочешь. Тормознись на чем-то. Сделай. Иди дальше.
Нейросети против вероятностей проигрывают.
avatar

kvashnin007

  • 29 января 2025, 19:54
0
Что касается отыгрыша импульса, то смысл в работе по импульсу если и есть, то не уловим. Я не за новости с бешенным спредом. Импульсным движением почти всегда снимают или пробивают уровни. С последующим возвратом не менее 50% от импульса.

Свойства импульса:

— За тик цена меняется больше, чем «обычно».
— Тиковый объем тоже растет до некоторых пор. Потом цена растет за счет других трейдеров
(рали) с понижением объема. Просто за счет снятия блокирующих стен из множества
ордеров. Можно смотреть по стакану. Неудобно.
— Чаще всего образуется дисбаланс, но о нем мы узнаем позже. Значительно позже.
Но цену отката можно прикинуть.

Остается ерунда. Отловить импульс, в конце его выставить обратный ордер и вовремя выйти из сделки с максимальной прибылью.

Отловить импульс.
Есть хороший индикатор Similar, который позволяет вылавливать импульсы. Слегка доработать. Сделать уровни динамическими. Например по Болинджеру. Но это таки индикатор.
Я разрабатывал алгоритм работы по времени. Смысл в том, что каждую единицу времени, например 10 милисекунд, мы сравниваем значение цены с предыдущим значением. Если разрыв в цене больше заданного значения, то выставляем отложенный ордер (рисуем линию) на откат на небольшом расстоянии Step от текущей цены. Дальше тралим эту линию за ценой. Причем дистанция сокрашается. Можно с множителем, можно — пара пипсов с каждым тиком, а можно привязать к стоимости изменения цены за тик. Когда иссякает ралли количество тиков падает быстрее, чем цена. Берем соотношение умножанм на дистанцию. При касании линии ценой открываем рыночный ордер.

Да. Думаю, тебе это малоинтересно.
avatar

kvashnin007

  • 29 января 2025, 19:48
0
По лесенкам могу скинуть ТЗ. Один день и готово.
avatar

kvashnin007

  • 29 января 2025, 18:26
0
Не люблю обращениц к библиотекам. Все равно — черный ящик.
Предпочитаю функции в советнике. Там все видно и понятно. Можно подкорректировать под свои нужды легким движением руки. А так…
Смотрел как-то код библиотеки. Универсальность — это слабость. Потеря времени. И для меня не удобно и не прозрачно. Да иеще убедиться перед… Код протестировать перед… Как?

Длин. МТ4 длиннее и тяжелее, но проще и работает понятно как. Да и чушь, что в mql5 невозможно писать свои функции ручками.
avatar

kvashnin007

  • 29 января 2025, 18:23
0
Это не оптимизированный вариант, но рабочий. При желании займемся оптимизацией и правильными функциями. Вобщем топик для того и делался. Правда желающих поучаствовать четыре человека.Ты да Я, да Мы с Тобой.

Открываешь в редакторе любой советник. Жмешь «Сохранить как» «Мой кассовый аппарат».
Удаляешь весь код этого советника.
Потом на пустое место последовательно копируешь три части кода.

Жмешь «Компилировать».

В терминале окажется нужный советник под названием «Мой кассовый аппарат».
Оптимизировать можно по контрольным точкам. Перепроверять по тикам.

Удачи.
avatar

kvashnin007

  • 28 января 2025, 23:58
0
Смотрел на картинку…



смотрел…

Можно получить похожую. Просадка, правда, будет чуть побольше. Сделок в минус будет 30%.

Это вариант «лесенки» с малым шагом и тралом минимальной прибыли. Должен получиться частотник сеточного типа с локированием. Две независимые ветви (возможно полностью). Получится двойное локирование.
Без индикаторов. С минимальным количеством переменных для оптимизации.
avatar

kvashnin007

  • 28 января 2025, 23:49