Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 4

 
Artyom Trishkin:

Um die Funktionen zur Ermittlung beliebiger Fraktale vollständig vom Indikator zu trennen, sollten wir die Arrays high[] und low[] und den Grenzwert nicht per Referenz übergeben.

Da unser Code sehr nah an MQL5 ist, müssen wir die Funktionen High[], Low[], iHigh() und iLow() ablehnen. So wird es in diesem Indikator aussehen:

Allerdings sollten Sie auch für -1 von den Funktionen GetPriceHigh() und GetPriceLow() prüfen
Ich danke Ihnen.
 
strongflex:
RSI sollte 15 Minuten betragen. Wir brauchen die EA, um es zu überprüfen alle 20 Minuten von der Markteröffnung (9-00, 9-20, 9-40 usw.) Nehmen wir an, bei 10-20 gab es eine Kreuzung unter der 70-Ebene es merkt sich den Preis und bei 10-40 prüft, ob der Preis niedriger ist als bei 10-20 es öffnet ein kurzes.

Nun, zuerst müssen Sie die Zeit eine bestimmte Anzahl von Minuten zurückbekommen. Hier ist ein Testskript:

//+------------------------------------------------------------------+
//|                                                sTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input ENUM_TIMEFRAMES   TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int               MinutesBefore  =20;           // Количество минут назад
int minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   datetime time_before=TimeCurrent()-minutesBefore*PeriodSeconds(PERIOD_M1);
   int shift=Bars(Symbol(),TimeframeRSI,TimeCurrent(),time_before);
   double value=iRSI(Symbol(),TimeframeRSI,14,PRICE_CLOSE,shift);
   Comment("\nCurrent time: ",TimeToString(TimeCurrent()),
           "\nВремя ",minutesBefore," минут назад: ",TimeToString(time_before),
           "\nБар времени ",TimeToString(time_before)," = ",shift," на таймфрейме ",EnumToString(TimeframeRSI),
           "\nЗначение RSI на баре ",shift," периода ",EnumToString(TimeframeRSI),": ",DoubleToString(value,Digits()));
  }
//+------------------------------------------------------------------+

Dieses Skript zählt von der aktuellen Serverzeit abwärts - testen Sie einfach, ob Sie RSI-Daten von vor einer bestimmten Anzahl von Minuten erhalten.

 

Als Nächstes müssen wir die aktuelle Uhrzeit wissen und ob ihr Wert ein Vielfaches der Minuten des Prüfintervalls ist. Ich habe es zu einem Test-EA gemacht:

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES      TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int                  PeriodRSI      = 14;          // Период расчёта RSI
input ENUM_APPLIED_PRICE   PriceRSI       = PRICE_CLOSE; // Цена расчёта RSI
input int                  MinutesBefore  =20;           // Количество минут назад
//--- global variables
int      minutesBefore; // Количество минут назад
int      periodRSI;     // Период расчёта RSI
double   prevRSIValue;  // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад
   periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   MqlDateTime server_time;
   TimeToStruct(TimeCurrent(),server_time);
   if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
   Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
  }
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
                      int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
  {
   datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
   int shift=Bars(symbol_name,timeframe,start_time,time_before);
   return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
  }
//+------------------------------------------------------------------+

Was müssen wir als nächstes wissen?

 
Guten Tag. Ich bin neu im Trading, daher habe ich eine Menge Fragen, auch zur Software, in meinem Fall ist es MT4. Ist es möglich, den Spread eines Währungspaares z.B. in einem Chart-Fenster in Form von Zahlen darzustellen und auf die gleiche Weise einen Indikator für ATR? Ich halte diese Art der Darstellung von Informationen über die Marktlage für sinnvoll, denn sie ist bequemer und schneller zu berechnen und auf der Grundlage von Durchschnittswerten zu bewerten. Der zweite Punkt ist ein gleitender Stopp auf Basis der ATR. Ist es möglich, dies automatisch zu machen? Wenn Sie in einer Pose sitzen, können Sie dank des Taschenrechners und guter Sehkraft problemlos manuell einen Anschlag berechnen und einstellen. Ein automatischer Stopp ist eine gute Idee für einen Händler, auch wenn er seine Nachteile hat, aber in einem guten Trend wird ein Trailing-Stop das Risiko eines falschen Stopps durch einen Anfänger verringern. Vielen Dank im Voraus.
 
Artyom Trishkin:

Als Nächstes müssen wir die aktuelle Uhrzeit wissen und ob ihr Wert ein Vielfaches der Minuten des Prüfintervalls ist. Ich habe es zu einem Test-EA gemacht:

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES      TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int                  PeriodRSI      = 14;          // Период расчёта RSI
input ENUM_APPLIED_PRICE   PriceRSI       = PRICE_CLOSE; // Цена расчёта RSI
input int                  MinutesBefore  =20;           // Количество минут назад
//--- global variables
int      minutesBefore; // Количество минут назад
int      periodRSI;     // Период расчёта RSI
double   prevRSIValue;  // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад
   periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   MqlDateTime server_time;
   TimeToStruct(TimeCurrent(),server_time);
   if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
   Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
  }
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
                      int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
  {
   datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
   int shift=Bars(symbol_name,timeframe,start_time,time_before);
   return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
  }
//+------------------------------------------------------------------+

Was müssen wir als nächstes wissen?

Wenn der RSI-Wert vor 20 Minuten gekreuzt wurde, überprüfen wir den Kurs, d.h. für einen Short sollte der Kurs niedriger sein als vor 20 Minuten. Ich danke Ihnen vielmals. Wenn es funktioniert, schulde ich Ihnen ein Versprechen))
 
Vladymyr Glushko:
Guten Tag. Ich bin neu im Trading, deshalb habe ich eine Menge Fragen, auch zur Software, in meinem Fall ist es MT4. Ist es möglich, den Spread eines Währungspaares im Chart-Fenster als Zahl anzuzeigen, und zwar auf dieselbe Weise wie der ATR-Indikator? Ich halte diese Art der Darstellung von Informationen über die Marktlage für sinnvoll, denn sie ist bequemer und schneller zu berechnen und auf der Grundlage von Durchschnittswerten zu bewerten. Der zweite Punkt ist ein gleitender Stopp auf Basis der ATR. Ist es möglich, dies automatisch zu machen? Wenn Sie in einer Pose sitzen, können Sie dank des Taschenrechners und guter Sehkraft problemlos manuell einen Anschlag berechnen und einstellen. Ein automatischer Stopp ist eine gute Idee für einen Händler, auch wenn er seine Nachteile hat, aber in einem guten Trend wird ein Trailing-Stop das Risiko eines falschen Stopps durch einen Anfänger verringern. Ich danke Ihnen im Voraus.

Es ist einfach und unkompliziert - zeigen Sie grafische Objekte, insbesondere Textbeschriftungen mit den erforderlichen Daten im Diagramm an, und aktualisieren Sie sie bei jedem Tick.

Wenn du nicht weißt, was du mit ihnen machen sollst, versuche, die richtige zu finden ;)

 
strongflex:
Wenn der RSI-Wert vor 20 Minuten überschritten wurde, überprüfen wir den Kurs, d.h. für einen Short sollte der Kurs niedriger sein als vor 20 Minuten. Ich danke Ihnen vielmals. Wenn alles klappt, bin ich dir ein Versprechen schuldig))
Wir werden nur in der Lage sein, den Preis "jetzt" "dann" durch Öffnen/Schließen/Hoch/Tief Kerze entsprechend dieser Zeit zu überprüfen - keine Tick Geschichte in MT4. Wir müssen also einen Kreuzungspunkt auf den Minuten finden, um eine möglichst genaue Preisbestimmung zu erhalten. Aber was meinen Sie mit RSI Crossover?
 

Artyom Trishkin:
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории. Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?

Der RSI überquert die 70er-Marke. Sagen wir, der RSI lag bei 10-00 unter 70, bei 10-20 über 70 und bei 10-40 sollte der 10-20 höher sein als bei 10-40.
 
Artyom Trishkin:

Es ist einfach und unkompliziert - Sie zeigen grafische Objekte, insbesondere Textbeschriftungen mit den gewünschten Daten im Diagramm an und aktualisieren sie bei jedem Tick.

Und verschiedene Schleppnetze in kodobase gibt es wie Sand am Meer - suchen Sie sich das richtige aus ;)

Vielen Dank ...... wir werden danach suchen))

 
Artyom Trishkin:

Alles ist leicht und einfach - zeigen Sie grafische Objekte an, insbesondere Textbeschriftungen mit den erforderlichen Daten auf dem Diagramm, und aktualisieren Sie sie bei jedem Tick.

Und verschiedene Schleppnetze in kodobase gibt es wie Sand am Meer - finden Sie das richtige für sich ;)

Aber wie man es Schritt für Schritt zu tun? ..... grafische Objekte (was ist es und wie sie zu setzen), setzen Etiketten mit den Daten auf dem Diagramm (wo zu geben und mit welchen Daten) ...... sorry für die dummen Fragen.