文章 "学习如何基于分形(Fractals)设计交易系统"

 

新文章 学习如何基于分形(Fractals)设计交易系统已发布:

本文是我们关于如何基于最流行的技术指标设计交易系统的系列中的一篇新文章。 我们将学习一个新的指标,即分形(Fractals)指标,我们将学习如何设计一个基于它的交易系统,从而能在 MetaTrader 5 终端中执行。

1. 分形高点和低点

    基于此策略,我们需要创建一个交易系统,该系统可通过持续检查 fracUpvalue 和 fracDownValue 来返回分形指标的高点和低点,作为图表上的注释。 如果 fracUp 大于零或其不为空值,且 fracDown 为一个空值,我们要求交易系统在图表上返回一个信号,含有以下值的注释:

      • 分形高点围绕: n

    在另一种情况下,如果 fracDown 大于零或它不为空值,而 fracUp 为一个空值,我们要求交易系统在图表上返回一个信号,含有以下值的注释:

      • 分形低点围绕: n

    以下是此策略的蓝图:

    分形高点和低点蓝图

    作者:Mohamed Abdelmaaboud

     
    MetaQuotes:

    分形指标分形交易系统的开发》一文已经发表:

    作者:Mohamed Abdelmaaboud



    感谢作者。文章中的一切都解释得非常清楚。我自己不排除 - 代码上的分形信号和马将完成它与别的东西 - 例如,他的股票剥头皮机器人的滴答声的速度。在刻度线可以做的一切 - 也许在M1。你也可以一个LA平均纯粹的反弹分形和拖网上的第一个ts在这里也完成的东西。在一般情况下,我尊重作者在这些主题上有用的文章!
     

    请回答问题。

    1.为什么要在第二根封闭的柱子上使用分形 值?它还没有形成。我认为您应该使用第 3 个封闭柱形的值:

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

    2.为什么称它们为交易系统?它们不进行交易。只对图表发表意见。

     
    Ivan Titov 分形 值?它还没有形成。我认为您应该使用第 3 个封闭条形图的值:

    2.为什么称它们为交易系统?它们不进行交易。只在图表上发表评论。

    当前蜡烛图为 0,前一根为 1,第三根为 2 而非 3。

    交易系统基于系统化和逻辑化的步骤进行编程,即使是注释也能帮助您进行交易,如果您对其进行了测试并发现其对您有用,您可以添加发送订单。

     
    Mohamed Abdelmaaboud #:

    当前蜡烛是 0,前一根是 1,第三根是 2 而不是 3。

    当前蜡烛(0)尚未关闭,使用它可能会产生许多错误的入口,尤其是当它刚刚打开时。

     

    你好,我冒昧地用为此目的提供的函数(声明/定义)实现了你的示例 "Fractals_with_Alligator"。如有错误,请指正😊

    //创建数组
    double   fracUpArray[];
    double   fracDownArray[];
    MqlRates priceArray[];
    double   jawsArray[];
    double   teethArray[];
    double   lipsArray[];
    // 启动
    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;
       } // 如果结束
    //在卖出的情况下
       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;
       } // 如果结束
    }
    
    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:48Error Code:INDICATOR_DATA_NOT_FOUND ) 。

    在运行您的代码时,我也遇到了同样的错误。


    请帮帮我。我已经尝试了很多不同的组合。


    感谢您的支持。

    杰伊