Como codificar? - página 301

 

Olá, Mladen,

Obrigado pela explicação, mas o que você quer dizer com o valor das primeiras barras fechadas? É o primeiro valor de barras fechadas ou as barras atuais ou depois? E o significado de corrente+0 ou corrente+1?

A respeito de

Terrance

mladen:
Terrance

MODE_MAIN significa que você está lendo no valor da linha estocástica. MODE_SIGNAL significa que você está lendo no valor da linha de sinais estocásticos.

A partir de SHIFT : é o mesmo para todos os indcadores (mesmo os personalizados). Como exemplo : SHIFT=0 significa o valor atual das barras, SHIFT=1 significa o valor das primeiras barras fechadas e assim por diante ...
 

...

... Terrance

A barra atual ainda não é, por definição, uma barra fechada

O primeiro bar antes do bar atual é o primeiro bar fechado

tkuan77:
Olá, Mladen,

Obrigado pela explicação, mas o que você quer dizer com o valor das primeiras barras fechadas? É o primeiro valor de barras fechadas ou as barras atuais ou depois? E o significado de corrente+0 ou corrente+1?

A respeito de

Terrance
 

Olá, Mladen,

Portanto, estou certo em dizer isso:

atual+0 é o mesmo que o valor 0,

atual+1 é o mesmo que o valor 1,

atual+2 é o mesmo que o valor 2,

e assim por diante..... para SHIFT?

Por exemplo

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Atual + 1); é o mesmo que iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1);

Estou certo em dizer que sim?

Cumprimentos

Terrance

mladen:
Terrance

A barra atual ainda não é, por definição, uma barra fechada

O primeiro bar antes do bar atual é o primeiro bar fechado
 

...

... Terrance

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 0); é o atual

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1); é o primeiro fechado (anterior)

...

...

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); é o mais antigo no gráfico

PS: neste post você tem sime mais informações sobre bares : https://www.mql5.com/en/forum/173124

tkuan77:
Olá, Mladen,

Portanto, estou certo em dizer isso:

atual+0 é o mesmo que o valor 0,

atual+1 é o mesmo que o valor 1,

atual+2 é o mesmo que o valor 2,

e assim por diante..... para SHIFT?

Por exemplo

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Atual + 1); é o mesmo que iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1);

Estou certo em dizer que sim?

Cumprimentos

Terrance
 

Olá, Mladen,

Obrigado pela grande ajuda, como sempre!

Cumprimentos

Terrance

mladen:
Terrance

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 0); é o atual

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1); é o primeiro fechado (anterior)

...

...

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); é o mais antigo no gráfico

PS: neste post você tem sime mais informações sobre bares : https://www.mql5.com/en/forum/173124
 

Alguns problemas

Olá a todos,

Eu testei meu código e está quase lá. Tenho algumas perguntas com as quais espero que possam me ajudar.

Coloquei isto no int init():

if (Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)

{

Alerta ("ERRO- BARRAS INSUFICIENTES PARA CALCULAÇÃO DE SMA EM CARGA DIÁRIA");

retornar(0);

}

O período SlowMAP é de 200. Quando eu retrocedo a partir de 01.01.2009, este erro é levantado, embora eu possa ver claramente no meu gráfico que existem barras suficientes para calcular o 200SMA a partir de 2008. Estou perdendo algo aqui?

2. Eu coloco as trocas do gráfico H4, mas somente na direção da tendência diária. Eu extraio valores usando o seguinte código:

SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

Depois, quando estou procurando por uma posição longa, faço referência a ela usando-a:

if (FastMACurrent > SlowMACurrent && ... etc ... )

Isto é correto, pois não parece estar filtrando meus negócios corretamente?

3. Também utilizo um filtro de tendência no gráfico H4 tomando posições longas somente quando o preço ultrapassou a alta anterior dos últimos 120 períodos (e depois permanece acima da baixa dos 120 períodos). Eu utilizo este código:

Donchian_Low = Low (baixo);

Donchian_High = High (alto = alto);

bool estático UpTrend = FALSE;

bool estático DownTrend = FALSO;

if (Pergunte > Donchian_High) {UpTrend = VERDADEIRO; DownTrend = FALSO;}

if (Bid < Donchian_Low) {UpTrend = FALSO; DownTrend = VERDADEIRO;}

Então eu uso o seguinte código (digamos para posições longas):

if (FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ... etc ... )

Mas não parece funcionar porque quando eu comparo meu gráfico testado com um Canal Donchian de 120 Períodos, ele não amarra. Alguma idéia?

Obrigado de antemão.

 

...

1. Coloque-o no início da função start(). Init não é confiável quando se trata de dados como Barras

2. Essa condição é verdadeira sempre que FastMACurrent > SlowMACurrent. É isso que você queria ou talvez você esteja olhando para as cruzes?

3. É provavelmente em relação ao ponto 2. Você deve "estreitar" as condições quando as ordens podem ser inseridas, uma vez que desta forma cobre demasiadas posibilidades

crsnape@btinternet.com:
Olá a todos,

Eu testei meu código e está quase lá. Tenho algumas perguntas com as quais espero que possam me ajudar.

Coloquei isto no int init():

if (Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)

{

Alerta ("ERRO- BARRAS INSUFICIENTES PARA CALCULAÇÃO DE SMA EM CARGA DIÁRIA");

retornar(0);

}

O período SlowMAP é de 200. Quando eu retrocedo a partir de 01.01.2009, este erro é levantado, embora eu possa ver claramente no meu gráfico que existem barras suficientes para calcular o 200SMA a partir de 2008. Estou perdendo algo aqui?

2. Eu coloco as trocas do gráfico H4, mas somente na direção da tendência diária. Eu extraio valores usando o seguinte código:

SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

Depois, quando estou procurando por uma posição longa, faço referência a ela usando-a:

if (FastMACurrent > SlowMACurrent && ... etc ... )

Isto é correto, pois não parece estar filtrando meus negócios corretamente?

3. Também utilizo um filtro de tendência no gráfico H4 tomando posições longas somente quando o preço ultrapassou a alta anterior dos últimos 120 períodos (e depois permanece acima da baixa dos 120 períodos). Eu utilizo este código:

Donchian_Low = Low (baixo);

Donchian_High = High (alto = alto);

bool estático UpTrend = FALSE;

bool estático DownTrend = FALSO;

if (Pergunte > Donchian_High) {UpTrend = VERDADEIRO; DownTrend = FALSO;}

if (Bid < Donchian_Low) {UpTrend = FALSO; DownTrend = VERDADEIRO;}

Então eu uso o seguinte código (digamos para posições longas):

if (FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ... etc ... )

Mas não parece funcionar porque quando eu comparo meu gráfico testado com um Canal Donchian de 120 Períodos, ele não amarra. Alguma idéia?

Obrigado de antemão.
 

Oi mladen,

1. OK serve.

2. Sim, isso é certo, eu não quero entrar fora da cruz, apenas usando-o para um filtro longo/ curto nos gráficos de curto prazo, por exemplo, se o MA rápido estiver acima do MA lento no gráfico diário, eu só quero que ele considere posições longas no gráfico H4. Então eu acho que codifiquei isto corretamente?

3. Não tenho certeza se sei o que você quer dizer, mas coloquei isto por baixo do init start()

bool estático UpTrend = FALSE;

bool estático DownTrend = FALSO;

se (Pergunte > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSO; DownTrend = VERDADEIRO;}

Devo colocar as variáveis estáticas do bool logo no início para torná-las globais? Isso poderia estar causando isso?

 

...

3. O que acontece quando se pergunta a Donchian_Low (que é a maior parte do tempo). Suas variáveis estáticas ainda mostram os estados "antigos" mesmo que não seja mais válido (ele "herda" o estado e dessa forma está sinalizando que está acima ou abaixo mesmo quando não está mais). Verifique se é isso que está lhe causando problemas

crsnape@btinternet.com:
Oi mladen,

1. OK serve.

2. Sim, isso é certo, eu não quero entrar fora da cruz, apenas usando-o para um filtro longo/ curto nos gráficos de curto prazo, por exemplo, se o MA rápido estiver acima do MA lento no gráfico diário, eu só quero que ele considere posições longas no gráfico H4. Então eu acho que codifiquei isto corretamente?

3. Não tenho certeza se sei o que você quer dizer, mas coloquei isto por baixo do init start()

bool estático UpTrend = FALSE;

bool estático DownTrend = FALSO;

se (Pergunte > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSO; DownTrend = VERDADEIRO;}

Devo colocar as variáveis estáticas do bool logo no início para torná-las globais? Isso poderia estar causando isso?
 

Bem visto. Vou dar uma olhada nisso.

Uma pergunta sobre funções, é possível chamar uma função dentro de uma função? Por exemplo, eu tenho esta função:

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

se (... etc...)

Do que mais tarde eu o chamo:

duplo GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, string GetWinLossPreviousShort)