Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
A melhor maneira de corrigir o prejuízo é pensar corretamente sobre o spread. O spread é a distância entre o Ask e o Bid. Assim, quando você adiciona um stoploss a uma ordem de compra usando Bid - SL inclui automaticamente o spread e você não precisará codificar para ele e poderá efetivamente ignorar totalmente o spread. Para um comércio de venda usando Ask + SL tem o mesmo efeito. Entretanto, BEWARE --- em momentos de baixo volume de negociação o spread fica maior e você pode muito bem acabar com um SL bem longe do lugar que você espera que ele esteja --- portanto você pode querer adicionar algum código para evitar a adição do SL acima de um tamanho de spread definido.
Agora a questão do Spread está fora do caminho, a próxima causa principal de erro 130s é que os preços mudaram enquanto sua EA ainda está em execução. Isto pode ser causado por uma EA que leva muito tempo para ser executada ou o servidor está muito ocupado com a manutenção das operações que atrasam a execução de sua EA. O resultado é que um tick fez com que sua EA começasse a executar, mas outro tick veio antes que a execução tivesse terminado e os preços agora são inválidos.
Em ambos os casos, você precisa atualizar os preços usando RefreshRates: while (RefrshRates() == 1) Sleep(5); ------ ou o que você quiser como tempo de espera.
Em ambos os casos você precisa atualizar os preços usando RefreshRates: while (RefrshRates() == 1) Sleep(5); ------ ou o que você quiser como tempo de espera.
AFAIK RefreshRates() não tem nada a ver com erro 130
Tomando como ponto de vista o RaptorUK e eu concordamos que o uso de MODE_ASK etc. eliminaria a necessidade de RefreshRates() mas eu assumi que, como no exemplo de código do shinobi ....
Eu envio um pedido com, por exemplo:
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);
a variável pré-definida ASK está sendo usada e, portanto, o ask/bid, bem como o valor do spread podem ter mudado, dando o erro 130. Neste caso, então RefreshRates() poderia ser usado imediatamente antes do pedido de envio.
Ponto tomado RaptorUK e eu concordamos que usar MODE_ASK etc eliminaria a necessidade de RefreshRates() mas eu assumi que, como no exemplo de código do shinobi ....
Eu envio um pedido com, por exemplo:
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);
a variável pré-definida ASK está sendo usada e, portanto, o ask/bid, bem como o valor do spread podem ter mudado, dando o erro 130. Neste caso, então RefreshRates() poderia ser usado imediatamente antes do pedido de envio.
Estou um pouco ocupado no momento, mas quando tiver a oportunidade, tentarei todas as suas sugestões e depois escreverei um post resumido para qualquer um que possa tropeçar neste tópico com o mesmo problema.
Obrigado, e tome cuidado!
shinobi
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);
não diz tudo. Como você está calculando o initial_stop - usando Bid?
Como você está calculando SLIPPAGE - ajustando para corretores de 4/5 dígitos?
Tive que fazer uma pausa por um tempo (mudança para uma nova cidade, novo emprego).
Mas agora eu gostaria de retomar este tópico, e finalmente encontrar uma solução para este maldito erro de paralisação #130.
Sou grato por todos os seus conselhos e tentei incorporar tudo isso:
1: Espalhe-se.
2: Mudando as taxas de mercado
3: 4-5 Digits-Broker
Portanto, incorporei todas as sugestões, mas o erro ainda persiste. Tanto quanto posso dizer, ocorre com a mesma freqüência que antes, portanto, tem que haver outra causa para isso.
Aqui está um registro recente:
tickvalue: 12.50000000
pos size: 37.00000000
Ask/Bid 1262.00000000/1261.75000000
stoploss:12.59610000
position_size: 37
Spread 0.25000000
Error could not take long position. O erro é: #130 paradas inválidas
A linha de código OrderSend acima foi usada com os valores registrados para tentar tomar uma posição longa.
Você tem mais alguma idéia, qual poderia ser a causa?
Obrigado!
shinobi
Este é um corretor ECN?
Nos corretores de ECN você deve abrir e ENTÃO definir paradas.
para eliminar a possível causa do número de dígitos inválidos, arredondei o código WHRoeders:
Basta fazer
StopLoss duplo externo = 50;
TakeProfit duplo externo = 50;
então para compras:
duplo SL=Bid - PontoStopLoss*;
double TP=Bid + TakeProfit* Point;
int Ticket=OrderSend(Symbol(),0,1,Ask,2,SL,TP,",12345);
if( Ticket<0) print("error="GetLastError());
para venda:
duplo SL=Ask + PontoStopLoss*;
duplo TP=Ask - TakeProfit*Point;
int Ticket=OrderSend(Symbol(),1,1,Bid,2,SL,TP,",12345);
if( Ticket<0) print("error="GetLastError());
então poste o arquivo de log se ele não funcionar.
SDC:
Eu tentei seu código desta forma:
A única diferença é que eu substituí Point, Ask and Bid por MarketInfo para evitar o problema de RefreshRates mencionado por Raptor e BigAI.
O problema persiste com este simples exemplo. Eu ainda recebo
#ESZ1,M5: Posição de Abertura
#ESZ1,M5: valor do tick: 12.50000000
#ESZ1,M5: tamanho pos: 1.00000000
#ESZ1,M5: Ask/Bid 1244.50000000/1244.25000000
#ESZ1,M5: Espalhamento 0,25000000
#ESZ1,M5: SL: 1244.00000000
#ESZ1,M5: TP: 1245.00000000
#ESZ1,M5: erro=130
Raptor:
Atualmente uso a UWC-Trader com uma conta demo para testes.
Como mencionado anteriormente, eu estou negociando Futuros. Por exemplo, ESZ1 e FDXZ1.
WHRoeder:
Desculpe, eu também não arredondo. Substitua "arredondar" por "ajustar para corretores de 4/5 dígitos". I.E. Eu acabei de aplicar seu código.
Também coloquei o OrderSend exatamente como o utilizo em minha resposta anterior. E os valores de todas as variáveis envolvidas. Não tenho certeza de qual outra parte do código seria interessante.
Como o mini-exemplo, sugerido pela SDC, mostrou, o erro pode ser decomposto a este código simples. Portanto, ele deve ser mais fundamental.
Não estou comercializando Metais, portanto, o arredondamento não deve ser importante.
Vou tentar a seguir:
abrindo (sem perda de carga) e depois modificando (estabelecendo perda de carga) mais tarde.
Obrigado novamente por suas idéias,
shinobi