自己適応アルゴリズムの開発(第I部):基本的なパターンの検索

16 2月 2021, 09:45
Maxim Romanov
0
687

はじめに

取引アルゴリズムは通常、経験豊富なトレーダーに利益をもたらすことも経験の浅いトレーダーの預金を即座に破壊することもあるツールです。収益性と信頼性の高いアルゴリズムを作成する際の問題は、利益を得るために何をする必要があるのか、そして「成功したトレーダー」がどのような方法を使用するのかを理解できないことです。HFT、アービトラージ、オプション戦略、カレンダースプレッドベースのシステムは、利益を上げるために何をする必要があるかを明確に示す確かな理論的根拠を誇っていますが、価格分析と基本データに基づくアルゴリズムについてははるかに不明確です。この領域では、価格設定を説明する本格的な理論的根拠がないため、安定した取引アルゴリズムを作成するのは非常に困難です。ここでは取引が芸術に変わり、科学はすべてを体系化するのに役立ちます。

しかし、最適化や各取引商品のパラメータを個別に手動で調整する必要なしで、任意の取引商品で機能するような、価格変動の分析のみに基づき完全に自動化された取引アルゴリズムを作成することは可能でしょうか。必要な取引商品チャートに簡単に適用できるアルゴリズムはあるのでしょうか。 

市場の変化に関係なくアルゴリズムが負けないようにすることは可能でしょうか。達成するのは難しいですが、それは可能だと私は信じています。この問題を解決するには、次の2つの方法があります。

  1. 機械学習でニューラルネットワークを使用して、市場を分析し、独自の基準に従って利益を上げる「ブラックボックス」を取得します。このアプローチには明らかな自明性と魅力がありますが、複雑です。もしもそれがとても簡単だったら、機械学習を使った豊富な経験と多額の予算を持つGoogleやYandexのような企業はずっと前にこの問題を解決していた、あるいは少なくとも市場データと予測の質の分析のリーダーの1つになっていたでしょう 。そのようなアルゴリズムを作成することは可能だと思います。競争力を維持するためには、技術が発展するにつれて絶えず改良されるべきです。結局のところ、競争相手はハイテクの巨人になるでしょう。
  2. 価格設定パターンを研究し、価格形成の理論モデルを開発し、価格設定に影響を与えるできるだけ多くの要因を作成するアルゴリズムを作成します。私の意見では、この方法は機械学習よりもさらに複雑ですが、現実的だと思います。このようなアルゴリズムは、理論的背景と開発者の知識の開発とともに向上し、絶え間ない近代化も必要になります。

私は、2番目の方法を使用することにしまっした。つまり本格的な理論を作成し、それに基づいてアルゴリズムを開発します。連載ではアルゴリズムを開発し、小さなパターンから大きなプロジェクトに移行します。また、作業効率を上げながらパターンを見つけて研究する方法を紹介します。

最初のアルゴリズムは、外国為替およびMetaTrader 4ターミナル用にのみ開発されますが、外国為替と取引所の両方で機能する汎用MetaTrader 5アルゴリズムに進化していきます。

基本パターン

アルゴリズムの基礎となる基本的なパターンの検索から始めましょう。このパターンは、将来どの市場にも簡単に拡張できるように、ほとんどの市場で基本的かつ固有のものである必要があります。あらゆる市場でのスケーラビリティは、アルゴリズムが真に自己適応的であることを示唆しています。

まず、市場で一貫して利益を得ることが難しい理由を定義してみましょう。理由は直接の競争です。一部のトレーダーの仕事は他の人と有益な取引を締結することですが、問題は、各当事者が有益な取引を締結したいと思っており、誰かが間違いなく損失を被ることです。したがって、市場は誰もが気付くような安定した単純なパターンを持っていないはずです。

私の最初の記事「価格系列の離散化、ランダム成分とノイズでは、市場のランダムコンポーネントと、価格系列の増分の分布がランダムウォークの増分の分布と非常に似ているという事実について書きました。一見、価格系列にはパターンがなく、すべてがランダムに発生し、これで安定した利益を得ることは不可能です。

したがって、原則として、どの商品でも、下降ローソク足とまったく同じ数の上昇ローソク足があると考えました。これは非常に単純なパターンであり、それから逸脱すると、それに気付いたすべての人が安定した収益を得られます。とても単純なので、多くの人が気付くと思います。しかし、ご存じのように、誰もが収益を得ることは不可能であるため、長期的には、上昇ローソク足の数と下降ローソク足の数に大きな違いはないはずです。これは、言及された記事に暗黙のうちに述べられています。確認したのがすべてのツールではなく約100個のみなので、理論的には、このルールから逸脱する可能性があります。ただし、この段階ではこれはそれほど重要ではありません。 

たとえば、任意の期間で100,000 GBPUSDのH1ローソク足を取り、上昇ローソク足の数と下降ローソク足の数を計算してみましょう。2020.10.27からさかのぼった10万本のローソク足の期間を使用します。この期間には、50,007の強気ローソク足と48,633の弱気ローソク足が含まれています。残りのローソク足については、始値は終値と同じです。言い換えれば、GBPUSDではローソク足の50.7%が強気で49.3%が弱気です。残りでは始値=終値で値はほぼ同じです。より大きなサンプルを取得すると、結果は50%に近づきます。

この記事内のすべての商品を測定するわけではありませんが、何百もの商品を観察したところ、結果はどこでも同じでした。しかし、説得力を持たせるために、まったく異なる市場のGAZP(Gazprom)M15から商品を取り出し、99,914本のローソク足の下降および上昇を測定しましょう。結果は48,237本の強気と48,831本の弱気です。残りのものは中立です。ご覧のとおり、弱気と強気のローソク足の数はほぼ同じです。

このパターンは、多数の商品に存在するだけでなく、どの時間枠にも存在します。これを確認するために、GBPUSD M1を分析し、M15で着実に上昇しているAAPL株を取り上げます。すべてのデータを1つの表にまとめました。

銘柄 時間枠 ローソク足の総数 強気ローソク足の数 弱気ローソク足の数
GBPUSD M1 100,000 50.25% 49.74%
GBPUSD H1 100,125 50.69% 49.30%
GAZP M15 99,914 49.69% 50.30%
 AAPL  M15  57,645 50.60% 49.40%

表によると、ローソク足の上昇と下降の比率は、検討対象の商品で50%になる傾向があり、これは検討対象のすべての時間枠で有効です。測定に使用したデータと結果を含むXLSXファイルを以下に添付します。

表に示されている結果は、多数のサンプルにわたる価格系列の統計パラメータがランダムウォークパラメータと非常に類似しているという結論を裏付けています。さらに、少数のサンプルでは、参照分布からの偏差があります。アルゴリズムは価格系列の増分の分布が通常と類似しているのは表面のみであるという仮定に基づいています。

少数のサンプルでは分布の形状が参照の形状と異なりますが、サンプルの数が増えると、形状は参照の形状になりがちです。最も重要なことは、分布が基準値に向かう速度は、商品ごとに異なり、非常に安定していることです。 

分布

図1

図1は、上記のすべてを視覚化したものです。増分の参照分布は赤で示され、サンプル数が多い価格系列の増分の分布は黒で示されています。少数のサンプルでの価格系列の増分の分布は、紫、緑、青で示されています。

多数の取引商品に固有の基本的な規則性が見出され、利益を探す場所が想定されています。弱気のローソク足の数=強気のローソク足の数。平衡からの逸脱が発生した場合、各商品が平衡に復帰する率は個別で安定しており、特定の制限内で変動します。このパターンを使って利益を上げます。

テストアルゴリズムの開発

次に、このパターンを使用して最も単純なアルゴリズムを開発し、テストして、理論をさらに発展させる価値があるかどうかを理解する必要があります。弱気と強気のローソク足の数の50%からの局所偏差が取引に使用されます。平均して、弱気と強気のローソク足の数はほぼ同じです。ただし、あるタイプのローソク足が別のタイプのローソク足よりも優勢である場合、50%とは大きく異なり、その後平衡状態になる傾向があります。アルゴリズムは次のように機能します。

一般的な簡略化されたアルゴリズム

  • N本のローソク足の期間をスキャンします。 
  • 弱気または強気のどちらのローソク足が優勢であるかを確認します。
  • 優勢率がしきい値を超えると、一連のポジションを開くシグナルがアクティブになります
  • (弱気のローソク足が優勢=買いシグナル、強気のローソク足が優勢=売りシグナル)。
  • ロットを計算します。
  • シリーズ決済条件がトリガーされるまで、後続の各ローソク足で新しいポジションを開きます。 
  • シリーズ決済条件がトリガーされます。
  • すべてのポジションを決済します。
  • 新しいシグナルを検索します。

アルゴリズムは単純化のために成行注文を適用します。アルゴリズムは終値のみを使用し、すべてのアクションは新しいローソク足が形成された後に実行されます。ローソク足の中を分析する必要はありません。現在の利益と資金を管理するだけで済みます。その他の計算は不要です。

ポジションを開くシグナル

  1. 分析ウィンドウ。ローソク足の数(分析ウィンドウ)を設定して、弱気と強気のローソク足の現在の割合を確認します。一定数のローソク足を分析することはお勧めできません。50%以上の偏差を持つ長いセクションまたは短いセクションが存在する可能性があるためです。小さな領域は大きな領域の一部になる可能性があるため、分析期間を最小数から最大数のローソク足に設定し、ローソク足の数を多くすることを優先しますが、範囲全体をキャプチャする必要があります。分析期間は、MinBarsパラメータとMaxBarsパラメータによって設定されます。アルゴリズムは、MinBarsからMaxBarsまでの範囲で弱気または強気のローソク足の優勢度を検索します。発見されるとすぐに、アルゴリズムは、しきい値を超える弱気または強気のローソク足を超えるローソク足の最大数を選択します。
  2. ポジションを開くためのしきい値超過パーセンテージ。シグナル生成のしきい値と見なす弱気または強気のローソク足の超過パーセンテージを定義する必要があります。 このパラメータは、最適化によって選択できます。設定には、OpenPercパラメータが含まれます。このパラメータはパーセンテージで設定され、開くためのパーセンテージ値です。サンプルの弱気ローソク足のパーセンテージが開くためのパーセンテージ以上の場合は、買いポジションを開きます。サンプル中の強気ローソク足のパーセンテージが開くためのパーセンテージ以上である場合は、売りポジションを開きます。  
  3. 範囲の列挙。いくつかのステップで範囲からローソク足を分析する必要があります。奇数ステップは、必然的に50%からの偏差が特徴としており誤ったエントリシグナルを提供するため、適切でありません。したがって、範囲をチェックするためのステップは、設定(Stepパラメータ)にあります。範囲の列挙は小さい順です。

シリーズの最大ポジション数

取引中、ポジションは一連の注文で満たされるため、ポジションの最大数を制限する必要があります。これをおこなうには、超過が50%に到達する時点のローソク足の数を計算する必要があります。シリーズの開始をトリガーしたサンプル(N本のローソク足で構成される)を使用し、優勢なローソク足の数を計算し、そこから残りのローソク足を引き、それを最初のサンプルのローソク足の数に足して、К調整係数を掛けます。 К比は、商品の統計的特性に間接的に関連しています。

これにより、50%からの偏差がなくなると予想されるローソク足の数を取得できます。

R=(N+NB-NM)*K
N - しきい値を超える超過を特徴とするサンプル内のローソク足の数
NB - 優勢なローソク足の数
NM - 残りのローソク足の数
K - 設定で定義された調整係数

次に、ロボットが開くポジションの最大数を計算する必要があります。ローソク足の総数Rから最初のNサンプルのローソク足の数を引けば、結果は、ロボットがシリーズ内で超えてはならないポジションEの最大数になります。

E=R-N
E - シリーズ内の最大ポジション数
R - 50%への復帰が計画されているローソク足の総数

このアルゴリズムはまだ自己適応していませんが、最初の手順が実行され、ポジションの数が最初のサンプルのローソク足の数から調整されます。

ロットの選択

パターンをチェックするためのアルゴリズムが作成されました。したがって、ロットを決定するためにいくつかの設定を追加する必要があります。ロットサイズがシリーズの予想されるポジション数に依存するとします。シリーズのポジションが多いほど、ロットは小さくなります。これをおこなうには、DepoとRiskPercの2つの設定を追加します。簡単にするために、$1000=ロット($500=0.5ロット)と仮定しましょう。Depo設定から値を取得し、それにRiskPercを掛けます。得られた値をポジションEの最大数で割り、最も近い正しい値に丸めます。これが、1つのポジションのロットサイズを取得する方法です。

保証金が増えた場合は、ロット自動増額機能を追加する必要があります。ここでDepo = 0の場合、現在の預金額にRiskPercを掛け、得られた値を使用して開くポジションのロットを求めます。

ポジション決済

決済はいくつかの場合に発生します。

1)ポジションの総利益が、CloseProfitで設定された値に達したとき。EAが開くポジションの数は一定ではなく、ロットサイズが変わる可能性があるため、固定利益を米ドルで設定するのは誤りです。米ドルの利益は、現在のポジションの数と市場の総ロットに依存する必要があります。これをおこなうには、「ロットあたりの利益」の概念が必要です。

CloseProfit設定は、1ロットの合計ポジションの利益を設定し、ロボットは開いたロット数の利益を再計算します。それぞれが0.01ロットのポジションが10個ある場合、合計ロットは0.1です。したがって、ポジションを決済するための利益値は、Profit = CloseProfit * 0.1です。ポジション数が変わるたびにポジションを決済するように利益を調整します。その結果、総利益が計算された利益値以上になると、EAはポジションを決済します。

2)現在の超過率がClosePerc以下になったとき。ClosePercは、優勢なローソク足の超過パーセンテージを設定して、一連のポジションを決済するためのシグナルを生成します。最初のポジションが開かれたとき、N本のローソク足で超過が見つかりました。次に、新しいローソク足ごとに、ローソク足の数はN+1、N+2、N+3などになります。新しいローソク足ごとに、ローソク足の数が1ずつ増えるサンプルで、現在の過剰なブロックの割合を確認する必要があります。条件が満たされた後、シリーズを完了します。

3)MinEquityに到達したとき。現在の資金が設定値を下回った場合は、開いているシリーズを完了し、資金が増えるまで新しいシリーズを開かないようにする必要があります。これは、預金を損失から保護するストップロス機能です。

検証

このアルゴリズムは非常に原始的です。変化する市況に適応することはできず、アイディアの実行可能性を確認するためにのみ使用されます。したがって、最適化を使用して設定を選択します。最適化では遺伝的アルゴリズムを使用せずにすべてのオプションを列挙します。EAは2014年に開発され、MetaTrader 4用に作成されました。まずGBPUSDH1でテストします。人工的に高いスプレッドを40に設定し、最適化が不完全な条件で実行され、将来的に一定の安定性が確保されるようにします。EAはポジションの現在の利益を管理してスプレッドの影響を受けるため、スプレッドを増やす必要があります。

ローソク足の最小数MinBars、ポジションOpenPercの割合、ロットあたりの利益CloseProfitの3つの条件のみを最適化します。おそらく、分析するローソク足の最小数がより大きく開く割合が高いほど、シグナルの信頼性は高くなりますが頻度は低くなります。CloseProfitは、間接的にボラティリティに依存します。したがって、最適化の前に、商品のボラティリティを確認し、適切な範囲を設定する必要があります。最適化は、2019.11.25から2020.11.25までの1年間、H1で実行されます。

最適化GBPUSD

図2 最適化の結果

総当たり攻撃での最適化は、パラメータが結果にどのように影響するか、およびアルゴリズムが理論的にどのように機能するかについての仮定に結果がどのように収束するかを確認するために必要です。図2に、いくつかの結果を示します。最大利益による並び替えを有効にし、ドローダウンと収益性の最も適切な指標を持つ設定を選択する必要があります。強調表示された設定は問題ないようです。

最適化結果をさらに分析すると、MinBarsとOpenPercentが増加すると、収益性とドローダウンが減少することがわかります。次に、強調表示されたパラメータを取得し、1年以内にテストして結果を取得し、MinBarsとOpenPercentが増減した場合にどのような変化があるかを定義しました。私の結論は、MinBarsとOpenPercentの増加に伴い、取引の数が減少してシグナルの信頼性が向上するということです。つまり、収益性とドローダウンのバランスを見つける必要があります。

取引については、市場の状況の変化に対する安全マージンを確保するために、意図的により保守的なパラメータを採用しました。下の図3は、EAがポジションを開く方法を示しています。

取引

図3 ポジションを開く

図3は、必要に応じてポジションが複数の取引で構成されていることを示しています。エントリシグナルは長期になります。アルゴリズムの最初のバージョンは、いくつかの時点でかなり長期に引き伸ばされた大まかなシグナルを特徴としています。標準の平均化というよりは、ファジー入力のように見えます。これは、弱気のローソク足が強気のローソク足よりも可能性が高い、あいまいな境界のある領域です。この確率から利益を得ることが可能です。

アルゴリズムは MinBars = 70で信頼性を維持しますが、取引商品の特性の変動に余裕があるように80に設定しました。CloseProfitパラメータを選択する場合のロジックも同様です。この例では、150に等しくなります。 値が小さい場合、アルゴリズムはより安定しますが、利益は減少します。168まで増やすと、アルゴリズムの信頼性が失われるため、150にしておきます。その結果、図4のような1年間の収益性グラフが得られました。CloseProfitは、米ドルに換算された平均ボラティリティにすぎません。

GBPUSD 2019チャート

GBPUSD 2019レポート

図4 GBPUSD H1、2019.11.25 - 2020.11.25

預金は最適化のために10,000ドルに設定されています。調査が完了したら、合計を最適な値に戻します。アルゴリズムは終値で機能するため、テストと最適化は参照ポイントモードで実行されました。したがって、ローソク足内のイベントは重要ではありません。図5は、「全ティック」モードでの同じ期間のテストを示しています。

GBPUSDティック2019チャート

GBPUSDティック2019レポート

図5 GBPUSD H1、2019.11.25-2020.11.25「全ティック」モード

図5によると、テストがより正確になったため、利益は「全ティック」モードでわずかに増加しました。収益性グラフはほぼ完全に同じままです。どちらのテストでも、5をわずかに超える優れた利益率が得られました。

最適化された1年間のテストに基づいてパターンの信頼性について結論を出すのは誤りなので、過去にこれらのパラメータを使用してアルゴリズムが何年持続できるかを見てみましょう。図6は、最適化された期間外のテスト結果を示しています。

GBPUSD 2001チャート

GBPUSDレポート2001

図6 GBPUSD H1、2001.01.01 - 2020.11.25

図6は、2019.11.25から2020.11.25までの1年間の最適化中に取得されたものと同じパラメータを使用した2001年以降のバックテストを示しています。このテストでは、このような大きな間隔でドローダウンが数ドルしか増加しなかった一方で、利益が大幅に増加し、利益率が7.5に上昇したことが示されています。このテストは、パターンが長期間にわたってどのように動作するかを理解するために、借り換えなしで3000ドルの預金に対して実行されました。 

最適化が1年で実行されてアルゴリズムが20年間安定した結果を示しているという事実は、パターンが非常に安定していてパラメータが履歴に合わせて調整されていないことを示しています。何らかの理由で、GBPUSDペアはその固有の統計的特性から大きく逸脱していません。 

単一の通貨ペアと時間枠のテストに基づいて結論を出すのは間違っているでしょう。したがって、EURUSDのテストについて考えてみましょう。前の場合と同様に、最適化は2019.11.25から2020.11.25までの1年、H1で実行されました。前の場合と同じ方法でパラメータの選択に取り組みました。結果を図7に示します。

EURUSD 2019チャート

EURUSD 2019レポート

図7 EURUSD H1、2019.11.25-2020.11.25

図7に示すように、EURUSDの収益性はGBPUSDよりも低く、ドローダウンはわずかに大きくなっています。収益性グラフは、複数のポジションを持つセグメントがあったことを示しています。MinBarsパラメータとOpenPercentパラメータを少し締めた後、ポジションの数を減らし、その結果、ドローダウンを減らすことができます。長期テストに移りましょう。図8は、2007.01.01から2020.11.25までのEURUSDのテストを示しています。

EURUSD 2007チャート

EURUSD 2007レポート

図8 EURUSD H1、2007.01.01-2020.11.25

EURUSDの取引はGBPUSDと比較してそれほど安定していません。さらに過去のデータを使用した安定した作業期間は6年短縮されました。結果はまだ良いです。パラメータの最適化は1年で行われ、安定した動作はほぼ14年続きました。この事実は再び、パラメータが単に履歴に合わせて調整されたのではなく、取引手段がかなり安定したパターンを備えていることを示唆しています。

次に、アルゴリズムが他の時間枠でどのように動作するかを確認する必要があります。理論的には、時間枠が短くなると、安定性が低下するはずです。これは、時間枠が短いローソク足のサイズがスプレッドに比べて大幅に減少するためです。その結果、利益が減少し、取引コストが増加します。さらに、より短い時間枠では、エントリポイントはさらに長期になってより多くのポジションが開かれるため、ドローダウンがより大きくなる可能性があります。

GBPUSDM15でテストをおこないましょう。前の場合と同様に、最適化は2019.11.25から2020.11.25までの1年間実行されます。ただし、1年間の最適化グラフを表示する代わりに、アルゴリズムがスムーズに通過できる最大の間隔を表示します。

GBPUSD M15チャート

図9 GBPUSD m15 2000.01.01-2020.11.25

図9は、2000年から実施されたGBPUSDM15のテストを示しています。しかし、エントリシグナルとポジションの数は少ないです。上で書いたように、時間枠が短いと安定性が低くなり、設定は非常に保守的であることがわかります。エントリシグナルはめったに生成されず、収益性は高くありませんが、ドローダウンに対しては十分です。

次に、より長い時間枠のGBPUSDH4でテストを実行しましょう。H4には、最適化のためのローソク足がほとんどありません。したがって、2018.11.25から2020.11.25までの2年間のセグメントで最適化を実行します。結果は最大間隔で表示されます。

GBPUSD H4

GBPUSD H4レポート

図10 GBPUSD H4 2000.01.01-2020.11.25

H4は、2000.01.01から2020.11.25までのほぼ20年間安定した結果を示しています。前の場合と同様に、最適化全体は、利益と信頼性のバランスを見つけることになります。M15の控えめな設定は、H1とH4の両方で確実に機能します。しかし、シグナルが非常にまれで取引が少数であるため、そこには意味がありません。

他の取引手段をテストすることもできます。銘柄によって、アルゴリズムは良くも悪くも機能します。しかし、この傾向は続いています。1年間の最適化により、数年間の安定した作業が可能になります。以下はGBPJPYH1の結果です。最適化は1年間実行され、結果は図11に示されています。

GBPJPYチャート

GBPGPYレポート

図11 GBPJPY 2009.01.01 - 2020.11.25

GBPJPYは2009年以来安定したバックテストを示しています。結果はGBPUSDの場合ほど印象的ではありませんが、機能します。 

EAは、獲得した資金を再投資する機能を備えています。それを使ってください。これまで、控えめな設定でテストを示してきました。しかし、非常に積極的な設定を設定し、大幅な増加を有効にするとどうなるでしょうか。私は高リスクのファンではありませんが、アルゴリズムが何ができるか見てみましょう。2006.01.01から2020.11.25までのGBPUSDで、「全ティック」モードでテストを実行します。もちろん、別の銘柄をテストすることも可能です。スプレッドは20に減少します。これは平均をわずかに上回っています。図12は、ほぼ15年間のバックテストの結果を示しています。


GBPUSD最大リスク

図12 2006.01.01から2020.11.25までのGBPUSD、積極的な設定

覚えていらっしゃるかもしれませんが、アルゴリズムでは終値を使用しています。したがって、この結果は「テストのグレイル」ではありません。さらに、20の適切なスプレッドが設定されています。実際の市場でのアルゴリズムの取引結果は、通常、テスターで得られたものと一致します。私はそのような積極的な設定で取引に使用したことはありません。また、MetaTrader 4で実際のスプレッドを考慮することは不可能であるため、実際の取引でもこの期間を過ぎていたとは言えません。

結果の分析

EAはシンプルで最適化が簡単です。短期間の最適化と事前の非最適パラメータの使用により、数年間、場合によっては数十年間安定した状態を維持できます。これは、見つかったパターンが偶然ではなく、実際に市場に発生していることを示しています。ただし、アルゴリズムは自由度が少なく、厳密に指定されたパラメータで動作するため、非常に「厳密」です。価格系列がアルゴリズムの機能を超えると、すぐに安定性が失われます。 

最も重要なことは、ローソク足のサイズがスプレッドと手数料を大幅に超えているものから始めて、任意の時間枠で使用できることです。時間枠が長くなると、安定性は毎日の時間枠まで大きくなります。ただし、ローソク足のサイズが大きくなり、大きなドローダウンが発生するため、預金の要件も増加します。

最初の記事価格系列の離散化、ランダム成分とノイズで説明したように、価格系列は表面的にはランダムウォークに類似していると結論付けることができます。 価格系列には、少なくとも1つの隠れたパターンが含まれています。

一方で、利益を生むパターンはよく理解しているので、本格的に近代化する時です。

取引での使用法

現在のアルゴリズムの大きな欠点は、リスクに比べてリターンが低いことです。私たちは自分自身に正直であり、リスクがあることを理解する必要があります(他の場所と同じように)。ただし、改善の開発が進行している間に、EAを取引に使用してもいいでしょう。これをおこなうには、収益性を高め、ドローダウンレベルを維持する必要があります。アルゴリズム機能を使用します。取引商品のシグナルを生成することはめったになく、原則として、異なる取引商品の時間的にかなりの間隔があります。ほとんどの時間、商品が取引されません。これらの「ダウンタイム」を埋める必要があります。 

一般に、さまざまな商品のシグナルの安定した相関関係はありません。ドローダウンレベルを維持しながら利益を増やすには、この機能を使用する必要があります。

収益性を高めるには、複数の商品を同時に分析する必要があります。商品の1つにシグナルが表示されたら、そのポジションを開きます。1つの商品のポジションが開かれている場合、他の銘柄からの系列開始シグナルは無視します。これにより、時間をできるだけ効率的に使用し、シグナルの数を増やし、それに応じて利益を増やすことができます。最大ドローダウンは1つの商品レベルのままです。

系列開始シグナルは、独立した銘柄間だけでなく、同じ銘柄の異なる時間枠間でも弱い相関関係にあります。したがって、取引で同じ銘柄の3つの時間枠を使用することにより、時間をさらに効率的に使用し、市場にほぼ常にポジションがある状況を実現することができます。ドローダウンレベルは同じレベルのままですが、利益は大幅に増加します。

リアル口座で作業するために、いくつかの変更が加えられました。

1)それぞれ独自のパラメータを持つ9つの新しい独立した取引商品を追加します。これにより、アルゴリズムは一度に10の取引商品を分析して取引することができます。任意の商品のパラメータをある程度最適化することが可能であるため、決定は論理的であるように思われます。

2)いくつかの取引商品のポジションを限定的に同時に開きます。そのためにMaxSeriesパラメータが追加されています。1に設定すると、取引は1つの商品でのみ実行されます。2の場合、2つの商品で同時にポジションを開くことができます。これにより、EAは「空き時間」を使用してポジションを開くシグナルをより頻繁に生成できるようになります。最大ドローダウンは1つの商品のレベルのままですが、利益は比例して増加します。

MetaTrader 4テスターは多通貨テストを実行できません。しかし、複数の銘柄が取引されている場合、異なる商品のシグナル間に相関関係がなければ、ドローダウンはおそらく同時に取引されている商品の数の平方根に比例して増加します。$1000のドローダウンが予想される場合、3つの商品を同時に取引すると、$1000*(3の平方根)=$1732のレベルまでドローダウンが増加すると予想できます。

3)「MinEquity」ファンドの最小数に制限を追加しました。この値に達すると、取引は停止し、ポジションは決済されます。これは、リスクを計画して遵守するために必要です。

4)EAは、収益性を高めるために複数の時間枠で同時に使用できます。テストによると、ポジションを開くシグナルは通常、100%にはほど遠いものの、異なる時間枠の間に相関関係があります。

EAを使用して、25の通貨ペア、および保守的な設定と同時にH1とH4の時間枠で取引し、月に10%の収益を維持することができました。別の口座では、少し積極的な設定で、月に15%の収益を達成することができました。取引は多数ありました。

結論とさらなる発展

  • 非従来的な取引方法が見つかりました。
  • 選択された基本パターンは普遍的であることが判明し、テストされた取引商品に存在します。
  • パターンはシンプルで明確です。その発生理由を研究し、シグナル品質を改善する方法を開発する必要があります。
  • アルゴリズムは完全に最適化されており、長期間安定しています。
  • エントリポイントは非常に長期になります。ポジションを開くシグナルのより良い局地化に取り組む必要があります。
  • 考慮されていない要因は、時間の経過とともにアルゴリズムの安定性を失うことにつながります。
  • 新しいバージョンごとに説明されていない要因の数を減らし、その結果、パターンに影響を与える可能性のあるすべての要因を考慮に入れるために、理論モデルの開発を継続する必要があります。
  • アルゴリズムの次のバージョンはより柔軟になり、市場の変化に合わせてパラメータをわずかに調整し始めるはずです。

次の記事では、アルゴリズムの信頼性と柔軟性を向上させるために開発したメカニズムについて説明します。

EAコードと適切な要件仕様を以下に添付します。

アイデアと要件の仕様の作成者はMaxim Romanovです。コードはVyacheslav Ivanovによって作成されました。

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

添付されたファイル |
50p_V1.mq4 (100.93 KB)
Technical_task.zip (30.59 KB)
AAPL_GAZP_statistics.zip (12989.18 KB)
GBPUSD_statistics.zip (14471.42 KB)
ニューラルネットワークが簡単に(第9部):作業の文書化 ニューラルネットワークが簡単に(第9部):作業の文書化

長い道のりでした。ライブラリ内のコードはどんどん増えてきており、すべてのリンクと依存関係を追跡することが困難になっています。したがって、以前に作成したコードのドキュメントを作成し、新しい手順ごとに更新し続けることをお勧めします。適切に準備された文書化は、作業の整合性を確認するのに役立ちます。

ニューラルネットワークが簡単に(第8回): アテンションメカニズム ニューラルネットワークが簡単に(第8回): アテンションメカニズム

以前の記事では、ニューラルネットワークを整理するための様々な選択肢を既に検証しました. また、画像処理アルゴリズムから借りた畳み込みネットワークについても検討しました. 今回の記事では、言語モデルの開発に弾みをつけた「アテンション・メカニズム」を考えることを提案します.

市場とそのグローバルパターンの物理学 市場とそのグローバルパターンの物理学

本稿では、市場を少しでも理解してるシステムはどれでも世界規模で運用できるという前提を試してみます。理論やパターンは発明せずに既知の事実のみを使用し、これらの事実を徐々に数学的分析の言語に翻訳していきます。

CatBoostアルゴリズムを使用した外国為替市場の季節によるパターンの特定 CatBoostアルゴリズムを使用した外国為替市場の季節によるパターンの特定

本稿では、時間フィルタを使用した機械学習モデルの作成について検討し、このアプローチの有効性について説明します。人的要因はモデルに特定の曜日の特定の時間に取引するように指示するだけで排除できるようになっています。パターン検索は、別のアルゴリズムで提供できます。