Como programar Pending Orders para o mini-dólar

 

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! 

 
hegelgb:

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 

 
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 

 
hegelgb:

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?
 
Malacarne:
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

 
hegelgb:

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 

 
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.

 
hegelgb:

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 


 
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 

 
hegelgb:

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 

 
hegelgb:

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 

Razão: