Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Mensagem DTosc...
Mladen,
Recebo uma mensagem no Expers Folder que diz: "Posição de início 10148 incorreta para a função Máxima de Array" - o indicador parece comportar-se perfeitamente.
Alguma explicação, por favor?
Agradecemos antecipadamente.
ValeoFX
Sem saber de que indicador se trata, geralmente é algo parecido com isto Encontrar onde o limite é determinado e mudá-lo para algo como isto :
O segundo parâmetro nesta expressão (Bars-1), neste caso, garante que o limite não seja maior que o número de barras no gráfico.
Mas, como você já notou, é um erro "benigno": acontecerá apenas uma vez (quando o indicador é carregado ou quando o prazo é alterado) e, ao contrário de alguns outros erros, não pára o cálculo do indicador para que todo o resto do cálculo seja feito corretamente e os valores sejam calculados corretamente
cumprimentos
mladen
Mladen,
Recebo uma mensagem no Expers Folder que diz: "Posição de início 10148 incorreta para a função Máxima de Array" - o indicador parece comportar-se perfeitamente.
Alguma explicação, por favor?
Agradecendo-lhe antecipadamente.Obrigado...
ValeoFX
Sem saber de que indicador se trata, geralmente é algo parecido com isto Encontrar onde o limite é determinado e mudá-lo para algo como isto :
O segundo parâmetro nesta expressão (Bars-1), neste caso, garante que o limite não seja maior do que o número de barras no gráfico.
Mas, como você já notou, é um erro "benigno": acontecerá apenas uma vez (quando o indicador é carregado ou quando o prazo é alterado) e, ao contrário de alguns outros erros, não pára o cálculo do indicador para que todo o resto do cálculo seja feito corretamente e os valores sejam calculados corretamente
cumprimentos
mladen======================
Desculpe Mladen, eu tinha o nome do indicador na janela "Título" (DTOsc) e não pensei em repeti-lo novamente. No entanto, obrigado pela explicação - vou olhar para ela imediatamente.
Na linha 124 eu encontrei:
limite = MathMax(limite,MathMin(Bars,iCustom(NULL,timeFrame,IndicatorFileName, "getBarsCount",0,0)*timeFrame/Period()));
Como é diferente do que você sugeriu, você se importaria de elaborar sobre o que eu deveria fazer para retificar isso, por favor?
Muito apreciado.
ValeoFX
Não prestei atenção ao subtítulo da mensagem, desculpe
De qualquer forma, se você está usando a mensagem deste post : https://www.mql5.com/en/forum/general então você está recebendo essa mensagem
Por outro lado, se você está usando a mensagem deste post: https: //www.mql5.com/en/forum/general (a mais recente), então você não vai receber essa mensagem
Não me lembro exatamente quando fiz o primeiro post, mas mudei alguns estilos de codificação desde então (daí a falta daquela mensagem de erro) e, francamente, antes não me importei muito com aquela mensagem de erro, pois ela realmente não muda nada. Depois disso, simplesmente decidi não deixar espaço para eventuais erros, daí a "verificação de segurança" ao determinar o limite
____________________________________
PS: essa linha funciona em modo multitemporal. Ela 'pergunta' ao período de tempo alvo quantas barras mudaram no período de tempo alvo a fim de poder recalcular o número exato de barras no período de tempo atual necessário. Portanto, essa linha só é eficaz quando no modo mtf
mladen,
Eu sou novo em codificação. E é difícil. Mas se eu tiver apenas o livro do CodersGuru para fazer uma EA......., não será suficiente...
ver meu post página 183
Tradefx1
Da tendência diária que você está tentando encontrar : você precisa redefini-la (reescrevê-la). Agora mesmo está escrito assim :
double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);
double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);
double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);
double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);
if (MA5_1 MA8_0) res =1;//Cross up
if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down
BarCount=Bars;
return (res);
}[/php]and you are calling it like this :
if (GetDailyTrend(2) && ...) Order = SIGNAL_SELL;
[/php]The way it is used and called now expressions GetDailyTrend(1) and GetDailyTrend(2) are always true (in metatrader any value not equal to 0 is considered a true.
_________________________
Redefine the GetDailyTrend() to something like this:
[php]int GetDailyTrend ()
{
int res = 0;
double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);
double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);
double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);
double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);
if (MA5_1 MA8_0) res =1;//Cross up
if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down
return (res);
}
And then use it this way :
[php]if (GetDailyTrend()==1 && ...) Order = SIGBNAL_BUY;
if (GetDailyTrend()==2 && ...) Order = SIGNAL_SELL;
_________________________
A partir do livro e da codificação : sempre acreditei que a melhor maneira de aprender a codificação é a partir de exemplos e programas de trabalho. Acredite ou não, mas o pessoal da Microsoft é excelente para aprender (eles escrevem o código uniformemente (o que significa que eles têm regras firmes de como o código deve ser escrito) muito limpo e estão tentando torná-lo o mais eficiente possível).
Há muitos exemplos e EAs de trabalho na seção elite que qualquer pessoa pode usar (posso recomendar este aqui https://www.mql5.com/en/forum/180383 ) por razões que já declarei nesse tópico e acho que ele pode ser facilmente usado como uma "moldura" para outros EAs. Mas também, há muitos outros EAs muito úteis que podem ser usados para aprender e fazer EAs de trabalho.
E lembre-se sempre de uma coisa: as línguas de codificação são exatamente isso: "línguas". O que significa que é uma conversa simples como qualquer outra conversa. Basta ter cuidado com o que você "diz" ao computador porque o computador, ao contrário das pessoas, não questiona o que você diz, mas simplesmente o executa (e às vezes não é o que queremos que ele faça ) E então, após algum tempo, você se acostuma a "falar" com o PC e então tudo fica muito mais fácil
Só no caso de ...
No caso de alguém estar se perguntando qual é a lógica básica por trás do indicador adxvma, aqui está um passo intermediário dele que pode ser tão útil quanto o próprio indicador. (há etapas adicionais após esta, portanto não compare os 2 indicadores, mas esta etapa parece particularmente interessante) Se parecer familiar a alguém, a resposta é "sim". Parece que é o indicador de tendência de poder (a tendência de poder "real", não as que são postadas e publicadas como tal - disso não tenho 100% de certeza (tudo que vi do "real" são fotos dele), mas com certeza se parece muito com ele).ValeoFX
Não prestei atenção ao subtítulo da mensagem, desculpe
De qualquer forma, se você está usando a mensagem deste post : https://www.mql5.com/en/forum/general então você está recebendo essa mensagem
Por outro lado, se você está usando a mensagem deste post: https: //www.mql5.com/en/forum/general (a mais recente), então você não vai receber essa mensagem
Não me lembro exatamente quando fiz o primeiro post, mas mudei alguns estilos de codificação desde então (daí a falta daquela mensagem de erro) e, francamente, antes não me importei muito com aquela mensagem de erro, pois ela realmente não muda nada. Depois disso, simplesmente decidi não deixar espaço para eventuais erros, daí a "verificação de segurança" ao determinar o limite
____________________________________
PS: essa linha funciona em modo multitemporal. Ela 'pergunta' ao período de tempo alvo quantas barras mudaram no período de tempo alvo a fim de poder recalcular o número exato de barras no período de tempo atual necessário. Portanto, essa linha só é eficaz quando no modo mtf=========================================================
Muito obrigado pela explicação. Muito apreciado e também por me ajudar a entender melhor a codificação.
Vou baixar a segunda imediatamente.
Os melhores votos.
adxvma
mladen,
Estaria eu fora de linha para lhe pedir para postar a versão Tradestation?
Ray
Pessoal, notei uma coisa ilógica no indicador (o primeiro passo é como a parte adx é calculada) e parece que há um erro no indicador que herdei sem pensar nisso . Neles, esse erro é corrigido. Mesmo os resultados são melhores desta forma. Este cálculo é muito mais próximo ao da seção pública (portanto o da seção pública é um indicador bastante correto) com código muito mais rápido em 99% do tempo e extras que são específicos apenas para estes postados na seção de elite. Portanto, se você baixou os indicadores de posts anteriores, por favor, use estes em seu lugar. Também adicionamos mais uma opção à versão "regular": MultiColorMode- se definido como falso, apenas uma cor será usada para exibir adxvma (útil se quiser usar um par de adxvma para verificar se há cruzes como sinais).
cumprimentos
MladenRay,
Aqui está. O indicador :
Price (close),
length (14);
vars:
av (0);
av = ADXVMA(Price, length);
Plot1(av, "Rising");
Plot2(av, "Falling");
Plot3(av, "Neutral");
Plot4(av, "ADXVMA", iff(av = av[1], GetPlotColor(3), iff(av > av[1], GetPlotColor(1), GetPlotColor(2))));
NoPlot(1);
NoPlot(2);
NoPlot(3); [/php]and the adxvma function
[php]inputs:
Price (NumericSeries),
Length (NumericSimple);
vars:
TR(0),
DI_Diff(0),
DI_Sum(0),
ma(0),
pdm(0),
mdm(0),
pdi(0),
mdi(0),
DI_Factor(0),
VI(0),
diff(0),
HHV(0),
LLV(0),
WeightDM(Length),
WeightDI(Length),
WeightDX(Length),
ChandeEMA(Length),
out(0),
j(0);
once ma=Price;
//
// in order to make it right the "pdm=0; mdm=0;" must be added (it does not
// exist in original and that is an error, tradestation inherits values fom
// a previous loop and they must be zeroed before these calculations)
//
pdm=0; mdm=0;
if(Price>Price[1]) then pdm=Price-Price[1] else mdm=Price[1]-Price;
pdm=((WeightDM-1)*pdm[1] + pdm)/WeightDM;
mdm=((WeightDM-1)*mdm[1] + mdm)/WeightDM;
TR=pdm+mdm;
if (TR>0) then begin pdi=pdm/TR; mdi=mdm/TR; endelse begin
pdi=0;
mdi=0;
end;
pdi=((WeightDI-1)*pdi[1] + pdi)/WeightDI;
mdi=((WeightDI-1)*mdi[1] + mdi)/WeightDI;
DI_Diff=pdi-mdi;
if (DI_Diff<0) then DI_Diff= -DI_Diff;
DI_Sum=pdi+mdi;
DI_Factor=0;
if (DI_Sum>0) then out=DI_Diff/DI_Sum else out=0;
out=((WeightDX-1)*out[1] + out)/WeightDX;
if (out>out[1]) then begin HHV=out; LLV=out[1]; end
else begin
HHV=out[1];
LLV=out;
end;
for j = 1 to Length-1 begin
if(out[j+1]>HHV)then HHV=out[j+1];
if(out[j+1]<LLV) then LLV=out[j+1];
end;
diff = HHV - LLV;
VI=0;
if (diff>0) then VI=(out-LLV)/diff;
ma=((ChandeEMA-VI)*ma[1]+VI*Price)/ChandeEMA;
ADXVMA = ma;
Comentário adicionado e uma correção de código que não existia no original (esta é a única mudança que fiz nele). Alguns dos nomes das variáveis são enganosos: não há cálculo de EMA em nenhuma das etapas. Essa é uma média móvel suavizada usada nas etapas intermediárias de suavização, não EMA. Você também notará que mesmo que a lógica básica de cálculo seja de ADX, na verdade não é um ADX, mas está perto o suficiente para merecer o nome no caso deste indicador "híbrido".
cumprimentos
Mladen
mladen,
Estaria eu fora de linha para lhe pedir para postar a versão Tradestation?
Ray