Caros, bom dia!
Recentemente programei um simples EA que usava Market Orders, e fiz backtests na série histórica do dólar, o que funcionou sem problemas.
Depois mudei o EA e coloquei Pending Orders, mas, para a minha surpresa, nos backtests sempre aparecia a mensagem "Invalid Expiration" para a BUY STOP/SELL STOP order, testando no WDO@. Por outro lado, testando em PETR4, por exemplo, dava certo.
Bem, não sei o que pode estar ocorrendo, alguém tem alguma idéia? Não consigo fazer o EA funcionar no mini-dólar (backtests na série histórica WDO@).
Muito obrigado a todos!
Olá hegelgb,
Primeira pergunta: qual tipo de expiração você está utilizando para suas ordens em mini-dólar? Lembre-se que em mercados futuros as ordens não ficam "na pedra" de um dia para o outro, como acontece com ativos de mercado à vista. Logo, o tipo de expiração é mesmo diferente para ativos de mercado futuro.
Sugiro você testar os diferentes tipos de expiração disponíveis no MetaTrader 5 e ver você mesmo qual tipo funciona para ordens pendentes em ativos de mercado futuro.
Abraços,
Malacarne
Olá hegelgb,
Primeira pergunta: qual tipo de expiração você está utilizando para suas ordens em mini-dólar? Lembre-se que em mercados futuros as ordens não ficam "na pedra" de um dia para o outro, como acontece com ativos de mercado à vista. Logo, o tipo de expiração é mesmo diferente para ativos de mercado futuro.
Sugiro você testar os diferentes tipos de expiração disponíveis no MetaTrader 5 e ver você mesmo qual tipo funciona para ordens pendentes em ativos de mercado futuro.
Abraços,
Malacarne
Caro Malacarne,
Muito obrigado pela sua orientação. Bem, observei que o tipo que deve funcionar para ativos do mercado futuro é o ORDER_TIME_DAY.
O problema é que agora tah dando erro de "Invalid Price". Puxa, toh quebrando a cabeça com uma coisa tão básica, fico ateh envergonhado rs.
Alguma nova idéia? rsrs
Caro Malacarne,
Muito obrigado pela sua orientação. Bem, observei que o tipo que deve funcionar para ativos do mercado futuro é o ORDER_TIME_DAY.
O problema é que agora tah dando erro de "Invalid Price". Puxa, toh quebrando a cabeça com uma coisa tão básica, fico ateh envergonhado rs.
Alguma nova idéia? rsrs
Qual tipo de ordem você está querendo enviar?
Estou tentando enviar uma ordem do tipo BUY STOP/SELL STOP, que tem o seguinte código fonte básico:
request.action=TRADE_ACTION_PENDING;
request.type=ORDER_TYPE_BUY_STOP;
request.symbol=_Symbol;
request.volume=volume;
request.sl=stop;
request.tp=takeprofit;
request.price=preco;
request.type_filling=ORDER_FILLING_FOK;
request.type_time=ORDER_TIME_DAY;
Esse código fonte funciona na PETR4, mudando o tipo para ORDER_TIME_GTC.
Estou tentando enviar uma ordem do tipo BUY STOP/SELL STOP, que tem o seguinte código fonte básico:
Esse código fonte funciona na PETR4, mudando o tipo para ORDER_TIME_GTC.
Olá hegelgb,
Seria interessante você ir estudando um pouco sobre os tipos de ordens que o MetaTrader coloca.
Assim que você estiver familiarizado com esses tipos de ordens, seria interessante estudar e estrutura de dados necessária para que essas ordens possam ser enviadas pelo MetaTrader.
Lembre-se que ordens do tipo Buy Stop / Sell Stop possuem dois preços relevantes, a saber o preço de "gatilho" da ordem e o preço de "execução". Como sua ordem é "a mercado", o preço de execução é irrelevante. Entretanto, o preço de gatilho continua sendo importante...
Pelo que pude ver em seu código, apenas o preço de execução está sendo determinado, enquanto que o preço de gatilho não...
Espero ter ajudado.
Abraços,
Malacarne
Olá hegelgb,
Seria interessante você ir estudando um pouco sobre os tipos de ordens que o MetaTrader coloca.
Assim que você estiver familiarizado com esses tipos de ordens, seria interessante estudar e estrutura de dados necessária para que essas ordens possam ser enviadas pelo MetaTrader.
Lembre-se que ordens do tipo Buy Stop / Sell Stop possuem dois preços relevantes, a saber o preço de "gatilho" da ordem e o preço de "execução". Como sua ordem é "a mercado", o preço de execução é irrelevante. Entretanto, o preço de gatilho continua sendo importante...
Pelo que pude ver em seu código, apenas o preço de execução está sendo determinado, enquanto que o preço de gatilho não...
Espero ter ajudado.
Abraços,
Malacarne
Caro Malacarne, novamente muito obrigado pelas dicas e informações.
Bem, tive a oportunidade de reestudar os tipos de ordens e a estrutura de dados.
Pelo que entendi da estrutura da ordem do tipo Buy Stop / Sell Stop, existe apenas um preço, dado pelo parâmetro price.
Me corrija se eu estiver errado, mas, uma vez atingido referido preço, numa pending order do tipo buy stop/sell stop, uma ordem a mercado é enviada.
Em assim sendo, dentro da estrutura de dados, quais os parâmetros considerados como preço de gatilho e preço de execução? (repito, só consigo enxergar um preço, qual seja, o parâmetro "price").
Muito obrigado e grande abraço.
Caro Malacarne, novamente muito obrigado pelas dicas e informações.
Bem, tive a oportunidade de reestudar os tipos de ordens e a estrutura de dados.
Pelo que entendi da estrutura da ordem do tipo Buy Stop / Sell Stop, existe apenas um preço, dado pelo parâmetro price.
Me corrija se eu estiver errado, mas, uma vez atingido referido preço, numa pending order do tipo buy stop/sell stop, uma ordem a mercado é enviada.
Em assim sendo, dentro da estrutura de dados, quais os parâmetros considerados como preço de gatilho e preço de execução? (repito, só consigo enxergar um preço, qual seja, o parâmetro "price").
Muito obrigado e grande abraço.
Retirado do link que te passei:
Ordem Pendente Ordem de negociação para colocar uma ordem pendente. Ela requer que se especifique os seguintes 11 campos: 1) action 2) symbol 3) volume 4) price 5) stoplimit 6) sl 7) tp 8) type 9) type_filling 10) type_time 11) expiration Também é possível especificar valores dos campos "magic" e "comment".
Perceba que os campos 4 e 5 são campos referentes a preços.
Entretanto, posso estar enganado, mas apenas o campo 4 precisa ser especificado no case específico de ORDER_TYPE_BUY_STOP / ORDER_TYPE_SELL_STOP. Nesse caso, você deveria verificar qual o tipo de expiração que está sendo utilizado.
A grande maioria dos erros ocorre na hora de especificar o tipo de expiração da ordem.
Abraços,
Malacarne
Retirado do link que te passei:
Perceba que os campos 4 e 5 são campos referentes a preços.
Entretanto, posso estar enganado, mas apenas o campo 4 precisa ser especificado no case específico de ORDER_TYPE_BUY_STOP / ORDER_TYPE_SELL_STOP. Nesse caso, você deveria verificar qual o tipo de expiração que está sendo utilizado.
A grande maioria dos erros ocorre na hora de especificar o tipo de expiração da ordem.
Abraços,
Malacarne
Isso, o campo 5 não seria necessário.
Testei todos os 4 tipos de expiração. Os tipos ORDER_TYPE_GTC, ORDER_TYPE_SPECIFIED e ORDER_TYPE_SPECIFIED_DAY dão erro de Invalid Expiration, ou seja, acredito que não possam ser usados no mercado futuro. Já o tipo ORDER_TYPE_DAY não dá erro de Invalid Expiration, mas de Invalid Price. E isso apenas no mercado futuro, pois testei o mesmo código teste na PETR4 e funcionou.
Brigadão, Malacarne, vou continuar tentando... Você especificamente nunca trabalhou com o mini-dólar?
Abraços,
Hegel
Isso, o campo 5 não seria necessário.
Testei todos os 4 tipos de expiração. Os tipos ORDER_TYPE_GTC, ORDER_TYPE_SPECIFIED e ORDER_TYPE_SPECIFIED_DAY dão erro de Invalid Expiration, ou seja, acredito que não possam ser usados no mercado futuro. Já o tipo ORDER_TYPE_DAY não dá erro de Invalid Expiration, mas de Invalid Price. E isso apenas no mercado futuro, pois testei o mesmo código teste na PETR4 e funcionou.
Brigadão, Malacarne, vou continuar tentando... Você especificamente nunca trabalhou com o mini-dólar?
Abraços,
Hegel
Ativos de mercado futuro não aceitam validade do tipo GTC. Você tem que utilizar ORDER_TYPE_DAY se não me engano. Seria interessante você postar sua requisição completa, para que possamos analisá-la e ver onde está o erro.
Abraços,
Malacarne
Isso, o campo 5 não seria necessário.
Testei todos os 4 tipos de expiração. Os tipos ORDER_TYPE_GTC, ORDER_TYPE_SPECIFIED e ORDER_TYPE_SPECIFIED_DAY dão erro de Invalid Expiration, ou seja, acredito que não possam ser usados no mercado futuro. Já o tipo ORDER_TYPE_DAY não dá erro de Invalid Expiration, mas de Invalid Price. E isso apenas no mercado futuro, pois testei o mesmo código teste na PETR4 e funcionou.
Brigadão, Malacarne, vou continuar tentando... Você especificamente nunca trabalhou com o mini-dólar?
Abraços,
Hegel
Boa tarde Hegel
Estou com o mesmo problema quanto a colocação de Pending Orders no mini dolar e mini indice. Chegou a fazer algum avanço a respeito?
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
Caros, bom dia!
Recentemente programei um simples EA que usava Market Orders, e fiz backtests na série histórica do dólar, o que funcionou sem problemas.
Depois mudei o EA e coloquei Pending Orders, mas, para a minha surpresa, nos backtests sempre aparecia a mensagem "Invalid Expiration" para a BUY STOP/SELL STOP order, testando no WDO@. Por outro lado, testando em PETR4, por exemplo, dava certo.
Bem, não sei o que pode estar ocorrendo, alguém tem alguma idéia? Não consigo fazer o EA funcionar no mini-dólar (backtests na série histórica WDO@).
Muito obrigado a todos!