記事「MetaTrader 5でのモンテカルロ並べ替え検定」についてのディスカッション

 

新しい記事「MetaTrader 5でのモンテカルロ並べ替え検定」はパブリッシュされました:

この記事では、Metatrader 5のみを使用して、任意のエキスパートアドバイザー(EA)でシャッフルされたティックデータに基づいて並べ替え検定を実施する方法を見てみましょう。

明らかに、ファイルをエクスポートした後、保存場所をメモし、任意のスプレッドシートアプリを使って開きます。下の図は無料のOpenOffice Calcを使用したもので、表の一番下に新しい行が追加されています。これ以上先に進む前に、計算の一部とすべきでない記号の行を削除したほうがいいでしょう。該当する各列の下で、カスタムマクロを使ってp値が計算されます。マクロの計算式は、各列の並べ替え銘柄のパフォーマンスメトリクスと同様に、並べ替え銘柄のパフォーマンスメトリクス(示されたドキュメントの18行目)を参照します。  マクロの完全な計算式を図に示します。

OpenOffice CalcでのP値の計算

表計算アプリケーションを使う以外に、xmlファイルを解析するモジュールが豊富にあるpythonを使うこともできます。MQL5に習熟していれば、簡単なスクリプトでファイルを解析することも可能です。テスターから最適化の結果をエクスポートする際には、アクセス可能なディレクトリを選ぶことを忘れないでください。

作者: Francis Dube

 
こんにちは!この記事は貴重な洞察を与えてくれます。しかし、ご紹介いただいた例を使用したところ、問題が発生しました。アスク価格のためにスプレッドがかなり大きいようです。何か見落としがあるのか、間違いがあるのか、教えていただけませんか?
 
Le Huu Hai #:
こんにちは!この記事は貴重な洞察を与えてくれます。しかし、ご紹介いただいた例を使用したところ、問題が発生しました。アスク価格のためにスプレッドがかなり大きいようです。何か見落としていることがあるのか、それとも間違いなのか、教えていただけませんか?

私の知る限り、間違いは見当たりません。私自身のテストでは、大きなスプレッドを伴う価格系列の変動にも遭遇しました。これは起こりうることです。このようなことが受け入れられない場合は、順列を増やし、より現実的なスプレッドのシリーズでテストしてください。

 
スクリプトを先物取引で数回試しましたが、直近と連続の両方で成功しませんでした。生成されたシンボルはチャート上で視覚的に同じであるだけでなく、ティック・ボリューム/リアル・ ボリュームの値は1日を通してほんの数本のローソク足に集中しており、テスターはこれらのシンボル上でチョークしてフリーズし、何の結果も得られない。
 
Firstly, time and tick flag information will be left untouched so our permutation routine should not alter this information. We are interested in only the bid, ask and volume.
なぜ出来高の対数を取ることにしたのか、まったく不明です。特にティックボリューム
 
著者、あなたはその言語の機能をあまり使っていないので、コードが何倍も大きくなり、読むのが難しくなっています。

例えば、これらの行は1行で置き換えることができる。
 //---ティックデータをランダムに入れ替える
      tempvalue.bid_d=m_differenced[i].bid_d;
      tempvalue.ask_d=m_differenced[i].ask_d;
      tempvalue.vol_d=m_differenced[i].vol_d;
      tempvalue.volreal_d=m_differenced[i].volreal_d;

      m_differenced[i].bid_d=m_differenced[j].bid_d;
      m_differenced[i].ask_d=m_differenced[j].ask_d;
      m_differenced[i].vol_d=m_differenced[j].vol_d;
      m_differenced[i].volreal_d=m_differenced[j].volreal_d;

      m_differenced[j].bid_d=tempvalue.bid_d;
      m_differenced[j].ask_d=tempvalue.ask_d;
      m_differenced[j].vol_d=tempvalue.vol_d;
      m_differenced[j].volreal_d=tempvalue.volreal_d;
Swap(m_differenced[i], m_differenced[j]);


template < typename T>
void Swap( T &Value1, T &Value2 )
{
  const T Value = Value1;
  
  Value1 = Value2;
  Value2 = Value;
}


同じことが、構造データの対数変換や逆変換の方法にも当てはまります。などなど。

 

ティック変換は珍しいトピックです。通常、これは1つの価格(例えばビッド)とバーだけで行われる。

この話題を提起してくれた著者に感謝している。


ごく最近、ロシア語のスレッドでこのトピックに関する話題があった。そこでは、最高の機械学習手法を用いて、市場パターンを失わないようにティック履歴を生成しようと試みられていた。明確な基準があった。

残念ながら、パターンを失わないようにする試みはすべて失敗に終わった。単にティックを混ぜるだけでなく、もっと洗練された方法があった。


ここだけ成功したことがある。

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Машинноеобучениевтрейдинге:теория, модели, практика и алготорговля

fxsaber, 2023.09.07 07:33

いくつかのアルゴリズムを試してみました。わかりやすくするために、そのうちのいくつかを紹介します。

POはAvg価格で固定という条件で建てています。 min.ニー

  • 緑の点はチーク 配列の 3Z頂点の インデックス。
  • 紫 - 頂点間の平均インデックス。

このアイデアは、ティックの配列を実行し、見つかったインデックスの位置にさらなる増分をランダムに割り当てることである。

タイムスタンプ、インクリメントの絶対値(Avg-price)、スプレッドは完全に保持されることがわかった。


結果によると

  1. 緑色のインデックス(ドレイン)のみで実行した。明らかに、このようなランダム化は、最終的なグラフをまっすぐにする(ZZの数を減らす)。
  2. 私は紫色のものに沿ってのみ実行 -聖杯は強いです, より高い最小条件。
  3. 私はプラムの両色を走ります。
私は、Bid/Askに基づく3Zを同時に構築した場合、ポイント2がより強い財宝になると仮定します。

リバースタイムは 相場のパターンをよく保存する。
Проверка обратного времени.
Проверка обратного времени.
  • 2023.09.03
  • www.mql5.com
Мною была поставлена задача разобраться в причинах получения прибыли определенной ТС (торговая система). Для этого требовалось изучить историю котировок, подтвердив или опровергнув возникающие
 
//+------------------------------------------------------------------+
//|対数変換を適用するヘルパー・メソッド
//+------------------------------------------------------------------+
bool CPermuteTicks::LogTransformTicks(void)
  {
//---必要に応じて、m_logticksのサイズを変更する。 
   if(m_logticks.Size()!=m_ticks.Size())
      ArrayResize(m_logticks,m_ticks.Size());
//---関連するデータ・メンバーだけを対数変換し、負の値やゼロの値を避ける。
   for(uint i=0; i<m_ticks.Size(); i++)
     {
      m_logticks[i].bid_d=(m_ticks[i].bid>0)?MathLog(m_ticks[i].bid):MathLog(1 e0);
      m_logticks[i].ask_d=(m_ticks[i].ask>0)?MathLog(m_ticks[i].ask):MathLog(1 e0);
      m_logticks[i].vol_d=(m_ticks[i].volume>0)?MathLog(m_ticks[i].volume):MathLog(1 e0);
      m_logticks[i].volreal_d=(m_ticks[i].volume_real>0)?MathLog(m_ticks[i].volume_real):MathLog(1 e0);
     }
//---
   return true;
  }
なぜ体積を対数にするのですか?
 

мы хотим, чтобы p-значения были как можно ближе к нулю, в диапазоне 0,05 и ниже.

完全な公式を以下に示す:

z+1/r+1

ここでrは実行された並べ替えの数、zは最高の性能を持つテストの総数である。

元のシンボルで最適化し、並べ替えで実行する。

 
Процедура перестановки важна для правильного проведения теста.

使用される順列アルゴリズム。

  1. (隣り合うティック間の)対数刻みのビッド/アスクの配列が作成される。
  2. この配列はシャッフルされる。さらに、強く混合される。
  3. ティックの新しい配列は、項目2からの増分によって作成される。

この方法は、初期系列にあった規則性(もしあったとしても)をすべて殺してしまいます。なぜなら出力はランダム ウォークだからである。


このような方法をとるべきではない。

 
モンテカルロ 分析を多通貨EAで行う方法はありますか?