Tester zur Unterstützung von MG4-Skripten und Beratern - Seite 2

 
AlexeyVik:

Nun, vielleicht sehen die Schöpfer nicht die Art von Schwierigkeiten, mit denen normale Programmierer konfrontiert sind.

Ich habe zum Beispiel an der Universität BASIC gelernt und sonst nichts. Ich habe versucht, mql4 zu verwenden, aber jetzt habe ich keine Probleme mehr damit. Als ich versuchte, mql5 zu verwenden, schrieb ich einen einfachen Indikator mit weniger als 100 Zeilen zusammen mit einem mql5-Indikator-Hut. Meiner Meinung nach gibt es einen Unterschied, und der ist erheblich.

Das ist ein Mythos und Sie wissen das.

Nehmen wir die Standard-ATR.mq4 von MetaTrader 4. Dort gibt es 104 Zeilen:

//+------------------------------------------------------------------+
//|                                                          ATR.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "https://www.mql4.com"
#property description "Average True Range"
#property strict

//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 1
#property  indicator_color1  DodgerBlue
//--- input parameter
input int InpAtrPeriod=14; // ATR Period
//--- buffers
double ExtATRBuffer[];
double ExtTRBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   string short_name;
//--- 1 additional buffer used for counting.
   IndicatorBuffers(2);
   IndicatorDigits(Digits);
//--- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtATRBuffer);
   SetIndexBuffer(1,ExtTRBuffer);
//--- name for DataWindow and indicator subwindow label
   short_name="ATR("+IntegerToString(InpAtrPeriod)+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//--- check for input parameter
   if(InpAtrPeriod<=0)
     {
      Print("Wrong input parameter ATR Period=",InpAtrPeriod);
      return(INIT_FAILED);
     }
//---
   SetIndexDrawBegin(0,InpAtrPeriod);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
//--- check for bars count and input parameter
   if(rates_total<=InpAtrPeriod || InpAtrPeriod<=0)
      return(0);
//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtATRBuffer,false);
   ArraySetAsSeries(ExtTRBuffer,false);
   ArraySetAsSeries(open,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
//--- preliminary calculations
   if(prev_calculated==0)
     {
      ExtTRBuffer[0]=0.0;
      ExtATRBuffer[0]=0.0;
      //--- filling out the array of True Range values for each period
      for(i=1; i<rates_total; i++)
         ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
      //--- first AtrPeriod values of the indicator are not calculated
      double firstValue=0.0;
      for(i=1; i<=InpAtrPeriod; i++)
        {
         ExtATRBuffer[i]=0.0;
         firstValue+=ExtTRBuffer[i];
        }
      //--- calculating the first value of the indicator
      firstValue/=InpAtrPeriod;
      ExtATRBuffer[InpAtrPeriod]=firstValue;
      limit=InpAtrPeriod+1;
     }
   else
      limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit; i<rates_total; i++)
     {
      ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
      ExtATRBuffer[i]=ExtATRBuffer[i-1]+(ExtTRBuffer[i]-ExtTRBuffer[i-InpAtrPeriod])/InpAtrPeriod;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Nehmen wir die Datei ATR.mq5 aus MetaTrader 5. Sie hat 96 Zeilen.

//+------------------------------------------------------------------+
//|                                                          ATR.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2009, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property description "Average True Range"
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  DodgerBlue
#property  indicator_label1  "ATR"
//--- input parameters
input int InpAtrPeriod=14;  // ATR period
//--- indicator buffers
double    ExtATRBuffer[];
double    ExtTRBuffer[];
//--- global variable
int       ExtPeriodATR;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input value
   if(InpAtrPeriod<=0)
     {
      ExtPeriodATR=14;
      printf("Incorrect input parameter InpAtrPeriod = %d. Indicator will use value %d for calculations.",InpAtrPeriod,ExtPeriodATR);
     }
   else ExtPeriodATR=InpAtrPeriod;
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtATRBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtTRBuffer,INDICATOR_CALCULATIONS);
//---
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpAtrPeriod);
//--- name for DataWindow and indicator subwindow label
   string short_name="ATR("+string(ExtPeriodATR)+")";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   PlotIndexSetString(0,PLOT_LABEL,short_name);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
//--- check for bars count
   if(rates_total<=ExtPeriodATR)
      return(0); // not enough bars for calculation
//--- preliminary calculations
   if(prev_calculated==0)
     {
      ExtTRBuffer[0]=0.0;
      ExtATRBuffer[0]=0.0;
      //--- filling out the array of True Range values for each period
      for(i=1;i<rates_total && !IsStopped();i++)
         ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
      //--- first AtrPeriod values of the indicator are not calculated
      double firstValue=0.0;
      for(i=1;i<=ExtPeriodATR;i++)
        {
         ExtATRBuffer[i]=0.0;
         firstValue+=ExtTRBuffer[i];
        }
      //--- calculating the first value of the indicator
      firstValue/=ExtPeriodATR;
      ExtATRBuffer[ExtPeriodATR]=firstValue;
      limit=ExtPeriodATR+1;
     }
   else limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit;i<rates_total && !IsStopped();i++)
     {
      ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
      ExtATRBuffer[i]=ExtATRBuffer[i-1]+(ExtTRBuffer[i]-ExtTRBuffer[i-ExtPeriodATR])/ExtPeriodATR;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Es gibt keinen Unterschied in der Größe von 104 vs. 96 Zeilen, auch der Vorteil liegt auf der Seite von MQL5.

So übertragen die Leute Unsinn und Mythen von Forum zu Forum.

 
Renat:

Das bedeutet keineswegs, dass die Sprache dieselbe ist.

Der Unterschied besteht nur in einer kleinen Anzahl von Funktionen (MT5 hat bessere), und es gibt keine größeren Kosten, die zu bewältigen sind.

Was "Ich will meine Zeit nicht verschwenden" und "Ich brauche es gestern" betrifft, möchte ich Sie daran erinnern, dass eine Handelsplattform ein wichtiges Instrument zur Steigerung der Effizienz eines Händlers ist. Wenn es eine offensichtlich wirksamere und funktionellere Lösung gibt, ist deren Nichtanwendung eine Selbstschädigung und ein Selbstbetrug mit erfundenen Mythen.

Das ist genug, um die Tester von Handelsstrategien zu vergleichen und MT4 für immer zu vergessen. Ich mache keine Witze und ich überreagiere nicht - es ist die Realität.

Das dümmste Prinzip der Summierung von Positionen im MT5 (und das bedeutet die Unmöglichkeit, den gleichzeitigen Betrieb mehrerer MTS auf einem Symbol und einem Konto ohne Tricks zu begrenzen) hat für immer vom Handel mit diesem System abgeschreckt. Auch wenn es mehr Broker geben wird, die MT5 anbieten, als es Finger an Händen gibt.

Und den Code für MT5 neu zu schreiben, nur um eines Testers willen - sorry, aber das ist absurd.

 
evillive:

Das dümmste Prinzip der Summierung von Positionen im MT5 (d.h. die Unmöglichkeit, den gleichzeitigen Betrieb mehrerer MTS auf einem Symbol und auf einem Konto ohne irgendwelche Tricks zu begrenzen) hat den Handel damit für immer entmutigt. Auch wenn es mehr Broker geben wird, die MT5 auf Real anbieten, als Finger an Händen.

Das ist überhaupt nicht absurd.

Die Vorteile wurden bereits so oft erläutert, dass ich sie nicht wiederholen möchte. Ich habe auch wiederholt erklärt, warum "mehrere MTS auf einem einzigen Symbol selbstzerstörerisch, ein Verlust und eine unrealistische Situation für den Massengebrauch ist".


Und den Code für MT5 umzuschreiben, nur um eines Testers willen - sorry, aber das ist absurd.

Das ist nicht absurd.

Sie schränken Ihre eigenen Möglichkeiten ein und verpassen Chancen zur Weiterentwicklung. Sich selbst und anderen zu beweisen, dass ein wissentlich besseres, funktionelleres und leistungsfähigeres System schlechter ist als ein altes System mit einer Reihe von Mängeln, schadet einem selbst unmittelbar.

 
Renat:

Keineswegs bedeutet das, dass die Sprache dieselbe ist.

Der Unterschied besteht nur in einer kleinen Anzahl von Funktionen (in MT5 sind sie besser) und es gibt keine größeren Kosten zu bewältigen.

Was "Ich will meine Zeit nicht verschwenden" und "Ich brauche es gestern" betrifft, möchte ich Sie daran erinnern, dass eine Handelsplattform ein wichtiges Instrument zur Steigerung der Effizienz eines Händlers ist. Wenn es eine wissentlich wirksamere und funktionellere Lösung in der Nähe gibt, schadet man sich selbst, wenn man sie nicht nutzt, und betrügt sich selbst mit erfundenen Mythen.

Das ist genug, um die Tester von Handelsstrategien zu vergleichen und MT4 für immer zu vergessen. Ich scherze nicht und ich überreagiere nicht - es ist die Realität.

Renat, wie schwierig ist es, einen mt4-Tester mit einem mt5-Tester gleichzusetzen?
 
Renat:

Das ist ein Mythos und Sie wissen das.

Nehmen wir die Standard-ATR.mq4 von MetaTrader 4. Dort gibt es 104 Zeilen:


Nehmen wir die Datei ATR.mq5 aus MetaTrader 5. Sie besteht aus 96 Zeilen.


Es gibt keinen Unterschied in der Größe von 104 gegenüber 96 Zeilen, und sogar der Vorteil geht an MQL5.

So übertragen die Leute Unsinn und Mythen von Forum zu Forum.

Meine Frage ist, dass ich für denselben Indikator in mql4 eine Stunde brauchte, um ihn zu schreiben, und ich eine Woche brauchte, um denselben Code in mql5 zu schreiben... Es geht nicht um die Anzahl der Zitate, sondern um das Verständnis von Programmieransätzen...

Wie sehr unterscheidet sich die Funktion zum Abrufen des Wertes des Standardindikators in mql4 von der gleichen Funktion in mql5? Ich habe fast den Verstand verloren, als ich damit zu tun hatte. Natürlich können Sie Programmierkurse anbieten, aber Sie müssen andere Faktoren berücksichtigen, die die Teilnahme an solchen Kursen möglicherweise nicht zulassen... Und die Kosten, das Alter, die Entfernung zum Veranstaltungsort oder die Verkehrskosten beim Online-Lernen ... Man weiß ja nie...

 
AlexeyVik:
Renat, wie schwierig ist es, mt4 tester mit mt5 tester gleichzusetzen?
Wir werden 4 nicht berühren, sondern nur den Dienstteil der Integration mit MQL5.community.
 
Renat:
Wir werden das Quartett nicht anfassen, sondern nur den Dienstteil der Integration mit MQL5.community.
Ich habe nicht einmal gefragt, ob Sie es tun werden, also habe ich angenommen, dass Sie es nicht tun werden. Ich habe gefragt, ob es schwer ist,...
 
AlexeyVik:

Das ist nicht das, was ich sagte, ich sagte, dass ich den gleichen Indikator auf mql4 in einer Stunde schrieb, und es dauerte eine Woche, um zu lernen, wie man den gleichen Code auf mql5 schreibt... Es geht nicht um die Anzahl der Zitate, sondern um das Verständnis von Programmieransätzen...

Wie unterscheidet sich die Funktion zum Abrufen des Wertes eines benutzerdefinierten Indikators in mql4 von der gleichen Funktion in mql5 ... Ich bin fast verrückt geworden bei dem Versuch, das herauszufinden. Natürlich können Sie Programmierkurse anbieten, aber Sie müssen andere Faktoren berücksichtigen, die die Teilnahme an solchen Kursen möglicherweise nicht zulassen... Und die Kosten, das Alter, die Entfernung zum Veranstaltungsort oder die Verkehrskosten beim Online-Lernen ... Man weiß ja nie...

Vergleichen Sie die beiden Dateien und Sie werden die minimalen Unterschiede feststellen.

Das Wort "eine Woche, um den Dreh rauszukriegen, fast verrückt geworden" ist im Forum ein rotes Wort. So werden Mythen geboren.

 
AlexeyVik:
Nur die Sprache darin ist so anders, dass es nicht wenig Zeit braucht, sie zu beherrschen.
Scheiß drauf. Ein Monat war genug.
 
Renat:

Vergleichen Sie die beiden Dateien und Sie werden minimale Unterschiede feststellen.

Das "eine Woche, um den Dreh rauszukriegen, ich bin fast verrückt geworden" ist im Forum nur eine Floskel. So werden Mythen geboren.

Ich werde nicht beweisen, dass dies die Wahrheit ist. Für jemanden, der mit der C++-Programmierung und allgemein mit OOP nicht vertraut ist, ist es ziemlich schwierig und keineswegs um der roten Worte oder der Schaffung eines Mythos willen. So seltsam es auch klingen mag, ich habe alles in einer Woche verstanden und das geschrieben, was ich brauchte. Und das ist ein ganz anderer Mythos; er zeigt, dass mql5 auch von Nicht-Profis wie mir leicht gemeistert werden kann.
Grund der Beschwerde: