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

 
Rosh:

そのようなインジケータを走らせれば、自分の目で確認することができます。

だから

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

open[]も時系列ではないのですか?

何も分からないので、時系列の例を教えてください。

 
Voodoo_King:

375.バグが本当にひどくて、その結果、すでにかなりの金額を失ってしまった...。

端末を閉じたり開いたりしても、EAパラメータが設定値に戻らない。

正確には、そのうちの一部(例えば6個中3個)は復元可能で、残りは初期設定にリセットされます。


381を構築する。何も変わっていない !!!

端末を再起動するたびに、EAが異なるパラメータ(好きなもの)で初期化されます。

エキスパートパラメータの不正な初期化

 
AlexSTAL:

この機能は、変化ではなく、方向をチェック します。

1) 初期化なし

2)初期化あり

3) 上記コードのうち、ArrayGetAsSeriesの 配列インデックスの 方向に関する機能のみ

サービスデスクで、関数名を単純に間違えた。


はい、コンパイラのエラーがわかりました。メッセージをありがとうございました。次のビルドで修正される予定です。
 
BoraBo:

だから

open[]も時系列ではないのですか?

よくわからないのですが、時系列の例を教えてください。

だから、TCじゃないから何?Setで時系列に設定すれば、TCになります。ターミナルを初めて起動したときでしょうか?あなたにとって、それはとても大きなニュースだということです。今、誰かが、TSを使うか、配列だけを使うか、自分たちのプログラムの中でどう動くかは自分たちで決めるべきだと書いていたように思います。
 
joo:


だからOnCalculate()でやっているんです。

ArrayGetAsSeries(low)がtrueを返すようにするのを手伝ってくれませんか?

 
BoraBo:

ArrayGetAsSeries(low)の出力をtrueに するのを手伝ってもらえますか?

もううんざりです :)) 好きなように設定し、こんにちは。確認することは何もありません。:))
 
BoraBo:

だから

open[]も時系列ではないのですか?

何もわからないのですが、時系列の例を教えてください。

open[]およびOnCalculateの他のすべての配列は、時系列です。MQL5言語が書かれた当初は、ArrayGetAsSeries()はtrueを返し、インデックス作成は時系列と同じように、つまり逆向きに行われました。

しかし、その後、インジケータ・バッファの計算をMQL4スタイルで書くのは非常に不便で不自然であることがわかり、唯一の解決策として、時系列のインデックスを逆にして便利に使えるようにしたのです。この精神でカスタムインジケーターを 書くようになったのです。

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread)
{
//---- переворачиваем все таймсерии, чтобы ими было удобно пользоваться, как обычными массивами
   ArraySetAsSeries(open,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
   ArraySetAsSeries(time,false);
   ArraySetAsSeries(tick_volume,false);
   ArraySetAsSeries(volume,false);
   ArraySetAsSeries(spread,false);
   ArraySetAsSeries(open,false);
.... остальной код
}

しかし、そんなごちゃごちゃとした変換を書くたびに、それもよくないことが判明したのです。そのため、通常の配列と同様にインデックスを付けて渡すことにした。そのため、時系列が時系列らしくインデックス化されないと、このようなパラドックスに陥ってしまうのです。そのため、ヘルプには「インデックスの順番を確認し、必要に応じて設定すること」と書かれています。

 
BoraBo:

ArrayGetAsSeries(low)の出力をtrueに するのを手伝ってください。

これはすでに真を返していますが、コンパイラエラーのため、その値がパラメータとして誤って出力されています。このように確認します。

#property script_show_inputs
input bool isTimeSeria=true;


double Ups[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

//--- установим для массивов признак таймсерии
   Print("Установим для массивов признак таймсерии как ",isTimeSeria);
   ArraySetAsSeries(Ups,isTimeSeria);

//--- Проверим таймсерии
   if(ArrayGetAsSeries(Ups))
     {
      Print("1:  ArrayGetAsSeries(Ups)=true");
      Print("2:  ArrayGetAsSeries(Ups)=",ArrayGetAsSeries(Ups));
     }
   else
     {
      Print("ArrayGetAsSeries(Ups)=true!!!");
     }
  }
//+------------------------------------------------------------------+


結果


 
Rosh:

コンパイラのエラーにより、パラメータとしての値が正しく出力されないだけで、trueは出力されます。このように確認します。


結果


ありがとう、わかったよ。

条件付き if() 演算子の ArrayIsSeries() とArrayGetAsSeries() は説明の通り動作しますが、Print() は常に false を出力します。


 

デベロッパー

1.テスターへの履歴の読み込みを確認してください(今回が初テストです)。

EURUSDを H1の標準的なMACDサンプルで間隔「先月」を使ってテストしています。

ダウンロードしたデータの57%に到達し、正常にフリーズし、ログにはこの行だけが残っています。

2011.01.19 17:16:23	Tester	EURUSD: history preliminary downloading started

2.テスターの新ビルドで1:200と1:500のテコ入れを常時行うことは可能でしょうか?

特にMT5では、すべての証券会社がそのようなレバレッジを持っているわけではないことは理解していますが、Strategy Testerでは、新しいプラットフォームでストラテジーをテストする方が便利なので、これはおそらく残すべきでしょう。