他の通貨ペアからbid/askをインポートする方法は? - ページ 3

 
HosseinKOGO:

何が問題なのでしょうか?

Ask2とBid2が0なので、どちらかの行の後にこの行を追加してみてはいかがでしょうか?

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

そして、何か有用な情報があるかどうか見てみましょうか?

 
HosseinKOGO:開いたチャートが GBPAUDで、セカンドペアがGBPUSDで試しています。

2つ目のペア」である2つ目のTFに対してdownload_historyを 呼び出したのでしょうか?

 
William Roeder:

2つ目のペア、2つ目のTFに対してdownload_historyを 呼び出したのでしょうか?

これが私のグローバルエリアです。
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;
}
.
.
.

そして、これが私のスタート関数 です。

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

で、GBPUSDをSecondPairの入力として入れて、GBPAUDチャートでこのバックテストをしています。

 
Seng Joo Thio:

Ask2とBid2が0なので、どちらかの行の後にこの行を追加してみてはいかがでしょうか?

そして、有用な情報があるかどうか見てみましょう。

私はローソク足が始まり、チャートが進むようにするために、以下の行を無効にしたとき、私のスタート関数にあなたが言ったこの行を追加しました Ask2、Bid2定義直後。
while(!download_history(SecondPair,PERIOD_H4) ){ Sleep(1000); RefreshRates(); }

エラーは4106で、"Unknown symbol "という意味です。

そして、下の行も無効にしてみました。

download_history(SecondPair,PERIOD_H4);
すると、最初4066エラー(更新中の履歴データを要求されました)が出て、その後4106になりました。
 
HosseinKOGO:
私は、ローソク足が始まってチャートが進むようにするために、下の行を無効にして、Ask2,Bid2を定義した直後に、あなたが言ったこの行を私のスタート関数に追加しました。

エラーは4106で、"Unknown symbol "という意味です。

それから、下の行も無効にしました。

すると、最初4066エラー(Requested history data in updating state)が出て、その後4106になりました。

あなたのシンボル名は単に "GBPUSD "ではないのでは...どこかに余分な文字があるのでは...これを試したことがありますか。

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

シンボル名が6文字の大文字であることを確認するために、この行を追加しましたか?

 
Seng Joo Thio:

シンボル名が "GBPUSD "だけではないのでは...どこかに余計な文字があるのでは...これを試しましたか?

シンボル名が大文字6文字であることを確認するため、"before "をクリックしてください。

GBPAUDのチャートに置いたので、symbol()関数には"GBPAUD "と表示されています。
私はバックテストのために通常のデモ口座を使っているにもかかわらず、正確に6キャップ文字。しかし、私はあなたが提案したことを試して、期待される結果を得ました。

また、コードをコンパイルするときに警告が出ました。「暗黙のenum変換 "私は下に強調表示されているそこにある。これはどういう意味なのでしょうか?

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

ゼロが表示される原因を見つけた気がします...。これらの行をスクリプトに書いて、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);
   }

マーケットウォッチにないシンボルはAsk2とBid2がゼロになることに気がつきました。履歴データに悩まされることはありません。

 
Seng Joo Thio:

ゼロが表示される原因を見つけた気がします...。これらの行をスクリプトに書いて、MT4で実行しました。

マーケットウォッチにないシンボルはAsk2とBid2がゼロになることに気がつきました。履歴データに悩まされることはありません。

MT4の左上にある マーケットウォッチウィンドウにそれらのシンボルを入れています。
しかし、私のコードにそれらを含めるということであれば、どのようにコードでそれらを含めるのでしょうか?(もし私が誤解していたら、私はそのプロではないので、教えてください。:D)

 
HosseinKOGO:

私のMT4の左上 隅のマーケットウォッチウィンドウにこれらのシンボルがあります。
しかし、私のコードにそれらを含めるということであれば、どのようにコードでそれらを含めるのでしょうか?(もし私が誤解していたら、私はそのプロではないので、私を明確にしてください:D)

コードではありません。
マーケットウォッチウィンドウにすでに表示されているので、事態はより怪しくなっています。
どのブローカーからmt4をダウンロードしたのですか?テストするためにインストールしたいのですが。
 
あなたの反応に大いに感謝します。

確かに私はコーダーではありませんが、いくつかのEAをコーディングしたことがあります。私の活動は創意工夫とシステムに関連しているので、EAを作るために600~700の考えを構想し、今まで構築してきました。単に簡単なEAをコーディングするだけで、皆さんの異常な状態のコーディングには慣れていないのですが...。

私はそれらのコードを私のEAに入れましたが、それはこの失態を返すだけです: 2019.05.06 15:37:56.586 2018.01.02 00:00:07 MyEA!GBPAUD,H4: iTime(GBPUSD,240) 失敗: 0

開いた図がGBPAUD、2つ目のペアがGBPUSDで試しています。

何が問題なのでしょうか?