Boa noite!
Sou iniciante na codificação no MQL5 e estou tendo um grande problema na hora de conseguir identificar minhas ordens e posições e conseguir realizar alterações ou cancelamentos delas. Já estudei como funciona a OrderSelect, OrderTicket, etc, mas ainda assim o problema permanece. Estou utilizando tanto o #include do "Trade" quanto da "OrderInfo" mas meu principal problema está em conseguir isolar cada tipo de ordem e posição para poder mexer nela de forma separada. Basicamente meu EA abre diferentes ordens em diferentes posições, tanto na compra quanto na venda, e a partir do momento em que vai entrando em algumas dessas ordens preciso que umas sejam canceladas e outras modificadas. Quando tentei colocar um "magic numb" ele se torna o número mágico de todo o EA, então não estou conseguindo individualizar cada ordem, seja pelo preço em que está posicionada, quantidade de contratos ou qualquer outro tipo de identificador. Alguém poderia me ajudar a como fazer isso? Conseguir "detectar" cada ordem separadamente?
Poderia mostrar o que já tentou? Que eu não entendi seu problema... Como esta trabalhando tentando isolar ordens e acredito que posição também, voce não disse mas sua conta esta em modo hedge ne? Porque tentar isolar em netting eh bem trabalhoso...
Sobre o magic number mesmo ele sendo normalmente só setado uma vez no EA. Nada impede de chamar a função que configura ele diversas vezes. Por exemplo, no onInit pode configurar um magic number 5 e antes de determinada ordem ser colocada configurar para 666 e depois de envia-la voltar o magic number para o padrao 5....
Poderia mostrar o que já tentou? Que eu não entendi seu problema... Como esta trabalhando tentando isolar ordens e acredito que posição também, voce não disse mas sua conta esta em modo hedge ne? Porque tentar isolar em netting eh bem trabalhoso...
Sobre o magic number mesmo ele sendo normalmente só setado uma vez no EA. Nada impede de chamar a função que configura ele diversas vezes. Por exemplo, no onInit pode configurar um magic number 5 e antes de determinada ordem ser colocada configurar para 666 e depois de envia-la voltar o magic number para o padrao 5....
Ahh interessante essa opção que você me disse!! Vou tentar ver se por esse caminho consigo fazer o que estou querendo. Minha conta é hedge mesmo, acontece que por exemplo, eu mando enviar uma compra e uma venda a 200 pts do preço da média móvel, então o que pegar primeiro vai ser o "trade principal" e ai eu já preciso retirar a outra ordem que estava posicionada. Vamos supor que nesse exemplo, no mini-índice, realizou uma compra, então depois disso eu coloco duas vendas 400 pts acima e coloco 4 compras 600pts abaixo, ai o que pegar primeiro eu vou ter que cancelar uma das ordens novamente, e já vou precisar abrir novas ordens e posições dnv, e assim sucessivamente. Deu pra entender?
O que já tentei fazer foi o seguinte:
Criei esse código para checar as ordens pendentes:
int ChecarOrdensPendentes = 0;
ulong ticketOrdem;
for(int i = 0; i < OrdersTotal();i++){
ticketOrdem = OrderGetTicket(i);
if(!OrderSelect(ticketOrdem)){
Print("Erro ao recuperar dados da ordem : ", GetLastError());
ResetLastError();}
else{
string symbol = OrderGetString(ORDER_SYMBOL);
ulong magic = OrderGetInteger(ORDER_MAGIC);
if(symbol == _Symbol && magic == magicNumb){
ChecarOrdensPendentes = OrdersTotal();
}
}
}
Acontece que com esse código eu SÓ consigo o número de ordens pendentes, mas não estou conseguindo "isolar" qual seria cada ordem para poder ir cancelando de acordo com o que o ativo vai "andando" ao longo do dia.... Tentei esse código aqui para ver se conseguia isolar também, mas esse nem conseguiu "identificar" a ordem:
if((TemPosicao == 1) && (HighD > mmovel21 + 200){
if(myorder.OrderType() == ORDER_TYPE_SELL_STOP && ORDER_VOLUME_INITIAL == 1){
ulong Tick2 = OrderGetTicket(0);
trade.OrderDelete(Tick2);}
}
Acho que seria isso... Não sei se agora deu pra entender um pouco melhor o que seria o problema e como poderia solucioná-lo.
Obrigado pela sua atenção e pela resposta!!
Estive analisando a possibilidade de utilizar o magic numb como identificador, mas sua utilização ocorre usando o OrderGetInteger, e para usar esse tipo de função é necessários que a ordem já tenha sido pré-selecionada usando OrderGetTicket ou OrderSelect, então acabei ficando "preso" novamente...
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Boa noite!
Sou iniciante na codificação no MQL5 e estou tendo um grande problema na hora de conseguir identificar minhas ordens e posições e conseguir realizar alterações ou cancelamentos delas. Já estudei como funciona a OrderSelect, OrderTicket, etc, mas ainda assim o problema permanece. Estou utilizando tanto o #include do "Trade" quanto da "OrderInfo" mas meu principal problema está em conseguir isolar cada tipo de ordem e posição para poder mexer nela de forma separada. Basicamente meu EA abre diferentes ordens em diferentes posições, tanto na compra quanto na venda, e a partir do momento em que vai entrando em algumas dessas ordens preciso que umas sejam canceladas e outras modificadas. Quando tentei colocar um "magic numb" ele se torna o número mágico de todo o EA, então não estou conseguindo individualizar cada ordem, seja pelo preço em que está posicionada, quantidade de contratos ou qualquer outro tipo de identificador. Alguém poderia me ajudar a como fazer isso? Conseguir "detectar" cada ordem separadamente?