コンテンツにスキップ

フィボナッチリトレースメントの描画方法

フィボナッチリトレースメントは、資産価格の潜在的なサポートとレジスタンスのレベルを特定するために使用される人気のあるテクニカル分析ツールです。 サポートとレジスタンスのレベルを特定することで、トレーダーは取引のタイミング、リスク管理、市場トレンドとの整合性において戦略的な優位性を得て、最終的に収益性を高める可能性を向上させます。

この記事と対応するビデオでは、フィボナッチリトレースメントをチャートに描画し、リトレースメントに基づいてポジションを開くcBotの作成方法を学びます。

チャートにフィボナッチリトレースメントを描画する

フィボナッチリトレースメントは、各数が前の2つの数の和である数列、フィボナッチ数列を実装しています。

これはフィボナッチ数列の例です:0、1、1、2、3、5、8、13、21、34、55、89、144、…

フィボナッチリトレースメントレベルは、フィボナッチ数列から導き出された連続する数の比率です。 テクニカル分析と取引で使用される一般的な比率は、0.236、0.382、0.5、0.618、そして時には0.786です。

チャートにフィボナッチリトレースメントを描画するcBotを作成します。 開始価格、開始時間、終了価格、終了時間を表す4つのパラメーターがcBotのコードに提供されます。

cTrader Algoで、新規ボタンをクリックしてcBotを作成し、「Fibonaci Retracement Strategy」などの名前を入力します。

4つの重要な変数を宣言します。

1
2
3
4
5
private double _max;
private double _min;

private int _highIndex;
private int _lowIndex;

過去50本のバーの最小価格と最大価格を検出するようにcBotをコーディングします。

1
2
_max = Bars.HighPrices.Maximum(50);
_min = Bars.LowPrices.Minimum(50);

cTrader Algoでは、絶対時間または相対バーインデックスを通じて時間位置を定義できます。 相対バーインデックスを使用してフィボナッチリトレースメントを描画し、高値と安値の価格のインデックスを検出するコードを書きます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
for (int i = 0; i <= 50; i++)
{
     if (Bars.HighPrices.Last(i) == _max)
          _highIndex = Bars.Count - i - 1;
}

for (int i = 0; i <= 50; i++)
{
     if (Bars.LowPrices.Last(i) == _min)
          _lowIndex = Bars.Count - i - 1;
}

最後に、チャートにフィボナッチリトレースメントを描画するコードを書くことができます。 高値と安値の価格の順序によって、フィボナッチリトレースメントの方向が決まります。

1
2
3
4
if (_highIndex > _lowIndex)
     Chart.DrawFibonacciRetracement("fibo", _lowIndex, _min, _highIndex, _max, Color.Yellow);
else
     Chart.DrawFibonacciRetracement("fibo", _highIndex, _max, _lowIndex, _min, Color.Yellow);

以下の完全なコードをコピーできます:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class FibonacciRetracementStrategy : Robot
    {
        private double _max;
        private double _min;

        private int _highIndex;
        private int _lowIndex;

        protected override void OnStart()
        {
            _max = Bars.HighPrices.Maximum(50);
            _min = Bars.LowPrices.Minimum(50);

            for (int i = 0; i <= 50; i++)
            {
                if (Bars.HighPrices.Last(i) == _max)
                    _highIndex = Bars.Count - i - 1;
            }

            for (int i = 0; i <= 50; i++)
            {
                if (Bars.LowPrices.Last(i) == _min)
                    _lowIndex = Bars.Count - i - 1;
            }

            if (_highIndex > _lowIndex)
                Chart.DrawFibonacciRetracement("fibo", _lowIndex, _min, _highIndex, _max, Color.Yellow);
            else
                Chart.DrawFibonacciRetracement("fibo", _highIndex, _max, _lowIndex, _min, Color.Yellow);
        }

        protected override void OnTick()
        {
            // Handle price updates here
        }

        protected override void OnStop()
        {
            // Handle cBot stop here
        }
    }
}

cBotをビルドするには、Ctrl+Bホットキーを使用するか、ビルドをクリックします。

cBotのローカルインスタンスを追加します:インスタンスを追加をクリックし、ローカルでオプションを選択してからインスタンスを追加をクリックします。

インスタンスをクリックし、バックテストタブに移動します。 バックテストの期間を選択し、playアイコンをクリックします。

チャートにフィボナッチリトレースメントが描画されるはずです。

フィボナッチリトレースメントを取引する

コードエディターに戻り、フィボナッチリトレースメントに基づいた簡単な戦略を実装します。 この戦略は、価格が0.618フィボナッチレベルを超えて、反発が予想される場合に買いポジションを建てることを中心としています。

戦略を実行するコードをOnTick()メソッドに書きます。

1
2
3
4
5
protected override void OnTick()
{
     if (Positions.Count == 0 && Bid < _min + ((_max - _min) * 0.618))
          ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000);
}

以下の完全なコードをコピーできます:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class FibonacciRetracementStrategy : Robot
    {
        private double _max;
        private double _min;

        private int _highIndex;
        private int _lowIndex;

        protected override void OnStart()
        {
            _max = Bars.HighPrices.Maximum(50);
            _min = Bars.LowPrices.Minimum(50);

            for (int i = 0; i <= 50; i++)
            {
                if (Bars.HighPrices.Last(i) == _max)
                    _highIndex = Bars.Count - i - 1;
            }

            for (int i = 0; i <= 50; i++)
            {
                if (Bars.LowPrices.Last(i) == _min)
                    _lowIndex = Bars.Count - i - 1;
            }

            if (_highIndex > _lowIndex)
                Chart.DrawFibonacciRetracement("fibo", _lowIndex, _min, _highIndex, _max, Color.Yellow);
            else
                Chart.DrawFibonacciRetracement("fibo", _highIndex, _max, _lowIndex, _min, Color.Yellow);
        }

        protected override void OnTick()
        {
            if (Positions.Count == 0 && Bid < _min + ((_max - _min) * 0.618))
                ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000);
        }

        protected override void OnStop()
        {
            // Handle cBot stop here
        }
    }
}

cBotを再度ビルドし、バックテストを行います。

リトレースメントレベルを超えるたびにポジションが建てられるのが確認できるはずです。

まとめ

この記事では、シンボルチャートにフィボナッチリトレースメントを描画し、リトレースメントに依存する取引戦略を実装する方法を説明しました。