Como importar bid/ask de outro par de moedas? - página 3

 
HosseinKOGO:

Qual é o problema?

Já que seu Ask2 e Bid2 são 0, por que não adicionar esta linha após um deles?

Print("MarketInfo Error = ", GetLastError());

E ver se há alguma informação útil?

 
HosseinKOGO: Estou tentando GBPAUD como meu gráfico aberto e GBPUSD como meu segundo par.

Você chamou o download_history para seu "segundo par", segundo TF?

 
William Roeder:

Você chamou o download_history para seu "segundo par", segundo TF?

Aqui está a minha área global:
extern string SecondPair;
double Ask2,Bid2;

#define  HR2400 PERIOD_D1 * 60    // 86400 = 24 * 3600
int      TimeOfDay(datetime when=0){      if(when == 0)  when = TimeCurrent();
                                          return( int(when % HR2400 ));            }
datetime DateOfDay(datetime when=0){      if(when == 0)  when = TimeCurrent();
                                          return( when - TimeOfDay(when) );   }
#define  SYMBOL string
#define  THIS_SYMBOL ""
bool  download_history(ENUM_TIMEFRAMES period=PERIOD_CURRENT){
   return download_history(_Symbol, period); 
}
bool  download_history(
      SYMBOL            symbol=THIS_SYMBOL,     ///< The symbol required.
      ENUM_TIMEFRAMES   period=PERIOD_CURRENT   /**< The standard timeframe.*/){
   if(symbol == THIS_SYMBOL)     symbol = _Symbol;
   if(period == PERIOD_CURRENT)  period = _Period;
   datetime today = DateOfDay();
   ResetLastError();
   datetime other = iTime(symbol, period, 0);
   if(_LastError == 0 
   && today == DateOfDay(other)) return true;   
   if(_LastError != ERR_HISTORY_WILL_UPDATED
   && _LastError != ERR_NO_HISTORY_DATA
     ) Print(StringFormat("iTime(%s,%i) Failed: %i", symbol, period,_LastError));
   return false;
}
.
.
.

E aqui está minha função inicial:

   download_history(SecondPair,PERIOD_H4);
   while(!download_history(SecondPair,PERIOD_H4) ){ Sleep(1000); RefreshRates(); }
   Ask2=SymbolInfoDouble(SecondPair,SYMBOL_ASK);
   Bid2=SymbolInfoDouble(SecondPair,SYMBOL_BID);
   Comment(Ask2,Bid2);
.
.
.

no qual eu coloco o GBPUSD como entrada do SecondPair e faço este backtest no gráfico GBPAUD.

 
Seng Joo Thio:

Como seu Ask2 e Bid2 são 0, por que não adicionar esta linha depois de uma delas?

E ver se há alguma informação útil?

Eu adicionei esta linha que você mencionou à minha função inicial logo após definir Ask2,Bid2 quando desabilitei a linha abaixo para deixar as velas começarem e o gráfico continuar
while(!download_history(SecondPair,PERIOD_H4) ){ Sleep(1000); RefreshRates(); }

O erro foi 4106 que significa "Símbolo desconhecido".

Então eu desabilitei a linha abaixo também:

download_history(SecondPair,PERIOD_H4);
E obteve o erro 4066 no início (Dados históricos solicitados em estado de atualização.) Em seguida, girou 4106 para o restante do backtesting.
 
HosseinKOGO:
Adicionei esta linha que você mencionou à minha função inicial logo após definir Ask2,Bid2 quando desabilitei a linha abaixo a fim de deixar as velas começarem e o gráfico continuar

O erro foi 4106 que significa "Símbolo desconhecido".

Então desabilitei também a linha abaixo:

E obteve o erro 4066 no início (Dados históricos solicitados em estado de atualização.) Em seguida, girou 4106 para o restante do backtesting.

Suspeito que o nome de seu símbolo não seja apenas "GBPUSD"... ele pode ter caracteres extras em algum lugar... você já tentou isso:

Print("Symbol Name = ", Symbol());

antes de verificar que o nome do símbolo é apenas seis letras maiúsculas?

 
Seng Joo Thio:

Suspeito que seu nome simbólico não seja apenas "GBPUSD"... pode ter caracteres extras em algum lugar... você já tentou isso:

antes de verificar que o nome do símbolo é apenas seis letras maiúsculas?

Minha função de símbolo() mostra "GBPAUD" desde que o coloquei no gráfico GBPAUD.
Apesar de eu estar usando a conta demo normal para testes, Exatamente 6 letras maiúsculas. Entretanto, eu tentei isto que você sugere e obtive o resultado esperado.

Eu tenho um aviso também quando compilar o código: "implicit enum conversion" (conversão de enumeração implícita), que está lá, que eu sublinhei abaixo. O que isso significa exatamente?

#define  HR2400 PERIOD_D1 * 60    // 86400 = 24 * 3600
int      TimeOfDay(datetime when=0){      if(when == 0)  when = TimeCurrent();
                                          return( int(when % HR2400 ));            }
datetime DateOfDay(datetime when=0){      if(when == 0)  when = TimeCurrent();
                                          return( when - TimeOfDay(when) );   }
#define  SYMBOL string
#define  THIS_SYMBOL ""
bool  download_history(ENUM_TIMEFRAMES period=PERIOD_CURRENT){
   return download_history(_Symbol, period); 
}
bool  download_history(
      SYMBOL            symbol=THIS_SYMBOL,     ///< The symbol required.
      ENUM_TIMEFRAMES   period=PERIOD_CURRENT   /**< The standard timeframe.*/){
   if(symbol == THIS_SYMBOL)     symbol = _Symbol;
   if(period == PERIOD_CURRENT)  period = _Period;
   datetime today = DateOfDay();
   ResetLastError();
   datetime other = iTime(symbol, period, 0);
   if(_LastError == 0 
   && today == DateOfDay(other)) return true;   
   if(_LastError != ERR_HISTORY_WILL_UPDATED
   && _LastError != ERR_NO_HISTORY_DATA
     ) Print(StringFormat("iTime(%s,%i) Failed: %i", symbol, period,_LastError));
   return false;
}
 

Acho que encontrei a razão pela qual você recebe zeros... Coloquei estas linhas em um roteiro e o executei em meu MT4:

   for (int i=SymbolsTotal(false)-1; i>=0; i--)
   {
      string SName = SymbolName(i,false);
      Ask2=SymbolInfoDouble(SName,SYMBOL_ASK);
      Bid2=SymbolInfoDouble(SName,SYMBOL_BID);
      Print (SName, " Ask = ", Ask2, ", Bid = ", Bid2);
   }

E percebi que Ask2 e Bid2 serão zero para símbolos não em meu relógio de mercado... mas uma vez que os incluo em meu relógio de mercado, posso obter sua oferta e perguntar. Não há necessidade de se preocupar com dados históricos.

 
Seng Joo Thio:

Acho que encontrei a razão pela qual você recebe zeros... Coloquei estas linhas em um roteiro e o executei em meu MT4:

E percebi que Ask2 e Bid2 serão zero para símbolos não em meu relógio de mercado... mas uma vez que os incluo em meu relógio de mercado, posso obter sua oferta e perguntar. Não há necessidade de se preocupar com dados históricos.

Tenho esses símbolos na janela do meu relógio de mercado, no canto superior esquerdo do meu MT4.
Mas se você quer dizer que eu deveria incluí-los em meu código, como você os incluiu por código? (Se eu não entendi bem, por favor me esclareça, já que não sou tão profissional quanto isso :D)

 
HosseinKOGO:

Tenho esses símbolos na minha janela de observação do mercado, no canto superior esquerdo do meu MT4.
Mas se você quer dizer que eu deveria incluí-los em meu código, como você os incluiu por código? (Se eu não entendi bem, por favor me esclareça, já que não sou tão profissional quanto isso :D)

Não código.
Como eles já estão na janela de seu relógio de mercado, as coisas estão ficando mais estranhas.
De qual corretor você fez o download de seu mt4? Eu quero instalá-lo para testar.
 
Muito obrigado a você por sua reação,

De fato, não sou codificador de qualquer forma, já tive a oportunidade de codificar alguns EAs. Minha atividade está associada à inventividade e ao sistema, então concebi 600-700 pensamentos para fazer EAs e os construí até agora. Eu simplesmente posso codificar EAs simples e não estou acostumado com sua codificação de estado anormal...

Coloquei esses códigos em meu EA, porém ele retorna apenas este erro: 2019.05.06 15:37:56.586 2018.01.02 00:00:07 MyEA! GBPAUD,H4: iTime(GBPUSD,240) Falha: 0

Estou tentando GBPAUD como meu diagrama aberto e GBPUSD como meu segundo par.

Qual é o problema?