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

 

Ich versuche, einen einfachen Eintrag zu machen. Wie ich wollte - wenn der Eröffnungskurs um die Anzahl der Punkte (des vorherigen Balkens) unter dem Schlusskurs liegt, dann kaufe ich zu Beginn eines neuen Balkens unter Berücksichtigung von Take Profit und Stop Loss. Aber irgendetwas scheint anders zu funktionieren, als ich wollte. Hilf mir zu verstehen


   MqlRates rt[1];

   if(CopyRates(_Symbol,_Period,0,1,rt)!=1)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   
   ENUM_ORDER_TYPE signal=WRONG_VALUE;

      if(rt[1].open - rt[1].close >= padenie) 
	 {
         signal=ORDER_TYPE_BUY;
         printf(rt[1].open+"____"+rt[1].close);
         }
         
      if(signal !=WRONG_VALUE && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100)
         ExtTrade.PositionOpen(_Symbol,signal,1,SYMBOL_ASK,SymbolInfoDouble(_Symbol,SYMBOL_BID)-sl,SymbolInfoDouble(_Symbol,SYMBOL_ASK)+tp);
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Технические индикаторы требуют для своих расчетов указания значений цен и/или значений объемов, на которых они будут считаться. Существуют 7 предопределенных идентификаторов перечисления ENUM_APPLIED_PRICE, для указания нужной ценовой базы расчетов. Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается...
 
BorisD:

Ich versuche, einen einfachen Eintrag zu machen. Wie ich wollte - wenn der Eröffnungskurs um die Anzahl der Punkte (des vorherigen Balkens) unter dem Schlusskurs liegt, dann kaufe ich zu Beginn eines neuen Balkens unter Berücksichtigung von Take Profit und Stop Loss. Aber irgendetwas scheint anders zu funktionieren, als ich wollte. Bitte helfen Sie mir zu verstehen


Fehler 1: Sie kopieren EIN Element, daher wird der Elementindex [0] sein.

Open 100, Close 105 - Bullenbar. Öffnen - Schließen = 100 - 105 = - 5. Die Zahl '-5' wird immer niedriger sein als der von Ihnen eingestellte Wert, da das Ergebnis eine negative Zahl ist.

Eröffnung 110, Schluss 103 - bärischer Balken. Öffnen - Schließen = 110 - 103 = 7. 7' ist eine positive Zahl und funktioniert bereits korrekt.


Zusammenfassend: Korrigieren Sie den Verweis auf den Index (anstelle von [1] sollten wir uns auf den Index [0] beziehen. Berücksichtigen Sie vor der Berechnung die Art der Kerze: ob sie bullisch oder bearisch ist.

 

Eine Fortsetzung des Themas der DRAW_HISTOGRAM2-Konstruktionen.

Beispiel:

// Индикатор Проба DRAW_HISTOGRAM2.mq5
//+------------------------------------------------------------------+
#property indicator_chart_window                   
#property indicator_buffers   20                    
#property indicator_plots     20                  

#property indicator_color1    clrOrange                
#property indicator_color2    clrOrange               
#property indicator_color3    clrLimeGreen        
#property indicator_color4    clrLimeGreen        

#property indicator_type5     DRAW_HISTOGRAM2
#property indicator_color5    clrOrange               
#property indicator_type6     DRAW_HISTOGRAM2
#property indicator_color6    clrLimeGreen        

//#property indicator_color9    clrRed                

double
   Line_High_Up[], Line_High_Dn[], Hist_High_Up[], Hist_High_Dn[],
   Line_Low_Up[],  Line_Low_Dn[],  Hist_Low_Up[],  Hist_Low_Dn[],  Line_Red[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit() 
   { 
   SetIndexBuffer     (0, Line_High_Up,      INDICATOR_DATA); 
   PlotIndexSetInteger(0, PLOT_DRAW_TYPE,    DRAW_LINE);      
   SetIndexBuffer     (1, Line_High_Dn,      INDICATOR_DATA); 
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE,    DRAW_LINE);      

   SetIndexBuffer     (2, Line_Low_Up,       INDICATOR_DATA);
   PlotIndexSetInteger(2, PLOT_DRAW_TYPE,    DRAW_LINE);     
   SetIndexBuffer     (3, Line_Low_Dn,       INDICATOR_DATA);
   PlotIndexSetInteger(3, PLOT_DRAW_TYPE,    DRAW_LINE);     

   SetIndexBuffer     (4, Hist_High_Up,      INDICATOR_DATA); 
   SetIndexBuffer     (5, Hist_High_Dn,      INDICATOR_DATA);

   SetIndexBuffer     (6, Hist_Low_Up,       INDICATOR_DATA);
   SetIndexBuffer     (7, Hist_Low_Dn,       INDICATOR_DATA);

   //SetIndexBuffer     (8, Line_Red,          INDICATOR_DATA);
   //PlotIndexSetInteger(8, PLOT_DRAW_TYPE,    DRAW_LINE);     
   }
//+------------------------------------------------------------------+
//| 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[]   )                   
   {  
   int i;
   for(i=prev_calculated; i<=rates_total-1; i++)      
      {
      Line_High_Up[i] = high[i] + 50*_Point;
      Line_High_Dn[i] = high[i] + 30*_Point;
      Line_Low_Up[i]  = low[i]  - 30*_Point;
      Line_Low_Dn[i]  = low[i]  - 50*_Point;

      Hist_High_Up[i] = Line_High_Up[i];
      Hist_High_Dn[i] = Line_High_Dn[i];
      Hist_Low_Up[i]  = Line_Low_Up[i];
      Hist_Low_Dn[i]  = Line_Low_Dn[i];
      
      //Line_Red[i]     = low[i]  - 70*_Point;
      }
   return(i-1);
   }           
//+------------------------------------------------------------------+

Bei dem vorgestellten Indikator war es möglich, beide Histogramme zu erstellen. Eine unerwartete Besonderheit war die folgende:

Für normale Zeilen in den Einträgen #property indicator_colorn, #property indicator_typen usw. ist der Wert von n um 1 größer als der Pufferindex.
Außerdem wird diese Anforderung auch dann erfüllt, wenn in einer Zeile keine Pufferindizes angegeben sind und zwischen benachbarten Indizes freier Platz ist.
Wenn zum Beispiel die Indizes 0, 1, 2, 3, 8 verwendet werden, werden alle fünf Zeilen angezeigt.

Eine andere Anforderung gilt für Konstruktionen vom Typ DRAW_HISTOGRAM2, nämlich:
Wenn Histogramme in einer Zeile angegeben sind, werden die Einträge #property indicator_colorn, #property indicator_typen usw.
n Wert wird aus einer Zählung und nicht aus einem Pufferindex berechnet. Im Beispiel werden die Indizes 5 und 6 angegeben, obwohl logischerweise 5 und 7 erwartet werden.

Dieser ganze Unsinn macht es unmöglich zu verstehen, welchen Wert n für die regelmäßige Linie (rot), die den beiden Histogrammen folgt, überhaupt haben sollte.
In diesem Beispiel wird der Wert n=9 angegeben, was jedoch nicht funktioniert, so dass alle Zeilen, die sich auf Puffer 8 beziehen, auskommentiert werden. Bei anderen Werten von n hat es auch nicht funktioniert.

Fazit: Alle Histogramme müssen in einer Zeile am Ende der Pufferliste angegeben werden. Außerdem sollten ihre Werte (trotz ihrer Pufferindizes) nur in einer Reihe durch quantitative Zählung berechnet werden.
Es ist unmöglich, dies zu verstehen, aber es ist möglich, damit zu leben.

Übrigens: Es wurde keine Auswirkung der Reihenfolge der INDICATOR_CALCULATIONS- und INDICATOR_DATA-Puffer festgestellt.

Wir danken Vladimir Karputov und Artem Trishkin für ihre Mitarbeit an der Lösung des Problems.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

Eine Fortsetzung des Themas der DRAW_HISTOGRAM2-Konstruktionen.

Beispiel:

Bei dem vorgestellten Indikator war es möglich, beide Histogramme zu erstellen. Eine unerwartete Besonderheit war die folgende:

Für normale Zeilen in den Einträgen #property indicator_colorn, #property indicator_typen usw. ist der Wert von n um 1 größer als der Pufferindex.
Außerdem wird diese Anforderung auch dann erfüllt, wenn in einer Zeile keine Pufferindizes angegeben sind und zwischen benachbarten Indizes freier Platz ist.
Wenn zum Beispiel die Indizes 0, 1, 2, 3, 8 verwendet werden, werden alle fünf Zeilen angezeigt.

Eine andere Anforderung gilt für Konstruktionen vom Typ DRAW_HISTOGRAM2, nämlich:
Wenn Histogramme in einer Zeile angegeben sind, werden die Einträge #property indicator_colorn, #property indicator_typen usw.
n Wert wird aus einer Zählung und nicht aus einem Pufferindex berechnet. Im Beispiel werden die Indizes 5 und 6 angegeben, obwohl logischerweise 5 und 7 erwartet werden.

Dieser ganze Unsinn macht es unmöglich zu verstehen, was der Index für die regelmäßige Linie (rot), die den beiden Histogrammen folgt, überhaupt sein soll.
In diesem Beispiel wird der Wert n=9 angegeben, was aber nicht funktioniert, so dass alle Zeilen, die sich auf Puffer 8 beziehen, auskommentiert werden. Bei anderen Werten von n hat es auch nicht funktioniert.

Fazit: Alle Histogramme müssen in einer Zeile am Ende der Pufferliste angegeben werden. Außerdem sollten ihre Werte (trotz ihrer Pufferindizes) nur in einer Reihe durch quantitative Zählung berechnet werden.
Es ist unmöglich, dies zu verstehen, aber es ist möglich, damit zu leben.

Übrigens: Es wurde keine Auswirkung der Reihenfolge der INDICATOR_CALCULATIONS- und INDICATOR_DATA-Puffer festgestellt.

Wir danken Vladimir Karputov und Artem Trishkin für ihre Mitarbeit an der Lösung des Problems.

Sie sind herzlich willkommen. Aber Sie haben das Problem nicht gelöst.

Es besteht keine Abhängigkeit von der Reihenfolge der verschiedenen Pufferarten in den Indikatoren. Nur die berechneten Werte sollten nach den gezeichneten Werten liegen.

 
Artyom Trishkin:

Bitte sehr. Aber Sie haben das Problem nicht gelöst.

Die Indikatoren hängen nicht von der Reihenfolge der verschiedenen Pufferarten ab. Nur die berechneten müssen hinter den gezogenen liegen.

Ich bin mir zwar nicht ganz sicher, aber ich glaube trotzdem, dass beide Aussagen falsch sind.

Was die "Nicht-Abhängigkeit" betrifft. Ich habe keine Möglichkeit gefunden, den 8. Puffer im letzten Beispiel zuzuordnen. Wie sollte die Reihenfolge sein... Vielleicht können Sie es tun?

Über "berechnet ... nach gezeichnet". Mein Indikator verwendet mehr als 200 Puffer, von denen die ersten 100 berechnete Puffer sind.
In meinem Fall sind es alles einfache Zeilen, daher wird n für #property aus dem Pufferindexwert berechnet : n=b+1. Und es werden einfache Linien angezeigt. Die Verwirrung beginnt mit dem Auftreten von Histogrammen.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

Ich bin mir zwar nicht ganz sicher, aber ich glaube trotzdem, dass beide Aussagen falsch sind.

Was die "Nicht-Abhängigkeit" betrifft. Ich habe keine Möglichkeit gefunden, den 8. Puffer im letzten Beispiel zuzuordnen. Wie sollte die Reihenfolge sein... Vielleicht können Sie es tun?

Über "berechnet ... nach gezeichnet". Mein Indikator verwendet mehr als 200 Puffer, von denen die ersten 100 berechnete Puffer sind.
In meinem Fall sind es alles einfache Zeilen, daher wird n für #property aus dem Pufferindexwert berechnet : n=b+1. Und es werden einfache Linien angezeigt. Die Missverständnisse beginnen mit dem Aussehen der Histogramme.

Ich werde mich nicht streiten. Ich erstelle die Puffer so, dass sie in absolut beliebiger Reihenfolge gezeichnet werden können. Sobald ich jedoch einen Berechnungspuffer dazwischen einfüge, wird die grafische Darstellung der zu zeichnenden Indikatoren nicht mehr im Diagramm angezeigt. Ihre Werte bleiben im Datenfenster. Ich habe viele Tests durchgeführt, um die Erstellung von Indikatoren und ihren Puffern in den Artikeln zu beschreiben. Ich kam zu dem Schluss, dass nur die berechneten Puffer (ihre Position in der Reihenfolge der Deklaration der Indikatorpuffer) irgendwie die Anzeige/Nichtanzeige der gezeichneten Puffer beeinflussen.

 
Artyom Trishkin:

Ich werde mich nicht streiten. Ich erstelle Zeichenpuffer in absolut beliebiger Reihenfolge. Sobald ich aber einen Berechnungspuffer dazwischen einfüge, werden die grafischen Konstruktionen der zu zeichnenden Indikatoren nicht mehr im Chart angezeigt. Ihre Werte bleiben im Datenfenster. Ich habe viele Tests durchgeführt, um die Erstellung von Indikatoren und ihren Puffern in den Artikeln zu beschreiben. Ich bin zu dem Schluss gekommen, dass nur die berechneten Puffer (ihre Position in der Reihenfolge der Deklaration von Indikatorpuffern) irgendwie die Anzeige/Nichtanzeige von gezeichneten Puffern beeinflussen.

Ich bin mir auch nicht sicher.

Seit einiger Zeit (in den letzten 3-4 Monaten) gibt es einige unverständliche und besorgniserregende Phänomene, die sich im Symbolfenster im Allgemeinen abspielen.

Zunächst einmal ist mir aufgefallen, dass sich die Zeichnung des Indikators ohne ersichtlichen Grund einfach in eine beliebige Richtung verschieben kann, z. B. nach unten oder nach rechts. Nur bei einem neuen Tick rutscht der gesamte Indikator plötzlich nach unten. Das Gleiche passiert manchmal, wenn der PC zum ersten Mal eingeschaltet wird.

Zweitens, wenn einige Puffer gelöscht und dann kompiliert werden, bleiben die "Spuren" dieser gelöschten Konstruktionen bis zu einigen unerklärlichen Ereignissen (TF hin und her, erneute Kompilierung, Aktualisierung der Einstellungen usw.) erhalten. ) Wahrscheinlich gibt es "Spuren" in Daten-Fenster, die Erinnerung an längst vergangene Tage sind (technisch Arrays sind nur zwangsweise bereinigt, und in MT 5, wenn Array nicht benötigt wird, ist es einfach "unregistered", aber Daten bleibt; natürlich, all dies ist MT5 glitches)
--

Es gibt einen Witz: Die Geschichte unseres Heimatlandes ist nicht vorhersehbar. Das Gleiche kann über MT5 gesagt werden: zu geheimnisvoll:)
--

Übrigens, ich habe einige Änderungen an meinem realen Indikator vorgenommen, wie ich in meiner letzten Erklärung sagte. Es funktioniert nicht. Ich habe DRAW_HISTOGRAM2 und INDICATOR_CALCULATIONS für Reflection Arrays hinzugefügt - es funktioniert.

Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
User_mt5:


Sie müssen nicht dilettantisch vorgehen - erstellen Sie den Expert Advisor leer mit dem MQL5 Wizard - auf diese Weise machen Sie so wenig Fehler wie möglich, wenn Sie grafische Konstruktionen und Indikator-Arrays deklarieren.

 
User_mt5:

Ich bin mir auch nicht sicher.

Seit einiger Zeit (in den letzten 3-4 Monaten) gibt es einige unverständliche und beunruhigende Phänomene im Symbolfenster im Allgemeinen.

Erstens ist mir aufgefallen, dass sich die Konstruktion des Indikators ohne ersichtlichen Grund einfach in eine beliebige Richtung verschieben kann, z. B. nach unten oder nach rechts. Nur bei einem neuen Tick rutscht der gesamte Indikator plötzlich nach unten. Das Gleiche passiert manchmal, wenn der PC zum ersten Mal eingeschaltet wird.

Zweitens, wenn einige Puffer gelöscht und dann kompiliert werden, bleiben die "Spuren" dieser gelöschten Konstruktionen bis zu einigen unerklärlichen Ereignissen (TF hin und her, erneute Kompilierung, Aktualisierung der Einstellungen usw.) erhalten. ) Wahrscheinlich gibt es "Spuren" in Daten-Fenster, die Erinnerung an längst vergangene Tage sind (technisch Arrays sind nur zwangsweise bereinigt, und in MT 5, wenn Array nicht benötigt wird, ist es einfach "unregistered", aber Daten bleibt; natürlich, all dies ist MT5 glitches)
--

Es gibt einen Witz: Die Geschichte unseres Heimatlandes ist nicht vorhersehbar. Das Gleiche kann über MT5 gesagt werden: zu geheimnisvoll:)
--

Übrigens, ich habe einige Änderungen an meinem realen Indikator vorgenommen, wie ich in meiner letzten Erklärung sagte. Es funktioniert nicht. Ich habe DRAW_HISTOGRAM2 und INDICATOR_CALCULATIONS für Reflection Arrays hinzugefügt - es funktioniert.

Nicht über mich.

Der Rest - Ihre Fehler und Unachtsamkeit (mit Ausnahme der Verschiebung der Indikatorlinie, aber ich glaube, das wurde behoben, wenn ich mich recht erinnere).

Welche Bauart haben Sie?

 
Vladimir Karputov:

Sie müssen nicht dilettantisch vorgehen - erstellen Sie einen Expert Advisor-Rohling mit dem MQL5-Assistenten - auf diese Weise werden Sie bei der Deklaration von grafischen Konstruktionen und Indikator-Arrays so wenig Fehler wie möglich machen.

Können Sie mir sagen, wie ich den 8. Puffer in meinem letzten Beispiel korrekt wiedergeben kann? Ohne jeglichen Amateurismus?
Können Sie mir die Regeln nennen?

Artyom Trishkin:

Nicht über mich.

Der Rest sind Ihre Fehler und Unachtsamkeiten (mit Ausnahme der Verschiebung des Indikators, aber ich glaube, das wurde behoben, wenn ich mich recht erinnere).

Was ist Ihr Körperbau?

Können Sie mir sagen, wie ich den 8. Puffer in meinem letzten Beispiel korrekt wiedergeben kann? Mit aller gebotenen Sorgfalt?
Und Gründe nennen?
Build 2530.

--
Ich bin noch am Lernen, daher wäre ich Ihnen sehr dankbar, wenn Sie mir zeigen könnten, wo ich das alles in der Dokumentation nachlesen kann.

Grund der Beschwerde: