Pemakluman harga
Contoh
Objek API pemakluman harga mengembangkan fungsi pengundian harga dan boleh digunakan untuk melakukan perkara berikut:
- Mencipta sistem pemberitahuan dagangan dan aplikasi
- Mengkonfigurasi dagangan bersyarat dalam algoritma
- Memantau sentimen pasaran
- Meningkatkan strategi pengurusan risiko.
Cipta pemakluman
Kod ini menunjukkan kepada anda cara untuk mencipta dan mencetuskan pemakluman:
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}");
}
}
}
|
Laksanakan dagangan menggunakan pemakluman
Anda boleh mengekod algoritma untuk melaksanakan dagangan apabila pemakluman harga dicetuskan.
| 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}");
}
|
Urus dagangan secara dinamik
Anda boleh mengekod algoritma untuk mengubah suai tahap henti rugi dan ambilan untung bagi posisi terbuka secara dinamik apabila pemakluman dicetuskan. Dengan cara ini, tahap henti rugi dan ambilan untung dipindahkan atau dilaraskan apabila harga simbol menghampiri tahap utama, yang membolehkan dagangan berjalan lebih jauh mengikut keperluan.
| 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);
}
}
|
Cipta pengurus pemakluman harga
Plugin ini menambah alat untuk menguruskan pemakluman harga pada Panel Simbol Aktif:
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);
}
}
}
|