Universal MA Cross EA - página 105

 
sachin_syd:
Prezados Mrtools/Mladen

Cud u plz definiu o parâmetro de distância máxima como sendo a distância do preço de fechamento de uma barra em relação à ma lenta

o cenário atual não tem sentido imho

Obrigado

Sachin

Sachin

Basta encontrar a linha que vai assim:

MaxDistance = MathFloor(MathAbs((FastMACurrent-SlowMACurrent)/pPoint)));

e substitua FastMACurrent por Close[1] (para o fechamento da primeira barra fechada) ou Close[0] (para o fechamento da barra ainda aberta)

 

ok, eu fiz isso agora testando...saúde

cud u plz também auxilia aqui : https://www.mql5.com/en/forum/general

mladen:
Sachin

Basta encontrar a linha que vai assim:

MaxDistance = MathFloor(MathAbs((FastMACurrent-SlowMACurrent)/pPoint)));

e substituir a corrente FastMAC por Fechar[1] (para o fechamento da primeira barra fechada) ou Fechar[0] (para o fechamento da barra ainda aberta)
 

Caro Mladen cud u por favor verifique por que o filtro de tempo não está funcionando . veja linhas verticais vermelhas no gráfico onde não é suposto que ele seja comercializado, mas sim comercializado. Em Ea i, eu estabeleço a troca somente em certas horas. Muito obrigado.

mladen:
Sachin

Basta encontrar a linha que vai assim:

MaxDistance = MathFloor(MathAbs((FastMACurrent-SlowMACurrent)/pPoint)));

e substituir a corrente FastMAC por Fechar[1] (para o fechamento da primeira barra fechada) ou Fechar[0] (para o fechamento da barra ainda aberta)
Arquivos anexados:
untitled.png  28 kb
untitled_1.png  29 kb
 

Olá, Mladen,

Não consegui compilar o código mql4 por causa dos seguintes erros:

string externa Pivot.Setting = "---------- Pivot Filter Setting";

bool externo Uso.Pivot.Filtro = falso;

==> '.' - ponto-e-vírgula esperadoMACrossEAV1.5.mq47728 if(Use.Pivot.Filter===verdadeiro)

==> 'Use' - identificador não declaradoMACrossEAV1.5.mq44587

Pivot - estrutura ou tipo de classe esperadaMACrossEAV1.5.mq445811

Filtro - estrutura ou tipo de classe esperadaMACrossEAV1.5.mq445817

O que eu fiz de errado?

Obrigado por sua ajuda.

 
StephFX:
Olá, Mladen,

Não consegui compilar o código mql4 por causa dos seguintes erros:

string externa Pivot.Setting = "---------- Pivot Filter Setting";

bool externo Uso.Pivot.Filtro = falso;

==> '.' - ponto e vírgula esperado MACrossEAV1.5.mq4 77 28 if(Use.Pivot.Filter===verdadeiro)

==> 'Use' - identificador não declarado MACrossEAV1.5.mq4 458 7

Pivot' - estrutura ou tipo de classe MACrossEAV1.5.mq4 458 11

Filtro' - estrutura ou tipo de classe MACrossEAV1.5.mq4 458 17

O que eu fiz de errado?

Obrigado por sua ajuda

StephFX

Remover o "." do nome da variável

Você pode substituí-lo por "_", por exemplo, e então você terá :

string externa Pivot_Setting = "---------- Ajuste do Filtro Pivot";

bool externo Use_Pivot_Filter = falso;

e isto

if(Use_Pivot_Filter==verdadeiro)

e então todos irão compilar OK

 

Olá a todos,

Como estou experimentando uma estratégia de martingale, tentei fazer com que o "STOP AND REVERSE" só funcionasse quando a última troca fosse uma vitória.

int histotal=OrdersHistoryTotal(); if (histotal>0)

{

for(int count=histotal-1;count>=0;count--)

{

if(OrderSelect(count,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)

{

if(OrderProfit()>0)

{

if(StopAndReverse===true && subTotalTrade()>0)

{

if((LastTrade==="BUY" && SellCondition===verdadeiro) ||| (LastTrade==="SELL" && BuyCondition===verdadeiro))

{

subCloseOrder();

if(subTotalTrade()>0) subCloseOrder();

if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl===verdadeiro) Print("STOP AND REVERSE !");

}

}

}

}

}

}

}

Não parece estar funcionando, no entanto. Ela vai parar e reverter, mesmo que o último comércio tenha sido uma perda. Alguma sugestão?

Obrigado!

 
BlackCoq:
Olá a todos,

Como estou experimentando uma estratégia de martingale, tentei fazer com que o "STOP AND REVERSE" só funcionasse quando a última troca fosse uma vitória.

No entanto, não parece estar funcionando. Ela vai parar e reverter, mesmo que a última troca tenha sido uma perda. Alguma sugestão?

Obrigado!

Você não está verificando o tempo do pedido. Você deve verificar também a hora de fechamento da ordem, e a ordem com a maior hora de fechamento é a que você quer verificar o lucro.

 
mladen:
Você não está verificando a hora do pedido. Você deve verificar também a hora de fechamento do pedido, e o pedido com a maior hora de fechamento é aquele que você deseja verificar para obter lucro.

O problema é que eu uso um código muito semelhante para o sistema de martingale, que funciona perfeitamente:

//|---------martingale

int martingalefactor()

{

int histotal=OrdensHistóriaTotal();

se (histotal>0)

{

for(int cnt=histotal-1;cnt>=0;cnt--)

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)

{

if(OrderProfit()<0)

{

lotsfactor= fator de lote*multiplicador;

retorno(fator de lote);

}

senão

{

lotsfactor=initiallotsfactor;

if(lotsfactor<=0)

{

lotsfactor=1;

}

retorno(fator de sorteio);

}

}

}

}

}

retorno(fator de sorteio);

}

Como funciona para o martingale, não deveria funcionar agora também?

 
BlackCoq:
O problema é que eu uso um código muito semelhante para o sistema de martingale, que funciona perfeitamente: Como funciona para o martingale, não deveria funcionar agora também?

Tente usar algo como isto :

double GetLastPL()

{

double TempLastOrderProfit = 0;

datetime CloseTime = 0;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

{

CloseTime = OrderCloseTime();

TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission();

}

}

return(TempLastOrderProfit);

}

Ele lhe devolverá o valor exato do lucro (ou perda) do último pedido

 
mladen:
Tente usar algo como isto: Ele lhe devolverá o valor exato do lucro (ou perda) do último pedido

Obrigado por sua ajuda, Mladen. Eu mexi um pouco no código até conseguir compilá-lo sem erros, mas a EA ainda pára e reverte depois de uma perda. Este é o código exato que estou usando agora:

{

duplo TempLastOrderProfit = 0;

data/hora FecharTempo = 0;

for(int i=OrdensHistóriaTotal()-1;i>=0;i--)

{

se (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

{

CloseTime = OrderCloseTime();

}

}

if(StopAndReverse===true && subTotalTrade()>0 && OrderProfit()>0)

{

if((LastTrade==="BUY" && SellCondition===verdadeiro) ||| (LastTrade==="SELL" && BuyCondition===verdadeiro))

{

subCloseOrder();

if(subTotalTrade()>0) subCloseOrder();

if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl===verdadeiro) Print("STOP AND REVERSE !");

}

}

}

duplo GetLastPL() Me dá o seguinte erro: '(' - definição de função inesperada.