Struggling with coding on cAlgo
Struggling with coding on cAlgo
22 Oct 2015, 17:11
Hi,
Firstly I am not a great coder and it is not for the lack of trying. I was a able to get things done on the Protrader 2 platform which uses C#, however I must admit - i just got it to work i.e.my skills are not great
Here is what I am trying to do
1) Obtain the 'Top of the book' bid and ask volumes for a currency pair, do some simple caluclations and display it as a histogram. It stores the values historically.
No matter what I do I cannot get the data onto the histogram. I simply do not know how.
Primary problems are - 1) how to get level 2 top of book volumes into a variable
- 2) how can i get some calculated data into the histogram. Simple calculations - additions and divisions.
So far I have looked through the following examples -
/forum/indicator-support/1005#
/forum/indicator-support/5358
/algos/indicators/show/915
/algos/indicators/show/723
/forum/calgo-reference-samples/253
If someone can just do this, I would be eternally great full and I will be able to figure out things from there on..
Below is what I have done so far. I must admit it is beyond laughable, so please be considerate. And the code has been edited numerous times ( numerous attempts) and the below one is the last attempt which I just pasted here so that someone who has a look can have an idea of what I am after ( apart from having a good laugh)
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; using cAlgo.Indicators; namespace cAlgo { [Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class test : Indicator { [Output("AskVol-BidVol Hist", Color = Colors.Blue, PlotType = PlotType.Histogram, Thickness = 2)] public IndicatorDataSeries AminusBhist { get; set; } [Output("AskVol-BidVol Line", Color = Colors.Yellow, Thickness = 1)] public IndicatorDataSeries Result { get; set; } public MarketDepth _marketDepth; public double bid0avg = 0; public double ask0avg = 0; public double bid0avgline = 0; public double ask0avgline = 0; public double delta0avg = 0; public double tobBcount = 0; public double bid0 = 0; public double ask0 = 0; public double bid0total = 0; public double ask0total = 0; public double avgcount = 0; public double tobA = 0; public double tobB = 0; public double curtobA = 0; public double prevtobA = 0; public double curtobB = 0; public double prevtobB = 0; protected override void Initialize() { // Get Market Depth _marketDepth = MarketData.GetMarketDepth(Symbol); // subscribe to event Updated _marketDepth.Updated += MarketDepthUpdated; } void MarketDepthUpdated() { foreach (var entry in _marketDepth.AskEntries) { tobA = _marketDepth.AskEntries[0].Volume; //trying to get the top of the book data into the variable } foreach (var entry in _marketDepth.AskEntries) { tobB = _marketDepth.BidEntries[0].Volume; } curtobB = tobB; curtobA = tobA; if ((curtobB - prevtobB != 0) || (curtobA - prevtobA != 0)) { avgcount = avgcount + 1; bid0 = curtobB; ask0 = curtobA; bid0total += bid0; ask0total += ask0; bid0avg = bid0total / avgcount; ask0avg = ask0total / avgcount; ask0avgline += ask0avg; bid0avgline += bid0avg; // tyring to get the value of 'delta0avg' on to the histogram delta0avg = ask0avgline - bid0avgline; } prevtobB = curtobB; prevtobA = curtobA; } public override void Calculate(int index) { // Calculate value at specified index // Result[index] = ... } } }
Replies
strugglingwithc
22 Oct 2015, 18:20
Appreciate you trying to help me out. I did try them both out during my numerous attempts. There is more to it i.e. adding data to the 'indicatordataseries' type is different than a 'double' character type which is what the result of 'ask0avgline-bidoavgline' will give. I have not figured this out. In most of the examples - an 'index' is used and I do not understand how.
@strugglingwithc
Spotware
22 Oct 2015, 20:32
Dear Trader,
Please have a look at our Indicators Guides.
For your information the index parameter, represents each bar, ranging from 0 up to the current (last) bar.
@Spotware
LSR2412
23 Oct 2015, 09:07
it works!!! :)
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; using cAlgo.Indicators; namespace cAlgo { [Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class test : Indicator { [Output("AskVol-BidVol Hist", Color = Colors.Blue, PlotType = PlotType.Histogram, Thickness = 2)] public IndicatorDataSeries AminusBhist { get; set; } [Output("AskVol-BidVol Line", Color = Colors.Yellow, Thickness = 1)] public IndicatorDataSeries Result { get; set; } public MarketDepth _marketDepth; public double bid0avg = 0; public double ask0avg = 0; public double bid0avgline = 0; public double ask0avgline = 0; public double delta0avg = 0; public double tobBcount = 0; public double bid0 = 0; public double ask0 = 0; public double bid0total = 0; public double ask0total = 0; public double avgcount = 0; public double tobA = 0; public double tobB = 0; public double curtobA = 0; public double prevtobA = 0; public double curtobB = 0; public double prevtobB = 0; protected override void Initialize() { // Get Market Depth _marketDepth = MarketData.GetMarketDepth(Symbol); // subscribe to event Updated _marketDepth.Updated += MarketDepthUpdated; } void MarketDepthUpdated() { foreach (var entry in _marketDepth.AskEntries) { tobA = _marketDepth.AskEntries[0].Volume; //trying to get the top of the book data into the variable } foreach (var entry in _marketDepth.AskEntries) { tobB = _marketDepth.BidEntries[0].Volume; } curtobB = tobB; curtobA = tobA; if ((curtobB - prevtobB != 0) || (curtobA - prevtobA != 0)) { avgcount = avgcount + 1; bid0 = curtobB; ask0 = curtobA; bid0total += bid0; ask0total += ask0; bid0avg = bid0total / avgcount; ask0avg = ask0total / avgcount; ask0avgline += ask0avg; bid0avgline += bid0avg; // tyring to get the value of 'delta0avg' on to the histogram delta0avg = ask0avgline - bid0avgline; } prevtobB = curtobB; prevtobA = curtobA; } public override void Calculate(int index) { AminusBhist[index] = delta0avg; } } }
@LSR2412
LSR2412
23 Oct 2015, 09:31
this is cTrader example for market depth
hope this helps
using cAlgo.API; namespace cAlgo.Indicators { [Indicator()] public class Level2 : Indicator { [Output("BidEntries", Color = Colors.Red, PlotType = PlotType.Histogram, Thickness = 5)] public IndicatorDataSeries BidResult { get; set; } [Output("AskEntries", Color = Colors.Blue, PlotType = PlotType.Histogram, Thickness = 5)] public IndicatorDataSeries AskResult { get; set; } MarketDepth GBPUSD; private int _askNo; private int _bidNo; protected override void Initialize() { GBPUSD = MarketData.GetMarketDepth(Symbol); GBPUSD.Updated += OnGbpUsdUpdated; } void OnGbpUsdUpdated() { _askNo = 0; _bidNo = 0; var index = MarketSeries.Close.Count - 1; for (var i = 0; i < GBPUSD.AskEntries.Count; i++) AskResult[index - i] = double.NaN; foreach (var entry in GBPUSD.AskEntries) { AskResult[index - _askNo] = (-1) * entry.Volume; _askNo++; } for (var i = 0; i < GBPUSD.BidEntries.Count; i++) BidResult[index - i] = double.NaN; foreach (var entry in GBPUSD.BidEntries) { BidResult[index - _bidNo] = entry.Volume; _bidNo++; } } public override void Calculate(int index) { } } }
@LSR2412
LSR2412
22 Oct 2015, 17:43
I am not expert..but histogram is plotted by AminusBhist data...which is not existing
AminusBhist must be equal to something..in order to be plotted
@LSR2412