gibt die Ausführungsrichtlinie zurück. - Seite 8

 

So erhalte ich die aktuellen Daten des gleitenden Durchschnitts, ist das korrekt?

input int      ma_period = 10;
 int ma_handle = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    ma_handle = iMA(_Symbol,_Period,ma_period,0,MODE_SMA,PRICE_MEDIAN);
   if(ma_handle == INVALID_HANDLE)
     {
      Print("ma_handle == INVALID_HANDLE");
      return(INIT_FAILED);
     }

   return(INIT_SUCCEEDED);


  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { 
  double   ma[1] ;
   if(CopyBuffer(ma_handle,0,0,1,ma)==1)
     {
     
     
     }
 }

Zwei Fragen.

1. nichts darüber, dass die Nummer des Indikatorpuffers nicht mit dem Indikator verbunden ist. Da es nur einen Indikator gibt, wird automatisch der Puffer 0 verwendet, und genau das habe ich angegeben.

2. Wenn ich den Indikator Handle in Initialisierung, wenn ich die Parameter ändern, die an den Indikator übergeben werden, muss ich neu füllen die EA auf dem Diagramm, so dass die Initialisierung Ereignis kommt und die neuen Parameter angewendet werden?

 
Ivan_Invanov:

So erhalte ich die aktuellen Daten des gleitenden Durchschnitts, ist das korrekt?

Zwei Fragen.

1. nichts darüber, dass die Nummer des Indikatorpuffers nicht mit dem Indikator verbunden ist. Da es nur einen Indikator gibt, wird automatisch der Puffer 0 verwendet, und genau das habe ich angegeben.

2. Wenn ich den Indikator Handle in Initialisierung, wenn ich die Parameter ändern, die an den Indikator übergeben werden, muss ich die EA auf dem Diagramm neu laden, so dass die Initialisierung Ereignis kommt und die neuen Parameter angewendet werden?

1. Es gibt keine "Assoziation". Das gab es nie.

Lesen wir die Hilfe zu CopyBuffer

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   int       start_pos,            // откуда начнем 
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );

Es gibt eine Funktion, die das Handle des Indikators übernimmt (in Ihrem Fall ist das die Variablema_handle und die Puffernummer '0' - Null, da der Moving Average Indikator nur einen Puffer hat).


2. Wenn Sie die Eingabeparameter in Ihrem EA ändern, wird Ihr EA erneut initialisiert und der Indikator-Handle wird in OnInit mit den eingegebenen Parametern erstellt.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Vladimir Karputov:

1. Es gibt keine "Assoziation". Das hat es nie gegeben.

...

Bedeutung des AufrufsSetIndexBuffer()

 
Dmitry Fedoseev:

Bedeutung eines Aufrufs von SetIndexBuffer()

Ja, es ist nicht klar, was die Nummer des Indikatorpuffers ist, wie diese Puffer erstellt werden, ob sie zu einem bestimmten Indikator gehören oder eine gemeinsame Nummerierung haben. In der Dokumentation steht, dass SetIndexBuffer() geschrieben werden soll, aber im Beispiel für den gleitenden Durchschnitt wird es ohne geschrieben. Ich habe die Referenz gelesen und weitere Artikel durchsucht, aber es ist immer noch unklar. Muss der Präprozessor die Puffer angeben und warum sollten die Puffer um eins kleiner sein als in der Präprozessorrichtlinie und nicht gleich.
 
Ivan_Invanov:
Ich weiß nicht, was eine Indikatorpuffernummer ist, wie diese Puffer erstellt werden und ob sie einem bestimmten Indikator zugeordnet sind oder die gleiche Nummerierung haben. In der Dokumentation steht, dass SetIndexBuffer() geschrieben werden soll, aber im Beispiel für den gleitenden Durchschnitt wird es nicht geschrieben. Ich habe die Referenz gelesen und weitere Artikel durchsucht, aber es ist immer noch unklar. Muss der Präprozessor die Puffer angeben, und warum sollten die Puffer um eins kleiner sein als in der Präprozessorrichtlinie und nicht gleich sein.

Wenn Sie nach einer metaphysischen Bedeutung suchen... dann wird vieles unverständlich. Sonst ist es nur eine Zahl. Er gehört zu einem bestimmten Indikator.

Die Expert Advisors haben überhaupt keine Indikatorpuffer, daher kann es keinen SetIndexBufer()-Aufruf geben.

Nicht eine weniger, sondern genau dieselbe. Beim Zählen von Null an ist die letzte Zahl 1 weniger als die Gesamtzahl.

 
Ich danke Ihnen.
 

Wenn Sie nichts dagegen haben, beantworten Sie bitte noch ein paar Fragen.

1. Ich verstehe nicht, warum ich einer deklarierten Variablen den Wert 0 zuweisen muss, wenn ich ihr später sowieso etwas zuweisen werde. Außerdem wird manchmal 0 nicht zugewiesen, manchmal aber doch.

Und sie sagen, dass man Objekte bei der Deinitialisierung löschen muss (ich verstehe nicht warum), aber ein Indikator-Handle ist ein Objekt, aber es wird normalerweise nicht gelöscht, warum ist das so?

3.MqlTradeRequest request={0}; Was bedeutet das? Wahrscheinlich ist die gesamte Struktur mit 0 belegt, aber sie enthält nicht nur numerische Typen.

4. Und warum gibt es hier eine logische Operation?

bool  OrderSend(
   MqlTradeRequest&  request,      // структура запроса
   MqlTradeResult&   result        // структура ответа
   );
 
Ivan_Invanov:

Wenn Sie nichts dagegen haben, beantworten Sie bitte noch ein paar Fragen.

1. Ich verstehe nicht, warum ich einer deklarierten Variablen den Wert 0 zuweisen muss, wenn ich ihr später sowieso etwas zuweisen werde. Außerdem wird manchmal 0 nicht zugewiesen, manchmal aber doch.

Und sie sagen, dass man Objekte bei der Deinitialisierung löschen muss (ich verstehe nicht, warum), aber ein Indikator-Handle ist ein Objekt, aber es wird normalerweise nicht gelöscht, warum ist das so?

3.MqlTradeRequest request={0}; Was bedeutet das? Wahrscheinlich ist die gesamte Struktur mit 0 belegt, aber es sind nicht nur numerische Typen.

4. Warum brauchen wir hier eine logische Operation?

1. Aus Gewohnheit.

2. es ist ein anderes Objekt. Er wird von selbst entladen, kann aber durch die Funktion IndicatorRelease() beschleunigt werden.

3. Sie wird gelöscht und das war's.

4. Es handelt sich nicht um eine logische Operation, sondern um die Übertragung einer Variablen per Referenz.

 
Dmitry Fedoseev:

1. Aus Gewohnheit.

2. Dies ist ein anderes Objekt. Er entlädt sich dann selbst, kann aber durch IndicatorRelease() beschleunigt werden.

3. Sie wird gelöscht und das war's.

4. Es handelt sich nicht um eine logische Operation, sondern um die Übertragung einer Variablen per Referenz.

danke)
 
Ich bin über etwas verwirrt. Wenn SYMBOL_TRADE_EXECUTION_MARKET ausgeführt wird . Kann ich etwas tun, um Aufträge zu einem bestimmten Preis zu eröffnen, wie bei der Sofortigen Ausführung? Benötige ich einen schwebenden Auftrag? Bitte schreiben Sie ein Marktanfrageformat für einen schwebenden Auftrag.