Diskussion zum Artikel "Lernen Sie, wie man ein Handelssystem mit den Fraktalen entwickelt"

 

Neuer Artikel Lernen Sie, wie man ein Handelssystem mit den Fraktalen entwickelt :

Dieser Artikel ist ein neuer Teil unserer Serie über die Entwicklung eines Handelssystems auf der Grundlage der beliebtesten technischen Indikatoren. Wir werden einen neuen Indikator kennenlernen, den Fraktal-Indikator oder Fractals, und wir werden lernen, wie man ein darauf basierendes Handelssystem entwickelt, das im MetaTrader 5 Terminal ausgeführt werden kann.

Wir werden für jede der genannten Strategien eine Schritt-für-Schritt-Blaupause entwerfen, die uns dabei hilft, unser Handelssystem einfach zu erstellen, indem wir unsere Ideen ordnen.

1. Hohe und tiefe Fraktale

    Auf der Grundlage dieser Strategie müssen wir ein Handelssystem erstellen, mit dem die Höchst- und Tiefstwerte des Fraktal-Indikators als Kommentar auf dem Chgart angezeigt werden können, indem der hohe FracUp-Wert und der tiefe FracDown-Wert kontinuierlich überprüft werden. Wenn fracUp größer als Null oder nicht leer ist und fracDown leer ist, muss das Handelssystem ein Signal auf dem Chart als Kommentar mit dem folgenden Wert zurückgeben:

      • Fractals High around: n

    Im anderen Fall, wenn fracDown größer als Null oder nicht leer und fracUp einen leeren Wert hat, muss das Handelssystem ein Signal auf dem Chart als Kommentar mit dem folgenden Wert zurückgeben:

      • Fractals Low around: n

    Das Folgenden ist die Blaupause dieser Strategie:

    Hohe und tiefe Fraktale Blaupause

    Autor: Mohamed Abdelmaaboud

     

    Servus, ich habe mir erlaubt, Dein Beispiel „Fractals_with_Alligator“ in die dafür vorgesehenen Funktionen zu implementieren (Deklaration/Definition). Bitte korrigiere mich, wenn ich damit falsch liege😊

    //creating arrays
    double   fracUpArray[];
    double   fracDownArray[];
    MqlRates priceArray[];
    double   jawsArray[];
    double   teethArray[];
    double   lipsArray[];
    // init
    int      fracDef;
    int      Data;
    int      alligatorDef;
    //get values
    double   fracUpValue;
    double   fracDownValue;
    double   closingPrice;
    double   jawsValue;
    double   teethValue;
    double   lipsValue;
    //creating bool variables to aviod buy ans sell signals at the same time
    bool     isBuy;
    bool     isSell;
    
    int OnInit() {
    //creating bool variables to aviod buy ans sell signals at the same time
       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);
    
    //get values
       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);
    
    //conditions of the strategy and comment on the chart
    //in case of buy
       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
    //in case of sell
       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("");
    }
    Grund der Beschwerde: