Programar pra indice X Programar pra Forex

 

Eu tenho alguns robôs aqui, eu percebi que eles rodem no indice, mas no forex não rodam. Gostaria de saber se existe uma forma de programar pra qualquer ativo,ou pelo menos pra indice e forex. Eu uso a classe CTrade, MqlTick. Mas no forex, dá esse problema no meu EA:


Existe alguma diferença no calculo dos pontos, eu estou usando:


if(candle[1].open > ma[1] && candle[1].close > ma[1] && candle[1].close > candle[2].high && m_symbol.Last() > candle[1].high  && HorarioEntrada()){
  m_trade.Buy(Lots,m_symbol.Name(),m_symbol.Ask(),0,0,NULL);
  }
 
HENRIQUE ARAUJO DOS SANTOS:

Eu tenho alguns robôs aqui, eu percebi que eles rodem no indice, mas no forex não rodam. Gostaria de saber se existe uma forma de programar pra qualquer ativo,ou pelo menos pra indice e forex. Eu uso a classe CTrade, MqlTick. Mas no forex, dá esse problema no meu EA:


Existe alguma diferença no calculo dos pontos, eu estou usando:


Olá Henrique, 

Existe toda a diferença.... na quantidade de pontos, nos valores, nos gap´s, enfim, não sugiro você adaptar seu EA para forex sem antes  estudar profundamente o mercado forex.

Uma vez que você faça isso será tão claro quanto a água o que você precisará mudar no seus códigos para funcionar no forex.

 

Olá,

Tente não informar o preço Ask para comprar ao valor do mercado.

No Forex existe spread que não permite comprar ao preço corrente Ask.

O spread também vale para as saídas e stops.


Ivan

 
Ivan Ronchi:

Olá,

Tente não informar o preço Ask para comprar ao valor do mercado.

No Forex existe spread que não permite comprar ao preço corrente Ask.

O spread também vale para as saídas e stops.


Ivan

Como seria isso? Poderia ser no no preço corrente então ? Se puder me passar um exemplo de emvio de ordem no forex, ficarei grato.

 
HENRIQUE ARAUJO DOS SANTOS:



Olá Henrique,

esse preço de  EUR 2,70  está totalmente errado, né !!???  Veja se tem comando RefreshRates() no OnTick(),  e veja se executou o m_symbol.Name(_Symbol)  (só precisa executar uma vez) antes do RefreshRates().

 
HENRIQUE ARAUJO DOS SANTOS:

Como seria isso? Poderia ser no no preço corrente então ? Se puder me passar um exemplo de emvio de ordem no forex, ficarei grato.

  m_trade.Buy(Lots,m_symbol.Name(), 0,0, 0, NULL);

 
Rogerio Giannetti Torres:

Olá Henrique,

esse preço de  EUR 2,70  está totalmente errado, né !!???  Veja se tem comando RefreshRates() no OnTick(),  e veja se executou o m_symbol.Name(_Symbol)  (só precisa executar uma vez) antes do RefreshRates().

Sim!! Em OnInit eu coloquei...

if(!m_symbol.Name(Symbol())) 
   return(INIT_FAILED);
   RefreshRates();
 

Tenta assim o codigo

if(candle[1].open > ma[1] && candle[1].close > ma[1] && candle[1].close > candle[2].high && m_symbol.Last() > candle[1].high && HorarioEntrada()){ m_trade.Buy(Lots,m_symbol.Name(),NormalizeDouble(m_symbol.Ask(),_Digits),0,0,NULL); }

 
HENRIQUE ARAUJO DOS SANTOS:

Sim!! Em OnInit eu coloquei...

Olá Henrique,

1) Coloca RefreshRates() dentro do OnTick() para pegar a última cotação do instrumento. Você colocou no OnInit(), ou seja pegou uma única vez a cotação, mesmo assim tem algo muito errado no programa.

2) A cotação de XAUEUR está em EUR 1483,33, então faz o seguinte, coloca um print (m_symbol,Name()," ",m_symbol.Ask()); antes do trade.buy(), para enxergar o que está acontecendo.

 

Problema resolvido. Usando o m_symbol.NormalizePrice, _Point e trazendo o RefreshRates() pra dentro de OnTick() tudo foi resolvido. Era só uma questão de atenção. 


Grato a todos que responderam.

Razão: