Обсуждение статьи "Разработка торговой системы по индикатору фракталов Fractals"

 

Опубликована статья Разработка торговой системы по индикатору фракталов Fractals:

Перед вами новая статья из серии, в которой мы учимся создавать торговые системы на основе популярных технических индикаторов. Мы изучим еще один технический инструмент — индикатор Fractals, а также разработаем на его основе торговые системы для работы в терминале MetaTrader 5.

Фрактальные максимумы и минимумы

    Для этой стратегии создадим торговую систему, которая будет возвращать максимумы и минимумы индикатора Fractals в виде комментария на графике. Для этого она будет отслеживать значения fracUp и fracDown. Если значение fracUp выше нуля или если его значение непустое, а fracDown — пустое, торговая система должна вернуть сигнал в виде комментария на графике со следующими значениями:

      • Максимум Fractals: n

    В другом случае, если значение fracDown выше нуля или если его значение непустое, а fracUp — пустое, торговая система должна вернуть сигнал минимума в виде комментария на графике со следующими значениями:

      • Минимум Fractals: n

    Схема такой стратегии показана на рисунке ниже:

    Схема стратегии Fractals максимумы и минимумы

    Автор: Mohamed Abdelmaaboud

     


    Спс автору. Все очень хорошо расжевано в статьях. Сам не исключаю - что код по сигналам тс по фракталам и ма возьму для доукомплектования его еще чем нибудь - например скоростью тиков для своего биржевого робота скальпера. Причем на тиках может вообще все сделать - а может и на м1. Также можно а ля усреднялку чисто на отбойках от фракталов и тралом по первой тс тут тоже кое чем докрутить. В общем респектую за полезные статьи по данным темам автору!
     

    Пожалуйста, ответьте на вопросы.

    1. Почему вы используете значение фрактала на 2-м закрытом баре? Он еще не сформирован. Я думаю, вам следует использовать значение 3-го закрытого бара:

       CopyBuffer(fracDef,UPPER_LINE,3,1,fracUpArray);
       CopyBuffer(fracDef,LOWER_LINE,3,1,fracDownArray);

    2. Почему вы называете их торговыми системами? Они не совершают сделок. Только комментарии к графику.

     
    Ivan Titov фрактала на 2-м закрытом баре? Он еще не сформирован. Я думаю, вам следует использовать значение 3-го закрытого бара:

    2. Почему вы называете их торговыми системами? Они не совершают сделок. Только комментарии к графику.

    Текущая свеча - 0, предыдущая - 1, а третья - 2, а не 3.

    Торговые системы, как они запрограммированы, основаны на систематических и логических шагах, чтобы помочь вам торговать, даже если это комментарии, Вы можете добавить отправку ордеров, если вы тестировали их и нашли их полезными для вас.

     
    Mohamed Abdelmaaboud #:

    Текущая свеча равна 0, предыдущая - 1, а третья - 2, а не 3.

    Третья закрытая свеча - 3. Текущая свеча (0) еще не закрыта, и ее использование может дать много ложных входов, особенно когда она недавно открылась.

     

    Здравствуйте, я взял на себя смелость реализовать ваш пример "Fractals_with_Alligator" в предусмотренных для этого функциях (декларация/определение). Пожалуйста, поправьте меня, если яошибаюсь😊.

    //создание массивов
    double   fracUpArray[];
    double   fracDownArray[];
    MqlRates priceArray[];
    double   jawsArray[];
    double   teethArray[];
    double   lipsArray[];
    // init
    int      fracDef;
    int      Data;
    int      alligatorDef;
    //получить значения
    double   fracUpValue;
    double   fracDownValue;
    double   closingPrice;
    double   jawsValue;
    double   teethValue;
    double   lipsValue;
    //создание переменных bool для одновременного получения сигналов на покупку и продажу
    bool     isBuy;
    bool     isSell;
    
    int OnInit() {
    //создание переменных bool для одновременного получения сигналов на покупку и продажу
       isBuy    = false;
       isSell   = false;
    
       ArraySetAsSeries(fracUpArray, true);
       ArraySetAsSeries(fracDownArray, true);
       ArraySetAsSeries(jawsArray, true);
       ArraySetAsSeries(teethArray, true);
       ArraySetAsSeries(lipsArray, true);
    
       fracDef        =  iFractals(_Symbol, _Period);
       Data           =  CopyRates(_Symbol, _Period, 0, 3, priceArray);
       alligatorDef   =  iAlligator(_Symbol, _Period, 13, 8, 8, 5, 5, 3, MODE_SMMA,PRICE_MEDIAN);
    
    
       return(INIT_SUCCEEDED);
    }
    
    void OnTick() {
    
       CopyBuffer(fracDef, UPPER_LINE, 2, 1, fracUpArray);
       CopyBuffer(fracDef, LOWER_LINE, 2, 1, fracDownArray);
       CopyBuffer(alligatorDef, 0, 0, 3, jawsArray);
       CopyBuffer(alligatorDef, 1, 0, 3, teethArray);
       CopyBuffer(alligatorDef, 2, 0, 3, lipsArray);
    
    //получить значения
       fracUpValue    = NormalizeDouble(fracUpArray[0], 5);
       fracDownValue  = NormalizeDouble(fracDownArray[0], 5);
       closingPrice   = priceArray[0].close;
       jawsValue      = NormalizeDouble(jawsArray[0], 5);
       teethValue     = NormalizeDouble(teethArray[0], 5);
       lipsValue      = NormalizeDouble(lipsArray[0], 5);
    
    //условия стратегии и комментарий к графику
    //в случае покупки
       if(lipsValue>teethValue && lipsValue > jawsValue && teethValue > jawsValue
          && closingPrice > teethValue && fracDownValue != EMPTY_VALUE) {
          Comment("Buy", "\n",
                  "jawsValue = ", jawsValue, "\n",
                  "teethValue = ", teethValue, "\n",
                  "lipsValue = ", lipsValue, "\n",
                  "Fractals Low around: ", fracDownValue);
          isBuy = true;
       } // end if
    //в случае продажи
       if(lipsValue < teethValue && lipsValue < jawsValue && teethValue < jawsValue
          && closingPrice < teethValue && fracUpValue != EMPTY_VALUE) {
          Comment("Sell", "\n",
                  "jawsValue = ", jawsValue, "\n",
                  "teethValue = ", teethValue, "\n",
                  "lipsValue = ", lipsValue, "\n",
                  "Fractals High around: ", fracUpValue);
          isSell = true;
       } // end if
    }
    
    void OnDeinit(const int reason) {
       EventKillTimer();
       ObjectsDeleteAll(0,0,-1);
    
       IndicatorRelease(fracDef);
       IndicatorRelease(Data);
       IndicatorRelease(alligatorDef);
       
       ArrayFree(fracUpArray);
       ArrayFree(fracDownArray);
       ArrayFree(jawsArray);
       ArrayFree(teethArray);
       ArrayFree(lipsArray);
    
       Comment("");
    }
     

    Здравствуйте, спасибо за такую понятную статью... у меня в коде фрактала возникает ошибка (2024.11.10 17:42:12.121 _24 Dev 3 EA Strat1 (EURUSD,H1) _24 Dev 3 EA Strat1.mq5:void OnDeinit(const int):OnDeinit:48 Код ошибки:INDICATOR_DATA_NOT_FOUND ) .

    При выполнении вашего кода я получаю ту же ошибку.


    Не могли бы вы помочь. Я перепробовал множество различных комбинаций.


    Спасибо за поддержку.

    Джей

     
    Я хотел бы узнать, действительно ли выгодно применять эту вашу систему?
     
    litianjun # Я хотел бы узнать, действительно ли выгодно применять эту вашу систему?
    Важно еще раз подтвердить, что любую стратегию необходимо тестировать, прежде чем использовать ее на реальном счете, так как нет ничего подходящего для всех.
    Пожалуйста, прочитайте статью с инструкциями, скачайте и проведите собственное тестирование системы и решите для себя, использовать ее или нет. Таких гарантий, о которых вы просите, дать невозможно.
     
    litianjun #:
    Я хотел бы узнать, действительно ли выгодно применять эту вашу систему?
    Я применял фракталы/аллигаторы (используя его коды), и мой опыт показывает, что есть много ложных сигналов. Общая проблема с фракталами заключается в том, что мы находимся на 2 свечи впереди сигнала фрактала. Я использую его в паре с RSI (70/30) и другими индикаторами, чтобы посмотреть, смогу ли я найти качественные входы.
     
    Sau-boon Lim #:
    Я реализовал фракталы/аллигаторы (используя ваши коды), и мой опыт показывает, что есть много ложных сигналов. Общая проблема с фракталами заключается в том, что мы опережаем сигнал фрактала на 2 свечи. Я комбинирую его с RSI (70/30) и другими индикаторами, чтобы посмотреть, смогу ли я найти качественные входы.
    Фракталы Билла Вильямса - это хороший способ торговать как прорывы, так и развороты (что не является оригинальной стратегией Билла). Однако сказать, что metatrader реализует ее точно, я не могу, поскольку в случае ничьей не ставятся дополнительные свечи для анализа. В стратегии Билла Вильямса он комментирует, что если любой предшественник или преемник двух ордеров завязан, то должна быть проанализирована новая свеча. Кроме того, на первых же страницах книги "Торговый хаос" есть раздел (я полагаю, он находится перед оглавлением, это похоже на письма читателей, которые он рекламирует), где один из читателей благодарит его за совет rsi2 для большей точности, о чем он не упоминает в главах.