Zum Inhalt

Wie man Andrews' Pitchfork zeichnet

Andrews' Pitchfork ist ein beliebtes Werkzeug der technischen Analyse, das manchmal zusammen mit anderen Indikatoren verwendet wird, um potenzielle Unterstützungs- und Widerstandsniveaus in einem Trendmarkt zu identifizieren. Diese Niveaus dienen als kritische Grundlage für erfolgreiche Handelsstrategien und geben Händlern Klarheit, Struktur und Vertrauen in ihre Entscheidungen.

Dieser Artikel und das dazugehörige Video zeigen, wie man einen cBot erstellt, der Andrews' Pitchfork auf einem Chart zeichnet, und wie man die Pitchfork so codiert, dass sie sich automatisch aktualisiert, wenn sich der Chart ändert.

Andrews' Pitchfork auf einem Chart zeichnen

Andrews' Pitchfork besteht aus einer Medianlinie (Mittellinie) und zwei parallelen Linien, die einen Kanal bilden. Diese Objekte helfen Händlern, Trends zu visualisieren, Kursbewegungen vorherzusagen und potenzielle Ein- und Ausstiegspunkte für Transaktionen zu identifizieren.

Andrews' Pitchfork wird auf einem Kurschart unter Verwendung von drei Schlüsselpunkten gezeichnet: einem Hoch, einem Tief und einem nachfolgenden Hoch- oder Tiefpunkt. Die Kursbewegung innerhalb dieses Kanals oszilliert oft zwischen den oberen und unteren Linien, während die Medianlinie als Umkehrpunkt dient.

Wir werden einen cBot erstellen, der eine aufwärtstrendende Andrews' Pitchfork zeichnet, die typischerweise zwei Tiefs und ein Hoch dazwischen erfordert. Das Gegenteil ist bei einer abwärtstrendenden Andrews' Pitchfork der Fall: Es würden zwei Hochs und ein Tief dazwischen benötigt.

Klicken Sie in cTrader Algo auf die Schaltfläche Neu, um einen cBot zu erstellen, geben Sie einen Namen dafür ein und klicken Sie dann auf Erstellen.

Andrews's Pitchfork benötigt sechs Parameter, um Folgendes zu speichern: Indizes des Hochs und der zwei Tiefs, zwei Mindestkurse und einen Höchstkurs. Deklarieren Sie die sechs Parameter.

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

Erkennen Sie die zwei Mindestkurse und den Höchstkurs, die für die Pitchfork-Punkte benötigt werden.

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

cTrader Algo ermöglicht es Ihnen, die Zeitposition durch Methoden zu definieren, die entweder die absolute Zeit oder den relativen Balkenindex bereitstellen. Die Methode, die verwendet wird, um die Pitchfork auf dem Chart zu zeichnen, führt die relevanten Überschreibungen ein. In diesem Fall haben wir den relativen Balkenindex gewählt.

Schreiben Sie den Code, um die Indizes der Höchst- und Tiefstkurse zu erkennen.

 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;
}

Zeichnen Sie die Pitchfork auf dem Chart.

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

Sie können den vollständigen Code unten kopieren:

 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
        }
    }
}

Um den cBot zu erstellen, verwenden Sie die Tastenkombination Ctrl+B oder klicken Sie auf Erstellen.

Fügen Sie eine lokale Instanz des cBots hinzu: Klicken Sie auf Instanz hinzufügen, wählen Sie die Option Lokal und klicken Sie dann auf Instanz hinzufügen.

Klicken Sie auf die Instanz und navigieren Sie zur Registerkarte Backtesting. Wählen Sie einen Zeitraum für das Backtesting, aktivieren Sie die Option Visueller Modus und klicken Sie dann auf das Wiedergabesymbol.

Sie sollten die Andrews' Pitchfork auf dem Chart gezeichnet sehen.

Andrews' Pitchfork aktualisieren

Kehren Sie zur Algo-App zurück und codieren Sie den cBot so, dass die Pitchfork aktualisiert wird, wenn sich der Chart ändert.

Erstellen Sie eine neue Methode zum Zeichnen der Pitchfork und verschieben Sie die ursprüngliche Logik in diese Methode.

 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);
}

Rufen Sie die neue Methode in der Methode OnBar() auf.

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

Da nur Aufwärtstrend-Setups benötigt werden, schreiben Sie die bedingte Logik, die überprüft, dass Minima und Maxima in der richtigen Reihenfolge sind.

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

Sie können den vollständigen Code unten kopieren:

 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
        }
    }
}

Erstellen Sie den cBot erneut und führen Sie einen Backtest durch.

Erhöhen Sie die Geschwindigkeit des visuellen Modus und klicken Sie auf das Play-Symbol.

Dieses Mal sollten Sie sehen, wie die Pitchfork ständig neu gezeichnet wird, während sich der Chart ändert.

Zusammenfassung

Dieser Artikel hat erklärt, wie man Andrews' Pitchfork auf einem Symbol-Chart zeichnet und die Pitchfork so codiert, dass sie sich selbst aktualisiert, wenn sich der Chart ändert.