Стаканы

29 views
Skip to first unread message

Алексей Неботов

unread,
Sep 3, 2010, 7:01:34 AM9/3/10
to Open Wealth Project
Велс позволяет использовать стаканы (как для реальной торговли, так и
для исторического тестирования)

вот только добыть историю стаканов сложно, Церих предлагает
накапливать её самостоятельно вызывая Glass[gName].Save().
Но! в стакане нет метки времени, поэтому привязать его ко времени для
дальнейшего тестирования можно только условно. И объем накапливаемой
информации будет колоссальным!

Пример использования стаканов (да простит меня Церих :)

using System;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;

namespace WealthLab.Strategies
{
public class MyStrategy :
Zerich.LiveTrading.WealthScript
{
private const int n = 15;
private const string gName = "SBER03";
DataSeries[] B = new DataSeries[n];
DataSeries[] S = new DataSeries[n];

public MyStrategy()
:base()
{

RegisterGlass(gName);
}

protected override void Execute()
{

SetBarColors( Color.Navy, Color.Maroon );
int bar = Bars.Count-1;

if(B[0]==null ||
S[0]==null)
{
for(int
i=1; i<=n; i++)
{

S[i-1] = new DataSeries( "Sell"+i);

B[i-1] = new DataSeries( "Buy"+i);


while(S[i-1].Count<Bars.Count) S[i-1].Add(Glass[gName][i].Volume);

while(B[i-1].Count<Bars.Count) B[i-1].Add((-1)*Glass[gName][-
i].Volume);
}
}
else
{
for(int
i=1; i<=n; i++)
{

while(S[i-1].Count<Bars.Count) S[i-1].Add(Glass[gName][i].Volume);

while(B[i-1].Count<Bars.Count) B[i-1].Add((-1)*Glass[gName][-
i].Volume);
}
}

ChartPane GlassPane =
CreatePane(100,true,true);
PlotSeries(GlassPane,
S[0], Color.Red, LineStyle.Solid, 2);
PlotSeries(GlassPane,
B[0], Color.Green, LineStyle.Solid, 2);

for(int i=2; i<=n; i++)
{

PlotSeries(GlassPane, S[i-1], Color.Red, LineStyle.Dotted, 1);

PlotSeries(GlassPane, B[i-1], Color.Green, LineStyle.Dotted, 1);
}
Glass[gName].Save();
}
}
}

Mikhail Sukhov

unread,
Sep 3, 2010, 7:20:19 AM9/3/10
to Open Wealth Project
> вот только добыть историю стаканов сложно, Церих предлагает
> накапливать её самостоятельно вызывая Glass[gName].Save().

Стаканы самому надо собирать. Это вещь не уровня цериха.

> И объем накапливаемой информации будет колоссальным!

при некой компрессии можно добиться 8 байт на строчку. Для
тестирования на истории нужны, как правило, первые 3 в каждую сторону.
Допустим стакана обновляется раз в секунду. За год получим следующее
(берем среднюю величину в 10 часов работы для простоты подсчета):

8 * 3 * 2 * 60 * 60 * 10 * 365 ~ 601 мб (если верить гуглу) Не так уж
и много.

С учетом повсеместной продажи терабайтных винчестеров, получается, что
можно накопить историю по 1 terabyte / 601 megabytes = 1 744
инструментам. Мало? =)

Терабайтный винт стоит около 100 баксов.

>Пример использования стаканов (да простит меня Церих :)

А можно его дешифровать описанием? Выглядит жутковато. Да и смысл
немного не тот. Мне исторические стаканы нужны, чтобы определять
историческое проскальзование. Тут же, идет расчет неких параметров. А
смысл?

Алексей Неботов

unread,
Sep 3, 2010, 7:37:36 AM9/3/10
to Open Wealth Project
Класс Zerich.LiveTrading.WealthScript это класс, который рожден от
WealthScript и добавил к нему поле Glass

Glass : IDictonary<string,IList<GlassLineType>>
где string - имя бумаги
IList<GlassLineType> - набор строк стакана

каждая строка (GlassLineType) содержит два поля Volume и Price.
оба этих поля, это DataSeries, т.е. могут спокойно отображаться на
графиках и т.п.

Reply all
Reply to author
Forward
0 new messages