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

 
Kira27 #:
Hallo!!! Sag mir, was ich falsch gemacht habe, ich verstehe es selbst nicht)

Von 275 Werkzeugen verarbeitet es 27 und bleibt dann stecken, belegt Speicherplatz und gibt eine Fehlerzeichenfolge aus, wenn das Skript gezwungen wird, sich zu beenden.

Wenn dieses Feld

   double bufer_MA[];  //Буфер для хендла

dann die Verwendung in

         CopyBuffer(MA200,0,TimeCurrent(),5,bufer_MA); // заполнение масива bufer_MA хендлом MA200 выбранного тайма

das ist überhaupt nicht richtig.

Oder habe ich etwas missverstanden?

 
Alexey Viktorov #:

Wenn dieses Feld

dann die Verwendung in

ist ganz und gar nicht richtig.

Oder habe ich etwas missverstanden?

Es gibt eine Menge Dinge, die nicht stimmen.

 
Alexey Viktorov #:

Wenn dieses Feld

dann die Verwendung in



Пример:



//+------------------------------------------------------------------+ 
//|                                              TestCopyBuffer3.mq5 | 
//|                        Copyright 2009, MetaQuotes Software Corp. | 
//|                                              https://www.mql5.com | 
//+------------------------------------------------------------------+ 
#property copyright "2009, MetaQuotes Software Corp." 
#property link      "https://www.mql5.com" 
#property version   "1.00"
 
#property indicator_separate_window 
#property indicator_buffers 1 
#property indicator_plots   1 
//---- plot MA 
#property indicator_label1  "MA" 
#property indicator_type1   DRAW_LINE 
#property indicator_color1  clrRed 
#property indicator_style1  STYLE_SOLID 
#property indicator_width1  1 
//--- input parameters 
input bool               AsSeries=true; 
input int                period=15; 
input ENUM_MA_METHOD     smootMode=MODE_EMA; 
input ENUM_APPLIED_PRICE price=PRICE_CLOSE; 
input int                shift=0; 
//--- indicator buffers 
double                   MABuffer[]; 
int                      ma_handle; 
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- indicator buffers mapping 
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA); 
   Print("Параметр AsSeries = ",AsSeries); 
   Print("Индикаторный буфер после SetIndexBuffer() является таймсерией = ", 
         ArrayGetAsSeries(MABuffer)); 
//--- set short indicator name 
   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries); 
//--- set AsSeries (depends on input parameter) 
   ArraySetAsSeries(MABuffer,AsSeries); 
   Print("Индикаторный буфер после ArraySetAsSeries(MABuffer,true); является таймсерией = ", 
         ArrayGetAsSeries(MABuffer)); 
//--- 
   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price); 
   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[]) 
  { 
//--- check if all data calculated 
   if(BarsCalculated(ma_handle)<rates_total) return(0); 
//--- we can copy not all data 
   int to_copy; 
   if(prev_calculated>rates_total || prev_calculated<=0) to_copy=rates_total; 
   else 
     { 
      to_copy=rates_total-prev_calculated; 
      //--- last value is always copied 
      to_copy++; 
     } 
//--- try to copy 
   if(CopyBuffer(ma_handle,0,0,to_copy,MABuffer)<=0) return(0); 
//--- return value of prev_calculated for next call 
   return(rates_total); 
  } 
//+------------------------------------------------------------------+
 

ist ganz und gar nicht richtig.

Oder habe ich etwas missverstanden?

Warum falsch? Weil im Beispiel zur Funktion


Kopierpuffer

und verwenden

 

Alexey Viktorov #:


Oder habe ich etwas missverstanden?

Der Zweck des Skripts ist es, jedes Instrument in der Market Watch auf Zeitrahmen von 1min bis 4H durchzugehen, um den Preis über dem MA200 zu finden und wenn diese Tatsache entdeckt wird, einen Alarm mit dem Namen des Symbols mit dem Preis über dem MA auf allen 6 Zeitrahmen zu erzeugen.

 
Artyom Trishkin #:

Es gibt eine Menge Dinge, die nicht stimmen.

Seien Sie etwas genauer, wenn es Ihnen nichts ausmacht)

 
Kira27 #:

Seien Sie etwas genauer, wenn es Ihnen nichts ausmacht)

Array-Indizierung ist einfach nur gruselig... Kopieren der gleichen Daten in einer Schleife... Erstellen neuer Griffe in einer Schleife - ohne Worte...

Den Rest will ich mir gar nicht erst ansehen, sorry

 
Artyom Trishkin #:

Array-Indizierung ist einfach nur gruselig... Kopieren der gleichen Daten in einer Schleife... Erstellen neuer Griffe in einer Schleife - ohne Worte...

Den Rest des Codes will ich mir gar nicht erst ansehen, sorry

Ich verstehe die Indizierung von Arrays nicht, welche Arrays mögen Sie nicht? Die Daten in Zeile 43 der CopyBuffer-Funktion kopieren Handles auf verschiedenen Zeitrahmen, von 1 Minute bis 4H. 5 MA-Indikatorpreise werden kopiert, für die ersten 5 Bars, und sowohl Handle als auch Array mit 5 Bars werden bei jeder Iteration auf Null gesetzt

ArrayFree(bufer_MA);


und der Griff wird gelöscht.

 IndicatorRelease(MA200); //Удаление хендла

Wenn Sie einen Algorithmus für die Handhabung von 274 Symbolen und jedes von ihnen auf 6 Zeitrahmen auf eine andere Art und Weise vorschlagen können, würde ich mich freuen. Es ist nur so, dass der Thread irgendwie heißt - Fragen von Anfängern. Wenn ich ein Profi wäre, hätte ich wahrscheinlich keine Fragen.

 

dieErstellung von Handles in verschiedenen Situationen scheint nicht kostspielig zu sein, es ist nur ein Zeiger ohne Vorladen? die Hauptarbeit wird mit CopyBuffer erledigt

Es ist nicht notwendig, das Handle in der Schleife zu entfernen, Sie müssen es vielleicht überprüfen. Ich persönlich habe das Problem nur bei der Erstellung des ersten Diagramms; es wird durch Sleep() zum Laden eines Diagramms oder die Funktion zum Vorladen von Kursen gelöst

die Entwickler hätten es selbst entscheiden sollen, die Geschwindigkeit ist bei OnInit nicht wichtig, ich meinte den ersten Indikator mit 7 Symbolen, der Fehler tritt immer bei verschiedenen Iterationen auf

----------

Wie funktioniert das Anlegen eines Handles, ist es in einer speziellen Schleife notwendig, die Verfügbarkeit zu prüfen, oder genügt ein weiteres Anlegen (d.h. Überschreiben)?

 
Fast235 #:

dieErstellung von Handles in verschiedenen Situationen scheint nicht kostspielig zu sein, es ist nur ein Zeiger ohne Vorladen? die Hauptarbeit wird mit CopyBuffer erledigt

Es ist nicht notwendig, das Handle in der Schleife zu entfernen, Sie müssen es vielleicht überprüfen. Ich persönlich habe das Problem nur bei der Erstellung des ersten Diagramms; es wird durch Sleep() zum Laden eines Diagramms oder die Funktion zum Vorladen von Kursen gelöst

die Entwickler hätten es selbst entscheiden sollen, die Geschwindigkeit ist bei OnInit nicht wichtig, ich meinte den ersten Indikator mit 7 Symbolen, der Fehler tritt immer bei verschiedenen Iterationen auf

----------

Wie funktioniert die Erstellung eines Handles, ist es in einer speziellen Schleife notwendig, die Verfügbarkeit zu prüfen, oder reicht eine weitere Erstellung aus (d.h. Überschreiben)?

Sprechen Sie mit mir oder ist das eine Frage für lokale Experten?)

 
Kira27 #:

Sprechen Sie mit mir, oder ist das eine Frage für die Experten hier?)

Über das Erstellen und Entfernen von Griffen,

Es funktioniert, ich interessiere mich für den richtigen Weg, ich hoffe, die Entwickler werden es mir sagen.