【MT4】注文ツールを作成しようとしている話 その2~特殊注文・フィボナッチエントリー~【mql4】

【MT4】注文ツールを作成しようとしている話 その2~特殊注文・フィボナッチエントリー~【mql4】

フィボナッチエントリーとは

また前回の続きの記事になります。
通常のエントリーの話をしても面白くないと思うので、特殊注文に触れてみようと思います。

タイトルの通りフィボナッチを利用したエントリーになります。
以前に書いた値幅計算の記事に基づいた分析をし、エントリーする時に便利に使える機能です。
具体的にどのような動きをしているのかというとフィボナッチエクスパンション(エクステンション)を利用し、指定した値幅位置にエントリーラインを移動させています。
これは非常によく使う手法のため、実現したかったエントリー方法の一つになります。

早速ですがどのようなシチュエーションで使うのか実例を挙げてみます。

分析 GBPUSD 2021/3/23

まずはトレーディングビューのチャートで分析をしています。(もちろんMT4上からでも問題ありません。)
下降5波動に対してのA波(上昇5波動)、B波(下降3波動)の様なものが認識できます。
C波が完成した後の下降を狙います。
チャートの形としてはこの後汚くなっているので想定通りの動きをするのかはわかりませんが、「1.40351」が「N値(1:1)」の値幅とわかります。

細かい話をするとエリオット波動の話になるため省きますが、この時点でN値を達成した場合そこから反落するんじゃないか?と考えることができます。

実際のエントリー

M-FuncTradePanelを利用してエントリーしてみましょう。
※開発中の画面です。

①F-Exをクリックすると2本の縦線が表示されます。(水色は右ラインを表示するオプションがオンの意味です)
②左のラインまたは右のラインを操作すると2本のラインの間にフィボナッチエクスパンションを引いてくれます。
③F-Exの右にある入力欄の数値の位置にエントリーラインを自動で移動します。またslは初期設定値幅を利用します。
④現在ショートを狙っている位置なので「Sell」をクリックします。

これで簡単にエントリーできましたね。

※動画上クリック位置がずれていますが、キャプチャーの都合です。
実際は正しい位置をクリックしております。

どんな処理をしているの?

ちょっと長いので省略しますが以下のようなイメージになります。

①縦ラインの範囲(左ラインのみ表示の場合は現在の足までの範囲)の高値、安値を探す。
②次点の高値もしくは安値を探す。(ここで3点が決まります。)
③3点目から1点目、2点目の値幅に倍数を掛けた値を足すもしくは引きます。

かいつまんでですがそんなイメージのコードです(要所要所)

if(id==CHARTEVENT_OBJECT_DRAG && (sparam == "FiboELeft" || sparam == "FiboERight"))
     {
      if(ObjectFind("Fibo-E") != EMPTY)
        {
         if(LowInd>HighInd)
           {
            ObjectDelete("Fibo-E");
            CreateFibonacciExpansion(chartid,"Fibo-E",Time[LowInd],LowPrice,Time[HighInd],HighPrice,Time[LowInd0],LowPrice0);
            FiboETime = Time[HighInd];
           }
         else
            if(LowInd<HighInd)
              {
               ObjectDelete("Fibo-E");
               CreateFibonacciExpansion(chartid,"Fibo-E",Time[HighInd],HighPrice,Time[LowInd],LowPrice,Time[HighInd0],HighPrice0);
               FiboETime = Time[LowInd];
              }
        }


      if(LowInd>HighInd)
         objen = LowPrice0+((HighPrice - LowPrice) * StringToDouble(ObjectGetString(0,_TextFeLevel,OBJPROP_TEXT)));
      if(LowInd<HighInd)
         objen = HighPrice0-((HighPrice - LowPrice) * StringToDouble(ObjectGetString(0,_TextFeLevel,OBJPROP_TEXT)));

      ChartRedraw();
      ObjectDelete("en");
      CreateTradeLine("en",objen,clrYellow,STYLE_SOLID);

      if(MarketInfo(Symbol(),MODE_BID) < objen)
         objsl = objen + PipsToPrice(StopLoss_Def);
      else
         objsl = objen - PipsToPrice(StopLoss_Def);
      ObjectDelete("sl");
      CreateTradeLine("sl",objsl,clrDeepPink,STYLE_SOLID);

      BtnOrderType = "Limit";
      ToggleButton(0,_BtnOrderLimit,1,clrPink,clrRed);
      ChartRedraw();
     }

今回のまとめ

自動でフィボナッチを引くことも可能なんですが、ジグザグベースやある範囲の高安ベースでその指定が難しいです。というか人間の思っているものと同じものになることは稀です。そのためラインで範囲を指定してその中から半自動で引いてくれる形にしました。

今後の展望

ここはまだまだ開発段階のものであり、今後の展望としては3点取れるためチャネルを引く拡張とリトレースメントの戻り範囲とエクスパンションの値幅位置が一致しているときのみエントリーできるようなエントリーロック、もしくはハイライト表示の様なものを考えております。

フィボナッチのラインごとに色を変えたく思っているのですが、どうやら1つのフィボナッチだけでは実現できなそうだったので、重ねてハイライト表示のみ別のオブジェクトとして処理をしようと思っていたりします。

このあたりについては実装しながら使いやすさを考えているのでどういう形に落ち着くかは未定です。

あくまで自分の使いやすいものを作っているつもりですが、やはりテスターさんなどがいると開発効率が上がったり案が増えたりしそうだなとは思ってます。

インジケーター・EA・bot開発カテゴリの最新記事