English Русский Deutsch Português
preview
取引戦略の開発を実践する

取引戦略の開発を実践する

MetaTrader 5トレーディング | 19 8月 2024, 14:58
30 0
Aleksej Poljakov
Aleksej Poljakov

はじめに

取引戦略(英語)とは、市場で売買をすることによって利益を得るリターンを達成するために設計された固定プランです。様々なアイデアを組み合わせることで、トレーダーはそれぞれのニーズやスタイルの好みに合った独自の戦略を開発することができます。

可能な取引戦略の数は非常に多く、それらを分類することさえ難しい作業になります。しかし、ほとんどの取引戦略には、通常含まれる一定の要素があります。

  • 銘柄と時間枠
  • 指標、フィルタなど
  • ポジションのオープンとクローズのルール
  • 資金とリスクの管理

これらの要素に加えて、取引戦略には追加のパラメータを含めることができます。例は、午前9時から午後1時までポジションを建てることができるが、それ以外の時間帯のエントリシグナルは無視されることです。

取引戦略のパラメータに求められる主な条件は、一貫性があり、内部矛盾がないことです。あるトレーダーがある種の資金管理法を使用することにしたとしましょう。その後、トレーダーは戦略にトレーリングストップを追加することにします。この2つの要素は互いに矛盾します。資金管理には、あらかじめ決められたストップロスレベルとテイクプロフィットレベルを設定する必要があります。しかし、トレーリングストップでは、価格がとテイクプロフィットに達する前にポジションを決済する可能性があり、その結果、利益は予想よりも少なくなります。この矛盾を解決するには、トレーダーはポジションの数量を固定するか、トレーリングストップを外す必要があります。

どんな取引戦略も、何らかの統計的優位性に基づいていなければなりません。しかも、この利点は長く続くべきです。

戦略を立てる上で重要なステップは、テストです。ストラテジーテスターを使用すると、取引戦略の特徴、利点と欠点を評価することができます。必要であれば、必要な変更を加えます。さらに、テスターは、取引結果を向上させる最適な戦略パラメータの選択を可能にします。


シンプルな戦略

最も単純な取引戦略は、単純移動平均に基づく戦略です。その考え方は非常にシンプルで、価格が指標のラインを超えたその瞬間にポジションが建てられます。ポジションの種類は交差が発生した方向によって異なります。価格が下から上に動いた場合は買い、上から下に動いた場合は売りです。 

この戦略を詳しく見てみましょう。まず、数学的な観点から交差点とは何かを理解してみましょう。基本的には、差の符号を追跡することを示します。

符号の差が反対に変われば、交差が発生したことになります。

では、この違いを別の角度から見てみましょう。その計算によれば、SMAは価格の合計を価格の数で割ったものです。従って、最初のステップは、その差を共通分母にまで下げることです。

分母を取り除いてみましょう。こうするのは、分母を消去することで、差を整数に変換できるからです。整数の扱いはより簡単で便利です。差にNに等しいスケールファクタを掛け、ポイント値で割ってみましょう。以下の式が得られます。

しかし、単純な違いには興味がありません。私たちが知る必要があるのは、この違いが特定の銘柄と時間枠でどれくらいの頻度で発生するかということです。このケースでは、H1時間枠でEURUSDを使用しました。以下はN=24の統計です。

この画像が気に入りましたか。この質問に対するあなたの答えが「いや、もっといいものを見たことがある」なら、あなたはトレーダーではありません。本物のトレーダーはこの写真で満足するはずです。トレーダーがまず好むのは非対称性でしょう。もう1つは、差の分布が一様ではないことです。

少し休憩しましょう。普通の人はどんな悪夢を見るでしょうか。吸血鬼、狼男、ゾンビといったところでしょうか。トレーダーにとって最悪の悪夢は何かご存じでしょうか。一様分布です。

あるゲームを想像してください。表が出たら私があなたにお金を払い、裏が出たらあなたが私に払います。ワクワクしながらコインを投げますが、.このゲームには何の意味もありません。コインは公平です。つまり、平均して表と裏が同じように(均等に)出ます。あなたも私も、このゲームで一攫千金を狙うことはできません。この状況を打開する方法はただ1つ、コインを割って片面がよく出るようにすることです。これによって、一様分布から脱却し、利益の変化を達成することができます。誰かがより頻繁に勝ち始めるでしょう。

戦略に戻りましょう。差は不均等に分布し、マイナスの値に偏っています。移動平均線と価格の交点に基づく戦略は、明らかにうまく機能しません。この戦略の古典的バージョンでは、差の符号が変化したときにポジションを建てます。つまり、0が平均として使用されます。しかし、分布の性質上、ここでの場合はゼロではなく中央値を使用する方が良いです。したがって、ポジションは、その差が中央値を上回ったときにのみ建てるべきです。

このオプションは可能ですが、ここでは適用できません。中央値はサンプルを半分に分けます。つまり、サンプルの半分は中央値より下にあり、残りの半分は中央値より上にあります。これは、中央値に達した後、その差はほぼ同じ確率で大きくなったり小さくなったりすることを示しています。

少し変わったやり方で、差が最大または最小に達したときにポジションを建てることにします。これらの瞬間は、SMAからの価格乖離の最大値に対応します。この後、価格とSMAは収束し始めるでしょう。さらに、この指標はより慣性的(「遅れる」)であるため、価格がかなり長い距離を移動し、それによって利益がもたらされることを期待することができます。

実際にどうすればいいのでしょうか。まず、履歴の差分値を収集します。ここでは、ある種のトリガーの閾値を設定しました。例えば、最大値と最小値の15%を使用します。現在の差が下限閾値を下回っている場合、買いポジションが建てられます。現在の差が上限閾値を上回っている場合、売りポジションが建てられます。

ポジションは同じ原則に従ってクローズされますが、トリガー閾値は45%(中央値にはわずかに届かず、中央値は50%)に設定されます。差が下限閾値を上回っている場合、買いポジションは決済されます。差が上限閾値を下回っている場合、売りポジションは決済されます。

これが取引戦略のルールです。テスターで動作を見てみましょう。テストには、EURUSD銘柄、H1時間枠、テスト間隔 2023/01/01から2023/12/31を使用します。デフォルトのEAパラメータでテストします。

残高曲線は以下の通りです。

このようなシンプルな戦略としては悪くない結果ですが、改善できます。まず、買いポジションと売りポジションに別々のトリガー閾値を設定することができます。分布は非対称なので、このアプローチはプラスに働く可能性があります。

差だけでなく、移動平均の値の変化も監視する必要がある可能性があります。例えば、差の値が増加し、移動平均の値が減少すれば、この場合、ポジションを建てるシグナルが強くなる可能性があります。


より複雑な戦略

ポジションを建てるシグナルを生成するには、期間の異なる2つのSMAを使用することができます。前の例では現在の価格を使用しました。さて、価格は1期間のSMAとみなすことができます。この戦略の背景にある考え方は非常にシンプルです。期間の長い移動平均は主要なトレンドを示し、期間の短い平均はトレンドが変化する瞬間を示します。

必要な計算はすべて前の戦略と同様におこないます。唯一の違いは、価格の代わりに、より短い期間のSMA値を代入する必要があることです。

2つのSMAを使用することで、戦略のパラメータをより正確に設定することができます。直観的には、戦略の収益性は、ポジションの始値と終値だけでなく、SMAの期間にも依存します。これは、あるオプションでの残高曲線の様子です。

別のパラメータを追加することで、戦略に追加のフィルタを含めることができます。この例では、このフィルタはポジションを建てるときにのみ機能します。例えば、買いポジションは、短期間のSMAが上昇し始めた場合にのみ建てることができます。従って、売りポジションを建てるのは、このSMAの値が減少したときに限られます。このフィルタで何ができるのでしょうか。ポジションの数は間違いなく減少します。そうすることで、預金への負担を減らすことができます。このフィルタがどのように機能するか確認してみましょう。

フィルタ 総純利益 粗利益 総損失 プロフィットファクター ペイオフ期待値 リカバリーファクター シャープレシオ Zスコア
false 1 670.84 2 039.73 -368.89 5.53 4.49 1.78 2.91 -17.52
true 379.20 607.75 -228.55 2.66 2.92 0.92 1.95 -10.26

フィルタは取引結果に大きな影響を与えた。この戦略では、2つのSMAを使用します。それぞれを独立したフィルタとして機能させることも、一緒に使用することもできます。このフィルタは、ポジションの開始と終了の両方に使用できます。


複雑な戦略

これまで2つのSMAの使用について述べてきました。3つのMAを使用することは可能でしょうか。可能です。さらに、1つの戦略で好きなだけ多くのMAを使用することができます。では、実際にどのように実装できるのか見てみましょう。

期間の異なる複数の移動平均をとり、その合計を求めてみましょう。一般的には次のようになります。

この場合、係数kの和はゼロに等しくなければなりません。これを達成するにはさまざまな方法があります。最も簡単な解決策の1つは、有限差分を利用することです。任意の次数の有限差分は、直前の差分を取り、係数の添字を1ずつずらしたそのコピーを引くことで得られます。

例えば、1次の差はk1-k2に等しいです。

これに基づいて、2次の差を「(k1-k2)-(k2-k3)=k1-2*k2+k3」として計算することができます。

同様にして、3次の差は「(k1-2*k2+k3)-(k2-2*k3+k4)=k1-3*k2+3*k3-k4」として求めることができるなどです。

計算するのが面倒なら、パスカルの三角形から目的の行を取ってください。ただ、係数の前の符号を変えることを忘れないでください。

この例では3つのSMAを使用しました。これらに2次の差分係数が適用されます。そのため、すべての計算は次の式に従っておこなわれます。

このような戦略の結果は、3つのパラメータに左右されます。SMAの期間を1つ変えるだけでも、結果に大きな影響を与えます。このような戦略がどのように機能するかの例を挙げます。

移動平均線の数を増やし続けることができます。一見、この判断は極めて合理的に見えるかもしれません。しかし、このアプローチでは行き詰まります。SMAはいくつでも使用できますが、オシレーターは1つです。新しいSMAを追加するたびに、このオシレーターの係数と特性が変わるだけで、それ以上のことはありません。すぐに最適振動子の最適係数の探索を始めれば、もっとシンプルにできたはずです。残念ながら、この作業はそれほど単純ではありません。


新たなレベルの複雑さ

取引戦略を練るときは、あきらめず、常に新しいチャンスを探すことが大原則です。1つの指標を使用することで何が達成できるかは、すでに見たとおりです。それでは、複数の指標を使用した戦略の作り方を見てみましょう。

この戦略では古典的な移動平均を使用します。各指標に基づき、現在価格と指標値の差としてオシレーターを構築できます。SMAでこれをおこなう方法はすでに見てきました。しかし、他の指標の場合はもう少し複雑です。

線形テクニカル指標は、その核心において、対応する価格参照に掛け合わされる一連の係数です。指標の結果は、これらの乗算の合計です。例えば、SMAは次のように表すことができます。

しかし、EMAの場合はそう単純ではありません。まず、指数平滑法ために、係数は幾何級数を使用して計算され、初期係数は0...1の範囲です。第2に、EMAの期間は一般的に言って無限です。より正確には、EMAの期間は、指標が処理できた価格の読み取り回数に等しくなります。

EMAを少し変更してみましょう。係数には2の累乗を用い、指標期間は任意に設定します。したがって、この指標の計算式は以下のようになります。

この指標は、期間が3の標準的なEMAに似ています。指標の期間が長ければ長いほど、両者の距離は縮まります。

この修正により、出力が整数値になるオシレーターを作成することができるようになります。すでに、差額を同じ分母にする、スケールファクタを適用する等、他のすべての行動を検討しました。

SMMAは以下のアルゴリズムで構築されます。まず、SMA値を計算し、次にこれらの値に別の平均化を適用します。結果は三角窓関数です。この関数を使用してオシレーターを作成します。

LWMA係数は、1ステップの等差数列から求められます。基本的に、EMAとLWMAは過去のデータを「忘れる」異なるモデルです。EMAはLWMAより早く過去のデータを忘れます。

次のステップはとても簡単です。各指標に基づき、独自のオシレーターを構築します。これらのオシレーターはそれぞれ独自の統計値を出します。これらの統計に基づき、ポジションを建てたり閉じたりするシグナルを生成します。

ここで、取引戦略をどのように運用するかを決める必要があります。4つのオシレーターはそれぞれ、4つの可能なシグナルのうちの1つしか出力できません。

  • 買いポジションを建てる

  • 売りポジションを建てる

  • 買いポジションを閉じる

  • 売りポジションを閉じる

5番目のシグナルは「何もしない」ですが、デフォルトで有効になっているのでカウントしません。

各指標がそれぞれ独自のシグナルを出すような状況が生じるかもしれません。そして、これらのシグナルは互いに矛盾します。例えば

  • SMAが買いポジションを建てるシグナルを生成

  • EMAが売りポジションを決済するシグナルを生成

  • SMMAが売りポジションを建てるシグナルを生成

  • LWMAが買いポジションを決済するシグナルを生成

この場合、トレーダーはどうすればいいのでしょうか。まず、トレーダーはビザンチン将軍問題について思い出す必要があります。ビザンチン将軍問題の本質は、異なるシグナルが複数のソースから得られるという事実です。あるシグナルは偽かもしれないし、あるシグナルは真実かもしれません。どちらのシグナルが真実かを判断するには、簡単なルールに従う必要があります。3分の2以上の情報源から発信されたシグナルを信頼できるとみなすことができます。

指標の総数をNとします。そして、同じシグナルを出すべき指標の最小数は、次の式を使用して計算することができます。

全部で4つの指標があります。つまり、トレーダーは少なくとも3つの指標から同じシグナルが出た場合にのみ、何らかのアクションを取ることができます。

これが理論です。私たちの取引戦略がどのように機能するかを説明しましょう。まず、各指標について個別に統計を取る必要があります。これらの統計に基づき、各指標は独自のシグナルを生成します。少なくとも3つのシグナルが一致すれば、EAはそのシグナルが正しいと判断して実行します。

では、ビザンチンの将軍たちが利益を上げられるかどうかを確認してみましょう。

このやり方は取引でも使用できます。さらに、このような取引戦略では、パラメータの数を増やすことができます。各指標について、始値および終値のレベルを入力することができます。これにより、戦略の柔軟性が増し、取引成績に好影響を与えることができます。

いくつかの指標に基づいて、別の方法で取引システムを構築することができます。 

統計を取った後、各指標の特定の値がどれくらいの頻度で発生するかを推定することができます。この度数を用いて、経験分布関数(英語)を構築することができます。

Nを全サンプルサイズ、f[i]を各i番目の指標値の度数とします。経験分布関数は以下の式で求めることができます。

この関数は、次の指標値が現在の指標値より小さくなる確率を表します。グラフィック的にはこんな感じです。

つまり、4つの異なる確率があります。しかし、1つの値が必要です。単純ベイズ分類器を使用すれば、それを得ることができます。最終的な確率は、各指標の確率から式を使用して求められます。

この確率を使用してシグナルを生成します。ポジションは、確率が一定の値に達したときにのみオープンまたはクローズされます。

この手法が取引に使用できるかどうか見てみましょう。

では、ポジション開始のフィルタを追加してみましょう。このフィルタの動作原理は非常にシンプルです。

  • 買いポジションを建てることができるのは、最終的な確率が上昇し始めたときだけです。

  • 売りポジションを建てることができるのは、確率が下がり始めてからです。

その結果、ポジション数を減らすことができ、預金への負担を減らすことができます。

同じようなフィルタをポジションクローズにも追加できます。この戦略の収益性を少し改善できる可能性はあります。

いくつかの関連性のない指標に基づく取引戦略の可能性を検討しました。このアプローチの主な特徴は、すべての指標を可能な限り互いに異なるものにすることです。例えば、期間が2のSMAとSMMAを使えば、その係数は等しくなります。これでは、同じ指標のコピーが2つできてしまいます。シグナルがずれて戦略が正しく機能しなくなるからです。


複雑さのレベルアップ

もう一度、原点に戻り、1つの指標を基に戦略を立てましょう。ただし、今回は戦略の複雑さを増します。CCI指標を基にします。

従来のCCIの計算は簡単です。価格と移動平均の差を標準偏差で正規化したものです。

この方法では、統計を取るための整数を得るのはやや難しくなります。そのため、この指標に若干の変更を加えます。SMAとStDevの代わりに、価格と絶対乖離率の中央値を使用します。

中央値を求めるのはとても簡単です。元の値の集合を昇順に並び替える必要があります。中央に位置する値が中央値となります。中央値の主な利点は、外れ値に強いことです。

次のようにアクションをとります。まず、必要な数の価格を取り、その中央値を求めます。この方法の特性上、価格の数は奇数でなければなりません。この場合にのみ、整数を取得できます。次に、現在の価格と中央値との差を求め、最初の統計量を求めます。ダイアグラムの特徴をより見やすくするため、最も頻出する値をカットしました。

次に、価格と中央値の差の絶対値を求める必要があります。これらの差の中央値を求めましょう。これが標準偏差と2番目の統計量の推定値となります。

非対称で均一性のない、非常に美しい分布が得られました。これが取引に役立つかどうか見てみましょう。

この取引戦略はいたってシンプルです。価格と中央値との差の統計を使用して、ポジションを建てたりクローズしたりするシグナルを生成します。現在の差がゼロから大きく乖離している場合は、中央値に戻ることを期待してポジションを建てます。

標準偏差の統計量がフィルタとして使用されます。乖離が大きい場合は、市場の強い動きを示している可能性があります。このような場合、ポジションを建てられなくします。

この戦略がうまくいくかどうか見てみましょう。

最も単純な形で偏差フィルタを使用しました。実際、乖離が大きいということは、市場に入る方向を変える必要があるということかもしれません。例えば、シグナルは買いポジションを建てるべきことを示し、乖離はポジションタイプを売りに変更すべきことを示します。

中央値を使用して別のフィルタを作ることもできます。中央値はどのような価格値とも一致する可能性があります。中央値が非線形指標である理由はそこにあります。中央値とある指標を持つ価格が一致した場合のみ取引が発生する、という条件を設定しましょう。例えば、中央値が指数5の価格と等しい場合、残高曲線はこのようになります。

見てわかるように、1つの指標でさえ、多くの選択肢を提供することができます。トレーダーの主な仕事は、あらゆる可能性を分析し、その中から最良のものを取引に利用することです。


結論

取引戦略を書くことは、一見したところ、それほど難しいことではないかもしれません。しかし、取引戦略を成功させるには、多くの要素を考慮し、理解と経験をもってこのプロセスに取り組む必要があります。この記事では、取引戦略の策定に役立つ可能性のある解決策やアプローチの一部を紹介しているだけです。トレーダーは、フィルタやシグナルソースなどを選択する際に細心の注意を払わなければなりません。自分自身の戦略を練ることは、創造性の余地を与えてくれる非常にエキサイティングな活動です。


この記事を書くにあたり、以下のプログラムを使用しました。

名前 種類 詳細
scr SMA1 スクリプト 価格とSMAの差の分布を計算して表示
  • iPeriodはSMA期間
EA SMA1 EA 「価格-SMA」戦略による取引
  • iPeriodはSMA期間
  • LvlOpenはポジションを建てるレベル
  • LvlCloseはポジションをクローズするレベル
EA SMA2 EA
「2SMA」戦略を使用した取引
  • PeriodMおよび PeriodNはSMA期間
  • FilterはSMAフィルタ
EA SMA3 EA 3つのSMAを使用した取引
EA Byzantine Generals EA 4つの指標を使用した取引、ビザンチン将軍の問題に従ってシグナルを生成
EA NBC EA 4つの指標を使用、シグナルはベイズ法で計算
scr CCI スクリプト CCI指標の統計を収集
EA CCI EA CCI指標の統計値を利用した取引
  • LvlStDevは標準偏差に基づくカットオフレベル
  • Filterは非負の数値で、価格指数を指定(中央値と一致しなければならない)


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

添付されたファイル |
scr_SMA1.mq5 (5.28 KB)
EA_SMA1.mq5 (4.52 KB)
EA_SMA2.mq5 (5.15 KB)
EA_SMA3.mq5 (5.71 KB)
EA_NBC.mq5 (7.07 KB)
scr_CCI.mq5 (3.14 KB)
EA_CCI.mq5 (5.69 KB)
ニューラルネットワークが簡単に(第81回):Context-Guided Motion Analysis (CCMR) ニューラルネットワークが簡単に(第81回):Context-Guided Motion Analysis (CCMR)
これまでの作業では、常に環境の現状を評価しました。同時に、指標の変化のダイナミクスは常に「舞台裏」にとどまっていました。この記事では、連続する2つの環境状態間のデータの直接的な変化を評価できるアルゴリズムを紹介したいと思います。
ニューラルネットワークが簡単に(第80回):Graph Transformer Generative Adversarial Model (GTGAN) ニューラルネットワークが簡単に(第80回):Graph Transformer Generative Adversarial Model (GTGAN)
この記事では、2024年1月に導入された、グラフ制約のある建築レイアウト生成の複雑な問題を解くためのGTGAN (Graph Transformer Generative Adversarial Model)アルゴリズムについて知ろうと思います。
PythonとMQL5でロボットを開発する(第1回):データ前処理 PythonとMQL5でロボットを開発する(第1回):データ前処理
機械学習に基づく自動売買ロボットの開発の詳細なガイドです。連載第1回は、データと特徴量の収集と準備についてです。プロジェクトは、Pythonプログラミング言語とライブラリ、およびMetaTrader 5プラットフォームを使用して実装されます。
最適化アルゴリズムの効率における乱数生成器の品質の役割 最適化アルゴリズムの効率における乱数生成器の品質の役割
この記事では、メルセンヌ・ツイスタ乱数生成器を取り上げ、MQL5の標準的な乱数生成器と比較します。また、乱数生成器の品質が最適化アルゴリズムの結果に与える影響についても調べます。