Bom! Em um outro tópico eu relatei minha experiência com um robô de alta frequência em uma corretora, que estava um delay absurdo na execução das ordens. Decidi mudar de corretora e agora me aparece essa. Consigo executar as ordens, a ordem a posição vai pra o histórico como se tivesse dado TP mas o resultado é 0. Alguém já passou por isso, será que é por conta do alvo de 0.5 ponto ?
Foram 7 operações, todas do mesmo jeito.
Bom,
pois então, no outro tópico vc disse que o TP era uma SELL ou BUY LIMIT com 1 TICKSIZE de gain, ou seja ASK +TICKSIZE ou BID+TICKSIZE, mas acho que não é isso que vc. está fazendo.
Bom,
pois então, no outro tópico vc disse que o TP era uma SELL ou BUY LIMIT com 1 TICKSIZE de gain, ou seja ASK +TICKSIZE ou BID+TICKSIZE, mas acho que não é isso que vc. está fazendo.
Não!! Na verdade a entrada dele é por ordem LIMIT, eu estou colocando na ordem um TP partindo do preço de entrada + 0.5. Utilizar de repente uma saída por uma SELL ou BUY LIMIT, eu não uso essa abordagem pois eu tenho receio de não executar a ordem de saída no caso de utilizar ordem LIMIT (falta de lote no book), se bem que 1, 2 contratos acho que não tem tanto esse risco. O mais estranho é que se eu fizer as operações manualmente, vai tranquilo, mas quando o EA envia a ordem dá isso. Acho que estou errando algo no envio das ordens mesmo.
Aqui está a parte do código de envio de ordem:
//--- Venda if(SignalSell() && AutoTrading() && !CheckPositions() && !CheckOrders() && HorarioEntrada() && !GestaoDiaria() && OrdersAllowed() && wait_order==false) { ResetLastError(); double preco_venda = tick.last+0.5; ulong start = GetMicrosecondCount(); bool ok = m_trade.SellLimit(volume_ordem,preco_venda,_Symbol,preco_venda+inpStoploss,0,ORDER_TIME_DAY,0,NULL); wait_order = true; if(ok) { if(m_trade.ResultRetcode()==10008 || m_trade.ResultRetcode()==10009) { wait_order = false; erro_open_order = 0; ulong latencia = (GetMicrosecondCount() - start) / 1000; Print("[•]Ordem aberta com sucesso. [Latência: ",(string)latencia," ms]"); } else { wait_order = false; erro_open_order = erro_open_order + 1; Print("[X]ERRO - > Falha do servidor. Erro("+(string)GetLastError()+") "+"[Quantidade de erros ao abrir ordem: "+(string)erro_open_order+"]"); } } else { wait_order = false; erro_open_order = erro_open_order + 1; Print("[X]ERRO - > Falha ao enviar ordem. Erro("+(string)GetLastError()+") "+"[Quantidade de erros ao abrir ordem: "+(string)erro_open_order+"]"); } } //--- Compra if(SignalBuy() && AutoTrading() && !CheckPositions() && !CheckOrders() && HorarioEntrada() && !GestaoDiaria() && OrdersAllowed() && wait_order==false) { ResetLastError(); double preco_compra = tick.last-0.5; ulong start = GetMicrosecondCount(); bool ok = m_trade.BuyLimit(volume_ordem,preco_compra,_Symbol,preco_compra-inpStoploss,0,ORDER_TIME_DAY,0,NULL); wait_order = true; if(ok) { if(m_trade.ResultRetcode()==10008 || m_trade.ResultRetcode()==10009) { wait_order = false; erro_open_order = 0; ulong latencia = (GetMicrosecondCount() - start) / 1000; Print("[•]Ordem aberta com sucesso. [Latência: ",(string)latencia," ms]"); } else { wait_order = false; erro_open_order = erro_open_order + 1; Print("[X]ERRO - > Falha do servidor. Erro("+(string)GetLastError()+") "+"[Quantidade de erros ao abrir ordem: "+(string)erro_open_order+"]"); } } else { wait_order = false; erro_open_order = erro_open_order + 1; Print("[X]ERRO - > Falha ao enviar ordem. Erro("+(string)GetLastError()+") "+"[Quantidade de erros ao abrir ordem: "+(string)erro_open_order+"]"); } }
Nesse caso, ao aparecer o sinal, ele posiciona uma ordem pendente 0.5 pontos abaixo ou acima do ultimo preço e busca meio ponto de alvo.
![Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Constantes de Negociação / Propriedades de uma Ordem Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Constantes de Negociação / Propriedades de uma Ordem](https://c.mql5.com/36/45/documenta-o-sobre-mql5-constantes__1.png)
- www.mql5.com
Toda ordem a mercado é executada no preço ASK para compras e no preço BID para vendas, como spread do DOL fica sempre perto de 1(um) ticksize, o seu TP de um ticksize terá como resultado 0(zero). Na verdade nos momentos de pico poderá ter algum ganho.
No código que você anexou o TP está zerado ?!
Toda ordem a mercado é executada no preço ASK para compras e no preço BID para vendas, como spread do DOL fica sempre perto de 1(um) ticksize, o seu TP de um ticksize terá como resultado 0(zero). Na verdade nos momentos de pico poderá ter algum ganho.
No código que você anexou o TP está zerado ?!
Aah sim!! Também imaginei que poderia ser o spread. Então impossibilita buscar 1 TICKSIZE de alvo da forma que está.
Sim o TP está zerado pois eu estava fazendo alguns testes e acabei esquecendo, mas ele estava assim:
bool ok = m_trade.SellLimit(volume_ordem,preco_venda,_Symbol,preco_venda+inpStoploss,preco_venda-inpTakeProfit,ORDER_TIME_DAY,0,NULL);
Aah sim!! Também imaginei que poderia ser o spread. Então impossibilita buscar 1 TICKSIZE de alvo.
Sim o TP está zerado, pois eu estava fazendo alguns testes e acabei esquecendo, mas ele estava assim:
Henrique,
sua busca é um RESUTADO de um TICKSIZE do DOL em relação ao preço de entrada, como eu disse antes não é sonho, é possível sim, mas saia da caixa do LAST, pense nas ofertas, use BuyStopLimit e SellStopLimit e defina os stops usando valores de Ask e Bid.
Henrique,
sua busca é um RESUTADO de um TICKSIZE do DOL em relação ao preço de entrada, como eu disse antes não é sonho, é possível sim, mas saia da caixa do LAST, pense nas ofertas, use BuyStopLimit e SellStopLimit e defina os stops usando valores de Ask e Bid.
Certo!! Vou continuar as pesquisas, testes e pensar bastante nisso que você recomendou. Muito obrigado por tirar um tempo pra responder aos tópicos, tenha certeza que foi de grande valia.
Forte Abraço!
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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
Bom! Em um outro tópico eu relatei minha experiência com um robô de alta frequência em uma corretora, que estava um delay absurdo na execução das ordens. Decidi mudar de corretora e agora me aparece essa. Consigo executar as ordens, a ordem a posição vai pra o histórico como se tivesse dado TP mas o resultado é 0. Alguém já passou por isso, será que é por conta do alvo de 0.5 ponto ?
Foram 7 operações, todas do mesmo jeito.