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

 
Pineapple88:

Guten Tag!

Ich versuche, Arrays zu verstehen und habe die folgende Frage.

Warum wird in diesem BeispielArraySetAsSeries verwendet und das Flag true gesetzt, wenn inCopyRates die Zählung von der Gegenwart in die Vergangenheit erfolgt?

Ich verstehe, dass die FunktionArraySetAsSeries notwendig ist, um das Array von der Gegenwart bis zur Vergangenheit zu durchsuchen.

Ich möchte den Zweck dieser Funktion in diesem Beispiel verstehen.

Nach

ArraySetAsSeries(rates,true); 

rates[0] entspricht dem RECHTEN BAR im Diagramm. Dies ist die einfachste Erklärung, ohne die verwirrenden Begriffe "Gegenwart" und "Zukunft".

 
Vladimir Karputov:

Nach

rates[0] entspricht dem RECHTEN BAR im Diagramm. Dies ist die einfachste Erklärung, ohne die verwirrenden Begriffe "Gegenwart" und "Zukunft".

Vielen Dank für die Antwort!

Aber wenn wirArraySetAsSeries nicht verwenden, dann wirdCopyRates auch rates[0] dem Balken ganz rechts im Diagramm zuweisen.

Nur versuchen zu verstehen, was istArraySetAsSeriesFunktion für, wenn es das gleiche ohne es funktioniert?

Oder ist es einfach nur eine akzeptierte Form, Code zu schreiben?

 
Pineapple88:

Vielen Dank für die Antwort!

Aber wenn wirArraySetAsSeries nicht verwenden, dann wirdCopyRates auch rates[0] dem Balken ganz rechts im Diagramm zuweisen.

Nur versuchen zu verstehen, warumArraySetAsSeriesFunktion benötigt wird, wenn es das gleiche ohne es funktioniert?

Oder ist es einfach nur eine akzeptierte Form, Code zu schreiben?

Sie sind falsch, CopyRates weist rate[0] den ältesten Wert aufgrund der Größe des rate[] -Arrays zu.
 
Anatolii Zainchkovskii:
Sie liegen falsch, CopyRates weist rate[0] aufgrund der Größe des rate[]-Arrays dem ältesten Wert zu.

Ich danke Ihnen!

Jetzt verstehe ich, dass ich mich geirrt habe.)

 

Guten Tag!

Wieder einmal bitte ich um Hilfe!

Ich habe einen Code mit der Bedingung "kaufen" geschrieben, wenn MA(20) MA(50) von unten nach oben kreuzt

input int SmallMovingAverage = 20;
input int BigMovingAverage   = 50;


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   string signal = "";

   double SmallMovingAverageArray[], BigMovingAverageArray[];

   int SmallMovingAverageDefinition = iMA(_Symbol,_Period,SmallMovingAverage,0,MODE_SMA,PRICE_CLOSE);
   int BigMovingAverageDefinition   = iMA(_Symbol,_Period,BigMovingAverage,0,MODE_SMA,PRICE_CLOSE);

   CopyBuffer(SmallMovingAverageDefinition,0,0,3,SmallMovingAverageArray);
   CopyBuffer(BigMovingAverageDefinition,0,0,3,BigMovingAverageArray);

   if(BigMovingAverageArray[1] < SmallMovingAverageArray[1])
   if(BigMovingAverageArray[2] > SmallMovingAverageArray[2])
        {
         Print("buy");
        }
  }

In Wirklichkeit läuft es aber so ab

Dateien:
n2b3h1.png  140 kb
 
Pineapple88:

Guten Tag!

Wieder einmal bitte ich um Hilfe!

Ich habe einen Code mit der Bedingung "kaufen" geschrieben, wenn MA(20) MA(50) von unten nach oben kreuzt

In Wirklichkeit läuft es aber so ab

Grober Fehler: Sie erstellen bei jedem Tick zwei Indikator-Handles. Die richtige Vorgehensweise ist

   int SmallMovingAverageDefinition = iMA(_Symbol,_Period,SmallMovingAverage,0,MODE_SMA,PRICE_CLOSE);
   int BigMovingAverageDefinition   = iMA(_Symbol,_Period,BigMovingAverage,0,MODE_SMA,PRICE_CLOSE);

zu OnInit verschieben, eine Überprüfung der Korrektheit des Handles hinzufügen.


Auch Arrays, die Werte aus IMA übernehmen, müssen

ArraySetAsSeries(SmallMovingAverageArray,true);  
ArraySetAsSeries(BigMovingAverage,true)
Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха,  ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
 

Vielen Dank für Ihre prompte Antwort!

Ich verstehe überArraySetAsSeries.

Ich werde versuchen, herauszufinden, wie man den Indikator nach OnInit verschiebt, und das Handle überprüfen.

***

 
Pineapple88:

Vielen Dank für Ihre prompte Antwort!

Ich verstehe überArraySetAsSeries.

Ich werde versuchen, herauszufinden, wie man den Indikator nach OnInit verschiebt, und das Handle überprüfen.

***

Alles ist von Anfang an da

  • in der Dokumentation:iMA
  • MetaEditor - Expert Advisor [Datenordner]MQL5\Experts\Beispiele\Gleitender Durchschnitt\Gleitender Durchschnitt.mq5
Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
//|                                                     Demo_iMA.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Перечисление способов создания хэндла                            |  Creation             type=Call_iMA;                ...
 
Vladimir Karputov:

Es ist alles von Anfang an da.

  • in der Dokumentation:iMA
  • in MetaEditor - EA [Datenordner]MQL5\Experts\Beispiele\Gleitender Durchschnitt\Gleitender Durchschnitt.mq5

Danke, ich werde es studieren.

 

Das Problem ist behoben, alles scheint zu funktionieren).

Ich habe zwei MA-Indikatoren in die OnInit-Funktion übertragen.

Ich verstehe, dass wir nur den Indikator-Handle in der OnInit-Funktion erstellen und alle anderen Manipulationen mit den Arrays in der OnTick-Funktion durchführen und sie bei jedem Tick überprüfen?

int SmallMovingAverageDefinition = 0;
int BigMovingAverageDefinition   = 0;
input int SmallMovingAverage = 20;
input int BigMovingAverage   = 50;


int OnInit()
  {
//---
   SmallMovingAverageDefinition = iMA(_Symbol,_Period,SmallMovingAverage,0,MODE_SMA,PRICE_CLOSE);
   BigMovingAverageDefinition   = iMA(_Symbol,_Period,BigMovingAverage,0,MODE_SMA,PRICE_CLOSE);

   if(SmallMovingAverageDefinition==INVALID_HANDLE  || BigMovingAverageDefinition==INVALID_HANDLE)
     {
      Print("Ошибка создания хендла");
     }
//---
   return(INIT_SUCCEEDED);
  }


void OnDeinit(const int reason)
  {
//---

  }


void OnTick()
  {

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   string signal = "";

   double SmallMovingAverageArray[], BigMovingAverageArray[];

   ArraySetAsSeries(SmallMovingAverageArray,true);
   ArraySetAsSeries(BigMovingAverageArray, true);

   CopyBuffer(SmallMovingAverageDefinition,0,0,3,SmallMovingAverageArray);
   CopyBuffer(BigMovingAverageDefinition,0,0,3,BigMovingAverageArray);

   if(SmallMovingAverageArray[1] > BigMovingAverageArray[1])
      if(SmallMovingAverageArray[2] < BigMovingAverageArray[2])
        {
         Print("buy");
        }
  }
Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
Grund der Beschwerde: