English Русский 中文 Español Deutsch Português
DIYテクニカル指標

DIYテクニカル指標

MetaTrader 5 | 8 12月 2022, 10:05
252 0
Aleksej Poljakov
Aleksej Poljakov

はじめに

テクニカル指標はすべて、市場情報を処理するための特定のアルゴリズムに基づいています。原則として、価格は初期データとして使用されます。数学の言葉で言えば、指標は価格を何らかの最終結果に変換する関数です。この記事では、指標の作成に使用できる線形関数について検討します。


ルール1

すべての線形指標の背後にある考え方は非常にシンプルで、4つのステップに要約されます。

  1. あらかじめ決められた数の価格を読み取る
  2. 特定の比率で乗算する
  3. 得られた結果の総和を取る
  4. 結果の値をチャートに表示する

最終結果とそのような指標の動作が比率に依存することは直感的に明らかですが、比率は何であるべきでしょうか。任意の値でいいのか、それとも何らかの制限があるのでしょうか。

メインチャートに設定されている指標は、単純な方程式で表すことができます(この場合、比率として整数を使用)。

比率を実数に変換するには、単純な変換をおこなう必要があります。

すると、そのような指標の主なルールは「比率の合計は1に等しくなければならない」という単純なステートメントになります。言い換えると、

です。指標の方程式は非常に単純に見えますが、その背後には大きなチャンスがあります。このルールに従って、独自にいくつかの指標を作成してみましょう。

実験の基礎として、一般的な指標を使用します。唯一の違いは、入力パラメータ(一連の比率を格納する文字列変数)です。このアプローチにより、1つのテンプレートを使用して多数のオプションをテストできます。

input string InpCoefficient="1,1,1,1,1";//variable for indicator ratios

比率間の区切りとしてコンマを使用します。

OnInit()関数内で次の手順を実行します(コードには謎の「center」も含まれています。その目的は後でわかります)。

   string s[];                                                  //array for substrings with ratios
   size=StringSplit(InpCoefficient,StringGetCharacter(",",0),s);//get substrings and their number
   
   ArrayResize(coeff,size);  //prepare the array for indicator ratios
   double denom=0,center=0;  //variables for normalizing values and calculating the center of the indicator
   for(int i=0; i<size; i++) // set the ratios
     {
      coeff[i]=StringToDouble(s[i]);
      denom=denom+coeff[i];
     }

   if(denom==0) //if the normalization term is 0, then something is wrong
     {
      Alert("Wrong odds!");
      return(INIT_FAILED);
     }

   for(int i=0; i<size; i++) //normalize the ratios and calculate the indicator center
     {
      coeff[i]=coeff[i]/denom;
      center=center+coeff[i]*(i+1);
     }

   Print((int)MathRound(center));//display the count closest to the center of the indicator

次に、いくつかの例を考えてみましょう。

最初のシーケンスは、 同比率の5つの価格測定値1、1、1、1、1です。これは単純移動平均です。この場合の指標方程式は、(価格[0]+価格[1]+価格[2]+価格[3]+価格[4])/5です。

2番目のシーケンスを取得するには、期間が1~5の5つの移動平均を取り、それらの平均を求めます。つまり、初期データが次のようになります。

価格[0]/1+
(価格[0]+価格[1])/2+
(価格[0]+価格[1]+価格[2])/3+
(価格[0]+価格[1]+価格[2]+価格[3])/4+
(価格[0]+価格[1]+価格[2]+価格[3]+価格[4])/5。

それらを合計すると、シーケンスの比率137、77、47、27、12が得られます。

3番目のシーケンスでは、1ステップ後退したシフトで5つの移動平均をとって、それらの平均を見つけます。つまり、結果としていくつかの移動平均の平均が得られます。オープニングデータ:

(価格[0]+価格[1]+価格[2]+価格[3]+価格[4])/5+
(価格[1]+価格[2]+価格[3]+価格[4]+価格[5])/5+
(価格[2]+価格[3]+価格[4]+価格[5]+価格[6])/5+
(価格[3]+価格[4]+価格[5]+価格[6]+価格[7])/5+
(価格[4]+価格[5]+価格[6]+価格[7]+価格[8])/5.

結果は、比率が1、2、3、4、5、4、3、2、1の三角形のウィンドウです。

指標の比率として、さまざまな数学的シーケンスを使用できます。以下は、さらにいくつかの指標の例です。それらの1つはフィボナッチ数列に基づいていて、34、21、13、8、5、3、2、1、1です。別の指標もフィボナッチ数列に基づいて構築されていますが、対称的な構造が構築されています。1、1、2、3、5、3、2、1、1です。3番目の指標は一連のパスカルの三角形に基づいていて、1、8、28、56、70、56、28、8、1です。

指標の比率は、整数シーケンスの百科事典でも見つけることができます。2014年、最も美しい新しいシークエンスを競うコンテストが開催されました。シーケンスA229037A235265、およびA235383が勝者として宣言されました。これらのシーケンスの1つには、「森林火災」という独自の名前さえありました。このシーケンスは、線形トレンドを回避するという点で興味深いものです。それらに基づいて構築された指標は次のように見えます。

単語を指標比率に変換することもできます。最も人気のある取引プラットフォームの名前MetaTrader5を取り上げましょう。各文字の序数を比率として取ります。この場合、シーケンス13、5、20、1、20、18、1、4、5、18、5が得られます。
この取引プラットフォームは、MetaQuotes Software Corpによってリリースされています。スペースとピリオドを省略すると、シーケンス13、5、20、1、17、21、15、20、5、19、19、15、6、20、23、1、18、5、3、15、18、16が得られます。

これらのシーケンスに基づく指標は次のようになります。

最後に、さらに別の指標を作成して名前を付けましょう..。えーと、...名前は付けないことにします。付けたら、記事に年齢制限がかかってしまいます。「クレイジー」にしましょう。この指標の主な特徴は、新しい呼び出しごとにランダムな比率を使用することです。

指標の比率を知ることで、その重要な特徴の1つを得ることができます。これをおこなうには、指標の重心がどの参照に当たるかを計算する必要がありますが、それをおこなうには、指標方程式の参照番号を代入する必要があります。

指標の中心と期間に応じて、3つのタイプのいずれかに分類できます。「期間」を指標の期間としましょう。

  • トレンド:center < 期間/3
  • 平滑化:期間/3 < center < 2*期間/3
  • カウンタートレンド:    2*期間/3 < center

    ルール#1a

    ご覧のとおり、ルール#1に従うと、常に完全に機能するテクニカル指標が得られます。しかし、ここで指標に負の比率が存在する可能性についての疑問が生じます。ここで、比率の絶対値は、それらの合計よりも小さくなければならないというルールが追加されます。または、整数比と実数比の記号形式では

    となります。この制限は、指標の安定性に関連しています。たとえば、線形加重移動平均から得られたいくつかのシーケンスを見てみましょう。青:5、4、3、2、1、緑:5、4、3、2、-1、黄:5、4、3、-2、-1、赤:5、4、-3、-2、-1です。

    ご覧のとおり、最後のオプションは以前のものと比較して非常に自由に動作します。指標は安定性を失いました。したがって、指標に負の比率がある場合は、ルール1aへの準拠を確認する必要があります。


    一休み

    比率のルールにより、新しい指標を作成できるだけでなく、標準オプションを変更することもできます。 指数移動平均を例に取りましょう。その方程式は単純で、誰にでも知られています。

    これは、現在の値が前の値に依存する再帰指標の例です。再帰を拡張すると、指数平均方程式は次のようになります。

    ここにあるのは無限長の等比級数です。

    簡単な注意:通称EMA期間と呼ばれるものは、実際にはその中心がEMAの中心と一致する単純移動平均期間です。

    進行の長さを制限してみると、フィルタになるので、これを「ジオメトリック」と呼びます。このフィルタの最も興味深い機能は、その動作が平滑化係数とその期間の両方に依存することです。同時に、期間が長くなるにつれて、幾何学的フィルタは標準のEMAにますます似てきます。たとえば、指数平滑化率がa=0.1であるとすると、EMA期間は、

    として計算できます。次に、EMAとジオメトリックフィルタの動作を同じ平滑化率で比較してみましょう。ただし、期間は10です。

    幾何学的フィルタの期間を徐々に増やしていくと、EMAに徐々に近づいていく様子がわかります。

    等比数列に加えて、等差数列もあります。MetaTraderターミナルでは、等差数列は線形加重平均として実装されます。等差数列ステップを導入して、小さな変更を加えてみましょう。これにより、SMAからLWMAまでの値を持つ指標を取得できます。

    結果として等差等比数列を取得するために、両方のオプションを組み合わせてもう1つの手順を実行する必要があります。数学の規範から少し逸脱し、異なる数列が異なる期間を持つことを許可します。その結果、動作がかなり広い範囲で変化する可能性がある指標が得られます。少なくとも、標準オプション(SMA、LWMA、EMA)は、新しい指標と同じ柔軟性を示すことができません。


    ダミーのウィンドウ関数

    デジタル信号処理に適用されるウィンドウ関数を指標比率として使用できます。かなり普遍的なオプションを見てみましょう。余弦の和のウィンドウです。このようなウィンドウの比率の一般化された方程式は次のようになります。

    このウィンドウに基づいて、テクニカル指標で使用できる独自の解決策を構築してみましょう。これをおこなうために、指標比率を計算するスクリプトを作成します。

    すべての標準ウィンドウ関数は、その中心に対して対称です。ウィンドウ関数の中心を指標の最初または最後に移動する余裕があります。次に、同じ関数に基づいて、トレンド、平滑化、またはカウンタートレンド指標を取得できます。このような解決策は、暗示的ではありますが、従来の指標で使用されています。たとえば、LWMAは三角形ウィンドウの半分であり、EMAは切り捨てられたラプラスウィンドウです。

    iPeriodを将来の指標の期間とします。次に、指標の中心は、0.5に等しいステップで1からiPeriodまでの値を取ることができます。つまり、iCenterは1、1.5、2、...iPeriodの値を取ることができます。

       int period=MathMax(2,iPeriod),     //check indicator length for min. acceptable value
           step=(int)MathRound(2*iCenter);//number of steps to the center of the indicator by 0.5
    
       double center=0.5*step;      //indicator center
       if(center<1 || center>period)//check if the center has a valid value
          center=0.5*(period+1);
    
    

    これで、ウィンドウの幅を決定し、そのオフセットを見つけるだけで済みます。このオフセットにより、指標の中心とウィンドウ関数の中心を一致させることができます。

       int width=(int)(2*center),//window function width
           shift=1;              //offset to match the centers of the indicator and the window
    
       if(2*center<=period)//if the center is shifted to the beginning of the indicator
         {
          width=2*period-(int)(2*center)+2;
          shift=period-(int)(2*center)+2;
         }
    

    5次ウィンドウに制限してみましょう。次に、最大5つの比率C1~C5を設定する必要があります。任意の数値を比率として使用できます。この場合は必ず、次の各比率は前の比率よりも小さくなるという条件が満たされる必要があります。つまり、C1 > C2 > C3 > C4 > C5です。正規化値を正しく計算するには、この条件を満たす必要があります。

    ウィンドウ関数のすべての比率がゼロに等しい場合、矩形ウィンドウ(SMA)が得られます。他のいくつかのオプションを以下に示します(ゼロ値を省略した比率)。

    ハンウィンドウ: C1=1。

    レシオリニアフォールオフウィンドウ:C1=5、C2=4、C3=3、C4=2、C5=1。

    Fiboウィンドウ:C1=8、C2=5、C3=3、C4=2、C5=1。

    一部の比率値の場合、部分的に負の値を持つウィンドウ関数が得られるため、標準のフラットトップウィンドウのように見えます:C1=3、C2=2。

    上級者向けのウィンドウ機能

    一般化された適応多項式を使用してウィンドウ関数を構築することができます。その方程式は次のようになります。

    この多項式の際立った特徴は、すべてのパラメータが互いに独立していることです。唯一の例外は、パラメータC0が他のすべての比率の合計より小さくてはならないことです。比率は少なくとも0で、指数はそれより大きい必要があります(指数が0の場合、長方形のウィンドウが取得されますが、これはC0比率を使用して取得できます)。

    この多項式を使用すると、既知のウィンドウ関数と通常とは異なる関数の両方を取得できます。たとえば、C0=1の場合、長方形のウィンドウ(SMA)が得られます。

    三角ウィンドウ:C0=1、C1=1、P1=1。

    ウェルチウィンドウ: C0=1、C1=1、P1=2。

    その他にも、珍しいものを手に入れることができます。Fibo数値と次数の線形成長を含むウィンドウ(C0比率は自由のままにして、値を取得します):C1=8、P1=1、C2=5、P2=2、C3=3、P3=3、C4=2、P4=4、C5=1、P5=5。


    ルール2

    これまで、メインチャートに配置される指標を検討してきましたが、オシレータについては完全に忘れていました。すべてのオシレータの根底にあるルールは非常に単純です。オシレータレシオの合計はゼロです。

    動作するオシレータは、2つの指標に基づいている場合に最も簡単に作成できます。すると、オシレータの方程式は次のようになります。

    この場合、指標は異なるはずです。たとえば、長方形と三角形のウィンドウに基づくオシレータは1、1、1、1、1と1、2、3、2、1になります。

    同じウィンドウ関数を使用することもできますが、長さが1、2、3、2、1と1、2、3、4、5、4、3、2、1と異なります。

    また、数カウント前にシフトした同じ指標である可能性もあります。5、4、3、2、1および0、0、0、5、4、3、2、1(2番目のシーケンスのゼロは3カウントのシフトを実行します)。

    オシレータは、取引戦略でよく使用されます。たとえば、シグナルとして2つの指標の交点を使用するすべての戦略は、1つのオシレータに減らすことができます。
    たとえば、簡単なEAを書いてみましょう。指標のいくつかのペアは、シグナルのソースとして機能します。

    • 2つの単純移動平均
    • 線形加重平均および三角形ウィンドウ
    • MetaQuotes指標(両方の取引プラットフォームでどちらがより収益性が高いかを比較)
    • そしてもちろん、クレイジー

    EAでは、短い期間の指標ラインが別の指標のラインを上に横切ると、買いポジションが開かれます。下向きに横切ると、売りポジションが開かれます。一方向にポジションを開くと、反対方向のポジションを決済することになります。これらの条件は、対応する指標に基づくオシレータの符号の変化のように見えます。 

    テストパラメータはEURUSDH1、2021.01.01~2021.12.31です。
    テスト結果を表に示します。「クレイジー」の場合、その機能を考慮して5つのテストを実行しました。

    指標の種類 総純利益
    粗利益
    総損失
    取引総額
    SMA -112.15
    338.69
    -450.84
    340
    TMA 4.64
    422.06
    -417.42
    372
    MT4 -39.43
    402.26
    -441.69
    444
    MT5 -45.27
    395.20
    -440.47
    438
    クレイジー1 -82.13
    432.68
    -514.81
    640
    クレイジー2 -91.15 469.24  -560.39 662
    クレイジー3  -57.01 454.13  -511.14 612
    クレイジー4  -39.16 487.40 -526.56  673
    クレイジー5 -21.45 471.97 -493.42 666

    ご覧のとおり、どのオプションの結果も印象的ではありません。クレイジーは比較的良かったのですが。最高の取引と最低の取引の差は4です。この指標は本当にクレイジーです。

    戦略を改善できるか見てみましょう。チャートを見てみましょう-これは2つの交差点の例です。赤い線が青い線と正式に同じ方向で交わった場合です。

    ただし、青い線の挙動は異なって見えます。メインのオシレータに2つのオシレータを追加して、指標自体の値の変化を追跡します。その後、EAはいくつかの入力を並べ替えることができます。この複雑さがもたらす結果を見てみましょう。

    指標の種類 総純利益
    粗利益
    総損失
    取引総額
    SMA 45.64
    325.11
    -279.47
    138
    TMA 156.03
    466.26
    -310.23
    306
    MT4 -133.56
    296.25
    -429.81
    212
    MT5 -192.40
    273.05
    -465.45
    203
    クレイジー1 114.30
    564.00
    -449.70
    409
    クレイジー2 -93.57 421.01   -514.58 413
    クレイジー3  -31.83 445.27   -477.10 446
    クレイジー4  3.87 451.39 -447.52  431
    クレイジー5 -8.04 458.58 -466.62 409

    ご覧のとおり、新しいオシレータの追加は、場合によってはプラスの効果をもたらしました。他では、結果が悪化しています。おそらく、そのような戦略の定性的パラメータだけでなく、定量的パラメータも考慮する必要があります。いずれにせよ、この種の戦略にはさらなる研究が必要です。

    結論

    おわかりのように、テクニカル指標の開発は非常にエキサイティングな経験になる可能性があります。以下は添付ファイルです。

    1. Base Indicator - 比率に基づいて指標を作成できるテンプレート
    2. OEIS - 最も美しいシーケンスに基づく指標。すべてのシーケンスは期間制限付き
    3. Crazy - ランダム比率を使用する指標
    4. Arithmetic Geometric Filter - 算術および等比数列に基づく指標
    5. WindowFunctionsforDummies - 余弦多項式に基づいてウィンドウ関数を計算できるスクリプト(取得した比率をFilesフォルダ内のテキストファイルに保存)
    6. Window Functions for Advanced - 一般化された適応多項式を使用して指標比率を計算するスクリプト(計算結果もファイルに保存)
    7. BasicOscillator - 2つの指標に基づくオシレータのテンプレート
    8. EA Indicator - オシレータを使用してポジションを開くEA(Controlパラメータで分析するオシレータの数を決定)


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

    DoEasy-コントロール(第16部):TabControl WinFormsオブジェクト — 複数行のタブヘッダー、コンテナに合わせたヘッダーの伸び DoEasy-コントロール(第16部):TabControl WinFormsオブジェクト — 複数行のタブヘッダー、コンテナに合わせたヘッダーの伸び
    この記事では、TabControlの開発を続け、ヘッダーのサイズを設定するすべてのモードに対して、コントロールの4つの側面すべてにタブヘッダーの配置(通常、固定、右詰め)を実装します。
    VIDYAによる取引システムの設計方法を学ぶ VIDYAによる取引システムの設計方法を学ぶ
    最も人気のあるテクニカル指標によって取引システムを設計する方法を学ぶ連載の新しい記事へようこそ。この新しい記事では、新しいテクニカルツールについて学び、VIDYA(Variable Index Dynamic Average、可変インデックス動的平均)テクニカル指標によって取引システムを設計する方法を学びます。
    ニューラルネットワークが簡単に(第27部):DQN (Deep Q-Learning) ニューラルネットワークが簡単に(第27部):DQN (Deep Q-Learning)
    強化学習の研究を続けます。今回は、「Deep Q-Learning」という手法に触れてみましょう。この手法を用いることで、DeepMindチームはアタリ社のコンピューターゲームのプレイで人間を凌駕するモデルを作成することができました。取引上の問題を解決するための技術の可能性を評価するのに役立つと思います。
    ニューラルネットワークが簡単に(第26部):強化学習 ニューラルネットワークが簡単に(第26部):強化学習
    機械学習の手法の研究を続けます。今回からは、もう1つの大きなテーマである「強化学習」を始めます。この方法では、モデルは問題を解決するためのある種の戦略を設定することができます。この強化学習の特性は、取引戦略を構築する上で新たな地平を切り開くものと期待されます。