¿Cómo importar el bid/ask de otro par de divisas? - página 3

 
HosseinKOGO:

¿Cuál es el problema?

Dado que tu Ask2 y Bid2 son 0, ¿por qué no añadir esta línea después de uno de ellos?

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

¿Y ver si hay alguna información útil?

 
HosseinKOGO: Estoy probando GBPAUD como mi gráfico abierto y GBPUSD como mi segundo par.

¿Llamaste a download_history para tu "segundo par", segundo TF?

 
William Roeder:

¿Llamaste a download_history para tu "segundo par", segundo TF?

Aquí está mi á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;
}
.
.
.

Y aquí está mi función de inicio :

   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);
.
.
.

en el que pongo GBPUSD como entrada SecondPair y hago este backtest en el gráfico GBPAUD.

 
Seng Joo Thio:

Dado que tu Ask2 y Bid2 son 0, ¿por qué no añadir esta línea después de uno de ellos?

¿Y ver si hay alguna información útil?

He añadido esta línea que mencionas a mi función de inicio justo después de definir Ask2,Bid2 cuando he desactivado la línea de abajo para dejar que las velas comiencen y el gráfico continúe
while(!download_history(SecondPair,PERIOD_H4) ){ Sleep(1000); RefreshRates(); }

El error fue 4106 que significa "Símbolo desconocido".

Entonces desactivé la línea de abajo también:

download_history(SecondPair,PERIOD_H4);
Y obtuve el error 4066 al principio (Datos históricos solicitados en estado de actualización.) Luego se convirtió en 4106 para el resto del backtesting.
 
HosseinKOGO:
He añadido esta línea que mencionas a mi función de inicio justo después de definir Ask2,Bid2 cuando he desactivado la línea de abajo para dejar que las velas comiencen y el gráfico continúe

El error fue 4106 que significa "Símbolo desconocido".

Entonces deshabilité la línea de abajo también:

Y obtuve el error 4066 al principio (Datos históricos solicitados en estado de actualización.) Luego se convirtió en 4106 para el resto del backtesting.

Sospecho que el nombre de su símbolo no es sólo "GBPUSD"... podría tener caracteres extra en alguna parte... ¿ha probado esto

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

antes de verificar que el nombre del símbolo es sólo seis letras mayúsculas?

 
Seng Joo Thio:

Sospecho que el nombre de tu símbolo no es sólo "GBPUSD"... puede tener caracteres extra en alguna parte... ¿has probado esto

antes de verificar que el nombre del símbolo es sólo seis letras mayúsculas?

Mi función symbol() muestra "GBPAUD" desde que lo puse en el gráfico GBPAUD.
A pesar de que estoy utilizando la cuenta de demostración normal para backtesting, Exactamente 6 letras mayúsculas. Sin embargo he probado esto que sugieres y obtuve el resultado esperado.

También tengo una advertencia cuando compilo el código: "Conversión implícita de enum" que está ahí y que he resaltado a continuación. ¿Qué significa eso exactamente?

#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;
}
 

Creo que he encontrado la razón por la que se obtienen ceros... Puse estas líneas en un script y lo ejecuté en mi 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);
   }

Y me di cuenta de que Ask2 y Bid2 serán cero para los símbolos que no están en mi vigilancia del mercado... pero una vez que los incluyo en mi vigilancia del mercado, puedo obtener su oferta y demanda. No hay necesidad de preocuparse por los datos del historial.

 
Seng Joo Thio:

Creo que he encontrado la razón por la que se obtienen ceros... Puse estas líneas en un script y lo ejecuté en mi MT4:

Y me di cuenta de que Ask2 y Bid2 serán cero para los símbolos que no están en mi vigilancia del mercado... pero una vez que los incluyo en mi vigilancia del mercado, puedo obtener su oferta y demanda. No hay necesidad de preocuparse por los datos del historial.

Tengo esos símbolos en mi ventana de observación del mercado, en la esquina superior izquierda de mi MT4.
Pero si te refieres a que debo incluirlos en mi código, ¿Cómo los incluiste por código? (Si entendí mal por favor acláreme ya que no soy tan profesional :D)

 
HosseinKOGO:

Tengo esos símbolos en mi ventana de market watch, en la esquina superior izquierda de mi MT4.
Pero si te refieres a que debo incluirlos en mi código, ¿Cómo los incluiste por código? (Si entendí mal por favor acláreme ya que no soy tan profesional :D)

Por código no.
Como ya están en tu ventana de vigilancia del mercado, la cosa se pone más rara.
¿De qué broker te has descargado el mt4? Quiero instalarlo para probar.
 
Muchas gracias por su reacción,

De hecho no soy codificador de todos modos he tenido un ir en la codificación de algunos EAs. Mi actividad se asocia con la inventiva y el sistema por lo que conceptualizado 600-700 pensamientos para hacer EAs y construido hasta ahora. Simplemente puedo codificar EAs simples y no estoy acostumbrado a su codificación de estado anormal...

He puesto esos códigos en mi EA sin embargo, devuelve sólo este error: 2019.05.06 15:37:56.586 2018.01.02 00:00:07 ¡MyEA! GBPAUD,H4: iTime(GBPUSD,240) Fallo: 0

Estoy intentando GBPAUD como mi diagrama abierto y GBPUSD como mi segundo par.

¿Cuál es el problema?