トレーディングアルゴリズム開発への科学的アプローチ

14 12月 2020, 09:48
Maxim Romanov
0
381

イントロダクション

適切なトレードシステムなしでの金融相場のトレードは、トレーダーの資産を0にする可能性があります。 どの相場を選択しても、経験の浅いトレーダーにとって長期的な結果は同じでしょう。 利益を出すためには、トレードシステムやアルゴリズムが必要です。

アービトラージトレード戦略、HFT、オプション戦略、デリバティブに対するSPOTシンボルトレードなど、数学的に収益性の高いアルゴリズムの別カテゴリーも含めて、様々なトレードシステムやアルゴリズムが存在します。 しかし、よく知られているアルゴリズムはすべてデメリットがあります。 低い収益性か、流動性と注文実行速度のための高い競争力を必要とします。 よってこそ、トレーダーは独自のロジックに基づいて独自のアルゴリズムを開発しようとします。

原則として、ほとんどのトレードアルゴリズムは、未来の価格をある程度の確率で予測するために、価格分析を利用します。 他のアルゴリズムでは、価格分析だけでなく、外部データを利用したり、噂の分析などファンダメンタルズやニュースの背景を考慮したりします。

問題は、どのパターンが効率的でどのパターンが効率的でないのか、そしてその理由を正確に理解している人が少ないということです。 チャートに標準的なインジケータや他のインジケータを使ったところで、収益性の高いアルゴリズムを得ることはできません。 利益を生み出そうとオプティマイザーで戦略パラメータを最適化しようとしますが、実際にはヒストリーのごく一部の区間に戦略パラメータを調整しただけで、前の期間で損失を被ることになります。 オプティマイザーは必要かつ有用なツールですが、収益性の高いアルゴリズムの最適なパラメータを見つけるために使うべきであり、過去のデータに基づいてパラメータを調整することで、負けたシステムから収益性の高いシステムを作ろうとするべきではありません。

他とは異なり、高い競争でトレードが貧弱になります。 儲かるアイデアやブレイクダウンなアイデアは、通常は秘密にされており、ネット上で考察されることはありません。 利益を生まないアイデアやアイデアはすぐに広がっていきます。 なぜなら、ある人やグループが本当に価値のあるものを開発した場合、その開発を他の人と共有する必要がないからです。 システムの基本を公開すれば、無限とは程遠い流動性を掴もうとする競争相手も生まれるでしょう。 そのため、アルゴリズムトレードに来る人は誰もがゼロからあらゆる情報を収集し、自分の経験を積まなければなりません。 基本的なルールを理解するのに何年もかかることもあります。

このことから、本当に稼働するルールというよりも、トレードには迷信が多いのです。 科学的なアプローチに関しては、すべての分野で同じであり、収益性の高いアルゴリズムを開発する際に速く進行することができます。 そこで、トレードアルゴリズムを開発する際に、科学的なアプローチを守り、迷信を避けるための方法を考えてみましょう。 今回はシンプルなトレードシステムを例に、アイデアを考えてみます。

価格設定パターンの検索

トレードアルゴリズムの開発は、トレード中の利益の正の数学的な期待値を提供する価格設定パターンの検索から開始する必要があります。 このパターンは、以前に開発された価格設定の仮説に由来するか、または偶然に発見することができます。 どちらの選択肢も科学の世界ではよくあることで、発明の中には偶然に作られたものもあれば、長期的な研究の成果であるものもあります。 以前の記事「価格系列の離散化、ランダム成分とノイズ」では、ブロックチャートの使用法を検討し、その理由を説明しました。 そこで、ローソク足チャートではなく、ブロックチャートを使ってみようと思います。

以前の記事では、「トレンドとトレンドとレンジに基づく相場構造は何でしょうか。」と題して、トレンドの概念の定義を開発し、相場構造がトレンドに基づいているか、レンジに基づいているかの研究を行いました。 さらなるアイデアを理解できるように、この記事を読むことをお勧めします。

その分析によると、ほとんどの相場はトレンド構造を持っており、トレンドが継続する確率が反転する確率よりも高いことがわかりました。 価格系列のNステップの増分分布密度が、各ステップでの反転確率が50%のプロセスよりも広く、低くなっていることから、このことが導き出されています。 その一例を図1に示します。

amd distrib

図1.

この図において、赤は、次の各ステップでの反転確率が50%に等しく、40ステップのプロセスにおけるインクリメント確率密度の基準分布を示します。 ここでは5000個のサンプルを使用しました。 白いヒストグラムは、AMDストックの40ステップの測定値を示しています(5000サンプルの場合)。 5000回の測定に対して、垂直方向のステップ数と40ステップでの価格によるパス数を計算し、結果をヒストグラムとして表示しました。

すなわち、40ステップの50000セグメントを用いて、各セグメントが垂直方向に何ステップ通過したかを計算し、その結果をヒストグラムとして表示しました。 AMDの株式(40ステップ)の例を取ると、価格は0垂直ステップ390回を通過した場合、参考価格は626.85回を通過する必要があります。

このチャートを見ると、次のステップで反転する確率が50%のプロセスに比べて、相場が40ステップで垂直方向のゼロステップを通過する頻度がかなり低いことがわかります。 そのため、分析チャートではトレンド継続確率が50%以上となっており、この銘柄はトレンド継続の可能性が高いと言えます。 つまり、10ポイントを通過した価格は、反転するよりも、さらに10ポイントを同じ方向に移動する可能性が高いということです。 

垂直ステップ
画像2.

図2は、垂直方向のステップ数のカウント方法の一例を示す図です。 ここでは、この40ブロック(ステップ)について、価格が垂直方向に何ブロック通過したかを計算します。 上図では、40歩で縦7段を通過しました。 その後、別の4999個のサンプルを40ステップずつ分析し、その上下動を測定します。 測定結果は、X軸が振幅、Y軸が振幅のヒット数を示すヒストグラムとして表示されます。

発見されたパターンの分析

パターンが見つかったら、分析する必要があります。 発見されたパターンが特定のファイルを持つこの特定のトレード商品にのみ典型的であるか、または任意のスケールですべてのトレード商品に適用されるかどうかを理解するために、他のトレードシンボルとブロックサイズのスケールを取ります。 この例では、30通貨ペア、ロシアやアメリカの相場でトレードされている多くの銘柄、主要な暗号通貨やコモディティシンボルの数十種類を分析してみました。 各シンボルには、1点から数千点までのブロックサイズを持つすべてのスケールを使用しました。 分析の結論によると、どのようなトレード商品もどのスケールでもトレンド性のある構造になるトレンドがありますが、スケールが大きくなるにつれてトレンド性は弱くなります。

以下のパターンが検出されています:相場はどのようなスケールでもトレンドが発生しやすいが、高いスケールではトレンドの強さが弱くなる。 N点を縦に通過した後、同じ距離を同じ方向に動く確率が50%以上あるということです。 このパターンの利点は、上昇ステップごとに買いポジションを開設し、下降ステップごとに売りポジションを開設するというシンプルなトレンド戦略をトレードに利用できることです。 

その後、適用されたアプローチが分析されます。 これはおそらく見つけたパターンではなく、相場構造分析方法の誤りです。 この場合、相場はトレンドになっていないので、上記の前提では利益を出すことができません。 基本から始めて、トレンドを見つけたブロックがどのように作られているのかを理解する必要があります。 前回の記事で紹介したブロックインジケータのエンタイトル「トレンドとは何か、トレンドとレンジをベースにした相場構成か?」を利用することができます。 この場合、価格系列はN点ずつのブロックで量子化(「スライス」)されます。 価格が前回の基準点からN点を通過するたびに、新たなN点のブロックが形成されます。 ブロックサイズが10ポイントの場合、価格は10ポイント移動し、始値と終値を持つ別のブロックを形成します。 その後、価格が一方向にさらに10ポイント移動するまで待って、別のブロックを閉じるなどします。 一見簡単そうに見えますが、ブロックは1分足ローソク足の終値を使って構築されています - 後で重要になります。

delta

画像3.

さらに分析を進めていくと、2つの問題点が浮かび上がってきます。

  1. ローソク足の終値とブロックの終値の間のデルタ。 図3は、下落ブロックの終値が下落ローソク足の終値よりも高い場合の状況を示します。 ブロッククローズとローソク足クローズの間のデルタは、トレンドの理想で計画した利益をすべて台無しにする可能性ができます。 この理由は、シンプルなアルゴリズムを使用する意図と関連しています:各成長ブロックの後に買いポジションをオープンし、各下落ブロックの後に売りポジションをオープンします。 ブロックはローソク足の終値で形成されるので、形成されたブロックのシグナルはローソク足が閉じた後にのみ発生します。 そのため、価格が悪くなるとポジションが開いてしまいます。 このデルタは利益を食い尽くすことができ、期待されるペイオフはゼロになります。
  2. コミッションとスプレッド。 おそらく相場の流れは、スプレッドや手数料を補う程度のものでしかないのでしょう。 この場合、相場別にポジションをオープン/クローズすると、最悪の価格でのオープンによる損失と手数料が、このパターンで発生するすべての利益を上回ることになります。 まあ、為替相場で指値オーダーを使ってスプレッドをなくすことはできますが、でも手数料がかかります。 さらに、指値オーダーはFX相場でのスプレッドを解消するものではありません。

このように、検出された図柄から利益を発生させることができないようにするためには、2つの問題点があることが判明しました。 結果としての利益への影響を理解する上で、以下のことが参考になります。

  • 大規模なサンプルで特定の商品のトレンドが継続する確率を測定することで、期待されるペイオフを計算するための正確な確率値を得ることができます。
  • ブロック終値と予想ポジション始値の間のデルタのポイント統計を収集し、平均値を見つけます。
  • 成行オーダーで機能するとき、またはFXシンボルをトレードするときに平均スプレッドを見つけて、手数料を追加します。
  • 対象通貨で計算されたすべてのオーバーヘッドコストを、結果として得られる期待ペイオフから差し引き、システムの実質的な期待ペイオフの予測を得ます。
  • 結果として得られる期待ペイオフがゼロ以上のままであれば、次のステップに進むことができます。

上記のステップをすべて実行するのが正しいのでしょうが、もっと面白い解決策は、簡単なトレードロボットを書いて、実際に確認することです。 せめて、この記事でプロダクトのアルゴリズムの運用結果を見た方が面白いと思います。 他にも見落としていた具体的な特徴があるかもしれません。 さて、すべてを計算して、ポジティブな結果を得て、このパターンに基づいてトレードアルゴリズムを作成したいと仮定します。 では、次のステップに移りましょう。

このパターンの存在を説明する仮説の展開

その性質を説明する仮説を持たずに、発見されたパターンを使うのは危険です。 なぜそのパターンが存在するのか、安定しているのかはまだわかりません。 いつ消えるのか、いつまた現れるのかはわかりません。 リアルマネーでトレードに投資する際には、パターンの存在を把握して、資産の最大値からのドローダウンが長引いていて、すぐに回復する時と、パターンが消えてしまってロボットを止める時が来た時を把握することが必要です。 儲かるロボットと損をするロボットを区別するのは、まさにその瞬間です。 よって、このパターンの存在を説明する仮説を立てる必要があります。 この仮説をさらに理論化して、アルゴリズムの動作モードの調整に利用することができます。

このパターンは,分析したすべてのツールとすべてのスケールに存在するが,より大きなスケールではトレンド性が減少します。 おそらく、上記の2つの要因(デルタと手数料)が本当にこのパターンに影響を与えているのではないでしょうか。 したがって、2 つのテーゼを提示しましょう:

  • ブロックサイズが大きいほど、ブロッククローズ時の相対的なデルタが小さくなり、ポジションの開閉時の誤差が少なくなります。 すべてのブロックが1分足のローソク足終値を基準にしており、その大きさが一定の範囲内でかなり安定しているからです。 したがって、ブロックサイズが大きく、デルタが小さいほど、ツールのトレンドは小さくなる傾向があります。 したがって、トレンド判定手段の誤差を低減することができます。
  • ブロックサイズが大きくなると、動きの大きさに対してスプレッドや手数料の大きさが小さくなるため、相場特性に対するスプレッドや手数料の影響が小さくなります。 相場は効率的なので、トレンドを比例的に減少させることで、この事実に反応する可能性があります。 

ここで少し注意しておきたいのは、小さなスケールでデルタエラーを排除したとしても、相場は確かにトレンドになっていますが、そのトレンドはスプレッドと手数料を補うには十分なだけです。 スキャルピングアルゴリズムの開発者は、この事実を知らないために、しばしばミスを犯します。 考えていること:「手数料が安いブローカーを見つける必要があり、スキャルピングロボットは利益を出し始めるでしょう。 スプレッドと手数料を下げることができれば、大きな成果を発揮します。" しかし、小さいスケールでの相場の流れはスプレッドと手数料しかカバーできないので、そうはならないでしょう。 スプレッドや手数料が小さければ、他の相場参加者はすでにこのパターンを使ってブレイクダウンしていたでしょう。 すべてのスキャルパーを指しているわけではありません - フロントランニング、マーケットデプスのボリューム分析や他のタスク技術を使用しないシンプルなトレードロボットを意味するだけです。

分析された相場だけでなく、他のすべての相場がトレンドに基づいているとします。 しかし、なぜ相場はすべてトレンドに基づいているのでしょうか?

簡単な質問から始めましょう:金融相場トレードの利益はどこから来るのでしょうか? 参加者は(あなたがOTC外国為替を取引する場合でも)お互いに取引するので、あなたは誰かのお金を稼ぐとブローカーの手数料を加えて同じ金額を失います。 トレード参加者はお互いに取引対象を売買し、誰もが利益を得ようとします。 つまり、買い手も売り手もトレードで最大の利益を得ようとするのです。 同時に、買う側は買うことが利益になると考え、売る側は売ることが利益になると考えています。 どちらかが明らかに間違っているのでしょうか? どちらも買い手が第三者に売った場合、結果的に利益を得ることができますが、遅かれ早かれ損をする相手が出てきます。 その結果、トレードは、利益を確定する際に、トレード相手の誰かがミスをするという考えに基づいて行われます。

為替相場の価格を理解していない場合は、まず「モスクワ証券トレード所のデリバティブ相場の例を通して為替価格の原則」という記事を読むことをお勧めします。 基本を知っていれば、その考えを理解しやすくなります。 実際には、トレードする相場、為替、暗号や外国為替は関係ありません。 価格設定の基本はどこでも同じです。 ただし、トレード条件や分析の可能性は異なる場合があります。

簡単に、価格系列の形状の境界オプションを考えてみましょう。 価格チャートには、直線的な無限トレンドと正弦波の2つの反対のシナリオが考えられます。 誰もが売買するタイミングを知ることができるので、正弦波は便利でしょう。 リニア上昇チャートも便利でしょう:明らかに常に利益を生成するために買いする必要があります。 しかし、そのようなチャートフォームは、高値では買い手がいないだろうし、安値では売り手がいないだろうから、不可能です。 図1は、価格チャートが正弦波である場合の仮想的な例であり、適切なマーケットデプスを示します。

sinus
図4.

よって、もし価格チャートが正弦波であれば、相場が下がらないことを誰もが知っているので、マーケットデプスの安値で売ろうとする人はいないでしょう。 逆に言えば、誰もがそのように最安値で買いたいと思うでしょう。 銘柄を売る気のある人がいないだろうから、トレードは成立しないだろうし、そのような軌道に乗って価格が動くことはないでしょう。 相場は、買い手が買い、売り手が売るのに適した均衡価格の探索を開始します。

直線的に上昇するチャートにも同様の状況が発生します。 価格がずっと伸びていることを誰もが知っているので、誰も売らないだろうし、誰も売らなければ誰も買えない。 つまり、そのような価格チャートもありえないということです。 つまり、価格チャートが存在するためには、買い手は買い、売り手は売らなければなりません。 利益を決定する際にミスをする人がいるはずです。 しかし、参加者それぞれが利益の最大化を求め、ミスをしたくないので、正弦波よりも複雑で、直線的な上昇チャートよりも複雑なチャートにする必要があります。

効率的な相場での価格チャートは、直線チャートと正弦波チャートの中間のどこかにあるはずです。 その構造は、買い手と売り手の利益が明白でないように、十分に複雑でなければなりません。 正弦波チャートや線形チャートは、価格レートのエントロピーが低いのが特徴です。 エントロピーは、トレードを実行する可能性を提供するために大きくなければなりません。 相場参加者が多く、「賢く」なればなるほど、価格帯はエントロピーが最大になるトレンドが強い。

シャノン(Shannon)のエントロピーを考えると、一様分布上で最大値をとります。 相場のプロセスは一様ではなく、どちらかというと普通のものです。 しかし、一様分布から正規分布が得られたり、その逆もあります。 さらに、ステップサイズが固定されたブロックを使用します。 つまり、最大エントロピーとは、次の動きのたびに方向転換する確率が50%になるような、ルール性のないプロセスの特性のことです。 しかし、今回の分析では、相場チャートの方向転換確率が50%とは異なり、メモリがあり、エントロピーが最大ではないことを示します。

相場はエントロピーが最大になるように努力しますが、この状態になるのは、参加者が無限にいる場合(高値の流動性)か、参加者が無限に「賢い」場合に限られます。 "ここでいう「賢い」とは、複雑なパターンを判断する能力のことです。 "より賢く "参加者は、より複雑で目立たないパターンを識別することができます。 無限に「賢い」参加者は、絶対的にすべてのパターンを識別し、利用することができます。 条件(参加者の数が無限か、無限に頭の良い参加者のどちらか)を使うのは、参加者の数が無限になると計算能力が無限になり、たとえ「頭が良い」とは言えなくても、ブルートフォースを使ってすべてのパターンを識別できるようになるからです。 

この仮説は、金融商品の価格チャートが複雑化している理由を説明します。 20世紀の初めには、MAを使うだけで利益を得ることができました。 今では、アルゴ・トレーディングが発展するにつれ、参加者は「賢く」なり、パターンはより複雑になり、エントロピーは大きくなり、相場で資金を稼ぐことはより難しくなっています。 「賢くなる」とはどういうことか? より大きな計算能力、より迅速な意思決定、より迅速かつ正確にその利点を判断する能力、より複雑なパターンを見つける能力があります。

しかし、かなりシンプルなパターンを発見しました。 これは相場に一定の資本が流入していることで説明できます。 相場参加者がすべての利益を取るわけではなく、トレンド成分が出現します。 資本流入は、資金の創造につながっています。 各国は常に自国通貨を発行し、一定のインフレ率を維持します。 この資金の発行がトレンド成分を作っているのではないでしょうか。

そのパターンを説明する仮説から、次のような結論が得られます。 

  • 継続的に資金を放出することで、相場がトレンド化します。 この場合、価格レートの高い投資魅力度の高い積極的な開発銘柄は、非開発資産や投資魅力度の低い相場よりも強いトレンド構造があるはずです。
  • 参加者が増え、参加者が「賢くなる」ため、時間の経過とともにシンボルのトレンド強度が低下し、銘柄が無期限に成長できなくなります。 銘柄はそれぞれ違うが、時間の経過とともに発展率や魅力度が低下していく。
  • 先進国の通貨ペア(EURUSDなど)は、人気のある通貨ペアはより多くのトレードを行う参加者が集まり、エントロピーが増加するため、新興国の株式よりもトレンドの強さが低いはずです。 さらに、通貨は為替オペレーションを行わなければならない銀行によってトレードされており、追加利益を得るために「スマートな」トレードアルゴリズムを作成するための大きなリソースがあります。 さらに、EURUSDなどの通貨ペアは高い値動き流動性を持っており、高い値動き流動性はトレンドの低下につながります。

仮説検証

前節の「このパターンの存在を説明する仮説を立てる」では、パターンの存在を説明するための仮説を立てたに過ぎない。 仮説はアルゴリズム開発の一段階に過ぎないため、100%正しいとは言えず、不正確な情報が含まれている可能性があります。 パターンを説明しながら論理的推論を展開できる例です。 この手法は、相場の迷信を極力避けるために使われています。 例えば、ようなパターンを持っていた場合。"RSI(ストキャスティック/MACD/エリオット波/亜種)が買われすぎゾーンに入り、パターンを形成した場合、その後、売りする "場合、自分自身に尋ねる必要があります。"なぜ機能するのか?"と "機能するための基本的な理由は何でしょうか。"

結論が実際のデータと相関しているかどうかを理解する必要がありますが、詳細には踏み込まずに、大まかな仮説を検証します。 異なったツールのトレンド性の度合いを比較することができます。 この前提によれば、積極的に開発している商品や投資魅力のある商品は、先進国の商品や投資魅力のない商品に比べて、トレンド性が強いはずです。 第二の前提によれば、銘柄のトレード参加者が多いほど流動性が高く、トレンドが出にくいということになります。 この前提の簡単なチェックをしてみましょう。

記事の最後に "トレンドとは何でしょうか。トレンドとレンジに基づく相場構造は何でしょうか。", 銘柄のトレンディ度を比較しました, ユーロドル, AMD, AAPLなどです。 例として4つのシンボルを使用して同様の比較を行います。

  • 多くの参加者を集めた資産としてのEURUSD通貨ペアは、そのため安い投資的魅力と高い流動性があります。 通貨にはインフレがあり、資金は常に減価し、通貨への投資は長期的には採算が取れないため、通貨の価格レートが低い投資的魅力があります。
  • アップル株(AAPL)は、多くの個人投資家がトレードしている、最も魅力的で発展途上の投資商品として 株は値動きの流動性が高いのですが、EURUSDに比べて大幅に劣ります。
  • Sberbank(SBER)株は、流動性が著しく低く、世界的なスケールでの投資魅力がアップルに比べて低く、参加者数も低い。
  • AMEZ株 低い価格帯の投資魅力と低い価格帯の流動性があります。

EURUSD

図5a.

AAPL

図5b.

SBER

図5c.

AMEZ

図5D

図5からもわかるように、EURUSDの値動きのトレンド度=1.068が低く、Appl株の値動きのトレンド度=1.3が高く、Sberbankのトレンド度は1.168、つまりAppl株よりは低いがEURUSDよりは高いということがわかります。 AMEZ銘柄はレンジな構造をしており、トレンド度は1を下回っています。

高い投資の魅力がトレンドの程度を増加させ、高い流動性と多数の参加者がトレードの程度を減らすという仮定は、実験データと矛盾しない、つまり仮説が未来使用することを意味します。

トレードアルゴリズムの開発

見つかったパターンのトレードアルゴリズムを開発してみましょう。 パターンがシンプルなので、トレードアルゴリズムもなります。 トレードはブロックに基づいて行われますが、M1ローソク足チャートをブロックNポイントずつに変換する必要があることを意味します。 ブロック構築アルゴリズムは、トレードロボットに統合されます。 トレードアルゴリズムは、期待されるペイオフを決定するための式に直接従います。

m=(P(tp)*tp)-(P(sl)*sl)


ただし:

  • m - 数学的期待ペイオフ
  • P(tp) - 有益なトレードの確率。 
  • P(sl) - 負けトレードの確率。
  • tp  平均収益性の高いトレードスケール、
  • sl - 平均的な負けトレードサイズ。

以下のように動作します。

  1. 別の落下または成長しているブロックが閉じた後にポジションを開きます。
    • ブロックが下落している場合は、売りポジションをとります。
    • ブロックが上昇している場合は、買いポジションをとります
    • ポジションをオープンした後は、クローズシグナルを待ちます。
  2. 逆方向のブロックが形成されたらポジションを閉じる。 買いポジションが建っている場合は、下落ブロックが形成されるのを待ってポジションを決済します。 落下ブロックでポジションを決済した後、売りポジションを建てることができます。 したがって、相場には1つのポジションしかないことになります。
  3. 図3は、ローソク足とブロックが異なる価格で接近し、デルタが形成された場合を示します。 ブロック形成アルゴリズムの特定の特徴と関連します。 よって、不利な価格で開かないようにするためには、価格管理が必要なのです。 ローソク足の終値とブロックの終値の間のデルタがある値よりも大きい場合は、ポジションを建てるべきではありません - 価格がブロックの終値に戻るのを待ってからポジションを建てる。
  4. TPとSLの配置を追加。 id ロウソク足スティックのサイズは、ブロックサイズよりも大幅に大きくなることが判明しました。 このように、利益確定/不利益確定のポジションは、ブロックがクローズしているときだけでなく、大きなスパイクのときにもクローズします。
    • SL価格は次のように計算されます:ブロックサイズ(BS)に設定された係数(ksl)を乗じ、売りポジションの場合:結果Sl=Bclose(op)+BS*kslをポジションオープンシグナルが発生したブロックの終値(Bclose(op))に加算します。 買いポジションの場合:ブロッククローズ価格からSl=Bclose(op)-BS*kslを引く。
    • TP価格は次のように計算されます:ブロックサイズ(BS)に設定された係数(ktp)を乗じ、売りポジションの場合は、直近のブロックの終値(Bclose(0)から結果TP=Bclose(0)-BS*ktpを差し引きます。) 買いポジションの場合:Tp=Bclose(0)+BS*ktpを直近のブロッククローズ価格に追加します。 SLとは異なり、ここでは各新規ブロックの終値を使用し、各新規ブロックの終了後にTPを再計算します。 ブロックサイズよりもかなり大きなローソク足が出現したときに、追加の利益を得るのに役立ちます。
  5. ロット管理関数。 標準的なロット管理関数に加えて、現在のブロックサイズに合わせてロットサイズを変更する関数を追加してみましょう。 これより、ブロックサイズが大きくなったときの安定したリスクレベルと利益を維持することができます。 ここでは、相対的にロットサイズが調整される最小ブロックサイズ(最小BS)の概念を紹介します。 ポジション・オープニング・ロットは、設定からのロットを、設定からの最小サイズに対する現在のブロック・サイズの比率で割ったものです: lot = lot(set)/(BS/最小BS).
  6. ブロックサイズを決定します。 この関数は、アルゴリズムを安定して動作させるために重要です。 これにはいくつかの可能性があります。
    • 価格フォーマットの設定で指定された固定ブロックサイズ、例えば0.02です。
    • 現在のタスク時間枠のローソク足のサイズにリンクされる自動ブロックサイズ。 ローソク足の大きさはATRインジケータから求めることができます。 そして、現在のATR値に係数を乗算してブロックサイズを求める。 例えば、5*ATRのサイズのブロックをトレードしたいとします。 そのため、ボラティリティの増加に伴い、ブロックサイズは拡大し、システムは変化する相場パラメータに適応します。 現在のタスク時間枠からATRを使用することもできますし、実験したい場合は、より高い時間枠からATRを使用することもできます。
  7. 買い・売りポジションのオープンを許可します。 買いポジションと売りポジションを別々に開くことができる関数を追加してみましょう。 これより、買いシグナルと売りシグナルの個別分析が可能になります。

出来上がったロボットを以下に添付します。 このロボットはもう少し関数性がありますが、この記事では検討しません。 

トレードアルゴリズムのテスト

アルゴリズムの動作は、挙動を分析した銘柄に対してテストされます。 以前、どのような銘柄についてアルゴリズムが仮想的に利益を上げるべきかを予測しました。 では、仮説の正しさを確認するために、銘柄に対してアルゴリズムがどのように稼働するかを確認してみましょう。

EURUSDを使ってテストしてみましょう。 このシンボルはトレンドが弱いので、もしかしたら手数料やデルタをカバーするには足りないかもしれません。 最終的なアルゴリズムの動作を図6Aおよび図6Bに示します。

EURUSDトレード

図6a.

EURUSDトレード2

図6b.

テストは、2018年1月1日から2020年7月28日までの期間、M1タイムフレーム上で、リアルティックモードを使用して実施されました。 パラメータは最適化されていませんでしたが、個別の通貨ペアごとに徹底的に用意されたアルゴリズムを最適化する必要がないことを示したいからです。 ブロックサイズ、最小ブロックサイズ、ロットを変更し、コミッションサイズを大幅に上回る利益が得られるように努めます。



7.

EURUSDの場合は、予想通り、スプレッドとデルタがトレンドから受け取るべき利益をすべて取りました。 その結果、予想されるペイオフは、トレードあたりの-1.67ドルです。 ロットはブロックサイズに応じて動的に変化し、平均ロットは0.078でした。 損失がどこから来るのかを理解してみましょう。 ロボットが拡散した情報をログに記録します。 ポジション取得時決済時の平均スプレッドは0.00008です。 159.76ドルのスワップを支払い、614ポジションをオープンしました。 なので、1ポジションあたりの平均スワップは159.76/614=$0.2602でした。

平均スプレッドが0.0008、平均ロットが0.078の場合、ロットが0.078のEURUSD 1ピップは0.078ドルに相当するので、スプレッドのコストは0.078*8=$0.624となります。 合計すると、手数料は$0.624+$0.2602=$1.104になります。 トレードごとに手数料を損していた場合、予想されるペイオフは-1.104ドルですが、0.566ドル増の1.67ドルとなっています。 設定で最小ブロックサイズが0.002に設定されているので、平均ロット0.078で15.6ドルになります。 バランスチャートがランダムウォークで、ブロックサイズが常に最小の場合のマイナスバランスの変化を大まかに見積ってみましょう。 15,6*(614^0.5)=386.55$と計算されます。 さて、1回のトレードあたりの平均手数料にトレード数を掛けたものを足します。 1.104*614+386.55=$1064.406.

$1064.406に相当する値で、右方向にポジションが開く確率が50%で、1ポジションごとに手数料が支払われている場合のバランスチャートの平均ドローダウンを意味します。 実際には、この値に近い1027.45ドルの損失が出ました。 アルゴリズムの期待ペイオフがEURUSDではゼロなので、損失があったと結論付けることができます。 

もっとトレンドのあるAAPL株で結果を見てみましょう。 その結果を以下の図8に示します。



図8

結果は安定的にプラスで、期待ペイオフは19.33に等しいです。 ダイナミックロット(ブロックサイズに合わせて設定)でテストしたもので、ボラティリティに応じてブロックサイズがダイナミックに変化しました。 ロットを動的に変更しないとどうなるか見てみましょう。 図8 の平均ロットサイズは 39 でした。 39の固定ロットを使用して、図9の結果を確認してみましょう。



図9

この結果は、最後に利益が出たトレードと一部のバランスの引き下げが増えたことを除けば、あまり変わっていません。 APPL株のブロックサイズは時間の経過とともに大きくなり、固定ロットの大きいブロックほど大きな利益を示すことができますが、ドローダウンの確率は比例して高くなります。

次に、Sellポジションだけが許される場合はどうなるのかを見てみましょう。 その結果を図10に示します。



図10

売り専用モードでは小さな損失を示していますが、図5bではゼロに対する分布の非対称性を示しているので、この結果が予想されます。 次に、買い専用モードを確認してみましょう。 その結果を図11に示します。



図11

図11を見てもわかるように、買いのみのモードはポジティブな結果を示していますが、売り買いモードほどではありません。 上昇トレンドと下降トレンドが交互にあるので、買いポジションと売りポジションの両方を使うことで、バランスチャートをより均一にすることができます。

他の積極的に展開している企業株でアルゴリズムがどのように機能するかを確認してみましょう。 まずはAMDから始めよう。 2018.06.01から2020.07.28までの期間にテストが行われますが、この日を起点とした1分足のヒストリーをブローカーが提供しているためです。 このテストは、買いポジションと売りポジションを持つダイナミックロットを使って行います。 その結果を図12に示します。



図12

AMD株では、アルゴリズムは安定した正の結果を示し、図1に示した分布に基づいて行われた仮定と一致します。 では、もう一つの積極的に開発を進めている企業、テスラをチェックしてみましょう。 そのアルゴリズムを図13に示します。



図13

この会社は前の会社と同じように高い投資的魅力があり、成長性も大きいので、アルゴリズムはTESLA株で安定した結果を示します。

比較として、ロシアを代表する企業であるスベルバンク株でアルゴリズムをテストしてみましょう。 同じテスト期間を示します。 手数料は、オットクリティーのブローカーが提供するものと同等で0.057%です。 テストは、リアルティックモードを使用して、レバレッジなしで行われました。 テスト結果を図14に示します。



図14

スベルバンクは上記ほど魅力的ではありませんが、株価の流動性が低いため、このようなシンプルなアルゴリズムが当てはまります。

下記に全ての設定やテストレポートを添付していますので、詳しく分析してみてください。

結論

作成されたトレードアルゴリズムの挙動を分析することで、次のような結論を出すことができます。

  • 発見されたパターンにより、各トレードツールのパラメータを最適化することなく、利益を生み出すことができるアルゴリズムを作成することができました。 パラメータは手動で変更しますが、なぜこのパラメータを設定したのかは事前に分かっています。
  • パラメータを変更する仕組みを知ることで、全自動のアルゴリズムを作ることができます。
  • どのパターンで利益を出すかを明確に理解しているので、将来的にパターンが強くなるか弱くなるかを予測して学習することができます。
  • 特定のツールのパターンの存在は、仮説を用いて予測することができます。
  • 相場動向出現仮説を展開し、価格決定の法則を記述した本格的な理論へと変貌させるべきです。 この理論を発展させることで、アルゴリズムの安定性、信頼性、汎用性を向上させることができます。
  • 特定のトレードツールがさらに発展していくと、パターンはより鮮明になっていきます。 この場合の良い解決策は、新しい積極的に開発しているツールに切り替えることです。
  • トレード手法は利益を出すことができますが、改善が必要です。 ブロッククローズとポジション始値の間のデルタを最小にする必要があります - このデルタは、ブロック形成の仕様に発生します。 解決策の一つとして、分足チャートではなくティックチャートの分析に切り替えることが挙げられます。
  • インジケータの平均トレンド度を知ることで、経時的なトレンド度変化の統計を収集し、非線形方程式を用いて近似することができます。 さらに、トレンド性の変化法則を知ることで、平均トレンド性からの乖離を制御してシステムの収益性を高める仕組みを開発することができます。
  • 現在の形のこのアルゴリズムはシンプルで、アイデアをテストするためだけに使用されていましたが、アイデアはその実行可能性と可能性を示します。 そのため、アルゴリズムを大幅に変更して、実際の相場で使用することができます。
  • FXよりも株式相場の方が利益を出しやすいです。 その理由の一つに、株式相場がトレンドになっていることが挙げられます。 しかし、上の例のAMEZのようにレンジなケースもあります。 このアルゴリズムは、トレンドの継続を期待していない動作をさせるために、そのようなツールでのトレードに変更することができます。 しかし、投資魅力度の低い銘柄は流動性の問題を抱えている可能性があるので、別の研究のトピックです。
  • このアルゴリズムは成行でトレードを執行し、ロジックを変更して指値オーダーをトレードすることで収益性を高めることができます。 ロジックが複雑になりますが、収益性を高めることができます。 とにかくもっと研究開発が必要です。
  • 前回の記事「トレンドとは何か、相場の構造はトレンドとレンジをベースにしているのか?」で解説したトレンド性の概念の実践的な応用方法と、その記事で解説したローソク足チャートからブロックチャートへの切り替えの実践的な応用方法を紹介します。 

    価格系列の離散化、ランダム成分とノイズ

このアイデアと開発の著者はMaxim Romanovです。EAのコードはSergey Chalyshevによって前のテーマのプレファレンスを元に作成されています。


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

添付されたファイル |
report.zip (706.34 KB)
Set.zip (6.23 KB)
robot.zip (13.03 KB)
DoEasyライブラリの時系列(第51部): 複数銘柄・複数期間の複合標準指標 DoEasyライブラリの時系列(第51部): 複数銘柄・複数期間の複合標準指標

本稿では、 複数銘柄・複数期間標準指標のオブジェクトの開発を完結します。一目均衡表標準指標の例を使用して、チャートにデータを表示するための補助描画バッファを持つ複合カスタム指標の作成を分析します。

DoEasyライブラリの時系列(第50部): シフト付き複数銘柄・複数期間標準指標 DoEasyライブラリの時系列(第50部): シフト付き複数銘柄・複数期間標準指標

本稿では、複数銘柄・複数期間標準指標を正しく表示するためのライブラリメソッドを改善して、設定されたシフトによってシフトされたラインが現在の銘柄チャートに表示されるようにします。また、標準指標を使用するメソッドを整理し、最終的な指標プログラムのライブラリにある冗長なコードを削除します。

並列粒子群最適化 並列粒子群最適化

本稿では、粒子群アルゴリズムを使用した高速最適化の手法について説明しています。また、この手法のMQLでの実装を提示します。これは、エキスパートアドバイザー内のシングルスレッドモードとローカルテスターエージェントで実行されるアドオンとしての並列マルチスレッドモードの両方ですぐに使用できます。

DoEasyライブラリの時系列(第52部): 複数銘柄・複数期間の単一バッファ標準指標のクロスプラットフォーム化 DoEasyライブラリの時系列(第52部): 複数銘柄・複数期間の単一バッファ標準指標のクロスプラットフォーム化

本稿では、複数銘柄・複数期間のAccumulation/Distribution標準指標の作成を検討します。指標に関してライブラリクラスをわずかに改善し、このライブラリに基づいて古いMetaTrader 4プラットフォーム用に開発されたプログラムが、MetaTrader5に切り替えたときに正常に機能するようにします。