自己適応アルゴリズム(第III部):最適化の放棄

Maxim Romanov | 26 4月, 2021

はじめに

この記事を読む前に、連載第2部の「自己適応アルゴリズムの開発(第II部): 効率の向上」稿を学習することをお勧めします。現在の記事で適用されている方法論は以前に説明したものとは大幅に異なりますが、以前の記事を読むことはトピックの理解に役立ちます。

欠点の分析

前の記事と同様、まず、前の成功したバージョンの欠点を分析しましょう。分析中に次の欠点が検出されました。

私は上記のすべての不利な点が重要であると考えています。アルゴリズムの変更を次々と改善していくこともできますが、それを最大限に活用して、ほぼゼロから開発を開始することをお勧めします。理論的根拠の見直しから始めます。

アルゴリズムは完全に自己適応型である必要があるため、通貨および為替市場向けに開発されます。どんな商品ででも動作するはずです。これは重要です。市場間がどのように異なるかを明確に理解する必要があるからです。これを理解していれば、それをアルゴリズムに変えることは理にかなっています。より機能的なストラテジーテスターを備え、FOREX商品だけでなく取引所商品でも使用できるため、今回はMetaTrader5プラットフォームに切り替えました。

開発中は、特定のパラメータに何故特定の値があるかという質問に常に答える必要があります。理想的なケースでは、パラメータに値を設定する理由を正当化する必要があります。

ローソク足チャートからブロックチャートへの変換

新しいバージョンでは、パラメータが不安定なためにローソク足を使用しないことにしました。より正確には、ティックの処理に移るとリソース消費が大幅に増加するため、M1ローソク足のみを使用する必要があります。理想的には、ティックを処理することが望ましいです。

N点のブロックを分析します。ブロックは練行足に似ていますが、わずかに異なるアルゴリズムに基づいています。ブロックチャートとその分析におけるメリットについては、「トレンドとは何か、相場の構造はトレンドかレンジかで決まるのか?」稿ですでに説明しました。

ブロック

図1 ブロックチャート

図1にブロックチャートを示します。ブロックチャートの全体図は図の下部に示され、上の画像は価格チャートでブロックがどのように見えるかを示しています。ブロックは、一定の時間から過去と未来に組み込まれます。図では、固定時間は黄色の縦線で示されています。これはゼロポイントであり、そこからブロックが過去と未来に組み込まれます。構築アルゴリズムはミラーリングされています。ブロックが過去と未来に組み込まれているという事実は、さらなる発展において重要になるでしょう。

ブロックが必要なのは、それらの主要なパラメータが安定していて制御可能であり、そして最も重要なことに、利益/損失は主にポイントでの価格変動に依存するためです。

市場モデル

基本的なパターンは、前のアルゴリズムで使用したものと同様です。つまり、強気ブロックの数から弱気のブロック数の局所的な偏差と、その後の平衡状態への復帰です。パターンは統計的であるため、ブロックチャートの統計的特性を分析することから始める必要があります。これを行うために、トレンドとは何か、相場の構造はトレンドかレンジかで決まるのか?」稿で説明されている特別なインディケータMax_distributionを開発しました。

このインディケータは、ブロックに分割された価格系列の統計パラメータを測定し、複数のブロックサイズのデータを同時に表示することができます。たとえば、ブロックサイズが10〜1000ポイントのグラフの統計的特性を知りたいとします。インディケータ設定で最小ブロックサイズを設定し、増倍率を使用して他のすべてのサイズのブロックを取得します。

主なインディケータ操作モードは、価格がNステップで垂直方向に移動するブロックの数を測定することです。

垂直方向のブロック

図2 垂直方向のブロック数を24ステップで変更

図2に例を示します。Nステップで価格によって渡されたブロックの数が測定されます。必要な数のサンプル(例: 100)が収集され、平均値が定義されます。このような分析は、さまざまなサイズのブロックに対して実行されます。

分布

図3 さまざまなブロックサイズの平均振幅

図3は、24ステップのブロック単位の平均垂直振幅の分布の例を示しています。各ヒストグラム列は、そのブロックサイズの平均振幅値です。サンプル数は1000です。最小のブロックの測定値は左側にあり、最大のブロックの測定値は右側にあります。ブロックサイズが0.00015の場合、価格は24ステップおよび1000サンプルで垂直方向に5.9ブロック移動します。ブロックサイズが0.00967の場合、価格は24ステップと1000サンプルでを垂直方向に4.2ブロック移動します。

赤い線は、価格系列がランダムウォークの場合に発生する参照値を示しています。24ステップの場合、この値は垂直方向の3.868ブロックです。基準値は組み合わせ法で計算され、図4の表で明確に表されています。

確率表

図4 24ステップの参照値の計算

図4は、ランダムウォークの場合に価格が平均24ステップで移動するブロックの参照垂直値の計算を示しています。最後の列では、この値が累乗に変換されます。ランダムウォークの平均振幅は24^0.4526になる傾向があります。基準値は、ステップ数ごとに再計算できます。表は.xlsx形式で記事に添付されています。

さまざまな取引商品(約35の通貨ペア、100を超える株式、10の暗号通貨、約10の商品)について調査を行いましたが、重大な逸脱はありません。一般的に、画像はすべての商品でほぼ同じです。平均振幅は、急速に上昇している暗号通貨の7から通貨ペアの3.8までの範囲です。一部の流動性の低い株では、3.8を下回ることさえあります。

平均振幅は24ステップまたは他のステップで得られましたが、これはどういう意味を持つのでしょうか。図5のように、ブロック形式に変換された正弦波の形式でチャートを表現してみましょう。

副鼻腔

図5 ブロック形式の正弦波

正弦波の半分の周期で24ステップになるようにブロックサイズを決めます。その場合、期間は48ステップになります。24ステップの25サンプルで平均振幅を測定すると、平均振幅は24ステップで10.33ブロックです。サンプル数が増えると、平均振幅は12またはステップ数を2で割った値になる傾向があります。価格系列は正弦波ではありませんが、正弦波は取引に便利です。ここで、平均振幅を測定するときに12を超える値が得られた場合、ブロックサイズは十分に大きくなく、24ブロックは半周期に収まりません。ただし、値が12未満の場合は、ブロックが大きすぎるか、価格シリーズのトレンドの動きが正弦波の場合ほど直線的でないという2つの理由が示されます。現在、トレンドスロープについては考慮していません。これは後で行います。

開発されたMax_distributionインディケータの読み取り値によって、価格系列が正弦波にどれほど類似しているかを大まかに見積もることができます。これを実現するために、正弦波のインディケータヒストグラムがどのように見えるかを見てみましょう。

分布2

図6 正弦波のブロックサイズに対する平均振幅の依存性

図6では、ブロックが小さい場合、価格が24ステップで垂直方向に24ブロック移動することがわかります。しかし、ブロックサイズが大きくなると、価格は24ステップでより少ないブロック数を移動します。ブロックサイズが変動の振幅に匹敵するようになると、垂直方向のブロック数はゼロになります。図3では、最大値は5.9であり、参照値である3.868になる傾向がありました。したがって、価格系列は、常に特定のトレンド要素をいくつかのスケールで持つ「ノイズの多い」正弦波として表すことができます。言い換えれば、市場は常に現在レンジを示しているスケール(逆転確率がトレンド継続のものよりも高い)と現在トレンドを示しているスケール(継続確率が逆転のものよりも高い)を持っている必要があります。

このトレンドとレンジの定義を採用する理由は、以前の記事の1つ「トレンドとは何か、相場の構造はトレンドかレンジかで決まるのか?」で説明されています。

Max_distributionインディケータを使用して、24だけでなく、他のステップ数についても、さまざまな取引商品の平均垂直ブロック数を測定しました。例を図7に示します。

マルチサンプル

図7 サンプルのステップ数に対する平均振幅の依存性

図7の白い列は、10から120までのステップ数で測定された移動振幅を示しています。各測定のステップは2サンプルと1000サンプルです。赤い線は、指定されたステップ数の参照値を示します。ご覧のとおり、ステップ数の増加に伴い、主な傾向からの有意な逸脱は観察されません。測定値曲線の全体的な形状は、参照曲線の形状と似ています。測定はGBPUSDのものでしたが、他の商品についても調査しました。ヒストグラム値が参照値を超える取引商品はたくさんありますが、一般的な傾向は持続しており、非線形方程式で表すことができます。

市場には安定した単純な規則性があり得ないことが知られています。これは、現在のトレンドスケールが絶えず変化していることを意味します。同時に、レンジスケールもトレンドになります。

図7の24ステップの平均振幅を使用します。3.86です。動きは、正弦波に似てトレンドとレンジで構成されていると仮定します。この場合、平均振幅のトレンド部分を計算することができます。これを実現するには、ブロックは整数値のみにすることができるため、24ステップの3.86*2=7.72垂直ブロックは8に切り上げられます。トレンドエリアに到達すると、価格は24ステップで垂直方向に8ブロック移動します。もちろん、価格は24ステップで垂直に24ブロック移動できますが、これは重要ではありません。その理由については後で説明します。

価格はトレンドエリアで24ステップ以内に垂直方向に8ブロック移動することがわかります。これは、一方向に16ブロック、別の方向に8ブロックの動きがあることを意味します。平均振幅が安定したままになるように、トレンド部分の後にレンジ部分が続く必要があることも知られています(多数のサンプルで非常に安定しています)。しかし、市場は正弦波ではありません。図7に示すように、垂直ブロックの数は、ステップ数の増加とともに増加します。したがって、より少ないステップで発生する平均からの偏差は、より多くのステップで平均に戻ると想定します。

図7のチャートでは、26、28、30、32、34ステップで平均していくらの価格を渡す必要があるかを定義できます。

26ステップ= 3.98; 28ステップ= 4.11; 30ステップ= 4.2; 32ステップ= 4.36

24ステップでは、価格はすでに垂直方向に8ブロック移動しますが、28ステップでは、平均して垂直方向に4.1ブロック、または整数値に切り捨てられた場合は4ブロックを通過するはずです。つまり、次の4つのステップで、前の4ブロックの移動からのロールバックが可能です。市場はそれほど予測可能ではなく、このシナリオに従ってイベントが発生する可能性は低いです。図7の同じチャートでは、価格が平均116ステップで垂直方向に8ブロック移動することを定義できます。

ロールバック1

ロールバック2

図8 考えられるシナリオ

図8は、2つの可能なシナリオを示しています。これらは2つの極端なオプションで、発生する確率は低く、視覚化を目的としたものです。ほとんどの場合、イベントは中間的なシナリオに従います。今最も重要なことは、平均して各ステップ数内で価格がいくら通過するかを知っていることです。ご覧のとおり、ロールバックは急であるほど深くなり、その逆も同様です。

長期的には、振幅は平均値になる傾向があります。24ステップの場合、これは3.8垂直ブロックですが、116ステップの場合、これは8垂直ブロックです。

これはモデルの構造であり、トレンドの動きのパラメータとさらなる価格行動に基づいて、各取引商品に固有のロールバック特性を計算することができます。トレンドの動きが鋭く、ロールバックが速いほど、深くなります。トレンドがレンジでロールバックが大きいほど、深度は浅くなります。これで、商品の統計パラメータを基準として、これらすべてを数値で表すことができます。

ロールバック

図9 トレンドの動きとロールバックの深さ

図9は、これが実際のチャートでどのように見えるかを示しています。左への鋭い動きと鋭いロールバックを見ることができます。ロールバックの深さは60%以上であることが判明しました。右側では、動きが滑らかになり、ロールバックが長くなり、30%のロールバックが発生します。これは、右の図で価格がより多くのステップを経て、動きの形成中にその振幅が増加するために発生します。

この振る舞いの理由は、価格系列がそれが順守する平均振幅を持っているという事実だけでなく、急激な動きが。現在の流動性を大幅に上回る資産への資本の急激な流入/流出によって引き起こされるという事実によっても説明できます大量のポジションを開いた後は、決済する必要があります。資金の額を所有している参加者の数は関係ありません。全額のポジションをすぐに決済すると、価格は元のレベルに戻ります。つまり、ロールバックは100%です。しかし、入ってくる流動性を考慮してポジションが徐々に決済される場合、量が多いほど動きは小さくなります。トレーダーがポジションを早く決済するほど、その資本によって作成された動きからのロールバックが強くなります。

価格設定の基本的な特徴によってパターンが確認されることが重要です。 

このセクションでは理論全体については説明していませんが、アルゴリズムの開発を開始するだけで十分です。残りは途中で説明されます。

トレンドの追跡

前のアルゴリズムと同様に、ロボットは逆トレンドの動きをトレードし、ポジションは一連の注文で構成されます。アルゴリズムはシリーズを開くためのシグナルを生成するもので、そのタスクはエントリポイントを可能な限り正確に定義することです。理想的には、シリーズの最初にシグナルが生成される頻度が高いほど、単位時間あたりにより多くの利益を得ることができます。これは、シグナルが頻繁で高品質でなければならないことを意味します。

ロボットは弱気と強気のブロックの数を分析します。強気ブロックの数が通常の値から大幅にずれていることがわかった場合、一連の売りポジションのシグナルを生成します。同じことが弱気ブロックにも当てはまります。それらの偏差は、Buyシリーズシグナルの生成につながります。

次に、後で変更する基本的なアルゴリズムを開発します。したがって、そのモジュールは柔軟である必要があります。シリーズ開始シグナルは、弱気/強気ブロックの超過率しきい値に基づいています。分析するブロック数は、前のアルゴリズムと同様に、最小値から最大値までの範囲で設定します。ただし、これはここでは他の目的で行われます。

シリーズを開始および完了するための割合しきい値

ブロック範囲は分析に使用されるため(たとえば、24〜34)、ブロック数ごとに固定の割合しきい値を使用するのは正しくありません。24ブロックで構成され、一般的なブロックが75%過剰である組み合わせの確率は、34ブロックでそのような組み合わせが発生する確率と等しくありません。組み合わせの確率は同じです。つまり、適用される割合しきい値は動的であり、そのような組み合わせの確率に依存する必要があります。

設定では、割合しきい値のは、範囲内に入る確率によって設定されます。次に、必要なブロック数について再計算する必要があります。範囲に入る確率は、組み合わせ論の規則を使用して計算されます。確率をブロック数ごとの割合しきい値に変換できる表を作成しました。 

確率表

図10 確率表

図10は、開始割合範囲に入る確率を再計算するための表を示しています。 この表では、動きの100%が16ステップで0〜16の垂直ブロックの範囲内にあると想定しています。 2.1%の範囲に入る確率(図10の表の場合)は、すべての動きの2.1%のみが16ステップで垂直に10〜16ブロックを通過することを意味します。設定で、アルゴリズムが表を使用して2.2以下の最も近い値を検索し、この値に対応する割合を取得している間に、たとえば2.2の範囲に入る確率を設定します。現在は81.25%です。したがって、ブロックの数ごとに独自の割合しきい値があります。表は.xlsx形式で記事に添付されています。

以前のバージョンでは、ポジションの全体的な利益がしきい値を下回ったときにポジションが決済されました。これは複数の問題を引き起こすため、最善の解決策ではありません。このバージョンでは固定サイズのブロックを使用しているため、超過率が必要な値に下がったときにポジションを決済することができます。固定数のブロックでポジションを開くと、操作中にサンプル内のブロック数が増加します。 

決済しきい値のパーセンテージも、範囲内に入る確率によって計算されます。ただし、範囲に入る確率は逆のスケールになります。ただし、これにはほとんど意味がありません。この表には、決済率を計算するための別の列があります。値が75以上になったときにポジションを決済したいとします。次に、75より大きい最も近い値が見つかります。16ブロックの場合、これは78.9であり、これはしきい値の決済率=62.5%に対応します。 

操作中、新しいブロックが閉じられるため、サンプル内のブロック数が増加します。したがって、ポジションが開いている限り、新しいブロックごとに、より多くのブロックの決済率が再計算されます。

シリーズのすべてのポジションの決済指値は、予想される決済ポイントに設定されます。これは、現在の市場の状態に応じてロールバックを制御するアルゴリズムが実装される方法です。シリーズの開始後(トレンドの動き)に形成されたサンプルのブロックが多いほど、結果として生じるロールバックは少なくなります。

割合しきい値の現在の実装は完全ではありません。これは、アルゴリズム開発の最初の段階で開発されました。後で、方法を修正するつもりです。すべての開閉パーセンテージは、現在のブロック数の平均振幅の測定に基づいて調整されます。現在のバージョンでは、価格系列のパラメータが上昇市場と下降市場で非対称であることを考慮していませんでした。これは外国為替では重要ではないかもしれませんが、株式市場にとって重要です。これについては、アルゴリズムの将来のバージョンで検討する予定です。

割合しきい値の方法論が開発されたので、最適化せずに必要な割合しきい値に関する質問に答えることができます。このために、次の方程式が作成されました。

%open

単一のブロック数に対してのみ手順を実行でき、残りは確率表を使用して再計算されます。

決済率は、インディケータの読み取り値に基づいて事前に計算することもできます。

%close;

決済率の計算式は同じように見えます。異なる増倍率Kcのみが使用されます。カスタマイズできるようにして、1に等しくする必要があります。

3.8に等しい平均振幅の分析に基づいて、24ブロックの開口部の割合しきい値を66.67%に設定できます。その他の値は、確率表を使用して再計算されます。

トレンドの追跡

前に述べたように、市場には安定したパターンと安定した変動振幅がありません。固定サイズの特定の数のブロックの傾向度を分析することは、疑わしい解決策です。分析ウィンドウは動的であり、リアルタイムで調整する必要があります。ブロック数を24〜28の範囲で設定します。 

なぜそのような分析期間を選択したのでしょうか。これらの値は、平均振幅=3.8に基づいて選択されており、開閉率しきい値によって異なります。シグナル後のこのブロック数で、シリーズの開始時に4つの利益ブロックを取得します。分析期間内のブロックが多いほど、アルゴリズムはより正確になります。ブロックサイズが比例して変更される場合、取得する利益ブロックの数(4または10)に基本的な違いはありません。ただし、新しいブロックごとにポジションが開かれるため、操作精度が上がるとポジション数が増えます。これは結果に悪影響を及ぼします。 

次に、分析するのに意味のある最小ブロックサイズを定義する必要があります。ブロックは、形成されたM1ローソク足に従って構築されます。最小離散化率は1分です。ブロックは最終的にローソク足の中に構築され、そのような分析は無意味になるため、ブロックを小さくしすぎることはできません。したがって、最小ブロックサイズはローソク足のサイズに基づいて決定されます。これを実現するために、1440分(日)以上などの長期間ATRを使用し、その値に比率を掛けることがあります。取引商品の機能にもよりますが、2-5の比率は許容できるはずです。

ローソク足のサイズが非常に不均一な場合は、より大きな比率を使用することをお勧めします。2番目の基準は手数料とスプレッドです。4ブロックで受け取る利益は、支払う手数料よりも大幅に高くなるはずです。ブロックサイズが小さいほど、シリーズ開始シグナルが頻繁に発生し、より多くの利益を得ることができます。ここでバランスを取る必要があります。最終的に、最小ブロックサイズはローソク足のサイズと手数料によって異なります。最小ブロックサイズを選択するための明確な基準があります。

説明されているブロックサイズを選択する方法は、理論的にも実際的にも十分に優れています。しかし、私はすでに改善された市場モデルに基づいて改善されたメカニズムを持っています。新しいメカニズムを説明するには別の記事が必要なので、ここでは上記の方法に限定します。

ロボットが固定サイズの特定の数のブロックを分析する場合、市場パラメータは常に変化し、市場トレンドとロールバックはサイズが異なるため、収益性がありません。そのため、適応メカニズムが必要です。

ロボットは最小サイズのブロックを分析します。超過率がしきい値を超える小さなトレンド領域を見つけた場合、トレンドが存在する最大スケールを定義する必要があります。これを行うには、より広い領域をスキャンする必要があります。分析するブロックの数は固定されているため、ブロックサイズを増やして、大きいブロックサイズで何が起こるかを確認する必要があります。時間枠と同様に、最小ブロックサイズをTF1と名付けました。これは合成ブロックの時間枠です。より大きなブロックは、乗算比KTFを使用して取得されます。たとえば、1.1に等しくなります。

1. シリーズ開始シグナル

基本的な時間枠の概念を導入する必要があります(以下で「時間枠」とは「ブロック時間枠」を意味します)。基本的な時間枠は、直列開始シグナルが検出された時間枠です。

アルゴリズムは、いくつかの追加のブロック時間枠を作成し、より長い時間枠で一連の開始シグナルを確認する必要があります。 

KTF=1.1の場合、次の5つの時間枠を確認するだけで十分です。したがって、最大の時間枠ブロックは、最小の時間枠ブロックの1.6倍になります。より長い時間枠の1つがシリーズ開始シグナルを特徴とする場合、アルゴリズムはその時間枠に切り替わり、それを基本にします。基本的な時間枠を見つけたら、5つの大きな時間枠を再度作成し、スキャンを繰り返す必要があります。これにより、しきい値を超えた最大時間枠を見つけることができます。


作業

アニメーション1

この段階でのタスクは、シリーズの開始の合図がある最大時間枠を見つけて、それを基本にすることです。アニメーション1は、これがどのように機能するかを示しています。アルゴリズムが小さなブロックをスキャンしていることがわかります。シグナルが見つかるとすぐに、ブロックサイズが増加し、最大ブロックサイズの基本時間枠が選択されます。決定できる最大のトレンドのポジション決済のロールバックを計算します。

この時点で、固定値の代わりにブロック番号範囲を使用することが重要になります。この例では、シグナルは24〜28ブロックの範囲で検索されます。ブロック数が多いサンプルが優先と見なされます。シグナルが24ブロックと28ブロックの両方で検出された場合、28ブロックが基本サンプルになります。追加の時間枠の場合も同様です。シグナルは24〜28ブロックの範囲で検索されます。ブロックサイズが大きい時間枠が優先事項と見なされます。この時間枠内では、ブロック数が多いサンプルが優先されます。

ブロックの構築には不正確な点があるため、このようなメカニズムが必要です。ブロックサイズが大きい時間枠は、必ずしも広いデータ範囲をカバーするとは限りません。

サイズエラー

図11 ブロック構造の不正確さ

図11は、10個の大きなブロックが10個の小さなブロックよりも少ないデータをカバーする可能性があることを示しています。この影響を最小限に抑えるために、24〜28の分析ブロック数の範囲が使用されます。ロボットは、より長い基本時間枠に移動し、サンプル内のブロック数を増やす可能性があります。その後、サンプル内のブロックが少なくなり、さらに長い時間枠に移動しやすくなります。

では、なぜKTF = 1.1なのでしょうか。乗算係数が低いほど、アルゴリズムはより正確になりますが、同時に表示する必要のある時間枠は多くなります。ブロックサイズを基本時間枠の1.6倍に増やすには、5つの時間枠のみを表示する必要があります。KTF=1.05の場合はすでに10の時間枠を確認する必要があり、これは追加の計算負荷をもたらしますが、増倍率が小さいほど正確さは増します。

2. ポジションを開くときの遅延

シリーズ開始シグナルが見つかりましたが、ここでポジションを開くと、自己適応が弱いため、結果は疑わしいものになります。価格は同じ方向に動き続ける可能性があり、その可能性は高いです。最大スケールが見つかり、トレンドが終わっていることを確認する必要があります。これを実現するには、次の時間枠でシリーズ開始シグナルがなく、アルゴリズムが基本時間枠を増やすことができないようにする必要があります。より長い時間枠でのシリーズ開始シグナルは現在存在しませんが、より長い時間枠ブロックはより広いデータ範囲をカバーし、トレンド開始に比べて過去に移動します。

基本的な時間枠を定義した後、より長い時間枠でシグナルを生成するために価格に時間を与える必要があります。より長い時間枠に移動できるように、価格は十分な距離を移動する必要があります。より長い時間枠でシグナルが形成されるのに十分な時間が経過したが、シグナルが形成されていない場合にのみ、ポジションを開くことができます。まず、(a)で説明したように問題を解決しました。その後、メカニズムを大幅に修正し、結果を大幅に改善しました。これは(b)で説明します。

(a)トレンドセクションに沿った遅延

原則として、より長い時間枠ブロックの履歴範囲は、基本時間枠ブロックよりも長いです。つまり、24〜28の長い時間枠ブロックが、基本時間枠の24〜28ブロックと同じ履歴範囲に収まるまで待つ必要があります。確認はすべてのローソク足で実行する必要があります。

延滞a

図12 より長い時間枠に移動するためにポジションを開くときの遅延

図12は、大きいブロックが小さいブロックが占める時間範囲に収まるまで2分間待つ必要があることを示しています。遅延中にシリーズ開始シグナルがより長い時間枠のいずれか(いくつかあります)で検出された場合、基本時間枠が増加し、遅延が繰り返されます。アルゴリズムが遅延後により長い時間枠に進むことができない場合、最大トレンドスケールが見つかり、ポジションを開きます。

この方法は機能しますが、完璧にはほど遠いです。これは、初期のアルゴリズムバージョンで実装されました。テストを示します。よって、その仕事を説明しました。(b)で説明されている改善された遅延アルゴリズムは、変更中に開発されました。

(b) 商品の統計パラメータに基づく遅延

この手法の目的は、(a)で追求したものと同様です。より長い時間枠のブロックは、基本的な時間枠のブロックと同じトレンドセクションをカバーする必要があります。

この手法では、取引。商品の統計パラメータを使用して、いつ遅延が完了するかを定義します。遅延の間、アルゴリズムがトレンドが終わったことを定義するか、より長い時間枠に移動するか、ポジションを開くことが重要です。したがって、最善の解決策は、より長い時間枠ブロックを使用して遅延時間を計算することです。<取引商品の主な統計的特性は%open割合しきい値ですでに考慮されているため、これを使用して遅延期間を定義します。

まず、シリーズ開始シグナル(Vb)を受信したときに価格が垂直方向に通過するブロック数を定義します。次に、基本および次の時間枠ブロックサイズを使用して、より長い時間枠(Nd)のすべてのVbブロックを形成するために垂直方向に通過する必要があるより長い時間枠ブロックの数を定義します。その後、価格が通常厳密に垂直方向に移動しないことと、移動の性質を知っているので、より長い時間枠(Nbd)の遅延ブロックの数を計算する必要があります。

延滞式;

例: mbn=24; %open=75; BSB=0.00064; Bsd= 0.0007とすると、Vb=18です。これは、24個のうち18個のブロックが同じ方向でなければならないことを意味します。基本時間枠で価格が18ブロック以内を移動するポイント数を計算します: 18*BSB = 0.01152。より長い時間枠で価格が18ブロック以内でどれだけ通過するかを計算します: 18*Bsd = 0.0126。すべてのより長い時間枠ブロックを形成するために足りないポイント数を定義します: 0.0126-0.01152=0.00108。得られた値をより長い時間枠のブロックサイズで徐算します: Nd=0.00108/0.0007=1.54。より長い時間枠に進むためには1.54ブロックが足りないことがわかります。

得られた値は価格が厳密に垂直方向に移動する場合に有効ですが、ここではそうではありません。24個のブロックのうち、18個のブロックだけが一方向で、6個は別の方向です。したがって、1.5ブロックは、取引商品の適切なブロック数に再計算する必要があります。これがNbd = 3を取得する方法です。したがって、実際には、この取引手段のトレンドの動きの特徴を考えると、3つのより長い時間枠ブロックの形成を待つ必要があります。

ただし、必要な数の遅延ブロック(この例では3)が通過するのを単に待つことは、最も効率的な解決策ではありません。価格が検出されたトレンドの方向に移動し、より長い時間枠への移行が可能である場合にのみ待つのが理にかなっています。Ndブロックの最小数にBsdブロックサイズを乗算し、基本時間枠のブロック決済価格からトレンドに向かって必要なポイント数を選び出す必要があります。これは、より長い時間枠に移行できるようにするために価格が到達すべき基準点になります。ここで、新しいより長い時間枠の各ブロックを閉じた後、残りのブロックが価格が参照ポイントに到達するのに十分であるかどうかを確認する必要があります。 

例:Nbd = 3ブロック、トレンドは弱気です。基準点は、基本的な時間枠のブロック閉鎖の価格より1.54ブロック下にあります。より長い時間枠のフォーリングブロックが形成され、続いて上昇ブロックが形成されました。1つの遅延ブロックが残ります。これ以上待つ意味はありません。さらに別の遅延ブロックが形成されると、基準点を越えることができなくなります。遅延を継続しても意味がありません。より長い時間枠への移行は行われず、ポジションを開くことができます。 

これはすべてアニメーション2に示されています。

作業2

アニメーション2

例として正弦波を取り上げました。現在のバージョンでは、取引商品の統計的特性を定義できません。そこで、開始と終了の割合を手動で設定しました。この機能は、今後のバージョンで実装される予定です。アルゴリズムは、それ自体で取引手段を定義することになります。これは、ブロックサイズとポジションを開くタイミングを定義します。

テストは小さなブロックから始まることがわかります。次に、アルゴリズムは傾向を追跡しながらブロックのサイズを増やします。最大トレンドサイズを定義した後、ポジションが開かれます。トレンドからのロールバックは後で計算されます。正弦波の場合、ロールバックは100%であるため、決済点が計算され、利益が設定されます。視覚化と操作プロセスの理解を簡素化するために正弦波を選択しました。アルゴリズムは、新しいトレンドセクションの先頭にある2番目のブロックの小さなセクションを除いて、正弦波のほぼすべての振幅を使用して利益を上げます。

3. シリーズの追跡

シリーズの最初のポジションを開いた後、アルゴリズムは、その作業を調整し、トレンドが続く場合はより長い時間枠に移動する機会を探し続けます。当然のことながら、より短い時間枠で開かれるポジションもあれば、より長い時間枠で開かれるポジションもあります。ロールバックサイズは常に、ロボットが見つけた最大の傾向から計算されます。

結果として得られるアルゴリズムは、2つの極端な市況を無視します。レンジ市場で、どのスケールでもトレンドがない場合(これは典型的な取引商品ではありません)、ロボットはシリーズを開始しません。しかし、急激な市場の上昇または下降時など、市場が安定したトレンドを持つ場合、アルゴリズムはトレンドが終了するまでの時間枠を絶えず増加させるため、ポジションを開くことができません。この場合、トレンド完了の基準は、トレンド自体の規模と取引手段の統計的特性の変化に比例して調整されます。

終わりに

主な目的は、与えられたデータを処理できるアルゴリズムを開発することです。入力データがその堅牢性の基準に適合しない場合、取引は実行されません。言い換えれば、課題は特定の市場のために有益なアルゴリズムを開発して価格の方向を予測しようとすることではなく、特定の条件下でアルゴリズムを収益性の高いものにし、価格系列の統計的特性を高めることです。取引はこれらの条件が満たされた場合のみに実行されるべきです。アルゴリズムが取引で利益を生む条件がわかっている場合、これらの条件が満たされない場合は取引する必要はありません。このようなアルゴリズムを作成した後は、その効率を向上させるために、市場価格形成のニュアンスに関する知識を身に付ける必要があります。

説明した機能は安定した自動操作にはまだ十分ではありませんが、基本的な理論モデルとアルゴリズム操作の基礎はすでに開発されています。完成している作業はかなりの量で、すべてを1つの記事にまとめるのは困難です。したがって、残りの機能とテストについては、今後の記事で説明します。 

開発した機能のパラメータを設定に移し、調整できるようにしました。アルゴリズムの動作設定で特定の値を設定する理由には、非常に具体的な説明や、それらを計算するために使用される方程式さえあります。最終的なアルゴリズムには多くの設定があります。アルゴリズム自体は非常に複雑であり、個々のモジュールは互いに効果的に相互作用する必要があるため、設定はアルゴリズム自体を構成するために必要です。このアルゴリズムの設定は、パフォーマンスパラメータを履歴に合わせて調整することを目的としたものではなく、モジュールの操作と相互作用を最適化するためのものです。

チャートウィンドウとインディケータウィンドウにブロックを構成するインディケータのコードは本稿に添付されています。これらは、視覚化が異なる同じ指標です。これらのインディケータの要件仕様と、以前のアルゴリズムバージョンの完全な要件仕様を以下に添付します。

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

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