Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 196 1...189190191192193194195196197198199200201202203...261 Nuovo commento Vladimir Karputov 2020.02.01 18:42 #1951 Vitaly Muzichenko: Questo è il layout, non c'è differenza tra il 4 e il 5 L'handle dovrebbe essere creato una volta sola a OnInit(), non ad ogni passo. Ancora non lo sai? Vitaly Muzichenko 2020.02.01 18:51 #1952 cancellato, ho bisogno di pensarci. Vladimir Karputov 2020.02.01 18:55 #1953 Vitaly Muzichenko: Che ne dite di questo? E in questo modo si crea ancora una maniglia su ogni tick. Usate lo Styler e vedrete immediatamente gli errori di logica: //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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: Ma state comunque creando una maniglia su ogni tick. Usate lo Styler e vedrete immediatamente gli errori di logica: Come questo 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 } Poi il resto del codice di ricerca del picco è multipiattaforma Vladimir Karputov 2020.02.01 19:07 #1955 Vitaly Muzichenko: Credo di sì. Poi il resto del codice di ricerca del picco è multipiattaforma Sì, è... //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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 } chiaramente meglio. Ma questo blocco è fuori posto - dovrebbe essere messo immediatamente dopo la creazione del gestore. Vitaly Muzichenko 2020.02.01 19:12 #1956 Vladimir Karputov: Sì, ora chiaramente meglio. Ma questo blocco è nel posto sbagliato - dovrebbe essere messo subito dopo la creazione della maniglia. Il modo migliore è probabilmente questo, stamperà un errore di creazione una volta, ma poi ci saranno meno controlli per 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: Il modo migliore è probabilmente questo, stamperà un errore di creazione una volta, ma poi ci saranno meno controlli su if(...). Non riesco a vedere nulla nel tuo disordine - è tutto sfocato. Usa lo Styler. Vitaly Muzichenko 2020.02.01 19:23 #1958 Vladimir Karputov: Non riesco a vedere nulla nel tuo disordine - tutto si confonde. Usa lo Styler. Semmai, non ho visto il mio stile nello styler, e ce ne sono oh così tanti File: cc.PNG 100 kb GlaVredFX 2020.02.01 19:51 #1959 Purtroppo, il mio indicizzatore è basato su MQL4 e questa funzione è solo una piccola parte di esso. Ecco perché non è così efficiente implementare MQL5, e sarebbe lungo e problematico riscrivere il tutto. Artyom Trishkin 2020.02.01 19:52 #1960 GlaVredFX: Purtroppo, il mio indicizzatore è basato su MQL4 e questa funzione è solo una piccola parte di esso. Ecco perché non è così efficiente implementare MQL5, e sarebbe lungo e problematico riscrivere il tutto. Un indicatore viene riscritto in MQL5 in media in mezz'ora. Con una tazza di caffè. 1...189190191192193194195196197198199200201202203...261 Nuovo commento
Questo è il layout, non c'è differenza tra il 4 e il 5
L'handle dovrebbe essere creato una volta sola a OnInit(), non ad ogni passo. Ancora non lo sai?
Che ne dite di questo?
E in questo modo si crea ancora una maniglia su ogni tick. Usate lo Styler e vedrete immediatamente gli errori di logica:
Ma state comunque creando una maniglia su ogni tick. Usate lo Styler e vedrete immediatamente gli errori di logica:
Come questo
Poi il resto del codice di ricerca del picco è multipiattaformaCredo di sì.
Poi il resto del codice di ricerca del picco è multipiattaformaSì, è...
chiaramente meglio. Ma questo blocco è fuori posto - dovrebbe essere messo immediatamente dopo la creazione del gestore.
Sì, ora
chiaramente meglio. Ma questo blocco è nel posto sbagliato - dovrebbe essere messo subito dopo la creazione della maniglia.
Il modo migliore è probabilmente questo, stamperà un errore di creazione una volta, ma poi ci saranno meno controlli per if(...)
Il modo migliore è probabilmente questo, stamperà un errore di creazione una volta, ma poi ci saranno meno controlli su if(...).
Non riesco a vedere nulla nel tuo disordine - è tutto sfocato.
Usa lo Styler.Non riesco a vedere nulla nel tuo disordine - tutto si confonde.
Usa lo Styler.Semmai, non ho visto il mio stile nello styler, e ce ne sono oh così tanti
Purtroppo, il mio indicizzatore è basato su MQL4 e questa funzione è solo una piccola parte di esso.
Ecco perché non è così efficiente implementare MQL5, e sarebbe lungo e problematico riscrivere il tutto.
Purtroppo, il mio indicizzatore è basato su MQL4 e questa funzione è solo una piccola parte di esso.
Ecco perché non è così efficiente implementare MQL5, e sarebbe lungo e problematico riscrivere il tutto.
Un indicatore viene riscritto in MQL5 in media in mezz'ora. Con una tazza di caffè.