Construct from tick average and variance with Concurrent Collection
Construct from tick average and variance with Concurrent Collection
27 Jun 2015, 13:45
Hello folks, here for you i have started a Robot code to get extended list from tick server, thus we get back average and standard deviation from 10 collections of Ticks.
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
using System.Collections.Concurrent;
namespace cAlgo
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class LamouetteduSpa : Robot
{
public LamouetteduSpa c;
public ConcurrentQueue<double>[] CollectionTick { get; set; }
public int[] c_nbtick { get; set; }
protected override void OnStart()
{
c = new LamouetteduSpa();
c.CollectionTick = new ConcurrentQueue<double>[10];
for (int u = 0; u < 10; u++)
{
c.CollectionTick[u] = new ConcurrentQueue<double>();
}
c.c_nbtick = new int[10];
c.VarOnTick = new double[10];
for (int i = 0; i < 10; i++)
{
c.c_nbtick[i] = new int();
c.c_nbtick[i] = 100 + i * i *125; /*10*10*125 =12 500 ticks */
c.VarOnTick[i] = new double();
}
}
public double sum2 { get; set; }
public double _av { get; set; }
double getVariance(ConcurrentQueue<double> coll)
{
c.sum2 = new double();
c.sum2 = 0;
c._av = new double();
c._av = 0;
foreach (double item in coll)
{
c.sum2 += item * item;
c._av += item;
}
if (coll.Count != 0)
{
c._av = c._av / coll.Count;
}
c.sum2 = Math.Sqrt(Math.Abs(((c.sum2) - (coll.Count) * (c._av) * (c._av)) / (coll.Count - 1)));
return c.sum2;
}
void CreationCollection(double Symbol_Bid)
{
double firstoutTick;
for (int y = 0; y < 10; y++)
{
switch (y)
{
case 0:
if (c.CollectionTick[y].Count < c.c_nbtick[y])
{
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
else
{
c.CollectionTick[y].TryDequeue(out firstoutTick);
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
break;
case 1:
if (c.CollectionTick[y].Count < c.c_nbtick[y])
{
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
else
{
c.CollectionTick[y].TryDequeue(out firstoutTick);
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
break;
case 2:
if (c.CollectionTick[y].Count < c.c_nbtick[y])
{
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
else
{
c.CollectionTick[y].TryDequeue(out firstoutTick);
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
break;
case 3:
if (c.CollectionTick[y].Count < c.c_nbtick[y])
{
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
else
{
c.CollectionTick[y].TryDequeue(out firstoutTick);
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
break;
case 4:
if (c.CollectionTick[y].Count < c.c_nbtick[y])
{
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
else
{
c.CollectionTick[y].TryDequeue(out firstoutTick);
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
break;
case 5:
if (c.CollectionTick[y].Count < c.c_nbtick[y])
{
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
else
{
c.CollectionTick[y].TryDequeue(out firstoutTick);
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
break;
case 6:
if (c.CollectionTick[y].Count < c.c_nbtick[y])
{
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
else
{
c.CollectionTick[y].TryDequeue(out firstoutTick);
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
break;
case 7:
if (c.CollectionTick[y].Count < c.c_nbtick[y])
{
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
else
{
c.CollectionTick[y].TryDequeue(out firstoutTick);
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
break;
case 8:
if (c.CollectionTick[y].Count < c.c_nbtick[y])
{
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
else
{
c.CollectionTick[y].TryDequeue(out firstoutTick);
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
break;
case 9:
if (c.CollectionTick[y].Count < c.c_nbtick[y])
{
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
else
{
c.CollectionTick[y].TryDequeue(out firstoutTick);
c.CollectionTick[y].Enqueue(Symbol.Bid);
}
break;
default:
break;
}
}
}
public double[] VarOnTick { get; set; }
protected override void OnTick()
{
CreationCollection(Symbol.Bid+1/2*Symbol.Spread);
if (c.CollectionTick[9].Count == c.c_nbtick[9])
{
for (int i =0; i < 10 ; i ++)
{
c.VarOnTick[i] = getVariance(c.CollectionTick[i]);
Print(" c.VarOnTick [i] " + i+" "+ c.VarOnTick[i]);
}
}
}
}
}