Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 196 1...189190191192193194195196197198199200201202203...262 Novo comentário Vladimir Karputov 2020.02.01 18:42 #1951 Vitaly Muzichenko: Este é o layout, não há diferença entre 4 e 5 O cabo deve ser criado uma vez no OnInit(), não a cada passo. Você ainda não sabe disso? Vitaly Muzichenko 2020.02.01 18:51 #1952 apagado, precisa pensar sobre isso. Vladimir Karputov 2020.02.01 18:55 #1953 Vitaly Muzichenko: Que tal isso? E assim você ainda cria um cabo em cada tic-tac. Use o Styler e você verá os erros lógicos imediatamente: //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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: Mas você ainda está criando um cabo em cada carrapato. Use o Styler e você verá os erros lógicos imediatamente: Assim 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 } Então o resto do código de busca de picos é cruzado Vladimir Karputov 2020.02.01 19:07 #1955 Vitaly Muzichenko: Eu acho que sim. Então o resto do código de busca de picos é cruzado Sim, é... //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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 } claramente melhor. Mas este bloco está fora de lugar - ele deve ser colocado imediatamente após a criação do cabo. Vitaly Muzichenko 2020.02.01 19:12 #1956 Vladimir Karputov: Sim, agora claramente melhor. Mas este bloco está no lugar errado - ele deve ser colocado imediatamente após a criação do cabo. A melhor maneira é provavelmente assim, imprimirá um erro de criação uma vez, mas então haverá menos cheques para se(...) 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: A melhor maneira é provavelmente assim, imprimirá um erro de criação uma vez, mas então haverá menos checagens no if(...). Não consigo ver nada em sua confusão - tudo isso está embaçado. Use o Styler. Vitaly Muzichenko 2020.02.01 19:23 #1958 Vladimir Karputov: Não consigo ver nada em sua confusão - tudo se mistura. Use o Styler. Se alguma coisa, eu não vi meu estilo no modelador, e há oh tantos deles Arquivos anexados: cc.PNG 100 kb GlaVredFX 2020.02.01 19:51 #1959 Infelizmente, meu indexador é baseado na MQL4 e esta função é apenas uma pequena parte dela. É por isso que não é tão eficiente implementar a MQL5, e seria longo e problemático reescrever tudo isso. Artyom Trishkin 2020.02.01 19:52 #1960 GlaVredFX: Infelizmente, meu indexador é baseado na MQL4 e esta função é apenas uma pequena parte dela. É por isso que não é tão eficiente implementar a MQL5, e seria longo e problemático reescrever tudo isso. Um indicador é reescrito em MQL5 em média em meia hora. Com uma xícara de café. 1...189190191192193194195196197198199200201202203...262 Novo comentário
Este é o layout, não há diferença entre 4 e 5
O cabo deve ser criado uma vez no OnInit(), não a cada passo. Você ainda não sabe disso?
Que tal isso?
E assim você ainda cria um cabo em cada tic-tac. Use o Styler e você verá os erros lógicos imediatamente:
Mas você ainda está criando um cabo em cada carrapato. Use o Styler e você verá os erros lógicos imediatamente:
Assim
Então o resto do código de busca de picos é cruzadoEu acho que sim.
Então o resto do código de busca de picos é cruzadoSim, é...
claramente melhor. Mas este bloco está fora de lugar - ele deve ser colocado imediatamente após a criação do cabo.
Sim, agora
claramente melhor. Mas este bloco está no lugar errado - ele deve ser colocado imediatamente após a criação do cabo.
A melhor maneira é provavelmente assim, imprimirá um erro de criação uma vez, mas então haverá menos cheques para se(...)
A melhor maneira é provavelmente assim, imprimirá um erro de criação uma vez, mas então haverá menos checagens no if(...).
Não consigo ver nada em sua confusão - tudo isso está embaçado.
Use o Styler.Não consigo ver nada em sua confusão - tudo se mistura.
Use o Styler.Se alguma coisa, eu não vi meu estilo no modelador, e há oh tantos deles
Infelizmente, meu indexador é baseado na MQL4 e esta função é apenas uma pequena parte dela.
É por isso que não é tão eficiente implementar a MQL5, e seria longo e problemático reescrever tudo isso.
Infelizmente, meu indexador é baseado na MQL4 e esta função é apenas uma pequena parte dela.
É por isso que não é tão eficiente implementar a MQL5, e seria longo e problemático reescrever tudo isso.
Um indicador é reescrito em MQL5 em média em meia hora. Com uma xícara de café.