Expert Advisors: Unterschied zwischen zwei gleitenden Durchschnitten

 

Unterschied zwischen zwei gleitenden Durchschnitten:

Expert Advisor basierend auf dem Unterschied von zwei gleitenden Durchschnitten.

Test Ergebnisse:

Autor: Winston

 

Ich denke, der Indikator braucht ArraySetSeries (mf, true) und (ms, true) in OnInit (), um richtig zu funktionieren.

Alle Operatoren

if (flg == 0) / / initialise on first pass
      {
       ArrayInitialize (ag, EMPTY_VALUE);
       ArrayInitialize (bg, EMPTY_VALUE);
       ArrayInitialize (cg, EMPTY_VALUE);
       hi = 0;
       I = 0;
       trend = 0;
       flg = 1;
       }

wären effektiver in OnInit () und müssten nicht "flg" verwenden

EA in Bezug auf ... mit MACD denke, seine Strategie-Algorithmus ist wie folgt vereinfacht:

Öffnen Sie kaufen: MACDcurrent>MACDprev && MACDcurrent<0; buyed = true.

Close buy: buyed && MACDcurrent<MACDprev && MACDcurrent>0; buyed = false

Für den Verkauf umgekehrte Aktionen.

Wenn wir SL und TP verwenden, wenn der EA nicht in Betrieb ist, kann ich "buy" oder "sell" als Trend (slow MA) sagen und auf ein neues Signal warten.

 

Hallo, ich weiß nicht, warum dieser Indikator: madelta_inc.mq5, zeichnet nichts, wenn ich es auf dem Chart anhängen. Hier füge ich Ihnen ein Bild, so dass Sie sehen können, was ich sage. Ich habe auch unten den Code mit der Änderung josemiguel1812 schlägt vor, verwenden Sie nicht die Flagge: 'flg', und verschieben Sie einen Teil des Codes, um die OnInit() Ereignis. Ich habe nicht verwendet: ArraySetAsSeries (mf, true) und ArraySetAsSeries (ms, true), weil sowohl 'mf' als auch 'ms' nur ein Element Arrays sind und ich denke, dass diese Änderung keine Auswirkung haben wird, auch MT5 erlaubt nicht die Verwendung dieser Funktion für statische Arrays. Aber was ich gerne wissen würde, ist, warum der Indikator nicht gezeichnet wird. Könnten Sie den folgenden Code ausprobieren und ihn testen?

Vielen Dank im Voraus, Cyberglassed.

//+------------------------------------------------------------------+
//|madelta_inc |
//|Copyright 2013 Winston |
//+------------------------------------------------------------------+
#property copyright "Winston 2013"
#property version "1.10"
#property description "madelta_inc"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   3

#property  indicator_type1   DRAW_COLOR_LINE
#property  indicator_color1  White,Yellow,Red
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  2

#property  indicator_type2   DRAW_LINE
#property  indicator_color2  Yellow
#property  indicator_style2  STYLE_DOT
#property  indicator_width2  1

#property  indicator_type3   DRAW_LINE
#property  indicator_color3  Red
#property  indicator_style3  STYLE_DOT
#property  indicator_width3  1

input double d = 0.00195;                       //delta
input double m = 39.2;                          //mult

input int F = 26;                               //schneller gleitender Durchschnitt
input ENUM_MA_METHOD FM = MODE_SMA;             //schneller Durchschnittsmodus
input ENUM_APPLIED_PRICE FP = PRICE_WEIGHTED;   //schneller Preismodus

input int S = 51;                                     // Langsam gleitender Durchschnitt
input ENUM_MA_METHOD SM = MODE_EMA;                 // Langsamer Durchschnittsmodus
input ENUM_APPLIED_PRICE SP = PRICE_MEDIAN;        //slow price mode

int Ms, Mf, trend;
double px, hi, lo;
double ms[1], mf[1];
double ag[], bg[], cg[], ac[];

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnInit() {
        SetIndexBuffer(0, ag, INDICATOR_DATA);
        ArraySetAsSeries(ag, true);                    //signal

        SetIndexBuffer(1, ac, INDICATOR_COLOR_INDEX);
        ArraySetAsSeries(ac, true);                    //Signaltrendfarbe

        SetIndexBuffer(2, bg, INDICATOR_DATA);
        ArraySetAsSeries(bg, true);                    //hi-Schwelle

        SetIndexBuffer(3, cg, INDICATOR_DATA);
        ArraySetAsSeries(cg, true);                    //lo Schwelle

        ArrayInitialize(ag, EMPTY_VALUE);
        ArrayInitialize(bg, EMPTY_VALUE);
        ArrayInitialize(cg, EMPTY_VALUE);
        hi = 0;
        lo = 0;
        trend = 0;
        
        Mf = iMA(NULL, PERIOD_H1, F, 0, FM, FP);
        Ms = iMA(NULL, PERIOD_H1, S, 0, SM, SP);

}

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,           // Größe des Preis[]-Arrays
                                const int prev_calculated,               // Balken, die bei einem früheren Aufruf behandelt wurden
                                const int begin,                          // von wo aus die signifikanten Daten beginnen
                                const double &price[])              // zu berechnendes Array
{

        CopyBuffer(Mf, 0, 0, 1, mf);                   //schneller gleitender Durchschnittswert

        CopyBuffer(Ms, 0, 0, 1, ms);                   // Langsam gleitender Durchschnittswert

        px = pow(m * (mf[0] - ms[0]), 3);                //Verstärken und Würfeln der Differenz


        if (px > hi) {                               //Trend erkennen
                hi = px;
                lo = hi - d;
                trend = 1;
        }
        if (px < lo) {                               //mit Farbwechsel
                lo = px;
                hi = lo + d;
                trend = 2;
        }

        ag[0] = px;
        bg[0] = hi;
        cg[0] = lo;
        ac[0] = trend;

        return (rates_total);
}

//+------------------------------------------------------------------+
Dateien:
screenshot.png  103 kb
 
cyberglassed:

Hallo, ich weiß nicht, warum dieser Indikator: madelta_inc.mq5, zeichnet nichts, wenn ich es auf dem Chart anhängen. Hier füge ich Ihnen ein Bild, so dass Sie sehen können, was ich sage. Ich habe auch unten den Code mit der Änderung josemiguel1812 schlägt vor, verwenden Sie nicht die Flagge: 'flg', und verschieben Sie einen Teil des Codes, um die OnInit() Ereignis. Ich habe nicht verwendet: ArraySetAsSeries (mf, true) und ArraySetAsSeries (ms, true), weil sowohl 'mf' als auch 'ms' nur ein Element Arrays sind und ich denke, dass diese Änderung keine Auswirkung haben wird, auch MT5 erlaubt nicht die Verwendung dieser Funktion für statische Arrays. Aber was ich gerne wissen würde, ist, warum der Indikator nicht gezeichnet wird. Könnten Sie den folgenden Code ausprobieren und ihn testen?

Vielen Dank im Voraus, Cyberglassed.

Was erwarten Sie? Es werden nur die Werte des Index 0 der Indikatorpuffer gesetzt.
 
angevoyageur:
Was erwarten Sie? Es werden nur die Werte des Index 0 der Puffer des Indikators gesetzt.

Es war ein wenig verwirrend für mich sehen, dass immer der Index 0 der Puffer zugewiesen wurden, so dass ich erwartet, dass die ArraySetAsSeries hatte einen Einfluss auf das intuitive Verhalten von dem, was man denken könnte (umgekehrt) oder so etwas, ich bin Anfänger in mql5. Jedenfalls musste ich meinen Computer aus einem anderen Grund neu starten und versuchte erneut den Indikator und jetzt zeichnet er Linien, wie ich am Anfang erwartet hatte. Ich hänge ein Bild an.

Vielen Dank, Cyberglassed.

Dateien:
screenshot.png  118 kb
 
cyberglassed:

Es war ein wenig verwirrend für mich sehen, dass immer der Index 0 der Puffer zugewiesen wurden, so dass ich erwartet, dass die ArraySetAsSeries hatte einen Einfluss auf das intuitive Verhalten von dem, was man denken könnte (umgekehrt) oder so etwas, ich bin Anfänger in mql5. Jedenfalls musste ich meinen Computer aus einem anderen Grund neu starten und versuchte erneut den Indikator und jetzt zeichnet er Linien, wie ich am Anfang erwartet hatte. Ich hänge ein Bild an.

Vielen Dank, Cyberglassed.

Entweder ist der Code, den Sie ausführen, nicht derselbe wie der, den Sie gepostet haben, oder Ihr Terminal zeichnet Daten, die aus irgendwelchen Puffern kommen.

Der Code, den Sie gepostet haben, kann nicht zu einem solchen Ergebnis führen.

 

Vielen Dank für Ihren Kommentar. Der Indikator ist vielleicht ungewöhnlich, da er nur mit dem Strategy Tester im Visulization-Modus funktionieren soll.

Klicken Sie im Navigator mit der linken Maustaste auf den Ea und dann mit der rechten Maustaste auf Test. In Strategy tester EURUSD, H1 und kreuzen Sie das Feld Visulization an und dann Start, der Indikator sollte erscheinen.

Lassen Sie mich wissen, wie Sie vorankommen.

Mit freundlichen Grüßen

Winston

 

etwas ist falsch mit diesem EA. Wenn ich versuche, den Handel auf nur ein Paar der Währung dieser EA didn`t enything durch 2 Tage, Indikator somtimes zeigen sel und kaufen Signal zur gleichen Zeit.

Wenn ich versuche, auf mehrere Währungspaare zu handeln, tut es das gleiche, aber ich beobachtete, dass, wenn ich manuell schließen Positionen es wieder zu handeln beginnen, etwas ist sehr falsch mit diesem EA, etwas blockiert den Handel in Meta Trader 5

Wenn ich ihn im Strategietester getestet habe, ist alles in Ordnung, aber wenn ich versuche zu handeln, öffnet er nur Positionen und schließt sie nicht, ich muss sie manuell schließen ....

Könnte jemand das Problem beheben?

 
Wenn Sie eine Markierung des Zeitrahmens benötigen - (Ma1-Ma2) UND (unbekannter Indikator) wird gut funktionieren, nicht wahr?
 
Ich bin mir nur nicht sicher, wo ich es so einstellen kann, dass eine Menge ausgewählt werden kann.
 
Guten Tag, ich habe herausgefunden, wie ich die erforderliche Menge einstellen kann, aber wie kann ich diesen Bot gleichzeitig auf mehreren Instrumenten arbeiten lassen?