Ajuda na codificação - página 245

 
mladen:
macerina

Apenas a primeira parte (o resto é apenas uma variação disso) :

se ema(7) < ema(21) e ema(7) anterior < ema(21) anterior então se ema(de rsi(14),9) < rsi(14) sinaliza para compra

você também pode dizer desta forma:

se macd(7,12) < e anterior macd(7,12) < 0 então se ema(de rsi(14),9) < rsi(14) sinal para compra

Obrigado pela resposta mladen é possível codificar um indicador mt4 com este critério

Obrigado de antemão

 
macerina:
Obrigado pela resposta mladen é possível codificar um indicador mt4 com este critério Obrigado antecipadamente

macerina

Esse é um simples sistema macd + rsi. Acredito que isso já existe. Se não existe, é fácil fazer um indicador e então será feito

 
mladen:
Favor postar a parte do código onde você está tentando alcançar o que você descreveu aqui: https: //www.mql5.com/en/forum/174385/page162 (não os 3 take profits colocando em pedidos e 3 trailing stops administrando, mas a parte que está tentando fazer exatamente o que você descreveu) e então, talvez alguém possa ajudá-lo com sua codificação.

//contar ordens de compra em aberto.

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol());

//contar ordens de venda em aberto.

iOpenOrders_Sell = CntOrd(iOrderType_Sell,MagicNumber,Symbol());

if (iOpenOrders_Buy===3 || iOpenOrders_Sell===3)

{

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop);

}

if (iOpenOrders_Buy===1 || iOpenOrders_Sell===1)

{

if(TrailingStop_2>0 && TrailingStart_2 > 0) TrailOrder_3 (TrailingStart_2, TrailingStop_2);

}

//////////////////////////////////////////////////////////////////////////////////////////////

Esta foi a parte em que a EA está procurando o número de pedidos abertos para o par anexo.

Se encontrar 3 ordens, seguirá a função habitual de Trailing Stop. E se encontrar apenas uma ordem em execução, então seguirá a função de Segunda Trailing Stop.

Isto está executando 'OK' para um único par, mas quando eu anexar este EA a múltiplos gráficos (Pares), ele não funcionará, uma vez que ele vai buscar todas as ordens abertas através da função 'OrdersTotal()'.

Um problema vem imediatamente à mente: como você sabe que havia 3 ordens e depois só restou 1 (não há uma única linha de código naquela EA que está tentando descobrir isso)

//End - Fechar posições abertas------------------------------------------

duplo OpenPrice=Ask;

int count=3;

se (contagem===3)

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order Order",MagicNumber, 0,Blue);

se (BuyOrder_1>0) //Cheque se o pedido foi aberto ou não

{

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Pedido de compra 1 enviado com sucesso. Ticket=" + BuyOrder_1;

contagem = contagem - 1;

//////////////////////////////////////////////////////////////

Assim, a contagem está diminuindo e as ordens de abertura estão sendo abertas até a contagem=1. Portanto, 3 ordens estão abrindo como contagem=3 inicialmente.

 
Oridroo:
//contar ordens de compra abertas.

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol());

//contar ordens de venda abertas.

iOpenOrders_Sell = CntOrd(iOrderType_Sell,MagicNumber,Symbol());

if (iOpenOrders_Buy===3 || iOpenOrders_Sell===3)

{

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop);

}

if (iOpenOrders_Buy===1 || iOpenOrders_Sell===1)

{

if(TrailingStop_2>0 && TrailingStart_2 > 0) TrailOrder_3 (TrailingStart_2, TrailingStop_2);

}

//////////////////////////////////////////////////////////////////////////////////////////////

Esta foi a parte em que a EA está procurando o número de pedidos abertos para o par anexo.

Se encontrar 3 ordens, seguirá a função habitual de Trailing Stop. E se encontrar apenas uma ordem em execução, então seguirá a função de Segunda Trailing Stop.

Isto está executando 'OK' para um único par, mas quando eu anexar este EA a múltiplos gráficos (Pares), ele não funcionará, uma vez que ele vai buscar todas as ordens abertas através da função 'OrdersTotal()'.

//End - Fechar posições abertas de venda------------------------------------------

duplo OpenPrice=Ask;

int count=3;

se (contagem===3)

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order Order",MagicNumber, 0,Blue);

se (BuyOrder_1>0) //Cheque se o pedido foi aberto ou não

{

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Pedido de compra 1 enviado com sucesso. Ticket=" + BuyOrder_1;

contagem = contagem - 1;

//////////////////////////////////////////////////////////////

Assim, a contagem está diminuindo e as ordens de abertura estão sendo abertas até a contagem=1. Portanto, 3 ordens estão abrindo como contagem=3 inicialmente.

A pergunta era a seguinte: como saber se houve 3 pedidos abertos uma vez, e depois só resta um? O fato de restar apenas uma ordem aberta não mostra nada. Você tem que verificar a lista de ordens fechadas para as 2 outras ordens que faziam parte de um trigêmeo, e como os corretores podem mudar seu campo de comentários, não há como saber que algumas ordens faziam parte de um mesmo trigêmeo (nenhum campo na lista de ordens que pode ser usado para marcar que algumas ordens pertencem a um mesmo grupo de ordens).

Você poderia tentar usar arquivos para salvar números de bilhetes que pertenciam a trigêmeos, mas, no caso de tentar usar o mesmo EA de outro terminal, você pode obter erros terríveis. A mesma coisa pode acontecer quando você reinstala o metatrader. Usar variáveis globais é sempre pior (são quase a mesma coisa que usar arquivos - mas pior), portanto não há maneira significativa de rastrear corretamente os trigêmeos de pedidos.

Então como você descobre que 1 ordem aberta é a última ordem aberta dos 3 ou é a primeira ordem aberta de um novo trigêmeo de ordens?

 
mladen:
A pergunta era a seguinte: como saber se houve 3 pedidos abertos uma vez, e depois só resta um? O fato de que só sobrou uma ordem aberta não mostra nada. Você tem que verificar a lista de ordens fechadas para as 2 outras ordens que fizeram parte de um trigêmeo, e como os corretores podem mudar seu campo de comentários, não há como saber que algumas ordens fizeram parte de um mesmo trigêmeo (nenhum campo na lista de ordens que pode ser usado para marcar que algumas ordens pertencem a um mesmo grupo de ordens).

Mladen,

Ckeck you pm, precisa de codificador

Sonhe com um grande ícone para PM !

 
mladen:
Então como você descobre que 1 ordem aberta é a última ordem aberta dos 3 ou é a primeira ordem aberta de um novo trigêmeo de ordens?

Há uma condição:

se (MA_Difference_1>=Value_Diff && iOpenOrders_Buy ==0)

Por isso, estou assegurando que se houver alguma ordem de compra existente, ela não abrirá nenhuma nova ordem de compra, apesar de as condições terem sido cumpridas. Ele abrirá uma nova ordem somente quando não houver nenhuma ordem de compra/venda existente.

E como está abrindo 3 ordens de cada vez do mesmo tipo (compra/venda) e se duas delas já estiverem fechadas, então a esquerda é certamente do mesmo tipo.

Eu o testei. Portanto, não há confusão sobre isso.

 
Oridroo:
Há uma condição:

if (MA_Difference_1>=Value_Diff && iOpenOrders_Buy ==0)

Por isso, estou assegurando que se houver alguma ordem de compra existente, ela não abrirá nenhuma nova ordem de compra, apesar de as condições terem sido cumpridas. Ele abrirá uma nova ordem somente quando não houver nenhuma ordem de compra/venda existente.

E como está abrindo 3 ordens de cada vez do mesmo tipo (compra/venda) e se duas delas já estiverem fechadas, então a esquerda é certamente do mesmo tipo.

Eu o testei. Portanto, não há confusão sobre isso.

Há muitas suposições em tudo isto. A primeira é que quando se tenta abrir 3 ordens, ela realmente abrirá 3 ordens. E se ela abrir apenas 1? . E assim por diante ...

Desculpe. Mas parece que estamos falando de coisas diferentes o tempo todo. Espero que alguém possa ajudá-lo, já que eu não posso

Feliz negociação

 
mladen:
Há muitas suposições em tudo isso. A primeira é que quando você tenta abrir 3 ordens, ele realmente abrirá 3 ordens. E se ele abrir apenas 1? . E assim por diante ...

Desculpe. Mas parece que estamos falando de coisas diferentes o tempo todo. Espero que alguém possa ajudá-lo, já que eu não posso

Feliz negociação

Se você não puder, tudo bem.

Há algum tempo venho testando-o com corretores diferentes e até agora não "falhou" em abrir 3 pedidos.

De qualquer forma, acho que você poderia dizer pelo menos qual ponto/lógica faz uma EA permitir distinguir entre diferentes pares enquanto eu estou chamando 'OrdensTotal()'?

Qualquer pequeno exemplo de EA será Fine.

 
macerina:
Obrigado pela resposta mladen é possível codificar um indicador mt4 com este critérioAdmanutenção

macerina

Verifique o indicador neste post : https://www.mql5.com/en/forum/173574/page432. É quase exatamente o mesmo que o descrito pelo código gráfico aspen

 

Obrigado Mladen pelo código ... Isto tem a dupla comparação macd e 50 crossover, como você explicou na lógica anterior.

Obrigado de antemão