Como codificar? - página 300

 

Prevenir o overtrading

Olá a todos,

Eu testei meu EA usando o método de todos os ticks em um gráfico H4 usando uma cruz MACD para iniciar ordens (entre outros) e o testador de estratégia abre cerca de 200 posições nos primeiros minutos, então depois de fazer alguma leitura eu percebo que eu preciso limitar o número de negociações que ele coloca, em meu sistema ele não deve colocar mais de 1 negociação a cada 4 horas porque eu espero que a vela feche antes de usar o iMACD(.... PRICE_CLOSE...) e compensar isso por 0 para MACDMainCurrent & MACDSymbolCurrent e 1 para MACDMainPrevious & MACDSymbolPrevious.

Minhas variáveis globais são:

string hasOrderedGV = "has_ordered_GV";

string barsGV = "bars_GV";

E eu inseri este código antes de minha EA verificar as posições longas ou curtas:

//--- Determinar se o pedido já foi colocado no bloco de tempo H4

se ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars)

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barGV,Bars);

}

//--- Verificar a possibilidade de posição longa (BUY)

se (GlobalVariableGet (hasOrderedGV, false))

{

se ... (é aqui que eu realmente verifico a cruz MACD entre outros indicadores).

Então se a ordem foi aberta com sucesso:

se (Bilhete > 0)

{

GlobalVariableSet(hasOrderedGV,true);

{

se (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green);

etc., etc.

Alguém pode me dizer se eu estou fazendo isso da maneira correta? Eu não sabia se pode ter havido uma maneira mais eficiente ou precisa de fazer isso? Obrigado.

 

...

Por que você simplesmente não conta quantos pedidos sua EA já abriu e se ela já abriu um pedido, não abra um novo pedido?

Apenas uma idéia (e da maneira usual e mais simples como o número de pedidos abertos por uma EA é limitado)

crsnape@btinternet.com:
Olá a todos,

Eu testei meu EA usando o método de todos os ticks em um gráfico H4 usando uma cruz MACD para iniciar ordens (entre outros) e o testador de estratégia abre cerca de 200 posições nos primeiros minutos, então depois de fazer alguma leitura eu percebo que eu preciso limitar o número de negociações que ele coloca, em meu sistema ele não deve colocar mais de 1 negociação a cada 4 horas porque eu espero que a vela feche antes de usar o iMACD(.... PRICE_CLOSE...) e compensar isso por 0 para MACDMainCurrent & MACDSymbolCurrent e 1 para MACDMainPrevious & MACDSymbolPrevious.

Minhas variáveis globais são:

string hasOrderedGV = "has_ordered_GV";

string barsGV = "bars_GV";

E eu inseri este código antes de minha EA verificar as posições longas ou curtas:

//--- Determinar se o pedido já foi colocado no bloco de tempo H4

se ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars)

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barGV,Bars);

}

//--- Verificar a possibilidade de posição longa (BUY)

se (GlobalVariableGet (hasOrderedGV, false))

{

se ... (é aqui que eu realmente verifico a cruz MACD entre outros indicadores).

Então se a ordem foi aberta com sucesso:

se (Bilhete > 0)

{

GlobalVariableSet(hasOrderedGV,true);

{

se (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green);

etc., etc.

Alguém pode me dizer se eu estou fazendo isso da maneira correta? Eu não sabia se poderia ter havido uma maneira mais eficiente ou precisa de fazer isso? Obrigado.
 

Só porque minha EA normalmente tem várias posições abertas de uma só vez; por isso, eu não poderia usar dizer,

se (OrdensContadas > 5)

Intervalo;

Ou algo do tipo, porque não sei quantas posições estarão abertas em qualquer momento. Preciso relacionar isso com o tempo que estou pensando.

 

Estou anexando esta EA à minha conta mt4 de 5 dígitos. Mas ele não abre nenhuma negociação....

pls me ajudam

Arquivos anexados:
dipu_2.mq4  5 kb
 

Pls i need to edit dis ea to move stoploss in 3 steps

este EA já tem uma capacidade de equilíbrio, mas eu quero que este EA mova meu

de seu primeiro ponto de equilíbrio para outros +20 pips quando meu lucro chegar a

+27pips e movê-lo novamente para +40pips quando chegar a +50pips e até

mais, se possível.

Arquivos anexados:
 

Olá, Mladen,

Obrigado pela atenção! Já consegui resolvê-lo.

A propósito, você sabe o que MODE e SHIFT funcionam em iStochasticdo ou há algum lugar que forneça mais informações? Tenho estado lendo a documentação no site mql4, mas ainda não faz sentido para mim. A explicação que eles fornecem é muito breve.

Por exemplo

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Atual + 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Corrente + 1);

O que faz a corrente + 0, etc.?

Obrigado e cumprimentos

Terrance

mladen:
TerranceIsso é uma função. Coloque-a no final de sua EA e coloque chamadas a ela onde você achar apropriado verificar se um pedido já está aberto em um bar atual.
 

Olá, alguém poderia me dizer onde eu estou errado aqui, por favor? Estou recebendo código de erro ')' parâmetros errados contam na linha destacada em vermelho - mas todos os parâmetros se somam...

se ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars)

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barGV,Bars);

}

//--- Verificar a possibilidade de posição longa (BUY)

se (GlobalVariableGet (hasOrderedGV, false)) Obrigado

 

...

... 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 cada indccator (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 ...

tkuan77:
Olá, Mladen,

Obrigado pelos cabeçalhos para cima! Eu já consegui resolver isso.

A propósito, você sabe o que MODE e SHIFT funcionam em iStochasticdo ou há algum lugar que forneça mais informações? Tenho estado lendo a documentação no site mql4, mas ainda não faz sentido para mim. A explicação que eles fornecem é muito breve.

Por exemplo

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Atual + 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Corrente + 1);

O que faz a corrente + 0, etc.?

Obrigado e cumprimentos

Terrance
 

...

O erro é que a GlobalVariableGet() tem apenas um parâmetro (o nome da variável). Você não precisa do segundo parâmetro (o"falso" que você tem na chamada para a função)

crsnape@btinternet.com:
Olá, alguém poderia me dizer onde eu estou errado aqui, por favor? Estou recebendo código de erro ')' parâmetros errados contam na linha destacada em vermelho - mas todos os parâmetros se somam...

se ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars)

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barGV,Bars);

}

//--- Verificar a possibilidade de posição longa (BUY)

se (GlobalVariableGet (hasOrderedGV, false)) Obrigado
 

Eu mudei o código para isto, e seu erro está livre de erros pelo menos - está tudo bem?

if (GlobalVariableGet (hasOrderedGV) == falso)

Razão: