Wie importiere ich Bid/Ask aus einem anderen Währungspaar? - Seite 3

 
HosseinKOGO:

Wo liegt das Problem?

Da Ihre Ask2 und Bid2 sind 0, warum nicht diese Zeile nach einem von ihnen hinzufügen?

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

Und sehen Sie, ob es irgendwelche nützlichen Informationen gibt?

 
HosseinKOGO: Ich versuche GBPAUD als mein geöffnetes Diagramm und GBPUSD als mein zweites Paar.

Haben Sie download_history für Ihr "zweites Paar", die zweite TF, aufgerufen?

 
William Roeder:

Haben Sie download_history für Ihr "zweites Paar", die zweite TF, aufgerufen?

Hier ist mein globaler Bereich:
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;
}
.
.
.

Und hier ist meine Startfunktion:

   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 dem ich GBPUSD als SecondPair-Input eingebe und diesen Backtest auf dem GBPAUD-Chart durchführe.

 
Seng Joo Thio:

Da Ihr Ask2 und Bid2 0 sind, warum fügen Sie diese Zeile nicht nach einem der beiden ein?

Und sehen Sie, ob es irgendwelche nützlichen Informationen gibt?

Ich habe diese Zeile, die Sie erwähnt haben, in meine Startfunktion eingefügt, direkt nachdem ich Ask2,Bid2 definiert habe, wenn ich die Zeile unten deaktiviert habe, damit die Kerzen starten und der Chart weiterläuft
while(!download_history(SecondPair,PERIOD_H4) ){ Sleep(1000); RefreshRates(); }

Der Fehler war 4106, was "Unbekanntes Symbol" bedeutet.

Dann habe ich auch die Zeile darunter deaktiviert:

download_history(SecondPair,PERIOD_H4);
Und bekam zuerst den Fehler 4066 (Requested history data in updating state.) Dann wurde es 4106 für den Rest des Backtestings.
 
HosseinKOGO:
Ich habe die von Ihnen erwähnte Zeile in meine Startfunktion eingefügt, direkt nach der Definition von Ask2,Bid2, wenn ich die Zeile unten deaktiviert habe, damit die Kerzen starten und der Chart weiterläuft

Der Fehler war 4106, was "Unbekanntes Symbol" bedeutet.

Dann habe ich die Zeile unten auch deaktiviert:

Und bekam zuerst den Fehler 4066 (Requested history data in updating state.) Dann wurde es 4106 für den Rest des Backtestings.

Ich vermute, dass Ihr Symbolname nicht nur "GBPUSD" lautet... er könnte irgendwo zusätzliche Zeichen enthalten... haben Sie das schon einmal versucht:

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

um zu überprüfen, dass der Symbolname nur aus sechs Großbuchstaben besteht?

 
Seng Joo Thio:

Ich vermute, dass der Name Ihres Symbols nicht nur "GBPUSD" lautet... er könnte irgendwo zusätzliche Zeichen enthalten... haben Sie dies versucht:

um zu überprüfen, ob der Symbolname nur aus sechs Großbuchstaben besteht?

Meine symbol()-Funktion zeigt "GBPAUD" an, da ich es auf den GBPAUD-Chart gelegt habe.
Spite, dass ich mit normalen Demo-Konto für Backtesting, Genau 6 Großbuchstaben. Allerdings habe ich versucht, diese Sie vorschlagen und bekam erwartete Ergebnis.

Ich habe eine Warnung auch, wenn ich den Code kompilieren: "implizite Enum-Konvertierung", die es ich unten hervorgehoben habe. Was bedeutet das genau?

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

Ich glaube, ich habe den Grund gefunden, warum Sie Nullen erhalten... Ich setzte diese Zeilen in ein Skript und führen Sie es auf meinem 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);
   }

Und ich habe festgestellt, dass Ask2 und Bid2 für Symbole, die nicht in meiner Marktbeobachtung sind, null sind... aber sobald ich sie in meine Marktbeobachtung aufnehme, kann ich ihr Bid und Ask bekommen. Es gibt keinen Grund, sich um die historischen Daten zu kümmern.

 
Seng Joo Thio:

Ich glaube, ich habe den Grund gefunden, warum Sie Nullen erhalten... Ich setzte diese Zeilen in ein Skript und führen Sie es auf meinem MT4:

Und ich habe festgestellt, dass Ask2 und Bid2 für Symbole, die nicht in meiner Marktbeobachtung sind, null sind... aber sobald ich sie in meine Marktbeobachtung aufnehme, kann ich ihr Bid und Ask bekommen. Es gibt keinen Grund, sich um die historischen Daten zu kümmern.

Ich habe diese Symbole in meinem Marktbeobachtungsfenster in der oberen linken Ecke meines MT4.
Aber wenn Sie meinen, dass ich sie in meinen Code einbinden sollte, wie haben Sie sie in den Code eingebunden? (Wenn ich falsch verstanden habe, klären Sie mich bitte auf, da ich nicht so ein Profi bin :D)

 
HosseinKOGO:

Ich habe diese Symbole in meinem Markt beobachten Fenster, obere linke Ecke meines MT4.
Aber wenn Sie meinen, ich sollte sie in meinen Code einbinden, wie haben Sie sie per Code eingebunden? (Wenn ich falsch verstanden habe, klären Sie mich bitte auf, da ich nicht so ein Profi bin :D)

Nicht Code.
Da sie bereits in Ihrem Marktbeobachtungsfenster sind, werden die Dinge immer seltsamer.
Von welchem Broker hast du dein mt4 heruntergeladen? Ich möchte es zum Testen installieren.
 
Vielen Dank für Ihre Reaktion,

In der Tat bin ich kein Coder, trotzdem habe ich mich an der Programmierung einiger EAs versucht. Meine Tätigkeit ist mit Erfindungsreichtum und System verbunden, so dass ich konzeptioniert 600-700 Gedanken für die Herstellung von EAs und konstruiert sie bis jetzt. Ich kann einfach nur einfache EAs codieren und bin nicht an Ihre abnormale Zustandscodierung gewöhnt...

Ich habe diese Codes in meinen EA eingebaut, aber er liefert nur diesen Fehler: 2019.05.06 15:37:56.586 2018.01.02 00:00:07 MyEA! GBPAUD,H4: iTime(GBPUSD,240) Failed: 0

Ich versuche GBPAUD als mein erstes Diagramm und GBPUSD als mein zweites Paar.

Was ist das Problem?