Pergunte! - página 38

 

Ian,

Verifique Straddle&Trail expert. você pode encontrá-lo aqui https://www.mql5.com/en/forum/general

 

Olá a todos,

Quero fechar todas as minhas encomendas ao mesmo tempo, mas não posso.

Eu tentei este código, mas não funcionou:

''''''''''''''''''''''''''''''''''''''''

total = EncomendasTotal();

para(i=0;i < total;i++)

{

if(OrderSelect(i, SELECT_BY_POS)==verdadeiro)

{

OrderClose(OrderTicket(),OrderLots(),Ask,80,CLR_NONE);

OrderClose(OrderTicket(),OrderLots(),Bid,80,CLR_NONE);

}

}

''''''''''''''''''''''''''''''''''''''''

Alguém pode me ajudar?

Eu ficaria muito grato se vocês pudessem me ajudar.

 

Mehdi,

Coloque este código (procedimento) fora da seção de início() e quando você se encontrar a condição de fechar todas as negociações, basta chamar o procedimento dessa forma:

int start()

{ // seu código aqui .....

Se (sua condição aqui) ShutDownAllTrades();

}

Fechar tudo comércio

{ int Retry;

Enquanto (OrdensTotal()>0)

{ for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

se (OrderType()==OP_BUY)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);

Sleep(1000);

}

caso contrário se (OrderType()==OP_SELL)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);

Sleep(1000);

}

senão

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

OrderDelete(OrderTicket());

Sleep(1000);

}

}

}

}

HTH

Yannis

 

Prezado Yannis,

Obrigado por sua ajuda.

Desejo-lhe o melhor.

 
Yannis:
Mehdi,

Coloque este código (procedimento) fora da seção de início() e quando você se encontrar a condição de fechar todas as negociações, basta chamar o procedimento dessa forma:

int start()

{ // seu código aqui .....

Se (sua condição aqui) ShutDownAllTrades();

}

Fechar tudo comércio

{ int Retry;

Enquanto (OrdensTotal()>0)

{ for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

se (OrderType()==OP_BUY)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);

Sleep(1000);

}

caso contrário se (OrderType()==OP_SELL)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);

Sleep(1000);

}

senão

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

OrderDelete(OrderTicket());

Sleep(1000);

}

}

}

}

HTH

Yannis

Prezado Yannis,

Eu adicionei seu procedimento entre " int deinit() { } " (fora do início) como você disse, mas há um problema através da compilação após o ShutDownAllTrades { : '{' vírgula ou ponto-e-vírgula esperado .

Aguardo ansiosamente a sua resposta.

Muito obrigado.

 

Oops desculpe.

O que está faltando é o () depois de void ShutDownAllTrades()

Tenha cuidado também com a variável chamada 'Slippage' na função de fechamento do pedido.

Talvez seja necessário substituí-la por aquela que você está usando ao fazer seus pedidos.

Yannis

 
Yannis:
Oops desculpe.

O que está faltando é o () depois de vazio ShutDownAllTrades()

Tenha cuidado também com a variável chamada 'Slippage' na função de fechamento do pedido.

Talvez seja necessário substituí-la por aquela que você está usando ao fazer seus pedidos.

Yannis

Está funcionando muito bem !

Obrigado novamente

 

Estou usando o indicador MTF CCI para a linha inferior do indicador Multi Time Frame, é uma linha de passo amarela, veja imagem anexa.

Quando a linha estiver acima do nível 100 (sobre-comprado) - o preço irá descer e quando estiver abaixo de -100 (sobre-vendido) - o preço irá subir.

O único problema com ele que não se atualiza sempre, tenho que fazê-lo manualmente clicando com o botão direito no gráfico e selecionando 'Atualizar'.

Uma pergunta aos programadores: Existe alguma função no MQ4 para fazer esse tipo de atualização automaticamente em cada tick?

Agradeceria um conselho.

euro pean

Arquivos anexados:
mtf_cci.jpg  37 kb
 

Tente isto:

Objetos nulosRedraw()

Redraws todos os objetos da tabela

Amostra

ObjetosRedraw();

Você pode precisar usar ObjectCreate primeiro.

 
richx7:
Tente isto:

Objetos nulosRedraw()

Redraws todos os objetos da tabela

Amostra

ObjetosRedraw();

Talvez você precise usar primeiro o ObjectCreate.

Obrigado por responder.

Tanto quanto sei, ObjectsRedraw() refresca objetos que acabaram de ser 'criados' e 'definidos'.

Preciso atualizar um indicador que não está na lista de Objects, portanto o ObjectsRedraw() não funciona.

Ou talvez você saiba como se referir a um indicador existente?