Come importare bid/ask da un'altra coppia di valute? - pagina 3

 
HosseinKOGO:

Qual è il problema?

Dato che i tuoi Ask2 e Bid2 sono 0, perché non aggiungere questa linea dopo uno di essi?

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

E vedere se c'è qualche informazione utile?

 
HosseinKOGO: Sto provando GBPAUD come grafico aperto e GBPUSD come seconda coppia.

Hai chiamato download_history per la tua "seconda coppia", secondo TF?

 
William Roeder:

Hai chiamato download_history per la tua "seconda coppia", secondo TF?

Ecco la mia area globale:
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;
}
.
.
.

Ed ecco la mia funzione di avvio:

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

in cui metto GBPUSD come input SecondPair e faccio questo backtest sul grafico GBPAUD.

 
Seng Joo Thio:

Dato che i tuoi Ask2 e Bid2 sono 0, perché non aggiungere questa linea dopo uno di essi?

E vedere se c'è qualche informazione utile?

Ho aggiunto questa linea che hai menzionato alla mia funzione di avvio subito dopo aver definito Ask2,Bid2 quando ho disabilitato la linea sottostante per lasciare che le candele partano e il grafico vada avanti
while(!download_history(SecondPair,PERIOD_H4) ){ Sleep(1000); RefreshRates(); }

L'errore era 4106 che significa "simbolo sconosciuto".

Allora ho disabilitato anche la linea sottostante:

download_history(SecondPair,PERIOD_H4);
E ho ottenuto l'errore 4066 all'inizio (dati storici richiesti in stato di aggiornamento.) Poi è diventato 4106 per il resto del backtesting.
 
HosseinKOGO:
Ho aggiunto questa linea che hai menzionato alla mia funzione di avvio subito dopo aver definito Ask2,Bid2 quando ho disattivato la linea sottostante per permettere alle candele di iniziare e al grafico di continuare

L'errore era 4106 che significa "simbolo sconosciuto".

Poi ho disabilitato anche la linea sottostante:

E ho ottenuto l'errore 4066 all'inizio (dati storici richiesti in stato di aggiornamento.) Poi è diventato 4106 per il resto del backtesting.

Ho il sospetto che il nome del tuo simbolo non sia solo "GBPUSD"... potrebbe avere dei caratteri extra da qualche parte... hai provato questo:

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

prima di verificare che il nome del simbolo sia solo sei lettere maiuscole?

 
Seng Joo Thio:

Ho il sospetto che il nome del tuo simbolo non sia solo "GBPUSD"... potrebbe avere dei caratteri extra da qualche parte... hai provato questo:

prima di verificare che il nome del simbolo sia solo sei lettere maiuscole?

La mia funzione symbol() mostra "GBPAUD" da quando l'ho messo sul grafico GBPAUD.
Nonostante stia usando un normale conto demo per il backtesting, esattamente 6 lettere maiuscole. Tuttavia ho provato questo suggerimento e ho ottenuto il risultato atteso.

Ho un avvertimento anche quando compilo il codice: "conversione enum implicita" che è lì che ho evidenziato qui sotto. Cosa significa esattamente?

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

Penso di aver trovato il motivo per cui si ottengono degli zeri... Ho messo queste righe in uno script e l'ho eseguito sul mio 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 mi sono reso conto che Ask2 e Bid2 saranno zero per i simboli che non sono nel mio market watch... ma una volta che li includo nel mio market watch, posso ottenere i loro bid e ask. Non c'è bisogno di preoccuparsi dei dati storici.

 
Seng Joo Thio:

Penso di aver trovato il motivo per cui si ottengono degli zeri... Ho messo queste righe in uno script e l'ho eseguito sul mio MT4:

E mi sono reso conto che Ask2 e Bid2 saranno zero per i simboli che non sono nel mio market watch... ma una volta che li includo nel mio market watch, posso ottenere i loro bid e ask. Non c'è bisogno di preoccuparsi dei dati storici.

Ho quei simboli nella mia finestra di osservazione del mercato, in alto a sinistra del mio MT4.
Ma se intendi che dovrei includerli nel mio codice, come li hai inclusi nel codice? (Se ho capito male, per favore chiariscimi, visto che non sono un professionista :D)

 
HosseinKOGO:

Ho quei simboli nella mia finestra di osservazione del mercato, nell'angolo superiore sinistro del mio MT4.
Ma se intendi che dovrei includerli nel mio codice, come li hai inclusi nel codice? (Se ho capito male per favore chiariscimi visto che non sono un professionista :D)

Non codice.
Dal momento che sono già nella tua finestra di osservazione del mercato, le cose diventano più strane.
Da quale broker hai scaricato il tuo mt4? Voglio installarlo per testarlo.
 
Molte grazie a voi per la vostra reazione,

In effetti non sono un codificatore, ma ho provato a codificare alcuni EA. La mia attività è associata all'inventiva e al sistema quindi ho concettualizzato 600-700 pensieri per fare EAs e li ho costruiti fino ad ora. Posso semplicemente codificare semplici EAs e non sono abituato alla vostra codifica di stato anormale...

Ho messo questi codici nel mio EA, ma restituisce solo questo errore: 2019.05.06 15:37:56.586 2018.01.02 00:00:07 MyEA! GBPAUD,H4: iTime(GBPUSD,240) Fallito: 0

Sto tentando GBPAUD come diagramma aperto e GBPUSD come seconda coppia.

Qual è il problema?