Pergunte! - página 134

 
bakhul:
Alguém aqui poderia me ajudar a adicionar alerta a este filtro, quando ele cruzar o nível 0 ou mudar de cor. Obrigado por você que quer me ajudar...

Talvez você tenha melhor sorte para postar aqui: https://www.mql5.com/en/forum

 

Quantas ordens de compra e venda atualmente abertas da EA

Acabei de passar por 134 páginas esperando que alguém já tivesse respondido a esta pergunta. Mas eu estava sem sorte...

Depois de criar e ajustar todo tipo de cruzamento, e ponto pivô, e faixa ATR, e estratégia de ruptura que posso conceber com as centenas de indicadores diferentes que tenho. Percebi que uma EA totalmente automatizada precisa de toneladas de variáveis que você precisa codificar. Por isso, em vez disso, estou começando a criar conselheiros especializados assistidos pelo usuário. Bem, para as perguntas em mãos...

Que código pode ser usado para contar quantas ordens de compra abertas e quantas ordens de venda abertas a EA atualmente tem abertas no Mercado.

Não quero que conte quantas ordens em aberto há no total, porque estarei colocando ordens também na mesma conta para compensar as ordens atuais que a EA colocou.

Eventualmente, gostaria de criar filtros que alterarão a proporção de ordens de compra e venda para fins de hedging.

 

Uma pequena ajuda, por favor...

Olá a todos,

Originalmente coloquei isto como um novo tópico, mas ele foi movido para outro tópico de programação (não tenho objeções à sua mudança BTW) e agora parece ter se perdido devido à quantidade de cartazes naquele tópico.

Talvez alguém aqui possa me ajudar?

Eu quase terminei minha primeira EA após quase 7 dias de tentativa e erro e corte e colagem e horas de pesquisa....

Alguém pode me dizer como emitir uma saída ou parar uma função para uma EA?

Quero que a EA apague todas as negociações atuais e pendentes e saia depois de atingir 10.000 no patrimônio líquido. Abaixo está a parte do código até o momento:

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

for (cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

Como você pode ver, a EA olha para o patrimônio líquido e então define o valor de bool da variável StopTrade como verdadeiro. O EA então reconhece o comando e não processa nada sob o StopTrade != verdadeiro para um ciclo, mas então o valor do bool do StopTrade é reinicializado, acho eu, e as negociações continuam.

Em primeiro lugar, existe alguma forma de eu conseguir que isto faça o que eu preciso para fazer da maneira que estou fazendo?

Segundo, existe alguma função que eu possa usar para simplesmente dizer à EA para desistir?

Toda a assistência é muito apreciada.

NB.

cutzpr - How Many Currently open Buy, and Sell Orders from EA

Acho que parte do meu código pode ajudá-lo com o que você precisa.

 

Bem, eu tinha imaginado que um ciclo que fizesse todas as ordens abertas seria um começo, mas eu não saberia o que dizer à EA para que ela olhasse apenas para as ordens colocadas pela EA e desconsiderasse as ordens que eu colocava manualmente. Obrigado.

 

Número mágico

cutzpr - você precisa usar um número mágico e depois usar algo como o seguinte:

para (cnt=total;cnt>=0;cnt--)

{

OrderSelect(0,SELECT_BY_POS,MODES_TRADES);

se (OrderMagicNumber()==seu númeromagicnumber)

{if(OrderType()==OP_BUY)

 

Bem, dando uma olhada nesse código, eu conjurei este pedaço de código abaixo. Não tenho certeza se o código foi codificado corretamente. Eu criei

int MaxLong=5,MaxShort=5;

duplo externo Magic=10000;

Exterior int MaxOpenOrders=10;

então...

if (b<=MaxLong)

{comércio

}

se (s<=MaxShort)

{comércio

}

Mas a EA ainda está enviando a compra máxima, e a venda máxima. Em vez de contar quantos pedidos há de cada um e se limitar ao MaxLong e ao Short. Eu sei que deve haver algo errado com o código, mas não consigo vê-lo.

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber()==Magic)

{if(OrderType()==OP_BUY)

{

b++; // add order to Long Quantity

if(TP != 0)

{

if(b!= 0)

{

if(Bid >= ((OrderOpenPrice()+TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // Long position closed.

CMT=OrderCloseTime();

b--; // Long Order closed. Remove one order from total Longs

return(0);

}

}

}

}

if (OrderMagicNumber()==Magic)

{if(OrderType()==OP_SELL)

s++; // Add one to Short order Quantity

if (TP != 0)

{

if(s!= 0)

{

if(Ask <= ((OrderOpenPrice()-TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // Short position closed.

CMT=OrderCloseTime();

s--; // Short Order Closed. Remove one order from total shorts

return(0);

}

}

}

}

}
 
cutzpr:
Bem, dando uma olhada nesse código, eu conjurei este pedaço de código abaixo. Não tenho certeza se ele codificou corretamente. Eu criei

int MaxLong=5,MaxShort=5;

duplo externo Magic=10000;

Exterior int MaxOpenOrders=10;

então...

if (b<=MaxLong)

{comércio

}

se (s<=MaxShort)

{comércio

}

Mas a EA ainda está enviando a compra máxima, e a venda máxima. Em vez de contar quantos pedidos há de cada um e se limitar ao MaxLong e ao Short. Eu sei que deve haver algo errado com o código, mas não consigo vê-lo.

Bem, eu acho que você está complicando demais as coisas. Tente usar poucas partes mais curtas do código em vez de uma grande função. Isto deve lhe dar alguma dica:

int totalOrders(int type)

{

int totalNumber = 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == type) totalNumber++;

}

return(totalNumber);

}

[/CODE]

AND HERE IS EXAMPLE HOW YOU CAN USE IT

[CODE]

int totalBuy = totalOrders(OP_BUY);

int totalSell = totalOrders(OP_SELL);

if( (totalBuy + totalSell) < MaxOpenOrders)/*TOTAL NUMBER OF ORDERS WASN'T REACHED*/

{

if(totalBuy <= MaxLongOrders)

{

//OPENING LONG IS PERMITED

}

if(totalSell <= MaxShortOrders)

{

//OPENING SHORT IS PERMITED

}

}

 

[ASK] Indicador "SilverTrend_Signal"

Sou um iniciante em programação forex e mql4. Eu tenho um indicador SilverTrend_Signal (anexado aqui) e

quero fazer um EA a partir deste indicador mas tenho um problema com este indicador, o sinal pode mudar

na mesma barra, tal como a seta de sinal de tendência ascendente aparece no gráfico, então pode desaparecer e talvez

mudar para a seta de sinal de tendência para baixo na mesma barra. Alguém pode me ajudar a resolver este problema?

Eu uso este indicador no período de tempo M1 e EU.

Muito obrigado.

(Desculpe, meu inglês não é bom o suficiente)

Arquivos anexados:
 

Minha opinião pessoal é que você deve ficar longe do uso de indicadores que repintam para sinais. Especialmente no gráfico M1. Os sinais mudarão com muita freqüência. Você só está pedindo sinais não estáveis e problemas. A história passada parece boa porque é o passado.

 
willya:
Sou um iniciante em programação forex e mql4. Eu tenho um indicador SilverTrend_Signal (anexado aqui) e

quero fazer um EA a partir deste indicador mas tenho um problema com este indicador, o sinal pode mudar

na mesma barra, tal como a seta de sinal de tendência ascendente aparece no gráfico, então pode desaparecer e talvez

mudar para a seta de sinal de tendência para baixo na mesma barra. Alguém pode me ajudar a resolver este problema?

Uso este indicador no período de tempo M1 e EU.

Muito obrigado.

(Desculpe, meu inglês não é bom o suficiente)

Não tenho certeza de como este re-pintar, mas se fizer SOMENTE na barra atual, então usar o sinal no fechamento (confirmado) da barra estará bem.

Se repintar mais que a barra de corrente, então você pode esquecer de usar seu sinal para um EA.

FerruFx