Lewati ke isi

Cara menggambar Andrews' Pitchfork

Andrews' Pitchfork adalah alat analisis teknikal populer yang digunakan, terkadang dengan indikator lain, untuk mengidentifikasi level support dan resistance potensial dalam pasar yang sedang trending. Level-level ini berfungsi sebagai dasar penting untuk strategi trading yang sukses, memberikan trader kejelasan, struktur, dan kepercayaan diri dalam keputusan mereka.

Artikel ini dan video yang menyertainya akan mendemonstrasikan cara membuat cBot yang menggambar Andrews' Pitchfork pada grafik, dan mengkodekan pitchfork agar secara otomatis memperbarui saat grafik berubah.

Menggambar Andrews' Pitchfork pada grafik

Andrews' Pitchfork terdiri dari garis median (garis tengah) dan dua garis paralel yang membentuk saluran. Objek-objek ini membantu trader memvisualisasikan tren, meramalkan pergerakan harga, dan mengidentifikasi titik masuk dan keluar potensial untuk trading.

Andrews' Pitchfork digambar pada grafik harga menggunakan tiga titik kunci: titik tinggi, titik rendah, dan titik tinggi atau rendah berikutnya. Pergerakan harga dalam saluran ini sering berosilasi antara garis atas dan bawah, sementara garis median berfungsi sebagai titik pembalikan.

Kita akan membuat cBot yang menggambar Andrews' Pitchfork dengan tren naik, yang biasanya memerlukan dua titik rendah dan satu titik tinggi di antaranya. Sebaliknya untuk Andrews' Pitchfork dengan tren turun: dua titik tinggi dan satu titik rendah di antaranya akan diperlukan.

Di cTrader Algo, klik tombol New untuk membuat cBot dan masukkan nama untuknya, lalu klik Create.

Andrews's Pitchfork memerlukan enam parameter untuk menyimpan hal berikut: indeks titik tinggi dan dua titik rendah, dua harga minimum dan satu harga tinggi. Deklarasikan keenam parameter tersebut.

1
2
3
4
5
6
private int _highIndex;
private int _lowIndex1;
private int _lowIndex2;
private double _max;
private double _min1;
private double _min2;

Deteksi dua harga minimum dan satu harga tinggi yang diperlukan untuk titik-titik pitchfork.

1
2
3
_max = Bars.HighPrices.Maximum(50);
_min1 = Bars.LowPrices.Minimum(50);
_min2 = Bars.LowPrices.Minimum(10);

cTrader Algo memungkinkan Anda menentukan lokasi waktu melalui metode yang menyediakan waktu absolut atau indeks bar relatif. Metode yang digunakan untuk menggambar pitchfork pada grafik memperkenalkan override yang relevan. Dalam kasus ini, kita memilih indeks bar relatif.

Tulis kode untuk mendeteksi indeks harga tinggi dan rendah.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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) == _min1)
        _lowIndex1 = Bars.Count - i - 1;
}

for (int i = 0; i <= 10; i++)
{
    if (Bars.LowPrices.Last(i) == _min2)
        _lowIndex2 = Bars.Count - i - 1;
}

Gambar pitchfork pada grafik.

1
Chart.DrawAndrewsPitchfork("AndrewsPitchfork", _lowIndex1, _min1, _highIndex, _max, _lowIndex2, _min2, Color.Red);

Anda dapat menyalin kode lengkapnya di bawah ini:

 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
53
54
55
56
57
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 AndrewsPitchfork : Robot
    {
        private int _highIndex;
        private int _lowIndex1;
        private int _lowIndex2;
        private double _max;
        private double _min1;
        private double _min2;

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

            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) == _min1)
                    _lowIndex1 = Bars.Count - i - 1;
            }

            for (int i = 0; i <= 10; i++)
            {
                if (Bars.LowPrices.Last(i) == _min2)
                    _lowIndex2 = Bars.Count - i - 1;
            }

            Chart.DrawAndrewsPitchfork("AndrewsPitchfork", _lowIndex1, _min1, _highIndex, _max, _lowIndex2, _min2, Color.Red);

        }

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

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

Untuk membangun cBot, gunakan hotkey Ctrl+B atau klik Build.

Tambahkan instance lokal dari cBot: klik Add instance, pilih opsi Locally, lalu klik Add instance.

Klik instance tersebut dan navigasikan ke tab Backtesting. Pilih periode untuk backtesting, aktifkan opsi Visual mode dan kemudian klik ikon play.

Anda seharusnya melihat Andrews' Pitchfork tergambar pada grafik.

Memperbarui Andrews' Pitchfork

Kembali ke aplikasi Algo dan kode cBot untuk memperbarui pitchfork saat grafik berubah.

Buat metode baru untuk menggambar pitchfork dan pindahkan logika asli ke dalam metode tersebut.

 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
private void DrawAndrewsPitchfork()
{
    _max = Bars.HighPrices.Maximum(50);
    _min1 = Bars.LowPrices.Minimum(50);
    _min2 = Bars.LowPrices.Minimum(10);

    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) == _min1)
            _lowIndex1 = Bars.Count - i - 1;
    }

    for (int i = 0; i <= 10; i++)
    {
        if (Bars.LowPrices.Last(i) == _min2)
            _lowIndex2 = Bars.Count - i - 1;
    }

    if (_lowIndex1 < _highIndex && _highIndex < _lowIndex2)
        Chart.DrawAndrewsPitchfork("AndrewsPitchfork", _lowIndex1, _min1, _highIndex, _max, _lowIndex2, _min2, Color.Red);
}

Panggil metode baru tersebut dalam metode OnBar().

1
2
3
4
protected override void OnBar()
{
    DrawAndrewsPitchfork();
}

Karena hanya setup tren naik yang diperlukan, tulis logika kondisional yang memverifikasi bahwa minimum dan maksimum berada dalam urutan yang benar.

1
2
if (_lowIndex1 < _highIndex && _highIndex < _lowIndex2)
    Chart.DrawAndrewsPitchfork("AndrewsPitchfork", _lowIndex1, _min1, _highIndex, _max, _lowIndex2, _min2, Color.Red);

Anda dapat menyalin kode lengkapnya di bawah ini:

 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
53
54
55
56
57
58
59
60
61
62
63
64
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 AndrewsPitchfork : Robot
    {
        private int _highIndex;
        private int _lowIndex1;
        private int _lowIndex2;
        private double _max;
        private double _min1;
        private double _min2;

        protected override void OnStart()
        {

        DrawAndrewsPitchfork(); 

        }

        private void DrawAndrewsPitchfork() 
        {
           _max = Bars.HighPrices.Maximum(50);
            _min1 = Bars.LowPrices.Minimum(50);
            _min2 = Bars.LowPrices.Minimum(10);

            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) == _min1)
                    _lowIndex1 = Bars.Count - i - 1;
            }

            for (int i = 0; i <= 10; i++)
            {
                if (Bars.LowPrices.Last(i) == _min2)
                    _lowIndex2 = Bars.Count - i - 1;
            }

            if (_lowIndex1 < _highIndex && _highIndex < _lowIndex2)
                 Chart.DrawAndrewsPitchfork("AndrewsPitchfork", _lowIndex1, _min1, _highIndex, _max, _lowIndex2, _min2, Color.Red);
        }

        protected override void OnBar()
        {
            DrawAndrewsPitchfork(); 
        }

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

Bangun cBot lagi dan lakukan backtesting.

Tingkatkan kecepatan mode visual dan klik ikon play.

Kali ini, Anda seharusnya melihat bagaimana pitchfork terus digambar ulang saat grafik berubah.

Ringkasan

Artikel ini telah menjelaskan cara menggambar Andrews' Pitchfork pada grafik simbol dan mengkode pitchfork untuk memperbarui dirinya sendiri saat grafik berubah.