Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 162

 

Ich habe den einfachsten Indikator in mql4 geschrieben, ich wollte ihn in mql5 übersetzen, und ich habe eine Woche lang gekämpft, aber es funktioniert nicht! Ich gehe mir auf die Nerven, ich hasse mql5, weil ich bereits 88 Zeilen eines einfachen 34-Linien-Indikators in mql5 geschrieben habe!

Hier ist der Code für mql4:

#property indicator_separate_window
#property  indicator_level1 0
#property indicator_buffers 3

extern int kol_vo_bar = 15;
extern string Symbol_1 = "GBPJPY";
extern string Symbol_2 = "EURJPY";

double SpreadA[];
double SpreadB[];
double Spread[];

int init()
{
   SetIndexBuffer(0,SpreadA);
   SetIndexBuffer(1,SpreadB);
   SetIndexBuffer(2,Spread);
   SetIndexStyle(0,DRAW_SECTION,EMPTY,2,Red);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,2,Blue);
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,1,Gray);
   return(0);
}

int start()
{
   int k;
   for(k = 0; k < iBars(Symbol_1,0); k++)
   {
            SpreadA[k] = iClose(Symbol_1,0,k)*100/iOpen(Symbol_1,0,k+kol_vo_bar)-100;
            SpreadB[k] = iClose(Symbol_2,0,k)*100/iOpen(Symbol_2,0,k+kol_vo_bar)-100;                  
            Spread[k] = SpreadA[k]-SpreadB[k];
   }
   return(0);
}

Und hier ist der Code für mql5:

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_SECTION
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  2
//--- plot Label2
#property  indicator_label2  "Label2"
#property  indicator_type2   DRAW_SECTION
#property  indicator_color2  clrBlue
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  2

#property  indicator_label3  "Label3"
#property  indicator_type3   DRAW_HISTOGRAM
#property  indicator_color3  clrGray
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1

//--- input parameters
input int kol_vo_bar=96;
input string   Symbol_1="GBPJPY";
input string   Symbol_2="EURJPY";
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
double         Label3Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,Label2Buffer,INDICATOR_DATA);
   SetIndexBuffer(2,Label3Buffer,INDICATOR_DATA);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   for(int k=0; k<Bars(_Symbol,_Period); k++)
   {
            Label1Buffer[k] = iClose(Symbol_1,PERIOD_CURRENT,k)*100/iOpen(Symbol_1,PERIOD_CURRENT,k)-100;
            Label2Buffer[k] = iClose(Symbol_2,PERIOD_CURRENT,k)*100/iOpen(Symbol_2,PERIOD_CURRENT,k)-100;                  
            Label3Buffer[k] = Label1Buffer[k]-Label2Buffer[k];
   }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
double iClose(string symbol,ENUM_TIMEFRAMES tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   if(CopyClose(symbol,tf,index,1,Arr)>0)
        return(Arr[0]);
   else return(-1);
}
double iOpen(string symbol,ENUM_TIMEFRAMES tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   if(CopyOpen(symbol,tf,index+kol_vo_bar,1,Arr)>0)
        return(Arr[0]);
   else return(-1);
}

DieIndikatorlinien werden im MT5 nicht korrekt angezeigt.

Was habe ich falsch gemacht?

Liebe Leute, helft mir, habt Mitleid mit dem armen Kerl, ich stehe kurz vor einem Zusammenbruch, ganz ehrlich. Schade, dass man hier nicht fluchen kann!

Moderator, verbieten Sie mich nicht, sondern warnen Sie mich erst, wenn etwas nicht stimmt.

 

Sie berechnen alle verfügbaren Balken bei jedem Tick neu, was höchst suboptimal und furchtbar langsam ist.

 
zlodei:


Die Indikatorlinien werden im MT5 nicht korrekt angezeigt.

Was habe ich falsch geschrieben?

Wo bleibt die Arbeit mit PlotIndexXXX?

Ihnen nicht erlaubt hat, die Dokumentation und die Beispiele zu lesen?



Moderator, verbannen Sie mich nicht, sondern warnen Sie mich erst, wenn etwas nicht stimmt.

Es gibt Hunderte von Beispielen, die Sie in der Codebase nachlesen können.
 
sergeev:

Wo arbeiten Sie mit PlotIndexXXX ?

Zu faul, die Dokumentation und Beispiele zu lesen?


Gehen Sie zu Codebase und lesen Sie es. Es gibt Hunderte von Beispielen.

Ich frage mich, warum dies am Anfang des Codes erforderlich ist:

#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_SECTION
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  2

#property  indicator_label2  "Label2"
#property  indicator_type2   DRAW_SECTION
#property  indicator_color2  clrBlue
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  2

#property  indicator_label3  "Label3"
#property  indicator_type3   DRAW_HISTOGRAM
#property  indicator_color3  clrGray
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1

Hier werden alle Eigenschaften für jede Zeile angegeben? Oder ist es nicht genug für mql5, jetzt muss ich Eigenschaften von Linien durch PlotIndex schreiben?

Ich habe viele Beispiele und Dokumentationen gelesen, von denen ich 80 % nicht verstehe, z. B. warum sollte ich einfache Dinge verkomplizieren?

Zum Beispiel in mql4:

   SetIndexStyle(0,DRAW_SECTION,EMPTY,2,Red);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,2,Blue);
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,1,Gray);

In mql5 jetzt kann ich nicht einmal vorstellen, wie viel die Angabe von Zeilenstilen dauern kann, 50 Zeilen wahrscheinlich, und das Ergebnis ist 1 und das gleiche.

MQL5 ist für PROGRAMMIERER, MQL4 für HÄNDLER. Wenn Sie das System überprüfen wollen, programmieren Sie es mit mql4, und wenn Sie dasselbe mit mt5 wollen, bitten Sie einen Programmierer, es zu tun, oder hören Sie auf zu handeln und verbringen Sie Zeit mit dem Studium von mql5.

Mit der Veröffentlichung von MT5 ist mir als Händler nur eine Verbesserung aufgefallen: ein 64-Bit-Tester mit der Möglichkeit, alle CPU-Kerne zu nutzen.

Die Kompliziertheit der mql-Sprache wird die Ergebnisse des manuellen oder automatisierten Handels in keiner Weise beeinflussen. Die Kompliziertheit der Sprache ist wichtig für Programmierer, ja - wir können schöne Schaltflächen und Panels machen, mit allen Arten von seltsamen WinAPI integrieren, usw., aber es hat keinen Einfluss auf die Ergebnisse des Handels. Also, warum all diese Komplikationen, wenn Sie in mql4 programmieren können, und überprüfen Sie es, aber es gibt nur 1 BIG minus - es gibt keine x64 Terminal und Tester mit der Möglichkeit, alle Kerne zu verwenden. Wenn sie diese 2 Dinge tun würden, gäbe es keinen Preis für MT4. Aber sie werden sie nicht absichtlich machen, damit es keine Konkurrenz für MT5 gibt und Leute wie ich darunter leiden oder Geld bezahlen müssen.

Jedenfalls vielen Dank für Ihre Aufmerksamkeit und Ihre "Hilfe". Ich kommentiere nicht, ich werde sowieso nicht in die Filiale gehen, es ist nur meine Meinung, mehr nicht, ich muss gehen.

 
Ich bin neu hier. Können Sie mir sagen, ob ich die rts-Index-Futures in mt5 handeln kann? Wie kann ich ein einzelnes Kursdiagramm von 2009 bis heute anzeigen?
 
sbr080:
Ich bin neu hier. Können Sie mir sagen, ob ich die rts-Index-Futures in mt5 handeln kann? Wie kann ich eine Kurstabelle von 2009 bis heute ausdrucken?
Sie müssen Ihren Makler bitten, Ihnen den Sticky Chart zur Verfügung zu stellen.
 
barabashkakvn:
Bitten Sie Ihren Makler, Ihnen eine aufgeklebte Tabelle zu geben.
Kann ich es selbst kleben?
 
sbr080:
Kann ich es selbst zusammenkleben?
Nein. Nur ein Makler. Wenn Sie es selbst tun, müssen Sie Ihren eigenen Indikator schreiben.
 
barabashkakvn:
Nein. Nur ein Makler. Wenn Sie es selbst tun, müssen Sie Ihren eigenen Indikator schreiben.
Ich danke Ihnen.
 
Können Sie uns mitteilen, ob es möglich ist, dass ein Expert Advisor technische Indikatoren mit den von ihm verwendeten Parametern in einem Diagramm anzeigt? D.h. auf die gleiche Weise wie bei der Verwendung der Visualisierung im Strategietester. Ich kann diese Informationen nirgendwo finden.
Документация по MQL5: Технические индикаторы
Документация по MQL5: Технические индикаторы
  • www.mql5.com
Технические индикаторы - Документация по MQL5