Ana içeriğe geç

Fiyat uyarıları

Örnek

Fiyat uyarıları API nesneleri, fiyat sorgulama işlevlerini genişletir ve aşağıdakileri yapmak için kullanılabilir:

  • İşlem bildirim sistemleri ve uygulamaları oluşturma
  • Algoritmalarda koşullu işlemler yapılandırma
  • Piyasa duyarlılıklarını izleme
  • Risk yönetimi stratejilerini iyileştirme.

Uyarılar oluştur

Bu kod, uyarıları nasıl oluşturacağınızı ve tetikleyeceğinizi gösterir:

 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
using System;
using cAlgo.API;
using cAlgo.API.Internals;

namespace cAlgo.Plugins
{
    [Plugin(AccessRights = AccessRights.None)]
    public class SimplePriceAlert : Plugin
    {
        private PriceAlert _upperAlert;
        private PriceAlert _lowerAlert;

        protected override void OnStart()
        {
            PriceAlerts.Added += OnAlertAdded;
            PriceAlerts.Updated += OnAlertUpdated;
            PriceAlerts.Removed += OnAlertRemoved;
            PriceAlerts.Triggered += OnAlertTriggered;

            var symbol = Symbols.GetSymbol("EURUSD");
            var pip = symbol.PipSize;

            _upperAlert = PriceAlerts.Add(
                symbol,
                symbol.Ask + 2 * pip,
                PriceAlertQuoteType.Ask,
                PriceAlertCondition.HigherOrEqual
            );

            _lowerAlert = PriceAlerts.Add(
                symbol,
                symbol.Bid - 2 * pip,
                PriceAlertQuoteType.Bid,
                PriceAlertCondition.LowerOrEqual
            );

            Print($"Added upper alert at Ask >= {symbol.Ask + 2 * pip}");
            Print($"Added lower alert at Bid <= {symbol.Bid - 2 * pip}");
        }

        private void OnAlertAdded(PriceAlertAddedEventArgs args)
        {
            Print($"Alert added. Id: {args.PriceAlert.Id}, Price: {args.PriceAlert.Price}");
        }
        private void OnAlertUpdated(PriceAlertUpdatedEventArgs args)
        {
            Print($"Alert updated. Id: {args.PriceAlert.Id}");
        }
        private void OnAlertRemoved(PriceAlertRemovedEventArgs args)
        {
            Print($"Alert removed. Id: {args.PriceAlert.Id}");
        }
        private void OnAlertTriggered(PriceAlertTriggeredEventArgs args)
        {
            Print($"Alert triggered! Id: {args.PriceAlert.Id}, Symbol: {args.PriceAlert.Symbol.Name}, Target: {args.PriceAlert.Price}");
        }
    }
}

Uyarıları kullanarak işlem gerçekleştir

Bir fiyat uyarısı tetiklendiğinde işlem gerçekleştirmek için bir algoritma kodlayabilirsiniz.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnStart()
{
    PriceAlerts.Triggered += PriceAlerts_Triggered;
}

private void PriceAlerts_Triggered(PriceAlertTriggeredEventArgs obj)
{
    var symbol = obj.PriceAlert.Symbol;
    ExecuteMarketOrder(TradeType.Buy, symbol.Name, 10000);  
    Print($"Price alert triggered, trade executed for {symbol.Name}");
}

İşlemleri dinamik olarak yönet

Bir uyarı tetiklendiğinde açık pozisyonlar için zarar durdur ve kâr al seviyelerini dinamik olarak değiştirmek üzere bir algoritma kodlayabilirsiniz. Bu sayede, bir sembol fiyatı önemli bir seviyeye yaklaştığında zarar durdur ve kâr al seviyeleri taşınır veya ayarlanır, bu da işlemlerin gerektiği kadar devam etmesini sağlar.

1
2
3
4
5
6
7
8
private void PriceAlerts_Triggered(PriceAlertTriggeredEventArgs obj)
{
    var positions = Positions.FindAll("My position", obj.PriceAlert.Symbol.Name, TradeType.Buy);
    foreach (var position in positions)
    {
        position.ModifyStopLossPrice(obj.PriceAlert.Price - 50 * obj.PriceAlert.Symbol.PipSize);
    }
}

Fiyat uyarıları yöneticisi oluştur

Bu eklenti, Aktif Sembol Paneline fiyat uyarılarını yönetmek için bir araç ekler:

  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
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Plugins
{
    [Plugin(AccessRights = AccessRights.None)]
    public class PriceAlertsTest : Plugin
    {
        private PriceAlert _priceAlert;

        protected override void OnStart()
        {
            var panel = new StackPanel { Orientation = Orientation.Vertical };

            var addButton = new Button { Text = "Add Alert" };

            addButton.Click += addButton_Click;

            panel.AddChild(addButton);

            var removeButton = new Button { Text = "Remove Alert" };

            removeButton.Click += removeButton_Click; ;

            panel.AddChild(removeButton);

            var updateButton = new Button { Text = "Update Alert" };

            updateButton.Click += updateButton_Click;

            panel.AddChild(updateButton);

            var showSymbolAlertsCountButton = new Button { Text = "Show # Of Active Chart Symbol Alerts" };

            showSymbolAlertsCountButton.Click += showSymbolAlertsCountButton_Click;

            panel.AddChild(showSymbolAlertsCountButton);

            var findAddedAlertButton = new Button { Text = "Find Added Alert" };

            findAddedAlertButton.Click += findAddedAlertButton_Click;

            panel.AddChild(findAddedAlertButton);

            var block = Asp.SymbolTab.AddBlock("Price Alerts Test");

            block.Child = panel;

            PriceAlerts.Added += PriceAlerts_Added;
            PriceAlerts.Removed += PriceAlerts_Removed;
            PriceAlerts.Updated += PriceAlerts_Updated;
            PriceAlerts.Triggered += PriceAlerts_Triggered;

            Print($"Price Alerts #: {PriceAlerts.Count}");
        }

        private void findAddedAlertButton_Click(ButtonClickEventArgs obj)
        {
            Print($"Added Alert Id: {PriceAlerts.Find(_priceAlert.Id).Id}");
        }

        private void showSymbolAlertsCountButton_Click(ButtonClickEventArgs obj)
        {
            if (ChartManager.ActiveFrame is not ChartFrame {Chart: var chart})
                return;

            var symbol = chart.Symbol;

            Print($"Active chart symbol '{symbol.Name}' price alerts count: {PriceAlerts.FindAll(symbol.Name).Length}");
        }

        private void PriceAlerts_Triggered(PriceAlertTriggeredEventArgs obj)
        {
            Print($"Price alert triggered, Id: {obj.PriceAlert.Id}");
        }

        private void PriceAlerts_Updated(PriceAlertUpdatedEventArgs obj)
        {
            Print($"Price alert updated, Id: {obj.PriceAlert.Id}");
        }

        private void PriceAlerts_Removed(PriceAlertRemovedEventArgs obj)
        {
            Print($"Price alert removed, Id: {obj.PriceAlert.Id}");
        }

        private void PriceAlerts_Added(PriceAlertAddedEventArgs obj)
        {
            Print($"Price alert added, Id: {obj.PriceAlert.Id}");
        }

        private void removeButton_Click(ButtonClickEventArgs obj)
        {
            PriceAlerts.Remove(_priceAlert);
        }

        private void updateButton_Click(ButtonClickEventArgs obj)
        {
            if (ChartManager.ActiveFrame is not ChartFrame {Chart: var chart})
                return;

            var symbol = chart.Symbol;

            _priceAlert.Update(symbol, symbol.Ask - (100 * symbol.PipSize), PriceAlertQuoteType.Ask, PriceAlertCondition.LowerOrEqual, true, "Updated message");   
        }

        private void addButton_Click(ButtonClickEventArgs obj)
        {
            if (ChartManager.ActiveFrame is not ChartFrame {Chart: var chart})
                return;

            var symbol = chart.Symbol;

            _priceAlert = PriceAlerts.Add(symbol, symbol.Bid + (100 * symbol.PipSize), PriceAlertQuoteType.Bid, PriceAlertCondition.HigherOrEqual);
        }
    }
}