トレーダーの自己欺瞞:フォワードへの不信感。 - ページ 2

 
Youri Tarshecki:

デモ口座で取引結果を得て、同じシステムを同じ設定でテスターで同じ期間動かすという、最もシンプルな体験は誰にでもできることです。つまり、実機とテスト用の仮想フォワードを用意して、それを比較するのです。

これは、ストラテジーテスターが バーのオープン、クローズ、マックス、ミンの4つのクォートのみを使用しているため、有効な比較ではありません。 原則として、Expert Advisorsはデモまたはリアル口座のすべてのバー内クォートを使用して動作します。

ユリ・タルシェキ

実際、最適化されていない期間の履歴で動作させてシステムの動作をシミュレーションすることは、トレーダーにとって最も効率的な分析方法と言えます。もちろん、リアリティチェックは最も確実な方法ですが、残念ながら、実際のアカウントですべてのバリエーションを経験するには、永遠に生き続けなければならないのです。つまり、過去に進むようなモデリングが、最も効果的な研究方法なのです。しかし、それならなぜフォワードは議論に全く参加しないのでしょうか?複数のテストの結果を、前後左右に加工して分析する便利なソフトがないからでしょうか。

私も同感です。よくやっているようですね。このような分析に適した金融ツールを教えてください。バーオープン時にのみトリガーされるEAがあるのですが、同様のモデリングでテストしてみたいのです。

 

 Скажите пожалуйста какой финансовый инструмент Вы предпочитаете для подобного анализа. У меня есть советник который срабатывает только на открытие бара. Хочу проверить его подобным моделированием.

どういうことかというと、ツールに関係なく、テスト手法にはフォワードを入れるべきだということです。しかし、人々はそれを一斉に無視する。使っている人は、原則として目分量で見積もっています。つまり、フォワードの評価に客観的な基準を導入するようなプログラムは存在しないのです。
 
Youri Tarshecki:
どういうことかというと、ツールに関係なく、テスト手法にはフォワードを入れるべきだということです。しかし、人々はそれを一斉に無視する。使っている人は、原則として目分量で見積もっています。つまり、フォワードの評価に客観的な基準を導入するようなプログラムはないのです。
商品が異なれば、市場行動の特性も異なる。フォワードテストに「収益性の慣性」を含める。そこでお聞きしたいのですが、他の条件が同じで、実験で最も良い結果を示す機器(または機器の一種)を見つけられたのでしょうか?
 
Youri Tarshecki:
どういうことかというと、機器に関係なく、テスト方法はフォワードを含むべきだということです。しかし、人々はそれを一斉に無視する。使う人は、原則として目分量で見積もる。つまり、フォワードプライシングに客観的な基準を導入するようなプログラムは存在しないのです。

フォワードテストを大量に無視する。理由は簡単で、フォワードに成功したのは、フォワード区間の相場が最適化区間と同様であることを示すだけだからだ。ストラテジーテスターは、現在の市場ダイナミクスに完璧に適応します。その結果、最適化区間を12の前方部分に分割した後、12個の関連性のないパラメータセットを得ることになり、それぞれが12の時間部分のうち11個を流すことになるのです。むしろ、あるパラメータから別のパラメータへと急ぐよりも、長い歴史の中で、平均化されたとはいえ、一つのパラメータを見つける方が良いのです。

市場は変化しない。各取引システムが市場のある特定の状態だけを捉えているだけで、市場には多くの状態があるのだ。

 
フォワードを信用するよりも、信用しないほうがいい。また、その場合は、WFAを使用した場合のみとなります
 
Vasiliy Sokolov:

フォワードテストを大量に無視する。理由は簡単で、フォワードに成功したのは、フォワード区間の相場が最適化区間と同様であることを示すだけだからだ。ストラテジーテスターは、現在の市場ダイナミクスに完璧に適応します。その結果、最適化区間を12の前方部分に分割した後、12個の関連性のないパラメータセットを得ることになり、それぞれが12の時間部分のうち11個を流すことになるのです。むしろ、あるパラメータから別のパラメータへと急ぐよりも、長い歴史の中で、平均化されたとはいえ、一つのパラメータのセットを見つける方が良い。

市場は変わらない。ただ、それぞれのトレーディングシステムが市場のある特定の状態だけを捉えているだけで、市場にはその状態が数多く存在する。

フォワードは定義上、最適化されていない区間なので、「最適化された区間を12個のフォワードに分割する」ことはできないのです。つまり、フォワードチェックの方法そのものと、単に平均化という概念を対比しているわけです。

フォワードの目的は、最適化されていない未来の状況下で、アドバイザーがどのように振る舞うかを知ることです。あなたが言っていることは、最適化のために最適な歴史の断片を見つけることと、より関係があります。つまり、もしあなたが長い歴史の方がうまくいくと信じているなら、問題なく、2年前-1年前のテスターをロードしてみましょう。そして、2ヶ月戻る-1ヶ月進むを12回。もし、第一アプローチのフォワード性能が第二アプローチのフォワード性能の合計よりも優れていれば、第一アプローチの方が優れており、その逆もまた然りである。Expert Advisor を最適化するということは、市場の慣性を信じているが、それがかなり大きな期間に現れると信じているに過ぎない。しかし、30年という利用可能な歴史のすべてにわたって最適化するわけではないので、市場のボラティリティも考慮することになります。不変と可変という永遠の矛盾ですが、異なるテスト期間のフォワードを比較することで、この矛盾が現実にはどのように解決されるのかをより正確に理解することができます。確認するまで - あなたの発言は、純粋に直感的なものなのか、それとも単なる習慣的なものなのか。

 
Youri Tarshecki:
私がテストしているEAのコードでOnTesterPassを使用するとします。この実行が、通常の可変最適化実行ではなく、フォワードルッキングなものであることを、どうやって知ることができるのでしょうか?また、仮にできたとしても、それは異なるファイルであり、1つのEAの多くのフォワードに対して1つのテーブルが必要です。そして、別のテーブル、別のテーブルのためのテーブルと、全部を1つのファイルにまとめています。

私の記憶では、最初のトレードの時間をフレームに保存した、これが「バランス」です。したがって、1つのファイルにすべての実行のパラメータと指標を記録する場合、バックテストとフォワードを2つの特徴的な日付で区別することは容易である。すべての実行を正確に1つのファイルに保存しています(OnTesterInitで開き、OnTesterDeinitで閉じます)。

詳細はこちらでした。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

フレームを使う

スタニスラフ・コロツキー 2014.11.07 15:23

OnTester ハンドラでは、FrameAdd を使ってデータ付きの独自のフレームを追加することができます。重要なのは、これがすべてリモート(例えばクラウド)にあるテストエージェントで 行われることです。

OnTesterInit, OnTesterDeinit, OnTesterPassは、テスト/最適化プロセスが開始される端末で呼ばれ、そこからタスクがエージェントに分配されます。OnTesterPassの内部では、以下のようにFrameAddを使ってテストエージェントに追加されたすべてのフレームにアクセスできます(古いEAからかじったものなので、コンパイルできないかもしれません)。

void OnTesterPass()
{
  string  name;
  ulong   pass;
  long    id;
  double  value, data[];
  string  params[];
  uint    par_count;
  string  output = "";
  ushort eq = StringGetCharacter("=", 0);

  while(FrameNext(pass, name, id, value, data)) // data - массив положенный во фрейм с помощью FrameAdd
  {
    output = pass + ";" + (data[0]);
    
    for(int i = 1; i < 10; i++) output += ";" + data[i];
    
    if(FrameInputs(pass, params, par_count))
    {
      for(uint i = 0; i < par_count; i++)
      {
        string pair[];
        int n = StringSplit(params[i], eq, pair);
        if(n == 2)
        {
          long pvalue, pstart, pstep, pstop;
          bool enabled = false;
          if(ParameterGetRange(pair[0], enabled, pvalue, pstart, pstep, pstop))
          {
            if(enabled)
            {
              output += ";" + pair[1];
            }
          }
        }
      }
    }
    
    output += "\n";
    // TODO: FileWriteString(fhandle, output);
  }
}

とこちらをご覧ください。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

フレームを使う

スタニスラフ・コロツキー さん 2014.11.07 20:15

上に書いたように、走行中にフレームを追加するとよいでしょう。アイデアとしては、EAにパラメータがある場合、データと一緒にフレーム内に取得すること、つまり、paramsが空であってはならないことです。以下は、同じExpert Advisorの他のコードです。

int fhandle = -1;

void OnTesterInit()
{
  // готовим каким-то образом файл, как нам нужно
  fhandle = FileOpen("tester-" + _Symbol + GetTickCount() + ".csv", FILE_WRITE|FILE_CSV|FILE_ANSI);
  FileWriteString(fhandle, "Pass;First;LR;Profit;Expected Payoff;Profit Factor;Recovery Factor;Sharpe Ratio;Custom;Equity DD %;Trades\n");
}

void OnTesterDeinit()
{
  FileClose(fhandle);
}

double OnTester()
{
  // собираем данные по эквити
  double LR = CountChannels(Equity);
  
  // конструируем собственный критерий оптимизации
  double result = MathAbs(LR) * TesterStatistics(STAT_PROFIT) * TesterStatistics(STAT_PROFIT_FACTOR) * TesterStatistics(STAT_TRADES) * (100 - TesterStatistics(STAT_EQUITY_DDREL_PERCENT));

  // рассчитываем еще какие-то данные
  //...

  // складываем все в массив
  double data[10];
  // data[0] = first;
  // data[1] = LR;
  // data[2] = TesterStatistics(STAT_PROFIT);
  // ...
  // data[7] = result;
  // ...
  // data[9] = ...

  // отправляем данные в терминал
  if(!FrameAdd(MQL5InfoString(MQL5_PROGRAM_NAME), 1, LR, data))
    Print("Frame add error: ", GetLastError());
  else
    Print("Frame added, Ok");

  return(result);
}

 

個人的には、直近の相場変動が最も大きいので、未来ではなく、過去の結果を確認する方が理にかなっていると思います。

15分間、最適化を行い、不要な結果をふるい落とし、残った5~10個をセットに保存して、最適化の瞬間まで履歴で実行し、チャートでベストなものを選びました。

また、これらの動作を自動化する作業も考えていたのですが...。

単純な解決策としては、EA自体で切り替え可能な時間帯に取引制限を かけるだけで、結果的に1回のリアルランに対して2回のバーチャルランが発生し、エクセルで簡単に比較することができるようです。

 
-Aleks-:

個人的には、直近の相場変動が最も大きいので、未来ではなく、過去の結果を確認する方が理にかなっていると思います。

15分間、最適化を行い、不要な結果をふるい落とし、残った5~10個をセットに保存して、最適化の瞬間まで履歴で実行し、チャートでベストなものを選びました。

また、これらの動作を自動化する作業も考えていたのですが...。

単純な解決策としては、EA自体で切り替え可能な時間帯に取引制限を かけるだけで、結果的に1回のリアルランに対して2回のバーチャルランが発生し、エクセルで簡単に比較することができるようです。

ラスト・チェンジにこだわるのも、自己欺瞞の一種だ。当然ながら、取引には新鮮な設定を用いる必要があります。しかし、直近の期間に最適化することに限定してしまうと、Expert Advisorが将来の変化に強いかどうかを把握することができません。私の投稿の2番目の写真を見てください。フォワードとは、過去との比較のことです。あなたのやり方は、フォワード・アナリシスとは関係ない。ほぼすべてのExpert Advisorは、素晴らしいバックテストに最適化することができます。ここでは、設定を最適化すればするほど、バックテストが美しくなるというパターンを紹介しています。そして、醜いのは前方です。フォワードは、より長期的なパターンを使用するロジックを正確に見つけるのに役立ち、したがって、より有望である。
 
フォワードは便利なチェック機能ですが、万能ではありません。最適化の 結果、良いフォワードが得られるパラメータのバリエーションを選択することは可能ですが、これは実機での良い結果を保証するものではありません。