エラー、バグ、質問 - ページ 1801

 
Dennis Kirichenko:
デモサーバー、特にブローカーによってバックアップされていないものについて苦情を出すのは、単に不道徳なことです :-)
デモですべてがそのように動くのであれば、実サーバーに正常な動作を求めるのは不道徳なことです。

そして、MQサーバーは、アルゴ開発者が自分たちの技術をテストするための、一種の「ベンチマーク」であるべきなのです。
 
fxsaber:
SymbolSelectを複数回呼び出すと端末がハングアップします。
bool SymbolExist( const string Symb, const bool MarketWatch = true )
{
  bool Res = false;
  
  for (int i = SymbolsTotal(MarketWatch) - 1; (i >= 0) && (!Res); i--)
    Res = (Symb == SymbolName(i, MarketWatch));
    
  return(Res);
}

bool SymbolOnOff( const string Symb )
{
  return(SymbolSelect(Symb, !SymbolExist(Symb)));
}

void OnStart()
{
  for (int i = SymbolsTotal(false) - 1; i >= 0; i--)
  {
    const string Symb = SymbolName(i, false);
    
    if (SymbolOnOff(Symb))
      SymbolOnOff(Symb);
  }
}
 
ヘルプには、Market Watchに載っていないシンボルはデータを取得できない、といった記述はありませんでした。試行錯誤しながらやっていました。
 
fxsaber:
ヘルプには、Market Watchに登録されていないシンボルにはデータがない、という記述はありませんでした。手書きでやるしかなかった。
そうですね。という言及があります。

戻り値

double 型の値。実行に失敗した場合は、GetLastError()エラー 情報を取得することができる。

  • 5040 - シンボル名を指定するための文字列パラメーターが正しくありません。
  • 4301 - 不明な記号(金融商品)。
  • 4302 - "Market Watch" でシンボルが選択されていません (利用可能なリストにありません)。
  • 4303 - シンボルプロパティの識別子が間違っています。
 
Slawa:
そうですね。という言及があります。

ありがとうございます、間接的に言及しました。

SymbolSelectでMarket Watchにシンボルを追加した場合、シンボルごとのBid/Askが利用可能になったことを知るにはどうしたらいいのでしょうか -SymbolIsSynchronized?

SymbolIsSynchronized - は、M1-historyの同期の問題も発生するため、この目的には高価なようだ。

文字によってはSymbolIsSynchronizedがtrueにならないことがある。

 
fxsaber:

ありがとうございます、間接的に言及しました。

SymbolSelectでMarket Watchにシンボルを追加した場合、シンボルごとのBid/Askが利用可能になったことを知るにはどうしたらいいのでしょうか - SymbolIsSynchronized?

SymbolIsSynchronized - は、M1-historyの同期の問題も発生するため、この目的には高価なようだ。

シンボルによっては、SymbolIsSynchronizedが真にならないことがある。

履歴を読み込むのに耐え難いほど長い時間がかかるだけです...。
 
おそらく多くの人が知っていると思いますが、デバッグ時に追跡される値に_LastErrorを含めることを推測したのは今だけです。おすすめです。
 
履歴同期フラグを確認する前に、まずCopyRates(Symbol(),PERIOD_M1,0,1000,rates) を呼び出す 必要があります。

これをインジケーターから行うと、そこにあるものをそのまま出すが、ヒストリーセンターへのページング要求がある。そうすると、耐えがたいことになります。

Expert Advisor やスクリプトから実行する場合は、関数内で応答を待ちながら数サイクルのリクエストを行うことができ、そのような呼び出しの後は原則として履歴が同期されることになります。
 
fxsaber:

SymbolSelectでMarket Watchにシンボルを追加した場合、シンボルのBid/Askが利用可能であることを知るにはどうすればよいですか?

SymbolSelect(true)の直後、価格を聞いてみると0になっている。同時に _LastError == 0,SymbolInfoTick== true となる。

新しいSymbol for Marketwatchの価格がMarketwatchに配信されたことを知るにはどうすればよいですか?

 
Slawa:
履歴同期フラグを確認する前に、まずCopyRates(Symbol(),PERIOD_M1,0,1000,rates) を呼び出す 必要があります。

これをインジケーターから行うと、そこにあるものをそのまま出すが、ヒストリーセンターへのページング要求がある。そうすると、耐えがたいことになります。

EAやスクリプトから実行する場合、関数内部で数回のリクエストサイクルを作って回答を待ち、原則としてその呼び出しの後に履歴が同期されます。
毎回のティックで行うことを推奨しているのでしょうか?
理由: