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
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.
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.
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
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>
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;
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
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.
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
- 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 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