自己適応アルゴリズム(第IV部):その他の機能とテスト

4 5月 2021, 09:41
Maxim Romanov
0
79

はじめに

始める前に、前回の「自己適応アルゴリズム(第III部):最適化の放棄」稿を読むことをお勧めします。これは、本稿を理解するために必要です。


メインシリーズ内での作業

取引はポジションのシリーズによって行われます。取引商品によってポジションを開くために割り当てられた資金は、エントリポイントを曖昧にするためにいくつかの部分に分割されます。アルゴリズムは特定の領域での反転の確率を予測しますが、価格がいつ反転するかを正確に判断することはできません。したがって、ポジションを開くときに発生するエラーを補正するために、ボリュームは必要に応じて一連のポジションによって累積されます。

前回の記事では、アルゴリズムがポジションを開くためのシグナルを生成し、最大トレンドスケールを定義するために複数のスケールを同時に分析する方法を示しました。基本的な操作アルゴリズムについて説明しました。価格系列チャートは1つのスケールでは構成されていません。トレンドが同時に複数のスケールで存在しながら、他のスケールではレンジである可能性があります。利益を上げるためにはこの機能を使用する必要があります。

ここで、トレンドセクションはトレンド継続確率が50%を超えるセグメントであり、レンジセグメントはトレンド反転確率が50%を超えるセグメントです。つまり、前のブロックが上昇していた場合、トレンドセクションでは新しいブロックも50%を超える確率で上昇しますが、レンジのチャートでは、上昇するブロックの後に下降するブロックが続く可能性があります。提案された定義については、「トレンドとは何か、相場の構造はトレンドかレンジかで決まるのか?」稿で詳しく説明しました。

トレンド-レンジ

図1 さまざまなスケールでのトレンドとレンジ 

図1は、0.00061の32ブロックではっきりと見える弱気トレンドを示しています。このトレンドは、0.00131のスケールの32ブロックではほとんど見られません。ほとんどの場合、トレンドとレンジの両方を特徴とするスケールが同時に存在します。

アルゴリズムは常に最小のブロックで分析を開始します。ただし、ブロックのサイズは、より大きなスケールのブロックに初期サイズのブロックを十分に含めることができ、新しいシリーズ開始シグナルを生成できるようになるまでの過程で大幅に増加する可能性があります。例を図2に示します。

ブロックから内側

図2 大規模ブロック内の動き

図2は、ブロックの1つで何が起こっているかを示しています。大規模なブロックで上昇しているブロックを見ることができますが、中を見ると、イベントがどのように発展したかを見ることができます。アルゴリズムが大きな作業スケールに切り替わった場合、このスケールのブロック内で発生するプロセスは追加の利益を得るのに役立ちます。アルゴリズムの安定性を高めるために後で使用されます。

作業は、論理的に接続された一連のポジションによって実行されます。ただし、ブロックスケールが大幅に増加し、開始されたシリーズが完了していない場合は、前のポジションシリーズとは独立して論理的に接続された新しいポジションシリーズを開始します。 

不完全な前のシリーズで新しいシリーズを開始するための基準が必要です。メインシリーズのブロックサイズがしきい値を超えたときに単に新しいシリーズを開始すると、結果は悪くなります。このような場合のアルゴリズムは、新しいシリーズの開始ステップが手動で設定されるため、適応できません。このアプローチでは、アルゴリズムは定期的に長いトレンドセクションで新しいシリーズを開始し、預金の負荷が増えます。

ロングトレンド

図3 大規模なトレンドセグメントでの小規模な振動

図3は、2008年のGBPUSDの弱気の長期トレンドを示しています。シリーズの終了点までのこのトレンドのロールバックには、275日かかりましたが、より長い期間も非常に一般的です。価格ロールバックが以前に開始されたポジションシリーズを完了するのを待ってアルゴリズムが取引を行わなかったならば、これは間違っています。赤い楕円は新しいシリーズを開始できない領域を示し、青い円は追加のシリーズが利益をもたらす場所を示しています。

基本的な時間枠の概念を導入する必要があります。ここでの作業では、時間枠をブロックサイズと見なしています。分析用の初期データは、静的M1時間枠から取得されます。基本的な時間枠は、ポジションを開くためにアルゴリズムによって現在使用されている時間枠です。アルゴリズムは、市場分析を最初の時間枠から開始し、トレンドの動きのサイズに応じて、作業の過程で必要な時間枠まで増やします。最初の時間枠のブロックサイズが10ポイントに等しい場合、2番目の時間枠のブロックサイズは10*KTFに等しいことがわかります。ここで、KTFは、次の時間枠のブロックを取得するためのブロックサイズの乗算比です。KTF=1.1で最初の時間枠のブロックサイズが10の場合、ブロックサイズは次のようになります。

TF1=10ポイント、TF2=10*1.1=11ポイント、TF3=11*1.1=12.1ポイントなど。

主なタスクは、ロールバックなしの長い動きの間に新しいシリーズが開始するのを防ぐことです。図3の例では、アルゴリズムはすべてのスケールをスキャンし、トレンドの途中で2番目のシリーズの開始後すぐに最大スケールまたは最大スケールに近いスケールに移動します。この場合、ブロックサイズは2番目のシリーズの基本時間枠と最初のシリーズの基本時間枠でほぼ同じであり、意味がありません。

2番目のシリーズのシグナルが有効なままであるためには、基本的な時間枠のブロックサイズがしきい値を超える必要があります。さらに、2番目のシリーズの基本的な時間枠で十分な振幅の横ばいの動きがある必要があります。図4に示すメカニズムが開発されました。

確認されたシリーズ

図4 2番目のシリーズの開始を確認するメカニズム

このメカニズムは次のように実装されています。2番目のシリーズの開始は、最初のシリーズの基本時間枠がしきい値1を超えた後に可能になります。その後、過剰な下降ブロックまたは上昇ブロックの検索は、2番目のシリーズの開始シグナルを形成するための2番目のシリーズの最初の時間枠で開始されます。これは、最初のシリーズと同じ方法で行われます。2番目のシリーズの開始シグナルが見つかった後(十分な大きさのトレンド領域が見つかった)、2番目のシリーズを開始できることを確認する必要があります。これを達成するには、2番目のシリーズの基本的な時間枠でレンジを見つける必要があります。これにより、最初のシリーズ操作で使用された大きなトレンドではなく、検出されたトレンド領域がレンジ領域の一部であることを確認できます。

シリーズの開始について10ブロックを分析し、トレンドの動きを検索する場合(図4のように)、レンジセグメントを検索するためにいくつのブロックを使用する必要があるでしょうか。値が厳密に設定されている場合、アルゴリズムはその適応性を失います。これは、ブロックの数が市場で何が起こっているかに何らかの形で依存する必要があることを意味します。

シリーズ確認ブロックを定義するには、レンジセグメントの検索が実行される範囲を設定する必要があります。範囲は、次の2つの値を使用して設定されます。

  • Bmin — 2番目のシリーズの確認範囲の最小ブロック数
  • Bmax — 2番目のシリーズ確認範囲の最大ブロック数
  • NPb(s2) — 2番目のシリーズの一般的なブロックの数
  • %PV - レンジを定義するための指定された割合

Bminは、単にBmin=NPb(s2)/(%PV/100)として定義されます。

Bmax範囲の上限を定義するには、最初のシリーズの基本時間枠の最後に形成された2つのブロックと2番目のシリーズの基本時間枠のブロックに適合する2番目のシリーズの基本時間枠ブロックの数を計算する必要があります。これに対してはまだ大きなブロックが形成されていません。これが、Bmax範囲の上限が計算される仕組みです。 

図4の例を考えてみましょう。%PV=50とすると、優勢なブロックの数はNPb(S2)=9です。この場合、Bmin=9/(50/100)=18です。レンジを見つけることができるブロックの最小数は18です。Bmaxを定義するには、最後の2つの大きなブロックの小さなブロックの数を計算します。図4では、これらは14ブロックです。次に、最後に閉じた大きなブロックの右側の小さなブロックの数を計算します。これは5ブロックになります。次に、合計14+5=19を定義します。結果の範囲はBmin=18、Bmax=19です。 

次に、2番目のシリーズの基本的な時間枠の18〜19ブロックの範囲でレンジセグメントを検索します。下降ブロックの数が上昇ブロックの数と等しいセグメントは、レンジと見なされます。50%では範囲が狭すぎるため、レンジセグメント基準は設定で調整できます。50〜55%を設定して、一般的なブロックの数が50〜55%の場合はレンジであると想定できます。

計算中、Bmaxは非常に大きいことが判明する場合がありますが、Bminは変動値です。したがって、ブロック数が異なる場合に固定割合を使用してレンジセグメントを定義するのは誤りです。範囲内に入る確率として値を設定し、後で割合に変換する方が合理的です。以下の表1はまさにそれを行います。

シリーズ確認表

表1 シリーズを確認するためのブロック数の割合を計算するための表

16ブロックのうち同じ方向のブロックの56.25%がレンジセグメント基準として機能するとします。この割合は、2〜16の垂直ブロックの範囲に入るすべてのイベントの80.36%に相当します。これは、80.36%の場合、プロセスが16ブロック内で垂直方向に2から16ブロックを通過することを意味します。この表を使用すると、すべてのイベントの80.36%が振幅範囲内に収まるように確認率を設定する必要があることを考慮して、一意のブロック数ごとにシリーズ確認率を再計算できます。

この表を使用して、Bmin-Bmax範囲のブロック数ごとに表を使用して、関連するシリーズ確認を計算できます。

このようなメカニズムにより、前のポジションシリーズがまだ閉じられていないときに新しいポジションシリーズを開始でき、インスタンスの数が大幅に減少します。この場合、2番目のシリーズのブロックサイズは最初のシリーズのブロックサイズと等しくなり、2番目のシリーズは無意味になります。

最初は、2番目のシリーズは最初のシリーズと同様に機能します。言い換えれば、アルゴリズムには、トレンドを追跡して現在の取引規模を調整するすべてのメカニズムが含まれています。 

2番目のシリーズが開始するとすぐに、アルゴリズムはその基本的な時間枠のブロックサイズの追跡を開始します。しきい値を超えると、上記の条件で3番目のシリーズが開始されます。これにより、必要な数の追加シリーズを作成できます

しくみ

例として、図5に表示されているチャートのセクションを考えてみましょう。これは、図3に表示されているのと同じセクションです。アルゴリズムの場合、このセクションは、ポジションを決済するためのロールバックを長時間待機することを特徴としているため、非常に複雑です。

ポジションを開く

図5 複数のシリーズを同時に作成する

図5は、ロングトレンドでのアルゴリズムの動作を示しています。メインシリーズが買いポジションで開始した後、基本的な時間枠ブロックが大きくなりすぎて、アルゴリズムが基本的なシリーズが閉じるのを待たずに2番目と3番目のシリーズを作成できるようになります。そのようなアプローチにより、より小さな規模での価格変動を使用して、預金の変動を平滑化する追加の利益が得られます。

同じ価格の2つのセクションを検討し、これら2つの時点での資金によるドローダウンを評価してみましょう。最初のポイントは2008年11月13日で価格は1.45554です。最初のシリーズの買いポジションは開いており、価格はポジションに反します。資金は$8265.16です。その後、価格は下がり続け、2009年4月10日に1.45554に戻ります。しかし現在、資金は$1677.57増加して$9942.48です。価格がポジションに反する場合、得られるドローダウンは、追加のシリーズメカニズムを使用せずに得ることができるものと比較してそれほど大きくありません。

小規模な資産価格変動を利用して、大規模な取引で発生するリスクを大幅に低減することができます。自動スケーリングにより、常に関連するスケールで取引することができますが、追加のシリーズ確認メカニズムは、現在の状況に適応する機能です。


損失を出すポジションと意思決定の誤りの埋め合わせ

トレンド定義と自動スケーリングの方法はうまく機能しますが、完璧ではありません。その作業中に、アルゴリズムは時間外にポジションを開きます。長引くトレンドの開始時にポジションが開かれ、ポジションシリーズの終了点で損失がでる可能性があります。ポジション決済ポイントは、価格系列パラメータに基づいて計算されるため、シフトできません。トレンドのロールバックの計算については、前の記事自己適応アルゴリズム(第III部):最適化の放棄」で説明されています。ただし、誤ったポジションを検出して修正することは可能です。

追加シリーズの利益を使用した誤ったポジションの修正

追加のシリーズアルゴリズムの目的の1つは、誤ったポジションの修正にあります。前回の記事では、価格変動の平均振幅が実行されたステップ数に応じて非線形に増加することを示しました。したがって、誤って開いたポジションでの損失の平均は、取られたステップ数から非線形に増加します。

平均損失

図6 通過したステップ数に応じて損失が増える法則

図6は、ポジションでの平均損失の増加を定義するおおよその法則を示しています。パラメータは商品ごとにわずかに異なりますが、最も重要なことは、曲線の形がほぼ同じままであってこのパラメータが測定可能であることを意味することです。この法則は誤って開かれたポジションの損失の平均の予測を可能にし、誤って開かれたポジションを決済するために追加のシリーズからの利益を使用することの可能な効率を示しています。

追加シリーズから得られた利益の一部は、誤って開かれたポジションを決済するために使用されます。このパラメータを自分の設定でカスタマイズできるようにしました。得られた利益の一部は、アルゴリズムの信頼性をサポートするために費やされます。アルゴリズムが優れているほど、アルゴリズムを安定させるために費やす利益率を低くする必要があります。今、私はポジションの損失を補うために追加のシリーズ利益の80%を使用しています。

簡単な方法を適用して、誤ったポジションを検出します。シリーズがシリーズ終了基準点で損失を受けた場合、間違いなく誤ったポジションがあります。シリーズのすべてのポジションの中から、最も損失の多いポジションを見つけて、現在の損失を評価します。ポジションが最初のシリーズに属している場合、2番目のシリーズから得られる利益の80%が、ポジションの現在の損失をカバーする必要があります。条件が満たされると、ポジションは決済されます。 

資金は作業中に蓄積されて、赤字のポジションを補うために使用されます。必要が生じた場合、これらの資金はポジションの損失を補うために使用され、ポジションの決済による損失は準備金から差し引かれます。アルゴリズムは、次の補償のために準備金を蓄積し続けます。これは、すべての誤ったポジションが決済されるか、メインシリーズが終了するまで続きます。メインシリーズが完了すると、準備金からの未使用の資金はすべてゼロに設定されます。

最初のシリーズの誤って開かれたポジションは、2番目のシリーズの利益によってゼロに等しい条件付き利益で決済できるようになるまで市場に残ります。これは、シリーズの残りの部分でも同様です。3番目のシリーズの利益は、2番目のシリーズの誤ったポジションを補うために使用されます。 

図5は、最初のシリーズの一部の買いポジションが、シリーズの一般的な終値を待たずに損失を伴って決済されたことを示しています。これは、損失補償アルゴリズムのアクティブ化が原因で発生しました。

したがって、2番目のシリーズで利益のために利用される変動は、常に最初のシリーズのトレンドの振幅よりも小さくなります。3番目のシリーズのトレンド振幅はさらに小さくなります。追加のシリーズは、エクイティドローダウンの大幅な増加にはつながりませんが、安定性を維持するために使用される追加の利益をもたらします。同時に開かれる追加シリーズの数は、市場の現在の状態にのみ依存し、トレーダーが構成することはできません。これは別の適応機能です。アルゴリズム自体はフラクタル構造を持っています。さまざまなスケールで自分自身をコピーします。同時に、スケールごとに個別に作業を調整します。

小さなスケールの変動に基づくシリーズの終了点の修正

前に書いたように、シリーズの終了点(メイントレンドからのロールバック)はロールバック速度に依存します。速度は、ロールバックを行うために必要な価格のステップ数で測定されます。ステップ数が多いほど、トレンドの動きからのロールバックは低くなります。この機能は、トレンドが出現する根本的な理由に関連しています。トレンドは、現在の流動性を超える取引量を生み出します。言い換えれば、大量のポジションを開くまたは決済します。トレンドの動きを引き起こした条件付きポジションは決済する必要があります。これには流動性が必要です。即座に決済されると、ロールバックは前のトレンドの100%になります。つまり、反対方向へのまったく同じトレンドの動きが表示されます。ただし、ポジションの決済が遅いほど、ロールバックは少なくなります。この場合、動きが単一または複数の市場参加者によって引き起こされたかどうかは関係ありません。メカニズムは同じです。

アルゴリズムは、基本的な時間枠ブロックの数の計算に基づいて終了点を調整します。規模が大きいとこれでは不十分です。大規模なブロックは独自の価格変動を特徴とします。ブロックは便宜上作成された価格変動の条件付き表現にすぎないため、終了点を調整するためにも考慮する必要があります。

最も正しいことは、すべてを計算し、すべての変動を考慮することですが、簡潔化のために別の方法で行います(アルゴリズムはすでにかなり複雑です)。追加シリーズの利益を商品の終了点を修正するために使用します。これは、追加のシリーズを閉じることから得られる利益の80%になります。すべてのポジションが参照決済点で決済された場合にシリーズによって取得される預金通貨での利益額を計算します。追加シリーズの現在利用可能な利益は、シリーズの現在の利益に追加されます。得られた値が終了点で計算された利益以上である場合、メインシリーズは完了です。ロールバックは終了したと見なされ、シリーズは完了します。

終了点

図7 追加のシリーズ利益に基づいた終了点の修正

図7は、追加の系列利益に基づいた終了点の修正を示しています。ポジションは$915.66の利益で1.69846の上のポイントで決済されるべきです。価格が1.60887に達するまでに、現在の利益レベルは$109.35です。ただし、大きな変動があるため、追加のシリーズは$1009を獲得できます。その利益の80%は、シリーズを早期に終了するために使用されます。これは、$807.2が利用可能であることを意味します。109.35+807.2=916.55>915.66の不等式がチェックされ、シリーズは早期に完了します。

これにより、終了点をより正確に定義し、シリーズがまだ終了していないときにロールバックがすでに終了しているケースの数を減らすことができます。

他の資産の取引から得られた利益を使用した誤ったポジションの修正

上記のアルゴリズムにより、資産のボラティリティを減らすことができます。ただし、このシステムは、28の取引商品を同時に処理することを目的としています。特定の取引商品は、長期間にわたって過度の上昇または下降傾向にある可能性があります。収益性チャートのボラティリティをさらに減らすために、他の商品の最初の各シリーズを閉じることで得られた利益を使用する必要があります。 

このアプローチは、一部の取引商品のトレンドが他の取引商品のレンジを伴う場合に機能します。図6は、ステップ数に応じた1つの商品の変動振幅の平均増加を説明する近似法則を示しています。法則がわかれば、28の取引商品で同じ展開を予測することが可能です。言い換えれば、価格が垂直方向に通過する平均距離は、ステップサイズに0.5の累乗のステップ数を掛けたものにほぼ比例します(累乗は商品や市場によって異なります)。より明確にするために、28の取引商品を取り、グラフにこれを表示して、平均してnステップ以内に通過できる距離を計算することをお勧めします。

28の独立した取引商品を1つのグラフでどのように説明できるでしょうか。それぞれには独自のボラティリティと異なる変動範囲があります。各取引商品の動作が他の取引商品と類似していないことはよく知られています。ただし、グラフに表示されている形式だけが類似しているわけではありません。ローソク足のサイズをポイントではなく単一の通貨(たとえば、米ドル)で再計算し、米ドルで一定額の取引を行うと仮定すると、各商品の規模とボラティリティはほぼ同じになります。取引システム内で決定的な要因は、固定金額を取引するときにnステップ以内に価格が垂直方向に通過する米ドルの金額です。

ポイントのグラフから利益のグラフに移る必要があります。ここでは、固定ロットではなく、取引の固定金額について話します。これらは完全に異なるものです。取引は、各商品に対して$1000の通貨ペアで実行されます。この場合、通貨ペアの形式に応じて4つの式タイプがあります。次の式に従って、ローソク足のサイズをポイントから米ドルに再計算してみましょう。

  • 式EURUSD;
  • 式USDCAD;

  • 式eurgbp;

  • 式cadchf.

式において: 

  • EURUSD、USDCAD、EURGBP、CADCHF — $1000で取引する場合の、対応する通貨ペアの米ドルでのローソク足サイズ
  • EURUSD(-1)、USDCAD(-1)、EURGBP(-1)、CADCHF(-1) — 以前のローソク足の終値
  • EURUSD(0)、USDCAD(0)、EURGBP(0)、CADCHF(0) — 最後に形成されたローソク足の終値
  • 1000 — 米ドルでの取引金額

EURUSDとすべての通貨ペアの最初の式を考えてみましょう。ここでは、2番目に来る通貨の金額で取引が実行されます。取引は合計$1000で行われます。この場合、ローソク足のサイズを定義するロジックは次のとおりです。$1000を売る-->>前のローソク足のレートでEURを買う(-1ローソク足)-->>$1000の場合、最後に閉じたローソク足(0ローソク足)のレートでEURに対して逆取引が実行される-->>(-1)ローソク足のレートで$1000で買ったEURの数から、ゼロローソク足のレートで$1000で売ったEURの数を引く->>得られたEURの利益/損失が現在のEURUSDのレートでUSDに変換される-- >>米ドルでの利益/損失が取得される。これが、ローソク足のサイズを米ドルで定義する方法です。 

次に、米ドルでのローソク足サイズのグラフを作成するために、後続の各ローソク足のサイズが前のローソク足のサイズに追加されます。

USDが最初に使用されるUSDCADおよびその他の通貨ペアの場合、計算はより簡単です。取引はすでに米ドルで実行されています。クロスレートの場合、計算はEURUSDの式と似ていますが、EURGBPペアでは、$1000をGBPに変換してから取引操作を実行し、結果として得られるEURの利益をUSDに戻す必要がある点が異なります。CADCHFの場合、考え方は前のオプションと似ていますが、計算はUSDを最初に持つペアを介して実行されるため、式は適切な方法で変更されます。

いずれにせよ、操作の背後にある考え方は、各通貨ペアの特定の振幅のローソク足の合計$1000の取引によって得る/失うことが可能な米ドルの金額を計算することです。 

このアルゴリズムでは、取引商品の各最初のシリーズを閉じることから得られる全利益の80%が、そのような補償が必要な商品の誤って開かれたポジションを補償するために使用されます。したがって、アルゴリズム全体が機能して、任意の取引商品の「過剰なポジション」を時間どおりに決済します。目的は、誤ったポジションをできるだけ早く決済して、トレンドセクションが長引くことで大幅なエクイティドローダウンが発生しないようにすることです。これにより、収益性グラフのボラティリティが低下するはずです。

28通貨ペア

図8 10,000ステップ以内の28の通貨ペアのパス

図8は、上記の式を使用して同時に計算された28の通貨ペアの利益グラフを示しています。グラフは、10,000個のH4ローソク足用に作成されています。分析期間は2004年から2010年半ばまでです。Excelファイルを以下に添付して、データを挿入し、グラフの作成に使用される式を確認できるようにします。

図8は、一部の通貨ペアでトレンドが検出されているときに他の通貨ペアでレンジが検出されることを示しています。これは、すべての商品を同時に取引することで得られる利益によって誤って開かれたポジションを補償することによって収益性グラフのボラティリティを低減する可能性を確認するものです。アルゴリズムが現在獲得できる取引商品は常に存在します。

この振る舞いは、外国為替市場だけでなく、株式市場でも条件付きで一般的です。外国為替市場はしばしば価格の上昇と下降に関して対称的ですが、株式市場は非対称的です。外国為替市場と株式市場でのトレンドはほぼ同じですが、株式市場が上向きのバイアスと資産間のより大きな相関関係を示すという唯一の違いがあります。しかし、異なる国の取引所から取引商品を取得する場合、相関は資産間の負の相関にまで大幅に減少する可能性があります。

さらに、すべての取引商品の平均ローソク足サイズ(米ドル)を変更しました。それは$2.26ドルでした。ステップ数と平均ステップサイズがわかれば、すべての商品の垂直移動の平均を評価することができます($2.26*10,000^0.5=$226)。実際には、すべての取引商品は10,000ステップ以内で平均$216.41移動しました。これは、理論値に近い値です。

このアルゴリズムでは、取引商品の各最初のシリーズを閉じることから得られる全利益の80%が、そのような補償が必要な商品の誤って開かれたポジションを補償するために使用されます。したがって、アルゴリズム全体が機能して、任意の取引商品の「過剰なポジション」を時間どおりに決済します。目的は、誤ったポジションをできるだけ早く決済して、トレンドセクションが長引くことで大幅なエクイティドローダウンが発生しないようにすることです。これにより、収益性グラフのボラティリティが低下するはずです。

図9は、これがどのように機能するかを示しています。テストには、相関のない商品が選択され、テスト自体は2020年のM1で実施されます。設定は最適化されておらず、すべての商品で同様に設定されています。アルゴリズムは、その作業をリアルタイムで調整します。

GBPUSD+AUDNZD

EURCAD+CHFJPY

GBPUSD+AUDNZD+EURCAD+CHFJPY

図9 複数商品補正機能

最初に、テストは各ペアの収益性グラフを評価するために別々の通貨ペアで実行されます。次に、補償モードを有効にして、4つの通貨ペアで同時にテストを実行します。

ファンドによる最大ドローダウンは、$4311からなるGBPUSDであったことがわかります。最大の収益性はGBPUSDでも検出され、$1555に相当します。同時に、AUDNZDは、テストの停止により$109の損失を示しています。続けられていたら、取引は利益を上げていたでしょうl。

複数商品補償アルゴリズムにより、4つの通貨ペアでのテスト中の資金によるドローダウンを同時に$4311から$3517(18%)減らすことができます。総収益性は$2015.21になりました。結果として得られる個別の取引で完了した取引の総数は1446であり、共同取引では1409に減少します。これは、補償アルゴリズムが実際には取引の過程に影響を与えないが、作業の安定性を向上させることを示唆しています。

したがって、取引に使用される取引商品が多いほど、さまざまな世界の取引所および市場から同時に1000の取引商品を取引するときに、収益性グラフがより滑らかになります(線形グラフまで)。株式、通貨、さらには暗号通貨でさえ、適切な方法で各取引商品の取引量のバランスを同時にとることができます。


テスト

アルゴリズムはすべての取引商品で機能する必要があります。まず、AAPL(Apple)株でどのように機能するかを示します。現時点では、EAは商品の統計パラメータを収集できません。この機能は開発中です。これが、2つのパラメータを手動で構成する理由です。これらは、シリーズを開いたり閉じたりする割合です。ただし、パラメータ値は、最適化とフィッティングを使用するのではなく、EAに統合されるインディケータを使用して測定されます。EAは、将来、これらの値を独自に調整します。

AAPL買 

AAPL買テスターレポート

図10 AAPL (ロングポジションのみ)

商品の統計的特性は上昇と下降で対称的ではないため、テストは買いポジションと売りポジションで別々に実行されます。パラメータは、買いポジションの場合はより積極的で、売りポジションの場合はより保守的です。2つのパラメータのみが変更されます。

図10は、2012年6月24日から2020年12月28日(7.5年)までのバックテストの結果を示しています。テストはМ1で実行されました。収益性のグラフは滑らかで、エクイティによる最大ドローダウンは$858、利益は$1704です。ポジションの総数は176で利益率は18.13です。これは非常に良い兆候です。

買いポジションのみを開くことで上昇するAAPL株から利益を得たいのであれば、複雑なアルゴリズムは不要であると言う人もいるかもしれません。これは正しいです。売りポジションのみが許可されている場合、アルゴリズムがどのように動作するかを見てみましょう。Apple株のショートポジションを開くことは自殺念慮のように思われるが、アルゴリズムは適応的であると思われます。それで、それが生き残るかどうか見てみましょう。

AAPL - 売

AAPL - 売レポート

Figure 11: AAPL (ショートポジションのみ)

図11は、AAPLシェア(2012年6月24日から2020年12月28日M1)でのアルゴリズムの結果を示しています。買いポジションの場合ほど良くはありませんが、アルゴリズムはそれでも利益を上げることができます。ここでは、最大のエクイティドローダウンは$10,533ですが、収益は$2234です。利益率はかなり低く、1.4に等しいです。ポジションの総数は944です。売買の両方が可能である場合、誤ったポジションを補正するアルゴリズムが収益性グラフのボラティリティを低下させるため、結果はより良くなります。28の取引商品を同時に取引すると、結果はさらに良くなります。パラメータを履歴に適合させずにほぼ自律モードで7.5年間合格しているアルゴリズムの機能の結果は良いものです。

今では、困難な状況に適応できることが重要です。AAPLは明らかにショートポジションでは難しい取引商品であるため、AAPLでテストを実行することにしました。テスト中の商品のチャートを見てみましょう。

AAPLチャート

図12 AAPLチャート(06.24.2012 - 12.28.2020)

図12は、AAPL株の力強い成長を示しています。過去7.5年間で、資産は6.3倍に成長しました。最適化なしで自動取引のみを使用してこのようなチャートで利益を上げることは、かなり困難な作業です。

このアルゴリズムは、28の商品を同時に取引することを目的としています。したがって、テストは28の取引商品で実行されます。まず、FOREXでの作業の結果を見てみましょう。テストで使用された通貨ペアは、GBPUSD、EURUSD、NZDUSD、AUDUSD、USDCAD、USDCHF、USDJPY、EURGBP、EURAUD、EURNZD、EURCAD、EURCHF、EURJPY、GBPAUD、GBPNZD、GBPCAD、GBPCHF、GBPJPY、AUDNZD、AUDCAD、AUDCHF、AUDJPY、NZDCAD、NZDCHF 、CADCHF、CADJPY、CHFJPYです。すべてのペアの設定は完全に同じです。アルゴリズムは、すべての変更にリアルタイムで適応します。 

テストは2008年1月1日から2021年1月13日(13年)までМ1で実施されました。EAは複数のリソースを消費し、1年間のテストには約12日かかります。したがって、テスト間隔全体を1〜2.5年のセクションに分割して、テストを並列化します。

2008-2009

2009-2010

2010-2011

24.06.2010 -24.06.2012

24.06.2012 - 24.06.2014

24.06.2014-24.06.216

24.06.2016 - 24.06.2018

24.06.2018-13.01.2021

図13 2008年1月1日から2021年1月13日までの28の通貨ペアのテスト

図13は、28の通貨ペアでのテストを同時に示しています。ご覧のとおり、2012年6月24日から2014年6月24日までの期間を除いて、ほぼすべてのテスト間隔での取引は利益を伴って終了しました。ここで、テストはわずかな$123の損失で完了します。これは、テストが停止したためです。テストが13年間絶え間なく続けられた場合、EAはドローダウンから抜け出します。ポジションの総数は14,415です。この統計的に有意な値は、得られた結果がランダムではなかったことを示しています。エクイティドローダウンには適切な価値があります。ただし、将来のアルゴリズムバージョンでは、収益性と安定性のパラメータが改善されるはずです。 

EAは用途が広いので、MOEXで取引されているロシア企業の株式でどのように機能するかを見てみましょう。設定は、通貨に適用される設定と同じです。ただし、ロングポジションのみが許可されます。現在のEAバージョンでは、ショートポジションとロングポジションのパラメータを個別に調整することはまだできません。この機能は現在開発中です。テストは2013年1月2日から2018年9月20日まで(5年7か月)実施されました。テスターで指定されたレバレッジは1:5です。ポートフォリオには、GAZP、CHMF、ALRS、HYDR、LKOH、MAGN、MGNT、MTSS、NLMK、NVTK、ROSN、RTKM、SBER、SNGS、SNGSP、TATN、VTBR、SBERP、TATNP、AFLT、FEES、 GMKN、RSTI、SIBN、UPRO、MSNG、MTLR、PLZLの最も流動性の高い商品が含まれています。

moex

図14 テストは2013年2月1日から2018年9月20日までにロシア企業の28株で実施されました。

図14は、ロシア企業の28株のテスト結果を示しています。アルゴリズムは非常に一貫して均等に稼ぎます。前の場合と同様に、収益性は低いことが判明しましたが、最も重要なことは収益性が維持されていることです。ポジションの総数は5485です。これは、結果が本質的にランダムではないことを示唆しています。 

利益の源

実用的なアルゴリズムまたはモデルの開発は不十分です。もう1つの重要な要素は、それが機能する理由と利益がどこから来るのかを理解することです。この場合、利益は非自明なソース、つまりエントロピーの増加から得られます。ボルツマンの原理によって決定され、可能なシステム状態の数と特定の状態の確率によって特徴付けられるエントロピーについて話しています。

言い換えれば、市場のエントロピーはほぼ一定です。商品の流動性が高いほど、この商品の価格チャートのエントロピーは高くなります。取引商品で実行される取引操作の数が増えると、可能な状態の数も増え、システムは最も可能性の高い状態を占めるように努めます。エントロピーを増加させる効果は、エントロピー自体がほぼ一定である場合に発生しますが、システムの可能な状態の数は増加します。

最も高いエントロピーは外国為替市場で見られ、最も低いエントロピーは流動性の低い資産で検出されます。それぞれの特定の取引商品のエントロピーは最も高くなる傾向がありますが、資金の流入はこれが起こらないようにします。資金の流入は、資産の投資の魅力と資金の排出という2つの理由で発生します。各取引商品のエントロピーは最終的に大きくなります。


まとめ

収益性は非常に低いですが、連載では、完全に自動化された、根本的に異なる市場で取引される完全に異なる商品で収益性の高い取引モデルを示しています。57の取引商品のテストが表示されます。パラメータは同一なので、これは単一の取引商品の520年分のテストに相当します。

  • 信頼性の高い作業が可能で、改善の余地がある基本的なアルゴリズムを開発しました。説明されている各メカニズムは、収益性を大幅に向上させ、ファンドのドローダウンを減らすために改善する必要があります。 
  • 前回の記事では、現在のトレンドを追跡する2つの方法について書きました。それらは「ポジションを開く遅延」の段落で説明されています。28の取引商品のテストは、「トレンドセグメント遅延」法を使用して実施されます。「商品の統計的特性に基づく遅延」の方がうまくいくため、これは最善の方法ではありませんが、アルゴリズムはまだ完成していないため、動作機能のみを使用しました。アルゴリズムの将来のバージョンでは、この機能は大幅に改善される予定です。
  • 誤って開いたポジションの数を減らすには、最小ブロックサイズを事前に選択するためのデータの追加分析が必要です。
  • アルゴリズムは、これらの資産に基づくブロック価格の違いにつながる資産価格の違いを考慮しません。これにより、為替商品の収益性が大幅に低下します。特定の資産ごとのブロック価格に応じて、ポートフォリオごとにロットサイズのバランスを追加する必要があります。
  • また、ロングポジションとショートポジションの意思決定アルゴリズムの個別の管理を実装する必要があります。また、特定の各取引商品の統計パラメータと非対称性の分析を追加する必要があります。
  • 利益全体の80%は、アルゴリズムの安定性の維持に費やされます。損失を出すポジションを補うメカニズムと意思決定メカニズムの両方を改善する必要があります。これにより、収益性が大幅に向上します。
  • アルゴリズムは各取引商品の統計パラメータを収集することができず、現在は適応メカニズムのみを適用しています。次のバージョンでは、パラメータは取引商品の統計的特性に基づいて調整され、収益性が完全に自動的に向上します。 
  • 通貨ペアと株式の価格チャートの違いはまだ使用されていません。モデルは、既存の知識を追加することによって改善する必要があります。

    このトピックに関する以前の記事

    MetaQuotes Software Corp.によってロシア語から翻訳されました。
    元の記事: https://www.mql5.com/ru/articles/8859

    添付されたファイル |
    chart_in_dollars.zip (16374.28 KB)
    DoEasyライブラリでの価格(第62部): ティックシリーズをリアルタイムで更新して板情報で作業するための準備 DoEasyライブラリでの価格(第62部): ティックシリーズをリアルタイムで更新して板情報で作業するための準備
    この記事では、ティックデータの更新をリアルタイムで実装し、板情報を操作するための銘柄オブジェクトクラスを準備します(DOM自体は次の記事で実装されます)。
    DoEasyライブラリでの価格(第61部): 銘柄ティックシリーズのコレクション DoEasyライブラリでの価格(第61部): 銘柄ティックシリーズのコレクション
    プログラムでは作業に異なる銘柄を使用する可能性があるため、それぞれに個別のリストを作成する必要があります。本稿では、そのようなリストを組み合わせてティックデータコレクションにします。実際、これは、CObjectクラスのインスタンスへのポインタの動的配列のクラスおよび標準ライブラリの子孫に基づく通常のリストになります。
    DoEasyライブラリでの価格(第63部): 板情報とその抽象リクエストクラス DoEasyライブラリでの価格(第63部): 板情報とその抽象リクエストクラス
    本稿では、板情報を使用するための機能の開発を開始します。また、板情報抽象注文オブジェクトとその子孫のクラスも作成します。
    ニューラルネットワークが簡単に(第10回): Multi-Head Attention ニューラルネットワークが簡単に(第10回): Multi-Head Attention
    ニューラルネットワークにおける自己注意のメカニズムについては、以前に検討しました。実際には、最新のニューラルネットワークアーキテクチャは、いくつかの並列した自己注意スレッドを使用して、シーケンスの要素間のさまざまな依存関係を見つけます。このようなアプローチの実装を検討し、ネットワーク全体のパフォーマンスへの影響を評価しましょう。