Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 196 1...189190191192193194195196197198199200201202203...262 Neuer Kommentar Vladimir Karputov 2020.02.01 18:42 #1951 Vitaly Muzichenko: Dies ist das Layout, es gibt keinen Unterschied zwischen 4 und 5 Das Handle sollte einmal bei OnInit() erstellt werden, nicht bei jedem Schritt. Sie wissen das immer noch nicht? Vitaly Muzichenko 2020.02.01 18:51 #1952 gelöscht, muss darüber nachdenken. Vladimir Karputov 2020.02.01 18:55 #1953 Vitaly Muzichenko: Wie wäre es damit? Und auf diese Weise schaffen Sie immer noch einen Griff für jeden Tick. Verwenden Sie den Styler und Sie werden die Logikfehler sofort sehen: //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double MA(string symb,ENUM_TIMEFRAMES tf,int period,int ma_shift, ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int index) { #ifdef __MQL4__ return(iMA(symb,tf,period,ma_shift,method,price,index)); #else double buf[1]; static int hMA=-1; int handle=iMA(symb,tf,period,ma_shift,method,price); if(handle<hMA) { PrintFormat("Failed to create handle MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } hMA=handle; return(buf[0]); #endif } Vitaly Muzichenko 2020.02.01 19:04 #1954 Vladimir Karputov: Aber Sie erstellen immer noch einen Griff für jeden Tick. Verwenden Sie den Styler und Sie werden die Logikfehler sofort sehen: Wie diese double MA(string symb,ENUM_TIMEFRAMES tf,int period,int ma_shift, ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int index) { #ifdef __MQL4__ return(iMA(symb,tf,period,ma_shift,method,price,index)); #else double buf[1]; static int handle=-1; if(handle<0) { handle=iMA(symb,tf,period,ma_shift,method,price); } if(handle<0) { PrintFormat("Failed to create handle MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } return(buf[0]); #endif } Der Rest des Peak-Suchcodes ist plattformübergreifend Vladimir Karputov 2020.02.01 19:07 #1955 Vitaly Muzichenko: Ich glaube schon. Der Rest des Peak-Suchcodes ist plattformübergreifend Ja, es ist... //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double MA(string symb,ENUM_TIMEFRAMES tf,int period,int ma_shift, ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int index) { #ifdef __MQL4__ return(iMA(symb,tf,period,ma_shift,method,price,index)); #else double buf[1]; static int handle=-1; if(handle<0) { handle=iMA(symb,tf,period,ma_shift,method,price); } if(handle<0) { PrintFormat("Failed to create handle MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } return(buf[0]); #endif } eindeutig besser. Dieser Block ist jedoch fehl am Platz - er sollte unmittelbar nach der Erstellung des Griffs platziert werden. Vitaly Muzichenko 2020.02.01 19:12 #1956 Vladimir Karputov: Ja, jetzt eindeutig besser. Dieser Block befindet sich jedoch an der falschen Stelle - er sollte unmittelbar nach der Erstellung des Griffs platziert werden. Der beste Weg ist wahrscheinlich wie folgt, es wird einmal ein Erstellungsfehler ausgegeben, aber dann gibt es weniger Prüfungen für if(...) double MA(string symb,ENUM_TIMEFRAMES tf,int period,int ma_shift, ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int index) { #ifdef __MQL4__ return(iMA(symb,tf,period,ma_shift,method,price,index)); #else double buf[1]; static int handle=-1; if(handle<0) { handle=iMA(symb,tf,period,ma_shift,method,price); PrintFormat("Failed to create handle MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator MA %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } return(buf[0]); #endif } Vladimir Karputov 2020.02.01 19:17 #1957 Vitaly Muzichenko: Der beste Weg ist wahrscheinlich so, es wird einmal ein Erstellungsfehler ausgegeben, aber dann gibt es weniger Prüfungen auf if(...). Ich kann in deinem Chaos nichts sehen - alles verschwimmt. Verwenden Sie den Styler. Vitaly Muzichenko 2020.02.01 19:23 #1958 Vladimir Karputov: Ich kann in deinem Brei nichts erkennen - alles ist wie aus einem Guss. Verwenden Sie den Styler. Wenn überhaupt, dann habe ich meinen Stil nicht im Styler gesehen, und davon gibt es ja so viele Dateien: cc.PNG 100 kb GlaVredFX 2020.02.01 19:51 #1959 Leider basiert mein Indexer auf MQL4 und diese Funktion ist nur ein kleiner Teil davon. Aus diesem Grund ist es nicht so effizient, MQL5 zu implementieren, und es wäre langwierig und problematisch, das Ganze neu zu schreiben. Fragen von Neueinsteigern zu [WARNUNG GESCHLOSSEN!] Alle Fragen OOP vs. prozedurale Programmierung Artyom Trishkin 2020.02.01 19:52 #1960 GlaVredFX: Leider basiert mein Indexer auf MQL4 und diese Funktion ist nur ein kleiner Teil davon. Aus diesem Grund ist es nicht so effizient, MQL5 zu implementieren, und es wäre langwierig und problematisch, das Ganze neu zu schreiben. Ein Indikator wird in MQL5 im Durchschnitt in einer halben Stunde neu geschrieben. Mit einer Tasse Kaffee. 1...189190191192193194195196197198199200201202203...262 Neuer Kommentar
Dies ist das Layout, es gibt keinen Unterschied zwischen 4 und 5
Das Handle sollte einmal bei OnInit() erstellt werden, nicht bei jedem Schritt. Sie wissen das immer noch nicht?
Wie wäre es damit?
Und auf diese Weise schaffen Sie immer noch einen Griff für jeden Tick. Verwenden Sie den Styler und Sie werden die Logikfehler sofort sehen:
Aber Sie erstellen immer noch einen Griff für jeden Tick. Verwenden Sie den Styler und Sie werden die Logikfehler sofort sehen:
Wie diese
Der Rest des Peak-Suchcodes ist plattformübergreifendIch glaube schon.
Der Rest des Peak-Suchcodes ist plattformübergreifendJa, es ist...
eindeutig besser. Dieser Block ist jedoch fehl am Platz - er sollte unmittelbar nach der Erstellung des Griffs platziert werden.
Ja, jetzt
eindeutig besser. Dieser Block befindet sich jedoch an der falschen Stelle - er sollte unmittelbar nach der Erstellung des Griffs platziert werden.
Der beste Weg ist wahrscheinlich wie folgt, es wird einmal ein Erstellungsfehler ausgegeben, aber dann gibt es weniger Prüfungen für if(...)
Der beste Weg ist wahrscheinlich so, es wird einmal ein Erstellungsfehler ausgegeben, aber dann gibt es weniger Prüfungen auf if(...).
Ich kann in deinem Chaos nichts sehen - alles verschwimmt.
Verwenden Sie den Styler.Ich kann in deinem Brei nichts erkennen - alles ist wie aus einem Guss.
Verwenden Sie den Styler.Wenn überhaupt, dann habe ich meinen Stil nicht im Styler gesehen, und davon gibt es ja so viele
Leider basiert mein Indexer auf MQL4 und diese Funktion ist nur ein kleiner Teil davon.
Aus diesem Grund ist es nicht so effizient, MQL5 zu implementieren, und es wäre langwierig und problematisch, das Ganze neu zu schreiben.
Leider basiert mein Indexer auf MQL4 und diese Funktion ist nur ein kleiner Teil davon.
Aus diesem Grund ist es nicht so effizient, MQL5 zu implementieren, und es wäre langwierig und problematisch, das Ganze neu zu schreiben.
Ein Indikator wird in MQL5 im Durchschnitt in einer halben Stunde neu geschrieben. Mit einer Tasse Kaffee.