PRECISO DE AJUDA NO ENVIO DE ORDENS

 
Boa noite pessoal, sou novo por aqui e estou fazendo um Expert Advisor simples, de médias móveis para mini índice. Em testes, ele opera normalmente, mas quando colocado na conta real, ele não envia as ordens. Já testei em duas corretoras diferentes (Clear e ModalMais) e retorna o mesmo erro. O Algotrading está habilitado e já solicitei que a minha conta na corretora fosse habilitada também. O que me retorna, que o erro só pode estar no código. Voces poderiam me ajudar por favor? Vou deixar as funções de compra e venda aqui. Obrigado!



//---------------------------------- ORDEM DE COMPRA ----------------------------------\\

void ordem_compra()

{
      if(PositionSelect(_Symbol)==true)

         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)

            trade.PositionClose(PositionGetTicket(0),-1);

         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY){

            Print("Já existe uma posição comprada. Erro: ",GetLastError());

            return;
         }

      SL = SymbolInfoDouble(_Symbol,SYMBOL_ASK) - Loss;

      TP = SymbolInfoDouble(_Symbol,SYMBOL_ASK) + Profit;

      if(!trade.Buy(num_lots,_Symbol,SymbolInfoDouble(_Symbol,SYMBOL_ASK),SL,TP,NULL))

      {

         Print("Compra não sucedida. Erro: ",GetLastError());

         return;

      }

      Print("Compra Sucedida! Ordem: ",trade.ResultRetcode(),"\t", trade.ResultRetcodeDescription());

}


//---------------------------------- ORDEM DE VENDA ----------------------------------\\


void ordem_venda()

{
      if(PositionSelect(_Symbol)==true)

         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)

            trade.PositionClose(PositionGetTicket(0),-1);

         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)

         {

            Print("Já existe uma posição vendida. Erro: ",GetLastError());

            return;

         }

      SL = SymbolInfoDouble(_Symbol,SYMBOL_BID) + Loss;

      TP = SymbolInfoDouble(_Symbol,SYMBOL_BID) - Profit;

      if(!trade.Sell(num_lots,_Symbol,SymbolInfoDouble(_Symbol,SYMBOL_BID),SL,TP,NULL))

      {

         Print("Venda não sucedida. Erro: ",GetLastError());

         return;

      }

      Print("Venda Sucedida! Ordem: ",trade.ResultRetcode(),"\t", trade.ResultRetcodeDescription());

}

Na verdade, eu tenho duas funções diferentes que testei e nenhuma das duas funciona, esta de cima é a primeira, e a segunda vou postar abaixo.

void CompraAMercado(){
   Print("::: NormalizeDouble(tick.ask - SL*_Point,_Digits) = ", NormalizeDouble(tick.ask - SL*_Point,_Digits));
   
   trade.Buy(num_lots,_Symbol,NormalizeDouble(tick.ask,_Digits),NormalizeDouble(tick.ask - SL*_Point,_Digits),
             NormalizeDouble(tick.ask + TK*_Point,_Digits));
   
   if(trade.ResultRetcode() == 10008 || trade.ResultRetcode() == 10009){
      Print("Ordem de compra Executada com Sucesso!!");
   }else{
      Print("Erro de execução... ", GetLastError());
      ResetLastError();
   }          
}

//---
void VendaAMercado(){
   Print("::: SL*_Point = ", SL*_Point, ",  _Point = ", _Point);
   
   Print("::: NormalizeDouble(tick.bid + SL*_Point,_Digits) = ", NormalizeDouble(tick.bid + SL*_Point,_Digits));
   
   trade.Sell(num_lots,_Symbol,NormalizeDouble(tick.bid,_Digits),NormalizeDouble(tick.bid + SL*_Point,_Digits),
               NormalizeDouble(tick.bid - TK*_Point,_Digits));
   
   if(trade.ResultRetcode() == 10008 || trade.ResultRetcode() == 10009){
      Print("Ordem de venda Executada com Sucesso!!");
   }else{
      Print("Erro de execução... ", GetLastError());
      ResetLastError();
   }              
}
 
andpedrucci:
Boa noite pessoal, sou novo por aqui e estou fazendo um Expert Advisor simples, de médias móveis para mini índice. Em testes, ele opera normalmente, mas quando colocado na conta real, ele não envia as ordens. Já testei em duas corretoras diferentes (Clear e ModalMais) e retorna o mesmo erro. O Algotrading está habilitado e já solicitei que a minha conta na corretora fosse habilitada também. O que me retorna, que o erro só pode estar no código. Voces poderiam me ajudar por favor? Vou deixar as funções de compra e venda aqui. Obrigado!



Na verdade, eu tenho duas funções diferentes que testei e nenhuma das duas funciona, esta de cima é a primeira, e a segunda vou postar abaixo.

QUAL O ERRO???

Meu Deus do Céu!   Poste os Logs! Aba EXPERTS e aba DIÁRIO!

Não somos discípulos de Chico Xavier...

 
Flavio Jarabeck #:

QUAL O ERRO???

Meu Deus do Céu!   Poste os Logs! Aba EXPERTS e aba DIÁRIO!

Não somos discípulos de Chico Xavier...

Perdão amigo, sou novo nesse mundo.

2021.10.05 10:10:01.115 Trades '1001531819': failed exchange sell 1 WIN@ at market sl: 200.00000 tp: -400.00000 [Trade disabled]

2021.10.05 11:09:59.970    Trades    '581050': failed instant buy 1 WIN@ at 110870.00000 sl: 110670.00000 tp: 111270.00000 (deviation: 10) [Trade disabled]
 
andpedrucci #:
Perdão amigo, sou novo nesse mundo.

2021.10.05 10:10:01.115 Trades '1001531819': failed exchange sell 1 WIN@ at market sl: 200.00000 tp: -400.00000 [Trade disabled]

2021.10.05 11:09:59.970    Trades    '581050': failed instant buy 1 WIN@ at 110870.00000 sl: 110670.00000 tp: 111270.00000 (deviation: 10) [Trade disabled]

Tranquilo André!

Você está com a sua plataforma, por algum motivo, desligada para trades!

;)


E, cheque se o seu EA também está habilitado para trades...



 
Flavio Jarabeck #:

Tranquilo André!

Você está com a sua plataforma, por algum motivo, desligada para trades!

;)

Cara, essa parte que eu não entendo. O botão de algotrading está habilitado. e a comprovação que a modal habilitou está nesse log:

2021.10.07 13:27:21.006 Network '581050': authorized on ModalMais-DMA4 - Beta through MT5 - Access Server 06 (ping: 13.05 ms, build 2650)


A minha duvida agora é, existe mais algum lugar que eu tenha que habilitar?


 
andpedrucci #:
Cara, essa parte que eu não entendo. O botão de algotrading está habilitado. e a comprovação que a modal habilitou está nesse log:

2021.10.07 13:27:21.006 Network '581050': authorized on ModalMais-DMA4 - Beta through MT5 - Access Server 06 (ping: 13.05 ms, build 2650)


A minha duvida agora é, existe mais algum lugar que eu tenha que habilitar?


O seu robô!


 
Flavio Jarabeck #:

O seu robô!





essa é a forma como está durante o mercado


(na barra de log aparece disabled e enabled pq cliquei no botão do algotrading)

Arquivos anexados:
Sem_tztulo.png  284 kb
 
andpedrucci #:




essa é a forma como está durante o mercado


(na barra de log aparece disabled e enabled pq cliquei no botão do algotrading)

Então pode ser seu Perfil de Suitability na Corretora... Verifique com eles... Você precisa de um Perfi ARROJADO para operar Robôs...
 
andpedrucci #:
Perdão amigo, sou novo nesse mundo.

2021.10.05 10:10:01.115 Trades '1001531819': failed exchange sell 1 WIN@ at market sl: 200.00000 tp: -400.00000 [Trade disabled]

2021.10.05 11:09:59.970    Trades    '581050': failed instant buy 1 WIN@ at 110870.00000 sl: 110670.00000 tp: 111270.00000 (deviation: 10) [Trade disabled]

Bom dia

1) WIN@ é série histórica é um ativo não comercializável.

2) Não dá erro especificar o DEVIATION, mas não existe DEVIATION para ordens a preço de mercado.

3) O preço (BID/ASK) deve estar dentro da faixa de preços SL === TP,  caso contrário ganha um  invalid stops  

 
Rogerio Giannetti Torres #:

Bom dia

1) WIN@ é série histórica é um ativo não comercializável.

2) Não dá erro especificar o DEVIATION, mas não existe DEVIATION para ordens a preço de mercado.

3) O preço (BID/ASK) deve estar dentro da faixa de preços SL === TP,  caso contrário ganha um  invalid stops  

Bom dia. Muito obrigado Rogério. Ainda não entrou em operações hoje pois não houve as condições, mas já alterei o ativo de win@ para winv21.

Sobre o DEVIATION, eu procurei no código inteiro e não existe uma especificação no código para isso.

E o terceiro ponto para mim ficou um pouco confuso, eu configurei meu TK para 400 pontos e o SL para 200. Desculpe a minha ignorância e falta de conhecimento, mas não consegui entender como em uma ordem a mercado, esses póntos seriam inválidos. 

Um exemplo, o EA abre uma compra em 111800, logo meu TK é 112200 e meu SL é 111600.    <--- O erro está aqui?
 
andpedrucci #:

Um exemplo, o EA abre uma compra em 111800, logo meu TK é 112200 e meu SL é 111600.    <--- O erro está aqui?

Opa,

o exemplo está correto pois o preço (111800)  está entre o SL (1116000) <---> TP(112200)...     lembre-se que preço = ASK/BID não use LAST

Meu comentário foi sobre essa ordem, onde SL e TP estão errados 

2021.10.05 10:10:01.115 Trades '1001531819': failed exchange sell 1 WIN@ at market sl: 200.00000 tp: -400.00000 [Trade disabled]

Razão: