EA COM erro no envio de ordens

 

Boa tarde pessoal, estou com um problema no envio de ordens em um EA

            double Price_V = open[0] + REC;
            SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE,m_tick_size);

            Take_P=Price_V - TKP;
            Stop_L=Price_V + STP;

            ZeroMemory(mrequest);
            mrequest.action=TRADE_ACTION_DEAL;                                   // immediate order execution
            mrequest.price = NormalizeDouble(MathRound(Price_V/m_tick_size)*m_tick_size,_Digits);
            mrequest.sl= NormalizeDouble(MathRound(Stop_L/m_tick_size)*m_tick_size,_Digits);
            mrequest.tp= NormalizeDouble(MathRound(Take_P/m_tick_size)*m_tick_size,_Digits);
            mrequest.symbol=_Symbol;                                             // Ativo
            mrequest.volume=Volume;                                              // number of lots to trade
            mrequest.magic=Magic_n;                                              // Order Magic Number
            mrequest.type=ORDER_TYPE_SELL;                                       // Sell Order
            mrequest.type_filling = ORDER_FILLING_FOK;                           // Order execution type
            mrequest.deviation=100;                                              // Deviation from current price

Ocorre que ao enviar a ordem sempre ha uma divergencia entre os valores de Stop gain e Stop Loss, os valores não ficam como eu preciso, e olha que estou passando valores de por exemplo Stop Gain 600 e Stop loss 200.

Ao colocar a ordem fica na maioria das vezes o stop gain fica 580 e o loss fica 220.

Se alguem poder me ajudar, aguadeço.


Nilson

 

Eu tenho o mesmo problema no meu EA, o preço que você informou na sua ordem é diferente do preço que foi pago no mercado. Por isso gera essa diferença.

Tem que criar um loop para ler o valor real que a ordem foi executada e reposicionar seu stop e take de acordo com esse valor.

Também tenho que ver isso no meu.

Se puder me add no instagran para trocarmos essa informação agradeço. O meu é carlosmartins.erp


abs !

Carlos Martins

 
NFONSECA:

Boa tarde pessoal, estou com um problema no envio de ordens em um EA

Ocorre que ao enviar a ordem sempre ha uma divergencia entre os valores de Stop gain e Stop Loss, os valores não ficam como eu preciso, e olha que estou passando valores de por exemplo Stop Gain 600 e Stop loss 200.

Ao colocar a ordem fica na maioria das vezes o stop gain fica 580 e o loss fica 220.

Se alguem poder me ajudar, aguadeço.


Nilson

Boa tarde,

1) Use ordem a preço limite para a execução ser feita no preço que você solicitou. (*)

2) Ordens a mercado não  precisa colocar o preço na ordem, pode deixar com valor 0(zero),   a execução é feita no preço ofertado no momento que a ordem chega na B3. 

3) O código da normalização de preços só está correto para índice e ações.

4) ORDEM_FILLING_FOK  tem corretora que não aceita.

5) Se a execução foi a mercado, você deve ajustar o SL/TP para o preço que a ordem foi executada.

(*) No modo RETURN a ordem é preenchida no preço solicitado ou a preços melhor que o preço limite.

 
NFONSECA:

Boa tarde pessoal, estou com um problema no envio de ordens em um EA

Ocorre que ao enviar a ordem sempre ha uma divergencia entre os valores de Stop gain e Stop Loss, os valores não ficam como eu preciso, e olha que estou passando valores de por exemplo Stop Gain 600 e Stop loss 200.

Ao colocar a ordem fica na maioria das vezes o stop gain fica 580 e o loss fica 220.

Se alguem poder me ajudar, aguadeço.


Nilson

É pq vc está enviando ordem a mercado, que executa pelo melhor preço disponível. Entre vc ler o Price_V e a ordem ser executada lá na bolsa, o preço já andou 20 pontos, daí a diferença.

Se quiser estabelecer um limite de preço para a execução da ordem, vc tem que enviar ordem limite.

 
Rogerio Giannetti Torres:

Boa tarde,

1) Use ordem a preço limite para a execução ser feita no preço que você solicitou. (*)

2) Ordens a mercado não  precisa colocar o preço na ordem, pode deixar com valor 0(zero),   a execução é feita no preço ofertado no momento que a ordem chega na B3. 

3) O código da normalização de preços só está correto para índice e ações.

4) ORDEM_FILLING_FOK  tem corretora que não aceita.

5) Se a execução foi a mercado, você deve ajustar o SL/TP para o preço que a ordem foi executada.

(*) No modo RETURN a ordem é preenchida no preço solicitado ou a preços melhor que o preço limite.

Obrigado Rogério, entendi agora, os mesmos tipos de ordem de qdo enviamos manual, 

Neste meu caso então seria ORDER_TYPE_SELL_LIMIT para venda ou ORDER_TYPE_BUY_LIMIT para compra?

Nilson

 
NFONSECA:

Obrigado Rogério, entendi agora, os mesmos tipos de ordem de qdo enviamos manual, 

Neste meu caso então seria ORDER_TYPE_SELL_LIMIT para venda ou ORDER_TYPE_BUY_LIMIT para compra?

Nilson

Qdo altero de mrequest.type_filling = ORDER_FILLING_FOK;  para mrequest.type_filling = ORDER_TYPE_SELL_LIMIT;  começo a ter um erro de compilação, para usar este tipo deve estar faltando algo mais>

 
NFONSECA:

Qdo altero de mrequest.type_filling = ORDER_FILLING_FOK;  para mrequest.type_filling = ORDER_TYPE_SELL_LIMIT;  começo a ter um erro de compilação, para usar este tipo deve estar faltando algo mais>

Misturou as estações: vc deve usar mrequest.type=ORDER_TYPE_SELL_LIMIT; e mrequest.type_filling = ORDER_FILLING_RETURN;

 
NFONSECA:

Obrigado Rogério, entendi agora, os mesmos tipos de ordem de qdo enviamos manual, 

Neste meu caso então seria ORDER_TYPE_SELL_LIMIT para venda ou ORDER_TYPE_BUY_LIMIT para compra?

Nilson

Sim
 
Trader_Patinhas:

Misturou as estações: vc deve usar mrequest.type=ORDER_TYPE_SELL_LIMIT; e mrequest.type_filling = ORDER_FILLING_RETURN;

       mrequest.type=ORDER_TYPE_SELL_LIMIT;                                 // Buy Order
       mrequest.type_filling = ORDER_FILLING_RETURN;                        // Order execution type

Sim verdade, você tem razão, o correto é isso.

Obrigado.

 
NFONSECA:

Sim verdade, você tem razão, o correto é isso.

Obrigado.

            ZeroMemory(mrequest);
            mrequest.action=TRADE_ACTION_PENDING;                                // immediate order execution
            mrequest.price = NormalizeDouble(MathRound(Price_V/m_tick_size)*m_tick_size,_Digits);
            mrequest.sl= NormalizeDouble(MathRound(Stop_L/m_tick_size)*m_tick_size,_Digits);
            mrequest.tp= NormalizeDouble(MathRound(Take_P/m_tick_size)*m_tick_size,_Digits);
            mrequest.symbol=_Symbol;                                             // Ativo
            mrequest.volume=Volume;                                              // number of lots to trade
            mrequest.magic=Magic_n;                                              // Order Magic Number
            mrequest.type=ORDER_TYPE_SELL_LIMIT;                                 // Buy Order
            mrequest.type_filling = ORDER_FILLING_RETURN;                        // Order execution type
            mrequest.deviation=100;                                              // Deviation from current price
            //--- send order 
            OrderSend(mrequest,mresult);
            // get the result code
            if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
              {
               Alert("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
               SAIDA_1_OK=false;
               SAIDA_2_OK=false;
               STP_M1 = false;
               STP_M2 = false;  
               STP_M3 = false;              
              }
            else
              {
               Alert("The Sell order request could not be completed -error:",GetLastError());
               ResetLastError();
               return;
              }

Com esta mudança as ordens não são enviadas mais, deve haver outra estrutura para este tipo de ordem, porque assim nenhuma esta sendo enviada.


sds,

Nilson

 
NFONSECA:

Com esta mudança as ordens não são enviadas mais, deve haver outra estrutura para este tipo de ordem, porque assim nenhuma esta sendo enviada.


sds,

Nilson

Nilson,

se não está sendo enviada é porque está dando erro. Printa aqui o conteúdo da aba diário e experts.

Razão: