Por favor informe onde está o erro. Estou a obter o valor exacto, mas não posso fazer com que o valor "Obem_Pozic" seja 1,00, por isso posso calcular o lote para exibição, não o quero normalizar, apenas dá 4 casas decimais.
Estou a escrever em MQL4.
Estou a perguntar sobre a MQL4 no fórum apropriado, aqui está um A.
Deve usar DoubleToStr() para exibir valores mais precisos no ecrã.
Este par é provavelmente fornecido pelo terminal, só precisa de ser ligado. Se manualmente, então em Market Watch. E se for um adulto, deve ser feito manualmente com SymbolSelect().
Assim que tiver um erro, outros o seguirão. Os primeiros erros estão no fundo do terminal. Portanto, devemos tentar eliminar os primeiros erros e depois veremos :)
Obrigado!!! Muito bem compreendido e maravilhosamente escrito. Eu tenho SymbolSelect() na minha EA. Afixei-o com o código em pg. 53, se precisar dele, pode vê-lo. Verifiquei com a ajuda - é correcto!!! Então, se este par é fornecido pelo terminal, o que devo pensar?
Além disso, se os erros do Primeiro da linha estiverem no fundo do terminal. Porque é que as mensagens de erro da impressora e as mensagens do terminal não se alternam - não, estão agrupadas?
Talvez o terminal não esteja a comunicar o erro a partir desta função?
Aparentemente este não!!!! Ou este, mas não assim. Primeiro as mensagens do programa (impressoras) e as mensagens do terminal realmente alternam, e depois de repente - e 10-12 vezes de repente surge o próprio erro 4002!!!
Poderia dizer-me, por favor, como deve ser a impressão do período de tempo variável, pode ser digital? Vejo um, quero dizer que o número um é exibido.
///////////////////////////////////////////////////////////////////////////////////////////////////////double iMAf( string symbol, ENUM_TIMEFRAMES timeframe, int period, int mama_shift, ENUM_MA_METHOD mama_method, int applied_pricece, int shift){
Print ( " iMAfsymbol ",symbol," iMAftimeframe ",timeframe," iMAfperiod ",period," iMAfmama_shift ",mama_shift ," iMAfmama_method ",mama_method,
" iMAfapplied_pricece ", applied_pricece," iMAfshift ",shift);
MA_handle=iMA(symbol,timeframe,periodd(period),mama_shift, mama_method,applied_pricece);Sleep(2000);
//--- если не удалось создать хэндлif(MA_handle==INVALID_HANDLE)
{
//--- сообщим о неудаче и выведем номер ошибкиPrintFormat("Не удалось создать хэндл индикатора iMA для пары %s/%s, код ошибки %d",
symbol,
EnumToString(timeframe),
GetLastError()); ResetLastError();return (0.0);}
CopyBuffer( MA_handle,0,0,100,MA);
ArraySetAsSeries(MA,true);
if(shift>99) return(0);
return( (MA[shift])); }
///////////////////////////////////////////////////////////////////////////////////////////////////////
Pergunto porquê. Esta é uma função, tem uma linha com as impressões digitais. A segunda a partir do topo, em conformidade.
/////////////////////////////////////////////////////////////////////
int Distance_from_MA(string symbb)
{
double MAMA = iMAf( symbb, periodd(TFMA), periodMA, ma_shift, ma_method, applied_price, 0);
int spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD));
double point = SymbolInfoDouble(symbb,SYMBOL_POINT);
if(SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 3 || SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 5)
{spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)/10);
point = SymbolInfoDouble(symbb,SYMBOL_POINT)*10;}
if(iClose(symb,TF_Price,0)+(spread*point)+(Min_Distance_from_MA*point)<=MAMA) return(-1);
if(iClose(symb,TF_Price,0)-(Min_Distance_from_MA*point)>=MAMA) return (1);
return(0);
}
////////////////////////////////////////////////////////////////////
Note-se que utilizo outra função na linha de chamada. É utilizado para condenar o período de tempo. É assim porque o meu Conselheiro Especialista tem sido pyrivédico desde 4. Usei umabre-caixas nele. Mais tarde, só por precaução, acrescentei F a F4 prazos para a sua utilização posterior.
Dimka-novitsek: Obrigado! Deixem-me voltar a olhar para ela.
Penso ter descoberto onde poderá estar o problema. Descrevê-lo-ei agora.
A partir da imagem, pode-se ver que a EA está a funcionar em M1, timeframe===1, period===140. É correcto?
O prazo===1 valor muito provavelmente indica que o prazo===M1. Ao mesmo tempo, a entrada periodd(período) significa periodd(140). De acordo com o código, a função periodd(140) deve devolver o valor PERIOD_CURRENT. Acontece que esse períodod(140)==M1. E isso significa que a chamada iMA é assim: iMA(símbolo,M1,M1...) Não sei se é aceitável ao calcular o iMA para que o valor do segundo argumento coincida com o valor do terceiro argumento (ou seja, para que o período coincida com o período médio), mas algo me diz que está errado.
Por favor informe onde está o erro. Estou a obter o valor exacto, mas não posso fazer com que o valor "Obem_Pozic" seja 1,00, por isso posso calcular o lote para exibição, não o quero normalizar, apenas dá 4 casas decimais.
Estou a escrever em MQL4.
Estou a perguntar sobre a MQL4 no fórum apropriado, aqui está um A.
Deve usar DoubleToStr() para exibir valores mais precisos no ecrã.
Este par é provavelmente fornecido pelo terminal, só precisa de ser ligado. Se manualmente, então em Market Watch. E se for um adulto, deve ser feito manualmente com SymbolSelect().
Assim que tiver um erro, outros o seguirão. Os primeiros erros estão no fundo do terminal. Portanto, devemos tentar eliminar os primeiros erros e depois veremos :)
Obrigado!!! Muito bem compreendido e maravilhosamente escrito. Eu tenho SymbolSelect() na minha EA. Afixei-o com o código em pg. 53, se precisar dele, pode vê-lo. Verifiquei com a ajuda - é correcto!!! Então, se este par é fornecido pelo terminal, o que devo pensar?
Além disso, se os erros do Primeiro da linha estiverem no fundo do terminal. Porque é que as mensagens de erro da impressora e as mensagens do terminal não se alternam - não, estão agrupadas?
Talvez o terminal não esteja a comunicar o erro a partir desta função?
Sim, estou a ver que sim. Vamos tentar desta forma:
Obrigado!!! !!
Poderia dizer-me, por favor, como deve ser a impressão do período de tempo variável, pode ser digital? Vejo um, quero dizer que o número um é exibido.
Pergunto porquê. Esta é uma função, tem uma linha com as impressões digitais. A segunda a partir do topo, em conformidade.
Aqui está a chamada de função.
///////////////////////////////////////////////////////////////////// int Distance_from_MA(string symbb) { double MAMA = iMAf( symbb, periodd(TFMA), periodMA, ma_shift, ma_method, applied_price, 0); int spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)); double point = SymbolInfoDouble(symbb,SYMBOL_POINT); if(SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 3 || SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 5) {spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)/10); point = SymbolInfoDouble(symbb,SYMBOL_POINT)*10;} if(iClose(symb,TF_Price,0)+(spread*point)+(Min_Distance_from_MA*point)<=MAMA) return(-1); if(iClose(symb,TF_Price,0)-(Min_Distance_from_MA*point)>=MAMA) return (1); return(0); } ////////////////////////////////////////////////////////////////////Note-se que utilizo outra função na linha de chamada. É utilizado para condenar o período de tempo. É assim porque o meu Conselheiro Especialista tem sido pyrivédico desde 4. Usei umabre-caixas nele. Mais tarde, só por precaução, acrescentei F a F4 prazos para a sua utilização posterior.
E isto é o que eu vejo
Bem, logo abaixo neste código é utilizado
EnumToString(timeframe),Penso ter descoberto onde poderá estar o problema. Descrevê-lo-ei agora.
A partir da imagem, pode-se ver que a EA está a funcionar em M1, timeframe===1, period===140. É correcto?
O prazo===1 valor muito provavelmente indica que o prazo===M1. Ao mesmo tempo, a entrada periodd(período) significa periodd(140). De acordo com o código, a função periodd(140) deve devolver o valor PERIOD_CURRENT. Acontece que esse períodod(140)==M1.
E isso significa que a chamada iMA é assim: iMA(símbolo,M1,M1...) Não sei se é aceitável ao calcular o iMA para que o valor do segundo argumento coincida com o valor do terceiro argumento (ou seja, para que o período coincida com o período médio), mas algo me diz que está errado.