Comment importer le bid/ask d'une autre paire de devises ? - page 3

 
HosseinKOGO:

Quel est le problème ?

Puisque votre Ask2 et Bid2 sont 0, pourquoi ne pas ajouter cette ligne après l'un d'eux ?

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

Et voir s'il y a des informations utiles ?

 
HosseinKOGO: J'essaie GBPAUD comme graphique ouvert et GBPUSD comme deuxième paire.

Avez-vous appelé download_history pour votre "deuxième paire", votre deuxième TF ?

 
William Roeder:

Avez-vous appelé download_history pour votre "seconde paire", votre seconde TF ?

Voici ma zone 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;
}
.
.
.

Et voici ma fonction de démarrage :

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

dans lequel je mets GBPUSD comme entrée SecondPair et je fais ce backtest sur le graphique GBPAUD.

 
Seng Joo Thio:

Puisque votre Ask2 et Bid2 sont 0, pourquoi ne pas ajouter cette ligne après l'un d'eux ?

Et voir s'il y a des informations utiles ?

J'ai ajouté cette ligne que vous avez mentionnée à ma fonction de démarrage juste après avoir défini Ask2,Bid2 lorsque j'ai désactivé la ligne ci-dessous afin de laisser les bougies démarrer et le graphique continuer.
while(!download_history(SecondPair,PERIOD_H4) ){ Sleep(1000); RefreshRates(); }

L'erreur était 4106 qui signifie "Symbole inconnu".

Ensuite, j'ai désactivé la ligne ci-dessous également :

download_history(SecondPair,PERIOD_H4);
Et j'ai obtenu l'erreur 4066 au début (Requested history data in updating state.) Puis elle est devenue 4106 pour le reste du backtesting.
 
HosseinKOGO:
J'ai ajouté la ligne que vous avez mentionnée à ma fonction de démarrage juste après avoir défini Ask2,Bid2 lorsque j'ai désactivé la ligne ci-dessous afin de laisser les bougies démarrer et le graphique continuer.

L'erreur était 4106, ce qui signifie "Symbole inconnu".

Ensuite, j'ai désactivé la ligne ci-dessous également :

Et j'ai eu l'erreur 4066 au début (Requested history data in updating state.) Puis c'est devenu 4106 pour le reste du backtesting.

Je soupçonne que le nom de votre symbole n'est pas juste "GBPUSD"... il pourrait avoir des caractères supplémentaires quelque part... avez-vous essayé ceci :

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

avant de vérifier que le nom du symbole ne comporte que six lettres majuscules ?

 
Seng Joo Thio:

Je soupçonne que votre nom de symbole n'est pas seulement "GBPUSD"... il pourrait avoir des caractères supplémentaires quelque part... avez-vous essayé ceci :

avant de vérifier que le nom du symbole ne comporte que six lettres majuscules ?

Ma fonction symbol() affiche "GBPAUD" depuis que je l'ai placé sur le graphique GBPAUD.
Malgré le fait que j'utilise un compte de démonstration normal pour le backtesting, exactement 6 lettres majuscules. Cependant, j'ai essayé ce que vous suggérez et j'ai obtenu le résultat escompté.

J'ai également un avertissement lorsque je compile le code : "implicit enum conversion" qui est là, j'ai souligné ci-dessous. Qu'est-ce que cela signifie exactement ?

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

Je pense avoir trouvé la raison pour laquelle vous obtenez des zéros... J'ai mis ces lignes dans un script et je l'ai exécuté sur mon 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);
   }

Et j'ai réalisé que Ask2 et Bid2 seront zéro pour les symboles qui ne sont pas dans ma surveillance du marché... mais une fois que je les inclus dans ma surveillance du marché, je peux obtenir leur bid et ask. Il n'y a pas besoin de se préoccuper des données historiques.

 
Seng Joo Thio:

Je pense avoir trouvé la raison pour laquelle vous obtenez des zéros... J'ai mis ces lignes dans un script et je l'ai exécuté sur mon MT4 :

Et j'ai réalisé que Ask2 et Bid2 seront zéro pour les symboles qui ne sont pas dans ma surveillance du marché... mais une fois que je les inclus dans ma surveillance du marché, je peux obtenir leur bid et ask. Il n'y a pas besoin de se préoccuper des données historiques.

J'ai ces symboles dans ma fenêtre de surveillance du marché, dans le coin supérieur gauche de mon MT4.
Mais si vous voulez dire que je dois les inclure dans mon code, comment les avez-vous inclus par code ? (Si j'ai mal compris, veuillez me clarifier car je ne suis pas un pro :D)

 
HosseinKOGO:

J'ai ces symboles dans ma fenêtre de surveillance du marché, dans le coin supérieur gauche de mon MT4.
Mais si vous voulez dire que je dois les inclure dans mon code, comment les avez-vous inclus par code ? (Si j'ai mal compris, veuillez me clarifier car je ne suis pas un pro :D)

Pas en code.
Comme ils sont déjà dans votre fenêtre de surveillance du marché, les choses deviennent plus étranges.
De quel courtier avez-vous téléchargé votre mt4 ? Je veux l'installer pour le tester.
 
Merci beaucoup à vous pour votre réaction,

En effet, je ne suis pas un codeur, mais j'ai quand même essayé de coder quelques EA. Mon activité est associée à l'inventivité et au système donc j'ai conceptualisé 600-700 pensées pour faire des EAs et les ai construites jusqu'à maintenant. Je peux simplement coder des EAs simples et je ne suis pas habitué à votre codage en état anormal...

J'ai mis ces codes dans mon EA mais il ne retourne que cette bourde : 2019.05.06 15:37:56.586 2018.01.02 00:00:07 MyEA ! GBPAUD,H4 : iTime(GBPUSD,240) Échec : 0

Je tente GBPAUD comme diagramme ouvert et GBPUSD comme deuxième paire.

Quel est le problème ?