Ajuda na codificação - página 239

 

Hi,

modifiquei o indicador padrão stepMA 9 neste em janela separada como histograma, mas não sei por que os sinais de compra não são sincronizados com o indicador padrão (os sinais de venda são). Com o novo eles ocorrem uma barra para trás do que o indicador original. Por que? Modifiquei apenas a parte do código que determina o aspecto gráfico do indicador.

stepma_9_histo_mtf.mq4

stepma_9.0.mq4

Arquivos anexados:
 
thefxpros:
Hi,

modifiquei o indicador padrão stepMA 9 neste em janela separada como histograma, mas não sei por que os sinais de compra não são sincronizados com o indicador padrão (os sinais de venda são). Com o novo eles ocorrem uma barra para trás do que o indicador original. Por que? Modifiquei apenas a parte do código que determina o aspecto gráfico do indicador.

stepma_9_histo_mtf.mq4

stepma_9.0.mq4

thefxpros

Isso é o resultado de como as linhas são traçadas.

Quando se desenha uma linha, é preciso começar a traçar a linha 1 compasso para torná-la visível (caso contrário, seria um ponto e não seria visível no gráfico). Experimente estas duas e compare-as agora

Arquivos anexados:
 

Hi,

Tenho procurado uma EA que abrisse um comércio de maneira semelhante à de uma parada de trilha que funcionaria.

Digamos que estou esperando por um retrocesso em um instrumento. Eu gostaria de abrir meu comércio da forma mais alta (ou baixa) possível no preço. Assim, com um EA como este, eu seria capaz de definir meus parâmetros comerciais e este EA continuará seguindo o preço de forma semelhante a uma parada móvel. Quando há uma inversão, o comércio é atingido e aberto.

Você já viu um EA como este?

Obrigado

 

Olá a todos

eu tento fazer código, mas por que não posso abrir o comércio

int varCurrentTime = TimeCurrent();

for (int iTS = 0; iTS < 2000; iTS++) {

int varZonStart = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "00:00");

int varZonEnd = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "10:00");

int JamStart=TimeHour(varZonStart);

int JamEnd=TimeHour(varZonEnd);

if (JamStart>JamEnd) {

varCurrentTime = decDateTradeDay(varCurrentTime);

//if (TimeDayOfWeek(varCurTime) < 1) varCurTime = decDateTradeDay(varCurTime);

if (TimeDayOfWeek(varCurrentTime) > 5) varCurrentTime = decDateTradeDay(varCurrentTime);

}

varZonStart = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "00:00");

int varShiftStart = iBarShift(NULL, 0, varZonStart - 60 * Period());

int varShiftEnd = iBarShift(NULL, 0, varZonEnd);

varHighest = High;

varLowest = Low;

varCurrentTime = decDateTradeDay(varCurrentTime); //set 1 hari kebelakang

if (TimeDayOfWeek(varCurrentTime) < 1) varCurrentTime = decDateTradeDay(varCurrentTime); //jika minggu mundur lagi

if (TimeDayOfWeek(varCurrentTime) > 5) varCurrentTime = decDateTradeDay(varCurrentTime); //jika sabtu mundur lagi

}

for (int iTSh = 0; iTSh < 2000; iTSh++) {

for (int iTSl = 0; iTSl < 2000; iTSl++) {

if(((varHighest-varLowest)/Pip)<=5) varHL=(varHighest+varLowest)/2;

}

}

double isg10a = iOpen(Symbol(),PERIOD_M15,1);

double isg10b = iClose(Symbol(),PERIOD_M15,1);

int static isg10c = -1;

for (iTS = 0; iTS < 2000; iTS++) {

if(isg10avarHL)isg10c =0;

if(isg10a>varHL&&isg10b<varHL)isg10c =1;

}

if (isg10c==0) To code Buy

else if (isg10c==1) To code Sel

else no trade

 
mladen:
JimEm vez de reescrever tudo isso, acrescentou um limite para calcular as barras e então todas essas barras são recalculadas. Isso deve resolver o problema refrescante (os tomates mantêm o BarsTocalculate em algum valor razoável - não muito grande nem muito pequeno. Eu usei 1000 como padrão e parece estar tudo bem assim). Experimente-o

Prezado mladen,

muito obrigado por seu esforço e por sua ajuda muito rápida.

Vou tentar.

Muito obrigado de Munique

 

Por favor, ajude-me a atualizar este indicador de volume para anexar no meu mt4

Olá gurus, por favor, me ajude a corrigir os erros neste indicador de volume. Acabei de notar que não foi possível anexá-lo ao meu gráfico mt4 recentemente. Fiz todo o possível para consertar os erros no arquivo, mas em vão. Suspeito que seja por causa da enorme atualização do mt4. Todos os outros indicadores em minha pasta mt4, tanto as versões mais antigas quanto as mais novas, estão funcionando bem. Estava funcionando há um ano atrás eu o usei pela última vez. Ainda não sou um programador.

Por favor, encontre o arquivo anexo

Arquivos anexados:
 

Olá MLaden e Mrtools,

Espero que você esteja bem

Preciso de uma confirmação sua sobre a RSX

Vejo que você usa uma fórmula mais simples para calcular a RSX :

__________________________

duplo Kg = (3,0)/(2,0+Comprimento);

duplo Hg = 1,0-Kg;

if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);

if (ArrayRange(wrkBuffer,0) != Barras) ArrayResize(wrkBuffer,Bars);

for(i=limit, r=Bars-i-1; i>=0; i--, r++)

{

wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Preço,i);

if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continue; }

//

//

//

//

//

double mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

double moa = MathAbs(mãe);

para (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; mãe = 1,5*wrkBuffer[r][kk+0] - 0,5 * wrkBuffer[r][kk+1];

wrkBuffer[r][kk+6] = Kg*moa + Hg*wrkBuffer[r-1][kk+6];

wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; moa = 1,5*wrkBuffer[r][kk+6] - 0,5 * wrkBuffer[r][kk+7];

}

se (moa != 0)

rsx = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00);

caso contrário rsx = 50;

____________________________________

Só para ter certeza de entender como a RSX é calculada com esta fórmula

Primeiro com a linha:

mãe = wrkBuffer[r][12]-wrkBuffer[r-1][12];

na verdade wrkBuffer[r][12] é a média móvel simples do preço, note o preço como com um RSI usual ?

Certo ? Mas eu não entendo qual é o período deste SMA (Provavelmente não é o período de duração) ?

E depois, se eu tiver entendido bem com as linhas:

para (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1];

mãe = 1,5*wrkBuffer[r][kk+0] - 0,5 * wrkBuffer[r][kk+1];

Na verdade, calcula 3 vezes a mãe (uma após a outra), com a primeira mãe acima (mãe = wrkBuffer[r][12]-wrkBuffer[r-1][12];)

É correto?

E depois disto é "clássico" com RSX=((mom/moa)+1)*50

Obrigado por sua próxima resposta, como codificador (em outra forma de placa), você sabe que eu gosto de entender como os códigos funcionam

Tenha um belo dia

Zilliq

 
zilliq:
Olá MLaden e Mrtools,

Espero que você esteja bem

Preciso de uma confirmação sua sobre a RSX

Vejo que você usa uma fórmula mais simples para calcular a RSX :

__________________________

duplo Kg = (3,0)/(2,0+Comprimento);

duplo Hg = 1,0-Kg;

if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);

if (ArrayRange(wrkBuffer,0) != Barras) ArrayResize(wrkBuffer,Bars);

for(i=limit, r=Bars-i-1; i>=0; i--, r++)

{

wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Preço,i);

if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continue; }

//

//

//

//

//

double mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

double moa = MathAbs(mãe);

para (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; mãe = 1,5*wrkBuffer[r][kk+0] - 0,5 * wrkBuffer[r][kk+1];

wrkBuffer[r][kk+6] = Kg*moa + Hg*wrkBuffer[r-1][kk+6];

wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; moa = 1,5*wrkBuffer[r][kk+6] - 0,5 * wrkBuffer[r][kk+7];

}

se (moa != 0)

rsx = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00);

caso contrário rsx = 50;

____________________________________

Só para ter certeza de entender como a RSX é calculada com esta fórmula

Primeiro com a linha:

mãe = wrkBuffer[r][12]-wrkBuffer[r-1][12];

na verdade wrkBuffer[r][12] é a média móvel simples do preço, note o preço como com um RSI usual ?

Certo ? Mas eu não entendo qual é o período deste SMA (Provavelmente não é o período de duração) ?

E depois, se eu tiver entendido bem com as linhas:

para (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1];

mãe = 1,5*wrkBuffer[r][kk+0] - 0,5 * wrkBuffer[r][kk+1];

Na verdade, calcula 3 vezes a mãe (uma após a outra), com a primeira mãe acima (mãe = wrkBuffer[r][12]-wrkBuffer[r-1][12];)

É correto?

E depois disto é "clássico" com RSX=((mom/moa)+1)*50

Obrigado por sua próxima resposta, como codificador (em outra forma de placa), você sabe que eu gosto de entender como os códigos funcionam

Tenha um belo dia

Zilliq

"na verdade, wrkBuffer[r][12] é a média móvel simples do preço, note o preço como com um RSI usual" ?

Não. O período de cálculo para essa média é 1, o que significa que ela é igual ao preço da "média" utilizada. No metatader essa é a maneira mais rápida de obter o preço desejado (se você tentar escrever a estrutura "case" fazendo essa mesma coisa você verá que é muito mais lento do que a maneira usada no código rsx)

"Na verdade, calcula 3 vezes a mãe (uma após a outra), com a primeira mãe acima".

Não. Veja quais valores ela está usando em cada nova iteração. mãe e moa são constantemente alterados e reutilizados (nessa forma alterada) durante o processo de looping

 

Muito obrigado, Mladen,

É muito estranho, se bem entendi que o wrkBuffer[r][12] é igual ao preço, mas você usa uma média móvel com um período de 1 para acelerar o cálculo. Isso é tão curioso...

Para a segunda coisa, acho/suponha que é isso que eu tento dizer

calcula a mãe como uma dinâmica de preço

E calcula outra mãe com Kg e Hg. Ele dá uma nova mãe, que está acostumada a criar uma nova mãe, e assim por diante, 3 vezes

Algo "mais fácil" (para facilitar o não-destrutivo) como isso

mãe

mom1=kg*momãe

mom2=kg*mom1

mom3=kg*mom2

E no final usa mom3, e moa3

Eu estou certo ?

 
zilliq:
Muito obrigado, Mladen,

É muito estranho, se bem entendi que o wrkBuffer[r][12] é igual ao preço, mas você usa uma média móvel com um período de 1 para acelerar o cálculo. Isso é tão curioso...

Para a segunda coisa, acho/suponha que é isso que eu tento dizer

calcula a mãe como uma dinâmica de preço

E calcula outra mãe com Kg e Hg. Ele dá uma nova mãe, que está acostumada a criar uma nova mãe, e assim por diante, 3 vezes

Algo "mais fácil" (para facilitar o não-destrutivo) como isso

mãe

mom1=kg*momãe

mom2=kg*mom1

mom3=kg*mom2

E no final usa mom3, e moa3

Eu estou certo ?

Zilliq,

sim, é assim que se faz

Razão: