Mit verdrahtetem gleitendem Durchschnitt Problem beim Erstellen von EA..

 

Was mache ich falsch?

Es gibt einen Screenshot von einem Teil des Codes, der für den gleitenden Durchschnitt verantwortlich ist. Ich habe alle Variablen durch Werte ersetzt, damit Sie die Einstellungen sehen können. Der andere Screenshot zeigt den Unterschied beim Zeichnen des MA und des MA-Indikators, der auf den Chart geworfen wird (oder vielmehr alle 4 Arten von ihnen).

Der hellblaue Indikator ist der geglättete Indikator und kommt nicht annähernd an den im Tester generierten MA heran.
Der MA, der dem generierten MA am nächsten kommt, ist der Simple, aber er stimmt nicht mit ihm überein.

Was zum Teufel ist hier los?

Dateien:
ma_problem1.png  154 kb
ma_problem2.png  80 kb
 
angreeee:

Was mache ich falsch?

Es gibt einen Screenshot von einem Teil des Codes, der für den gleitenden Durchschnitt verantwortlich ist. Ich habe alle Variablen durch Werte ersetzt, damit Sie die Einstellungen sehen können. Der andere Screenshot zeigt den Unterschied beim Zeichnen des MA und des MA-Indikators, der auf das Diagramm geworfen wird (oder vielmehr alle 4 Arten von ihnen).

Der hellblaue Indikator ist eigentlich der geglättete Indikator und kommt dem im Tester generierten MA nicht einmal annähernd nahe.
Der MA, der dem generierten MA am nächsten kommt, ist der Simple, der jedoch nicht mit ihm übereinstimmt.

Was zum Teufel ist hier los?

Und welchen Wert haben Sie erhalten? Ich kann ihn nirgendwo sehen.
 
angevoyageur:
Und welchen Wert haben Sie erhalten? Ich kann ihn nirgendwo sehen.

Vergleichen Sie die 2 Fenster. eine auf der linken Seite ist die MA von Strategie-Tester generiert. es geht genau zwischen den Trades. auf der rechten Seite haben Sie alle Arten von MA370 (SMA, EMA, SSMA, und LWMA) und keiner von ihnen entspricht der MA 370 auf der linken Seite. die SSMA ist die hellblaue ein und ist nirgends in der Nähe der MA in Back-Test generiert.

Anbei ein weiterer Screenshot mit zusätzlicher Debug-Alarm-Zeile für den aktuellen Wert der "ma"-Variablen (letzter MA-Wert im Log und rechts der letzte Wert des hellblauen geglätteten 370 MA, der auf dem Chart "geworfen" wurde)

Mir ist aufgefallen, dass sich die MAs auf dem Chart auf den Schlusskurs beziehen, während sich der Code ma auf den Eröffnungskurs bezieht, aber als ich die gleitenden Durchschnitte auf dem Chart änderte, änderten sie sich visuell nicht wesentlich. Sie sehen immer noch genauso aus wie auf dem beigefügten Screenshot.

Dateien:
ma_problem3.png  142 kb
 
seine nicht, dass ea nicht funktioniert. es funktioniert gut, aber wenn ich es zu debuggen war ich bemerkt, dass die MA generiert ist nur völlig anders, was es sein sollte. Ich weiß, ich tue etwas falsch, aber ich weiß immer noch nicht, was es ist. Ich füge einen weiteren Screenshot der Einstellungen des hellblauen geglättet ea, so dass Sie ein vollständiges Bild haben.
Dateien:
ma_problem4.png  66 kb
 
der ähnlichste MA, den ich gefunden habe, ist der geglättete MA 220, Screenshot im Anhang. Es macht keinen Sinn, :( aber vielleicht ist es ein Hinweis auf irgendeine Art...
Dateien:
ma_problem5.png  57 kb
 

Ich habe das Problem in einem separaten EA isoliert.

#property copyright   "Grzegorz Korycki"
#property version     "1.0"
#property description "MA TEST"


#include <Trade/Trade.mqh>

   #define  MAGICMA  20131002

double Bid;
double Ask;

   
double OnTester()
{
    double custommax = TesterStatistics(STAT_EQUITY_DDREL_PERCENT);
    return (custommax);
}

CTrade  trade;
   
void OnTick()
{
   MqlTick last_tick;
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Bid = last_tick.bid;
      Ask = last_tick.ask;
     }
   start();
}
  
int OnInit()
{
   trade.SetExpertMagicNumber(MAGICMA);
   int deviation=99;
   trade.SetDeviationInPoints(deviation);
   trade.SetAsyncMode(false);
   return(0);
}  
  
      
      
      
void trend1()
{

   int ma_temp;
   double ma_buffer[20];

   double ma;
   ma_temp=iMA(Symbol(),PERIOD_D1,370,0,MODE_SMMA,PRICE_OPEN);
   CopyBuffer(ma_temp,0,0,1,ma_buffer);
   ma=ma_buffer[0];
   
   Alert("ma=", ma);

}

      


void start()
{
   trend1();
}

Das Testpaar ist GBP/NZD.
Dateien:
ma_test.mq5  2 kb
 

das Problem ist immer mehr und mehr seltsam. Wenn ich die oben genannten EA von 2012 testen gibt es etwas andere Ergebnisse für MA (im Journal log können Sie sehen, tatsächlichen Wert) als wenn ich es von 2013 testen. Keiner von ihnen ist in der Nähe der 370 SSMA auf dem Chart setzen.

Vielleicht ist es etwas in meiner Initialisierung, die EA handeln wie diese macht?

einschließlich Bildschirmfotos. Beachten Sie die Linien gezeichnet sind auf verschiedenen Ebenen beim Vergleich der beiden Screenshots und es ist die gleiche EA.

Dateien:
 

Sieht wie ein grundlegender Fehler aus: Die Elemente sind nicht wie in Zeitreihen indiziert (umgekehrte Reihenfolge).

Um dies zu beheben, müssen Sie diese Funktion aufrufen...

ArraySetAsSeries(ma_buffer,true);
 
figurelli:

Sieht wie ein grundlegender Fehler aus: Die Elemente sind nicht wie in Zeitreihen indiziert (umgekehrte Reihenfolge).

Um das zu beheben, müssen Sie diese Funktion aufrufen...

wenn ich sie hinzufüge, erhalte ich:

cannot be used for static allocated array       ma_test.mq5     50      4

aber ich benutze nur 1 Frame dieses Arrays. ist das wichtig? Und warum die Warnung?

Nachdem ich diese Zeile hinzugefügt habe, hat sich nichts geändert (sowohl die Warnung als auch die Backtests zeigen, dass das Hinzufügen dieser Zeile keine Auswirkungen hatte)

In der Dokumentation steht, dass es nur mit Konstanten verwendet werden sollte:

[...]

const datetime &time[],

[...]

ArraySetAsSeries(time,true); 

und mein ma_buffer ist ein variables Array:

 double ma_buffer[20];
 
angreeee:

Wenn ich es hinzufüge, erhalte ich:

aber ich verwende nur 1 Frame dieses Arrays. ist das wichtig? Und warum die Warnung?

Nachdem ich diese Zeile hinzugefügt habe, hat sich nichts geändert (sowohl die Warnung als auch die Backtests zeigen, dass das Hinzufügen dieser Zeile keine Auswirkungen hatte)

Sie haben Recht, wenn Sie nur einen Frame kopieren, und dies ist nicht die Ursache (Ihre Deklaration von ma_buffer[20] hat meine Aufmerksamkeit auf diese Tatsache gelenkt).

Ich schlage jedoch vor, die Zeile darunter in Init() zu verschieben und den Handle auf global zu setzen, da dies wirklich eine Quelle von Problemen ist (nachdem Sie dies getan haben, testen Sie es bitte erneut).

ma_temp=iMA(Symbol(),PERIOD_D1,370,0,MODE_SMMA,PRICE_OPEN);
 
figurelli:

Sie haben Recht, wenn Sie nur einen Frame kopieren, und dies ist nicht die Ursache (Ihre Deklaration von ma_buffer[20] hat meine Aufmerksamkeit auf diese Tatsache gelenkt).

Ich schlage jedoch vor, dass Sie die Zeile darunter in Init() und den Handle in global verschieben, da dies wirklich eine Problemquelle ist (bitte testen Sie es danach noch einmal).

Ich habe das Skript nach Ihren Vorgaben geändert und das Problem besteht immer noch :(

jetzt sieht es so aus:

#property copyright   "Grzegorz Korycki"
#property version     "1.0"
#property description "MA TEST"


#include <Trade/Trade.mqh>

   #define  MAGICMA  20131002

double Bid;
double Ask;

   int ma_temp;
   double ma_buffer[20];

   
double OnTester()
{
    double custommax = TesterStatistics(STAT_EQUITY_DDREL_PERCENT);
    return (custommax);
}

   CTrade  trade;
   

   void OnTick()
  {
   MqlTick last_tick;
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Bid = last_tick.bid;
      Ask = last_tick.ask;
     }
   start();
  }
  
int OnInit()
  {
   trade.SetExpertMagicNumber(MAGICMA);
   int deviation=99;
   trade.SetDeviationInPoints(deviation);
   trade.SetAsyncMode(false);
   ma_temp=iMA(Symbol(),PERIOD_D1,370,0,MODE_SMMA,PRICE_OPEN);


   return(0);
   }  
  
      
      
      
void trend1()
{

   double ma;
   CopyBuffer(ma_temp,0,0,1,ma_buffer);
   ma=ma_buffer[0];
   
   Alert("ma=", ma);
}

void start()
{
         trend1();

}

vielleicht kann jemand einen EA-Entwurf erstellen, wie er einen solchen MA-Wert-Generator erstellen würde und ich könnte beide vergleichen - testen und den Fehler eingrenzen. (wenn jemand ein paar Minuten Zeit hat)

Ich werde in einer Sekunde zu überprüfen und zu antworten, wenn das Problem das gleiche auf andere Paare ist oder ist es nur dieses eine Paar, da dies sehr seltsam ist.