туплю на ровном месте
Atom Ответить
12.03.2010


делаю так
protected override bool OnProcess()
{
// если наша стратегия в процессе остановки
if (base.ProcessState == StrategyProcessStates.Stopping)
{
// отменяем стратегию
base.Orders.Where(o => o.State ==
OrderStates.Active).ForEach(base.Trader.GuarantyCancelOrder);
return false;
}
var direction = OrderDirections.Buy;
base.Volume = 1;
var order = base.CreateOrder(direction,
base.Security.GetMarketPrice(direction, MarketPriceTypes.Following),
base.Volume);
// регистрируем на котирование
var strategy = new MarketQuotingStrategy(base.Trader,
order, base.Interval, false, MarketPriceTypes.Following, new Unit());
strategy.Start();
base.ChildStrategies.Add(strategy);

return true;
//end
}
собирается без ошибок, но при нажатии на кнопку "старт" выскакивает

https://docs.google.com/leaf?id=0Bw2gQDvf41vtMzM3ZTAxMTktZjc5NC00NDY2LWI2NTktYTA5YzEyZDQ1MGRm&sort=name&layout=list&num=50



Теги:


Спасибо:



Поздравляем именинников: Станислав Гайворонский

14 Ответов
denis

Фотография
Дата: 12.03.2010
Ответить


СтокШарп 1,6 на примере симплСМА

Автор топика
Спасибо:

denis

Фотография
Дата: 12.03.2010
Ответить


если сделать так
Код

protected override bool OnProcess()
{
// если наша стратегия в процессе остановки
if (base.ProcessState == StrategyProcessStates.Stopping)
{
// отменяем стратегию
base.Orders.Where(o => o.State ==
OrderStates.Active).ForEach(base.Trader.GuarantyCancelOrder);
return false;
}
try
{
var direction = OrderDirections.Buy;
base.Volume = 1;
var order = base.CreateOrder(direction,
base.Security.GetMarketPrice(direction, MarketPriceTypes.Following),
base.Volume);
// регистрируем на котирование
var strategy = new MarketQuotingStrategy(base.Trader,
order, base.Interval, false, MarketPriceTypes.Following, new Unit());
strategy.Start();
base.ChildStrategies.Add(strategy);
}
catch (Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
}
return true;
}

то исключение все равно не перехватывается :(

куда копать?

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 12.03.2010
Ответить


Сорри, отвечу по позднее. С ходу не могу понять.

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 12.03.2010
Ответить


Это говорит о том, что стакан пустой, и нет возможности его
проанализировать. Котировки по ДДДЕ текут?

Насчет перехвата, не совсем понял. Раз MessageBox выводится - значит
перехватывается. Думаю, через событие Strategy.Log

Спасибо:

denis

Фотография
Дата: 13.03.2010
Ответить


квик-джуниор - рулит :)

стакана вообще не было :) судя по описанию MarketQuotingStrategy можно
было сделать не выходя за пределы таблицы "инструменты", а вот с
другими стратегиями такой фокус не пройдет
теперь буду знать что нужен стакан и выводить нужно так

private void StartDde()
{
_isDdeStarted = true;
_trader.StartDde();
_trader.StartDde(mysec + " Котировки" );
_trader.StartDde("папир");
_trader.StartDde("папир_фортс");
}
а просто _trader.StartDde(lkoh); не идет, говорит что "окно LKOH не
найдено"

сейчас переделал OnLog, там такое все разговорчивое оказывается
private void OnLog(Strategy strategy, StrategyErrorStates
errorState, string message)
{
// если стратегия вывела не просто сообщение, то вывести на экран.
//if (errorState != StrategyErrorStates.None)
// this.Sync(() => MessageBox.Show(this, message));
Console.WriteLine("[{0}] {1} => {2}",
strategy.Id, errorState, message);
}

[0] None => Quoting new order Buy with id 788915243 price 1566,99
volume 1 transaction 76
[0] Warning => Order 788915243 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915243 price 1566,99
volume 1 transaction 76
[0] None => Quoting renewed order Buy with id 788915281 price 1566,99
volume 1 transaction 77
[0] Warning => Order 788915281 doesn't have a state
[0] Warning => Order 788915281 doesn't have a state
[0] Warning => Order 788915281 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915281 price 1566,99
volume 1 transaction 77
[0] None => Quoting renewed order Buy with id 788915320 price 1566,99
volume 1 transaction 78
[0] Warning => Order 788915320 doesn't have a state
[0] Warning => Order 788915320 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915320 price 1566,99
volume 1 transaction 78
[0] None => Quoting renewed order Buy with id 788915341 price 1566,99
volume 1 transaction 79
[0] Warning => Order 788915341 doesn't have a state
[0] Warning => Order 788915341 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915341 price 1566,99
volume 1 transaction 79
[0] None => Quoting renewed order Buy with id 788915367 price 1566,99
volume 1 transaction 80
[0] Warning => Order 788915367 doesn't have a state
[0] Warning => Order 788915367 doesn't have a state
[0] Warning => Order 788915367 doesn't have a state
[0] Warning => Order 788915367 doesn't have a state
[0] Warning => Order 788915367 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915367 price 1566,99
volume 1 transaction 80
[0] None => Quoting renewed order Buy with id 788915436 price 1566,99
volume 1 transaction 81
[0] Warning => Order 788915436 doesn't have a state
[0] Warning => Order 788915436 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915436 price 1566,99
volume 1 transaction 81
[0] None => Quoting renewed order Buy with id 788915468 price 1566,99
volume 1 transaction 82
[0] Warning => Order 788915468 doesn't have a state
[0] Warning => Order 788915468 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915468 price 1566,99
volume 1 transaction 82
[0] None => Quoting renewed order Buy with id 788915490 price 1566,99
volume 1 transaction 83
[0] Warning => Order 788915490 doesn't have a state
[0] Warning => Order 788915490 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915490 price 1566,99
volume 1 transaction 83
[0] None => Quoting renewed order Buy with id 788915524 price 1566,99
volume 1 transaction 84
[0] None => Quoting renewing order Buy with id 788915524 price 1566,99
volume 1 transaction 84
[0] None => Quoting renewed order Buy with id 788915538 price 1566,99
volume 1 transaction 85
[0] Warning => Order 788915538 doesn't have a state
[0] Warning => Order 788915538 doesn't have a state
[0] Warning => Order 788915538 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915538 price 1566,99
volume 1 transaction 85
[0] None => Quoting renewed order Buy with id 788915562 price 1566,99
volume 1 transaction 86
[0] Warning => Order 788915562 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915562 price 1566,99
volume 1 transaction 86
[0] None => Quoting renewed order Buy with id 788915581 price 1566,99
volume 1 transaction 87
[0] Warning => Order 788915581 doesn't have a state
[0] Warning => Order 788915581 doesn't have a state
[0] None => Quoting renewing order Buy with id 788915581 price 1566,99
volume 1 transaction 87

Вот что мне не понятно, так это почему происходит выставление и снятие
по одной и той же цене? При неизменном стакане и спреде. Когда
произошло изменение, то выставляется все верно и опять начинает
скакать.

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 13.03.2010
Ответить


Да, надо дописать в доку, что нужен стакан.

Стакан полезнее просто лучший котировок потому что: 1) он быстрее 2)
котирование учитывает другие потоки, чтобы предотвратить борьбу между
ними. без стакана такое не вычислить.

Не встречал такого... Попробуйте перегрузить метод IsNeedReRegister и
посмотреть, почему он так считает. Его текущая логика return
this.Order.Price != GetNewPrice();

Спасибо:

denis

Фотография
Дата: 13.03.2010
Ответить


про борьбу я не подумал :)
теперь про перегрузки: могзи сначало закипели, потом сварились, а
когда стали поджариваться получилось это
class my_MarketQuotingStrategy : MarketQuotingStrategy
{
public my_MarketQuotingStrategy(ITrader trader, Order order,
TimeSpan interval, bool isForts, MarketPriceTypes priceType, Unit
priceDelta)
: base(trader, order, interval, isForts, priceType,
priceDelta)
{
Console.WriteLine("dgdfg");
}
protected override bool IsNeedReRegister()
{
Console.WriteLine("this.Order.Price={0},
GetNewPrice()={1}", this.Order.Price, GetNewPrice());
return this.Order.Price != GetNewPrice();
}
}
поскольку я полный чайник, то даже не могу понять чего я сделал, но на
вывод получил это
[0] None => ChStrategy runned
"SampleSMA.vshost.exe" (управляемый): "C:\WINDOWS\assembly\GAC_MSIL
\System.Runtime.Serialization
\3.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll" загружен,
загрузка символов пропущена. Модуль оптимизирован, включен режим
отладки "Только мой код".
dgdfg
this.Order.Price=1595, GetNewPrice()=1595
this.Order.Price=1595, GetNewPrice()=1595
this.Order.Price=1595, GetNewPrice()=1595
this.Order.Price=1595, GetNewPrice()=1595
this.Order.Price=1595, GetNewPrice()=1595
...скип...
this.Order.Price=1595, GetNewPrice()=1595
this.Order.Price=1595, GetNewPrice()=1595
this.Order.Price=1595, GetNewPrice()=1595
this.Order.Price=1595, GetNewPrice()=1602,32
[0] None => Quoting new order Buy price 1602,31 volume 1
[0] None => Quoting new order Buy with id 789112783 price 1602,31
volume 1 transaction 1
this.Order.Price=1602,31, GetNewPrice()=1595
[0] Warning => Order 789112783 doesn't have a state
this.Order.Price=1602,31, GetNewPrice()=1595
[0] None => Quoting renewing order Buy with id 789112783 price 1602,31
volume 1 transaction 1
[0] None => Quoting renewed order Buy with id 789112810 price 1602,3
volume 1 transaction 2
this.Order.Price=1602,3, GetNewPrice()=1595
[0] None => Quoting renewing order Buy with id 789112810 price 1602,3
volume 1 transaction 2
[0] None => Quoting renewed order Buy with id 789112839 price 1594,99
volume 1 transaction 3
this.Order.Price=1594,99, GetNewPrice()=1595
[0] Warning => Order 789112839 doesn't have a state
this.Order.Price=1594,99, GetNewPrice()=1595
[0] None => Quoting renewing order Buy with id 789112839 price 1594,99
volume 1 transaction 3
[0] None => Quoting renewed order Buy with id 789112856 price 1594,99
volume 1 transaction 4
this.Order.Price=1594,99, GetNewPrice()=1595
[0] None => Quoting renewing order Buy with id 789112856 price 1594,99
volume 1 transaction 4
[0] None => Quoting renewed order Buy with id 789112872 price 1594,99
volume 1 transaction 5
this.Order.Price=1594,99, GetNewPrice()=1595
[0] Warning => Order 789112872 doesn't have a state
this.Order.Price=1594,99, GetNewPrice()=1595
[0] Warning => Order 789112872 doesn't have a state
this.Order.Price=1594,99, GetNewPrice()=1595
[0] None => Quoting renewing order Buy with id 789112872 price 1594,99
volume 1 transaction 5
[0] None => Quoting renewed order Buy with id 789112893 price 1594,99
volume 1 transaction 6
this.Order.Price=1594,99, GetNewPrice()=1595
[0] Warning => Order 789112893 doesn't have a state
this.Order.Price=1594,99, GetNewPrice()=1595
[0] None => Quoting renewing order Buy with id 789112893 price 1594,99
volume 1 transaction 6
[0] None => Quoting renewed order Buy with id 789112913 price 1594,99
volume 1 transaction 7
this.Order.Price=1594,99, GetNewPrice()=1595
[0] Warning => Order 789112913 doesn't have a state
this.Order.Price=1594,99, GetNewPrice()=1595
[0] None => Quoting renewing order Buy with id 789112913 price 1594,99
volume 1 transaction 7
[0] None => Quoting renewed order Buy with id 789112935 price 1594,99
volume 1 transaction 8
this.Order.Price=1594,99, GetNewPrice()=1595
[0] None => Quoting renewing order Buy with id 789112935 price 1594,99
volume 1 transaction 8
[0] None => Quoting renewed order Buy with id 789112948 price 1594,99
volume 1 transaction 9
this.Order.Price=1594,99, GetNewPrice()=1595
[0] Warning => Order 789112948 doesn't have a state
this.Order.Price=1594,99, GetNewPrice()=1595
[0] Warning => Order 789112948 doesn't have a state
this.Order.Price=1594,99, GetNewPrice()=1595

и так далее, много-много раз
т.е. выставление купли происходит на тик хуже лучшего бида, а
поскольку оно не равно, то надо переставить... задать отступ не могу,
там только на чтение
// регистрируем на котирование
var strategy = new
my_MarketQuotingStrategy(base.Trader, order, base.Interval, false,
MarketPriceTypes.Following, new Unit());

strategy.Start();
base.ChildStrategies.Add(strategy);

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 14.03.2010
Ответить


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

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 14.03.2010
Ответить


Плюс, могли бы Вы дополнительно выводить и вермя в лог, чтобы
проследить, сколько времени прошло между теми, или иными строчками.

Спасибо:

denis

Фотография
Дата: 14.03.2010
Ответить


S# 1.6 на лукойле
не знаю что такое Decimals (десятичные), а мин шаг = 0,01 рубля
лог прикреплен к группе, там видно что первая заявка выставляется
верно, но после изменения стакана, выставляется на MinStepSize ниже
лучшей купли
период вызова поставлен 0,3сек

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 14.03.2010
Ответить


Decimals - это точность цены. Под периодом я имел ввиду сам лог.
Каждая запись имеет дату вывода. Например, через DateTime.Now.

Спасибо:

denis

Фотография
Дата: 14.03.2010
Ответить


лог тут

http://stocksharp.googlegroups.com/web/bot-log.txt?gda=I8UhmD4AAAD7ujiFr5Ha_HYNmvj19TvywXObw61_wlnOs-pFneTU11NG6vPM9pifSUoS6asTACPjsKXVs-X7bdXZc5buSfmx

прикреплен к группе

вывод сделан так
private void OnLog(Strategy strategy, StrategyErrorStates
errorState, string message)
{
// если стратегия вывела не просто сообщение, то вывести на экран.
//if (errorState != StrategyErrorStates.None)
// this.Sync(() => MessageBox.Show(this, message));
//else
Console.WriteLine("{3} [{0}] {1} => {2}", strategy.Id,
errorState, message, DateTime.Now.ToString("o"));//.ToString("o")
ToLongTimeString
}
из этого
protected override bool IsNeedReRegister()
{
//Console.WriteLine("{2} this.Order.Price={0},
GetNewPrice()={1}", this.Order.Price, GetNewPrice());
AddLog(Ecng.Trading.Algo.StrategyErrorStates.None,
"this.Order.Price= " + this.Order.Price + " GetNewPrice()= " +
GetNewPrice());
return this.Order.Price != GetNewPrice();
}

Автор топика
Спасибо:

denis

Фотография
Дата: 14.03.2010
Ответить


вот еще логи с MarketPriceTypes.Middle

http://stocksharp.googlegroups.com/web/bot-middle.txt?gda=b4DjV0EAAAD7ujiFr5Ha_HYNmvj19TvyqYLFUoA7S8O2fXDdlj4_8eCRmxtWo_ZylMcdYO3kGVRTCT_pCLcFTwcI3Sro5jAzlXFeCn-cdYleF-vtiGpWAA&gsc=3mZFCwsAAABUkaX7Cd6y5wy29deX8sae

и с MarketPriceTypes.Opposite

http://stocksharp.googlegroups.com/web/bot-opposite.txt?gda=_R4AykMAAAD7ujiFr5Ha_HYNmvj19TvyqYLFUoA7S8O2fXDdlj4_8XxREgZSFh1zkfZTN8MQdB8ytiJ-HdGYYcPi_09pl8N7FWLveOaWjzbYnpnkpmxcWg&gsc=3mZFCwsAAABUkaX7Cd6y5wy29deX8sae


При Middle купля ставится и снимается при неизменном в течении 10-15
сек стакане.
При Opposite купля ставится на тик хуже офера и тоже может прыгать.
когда проходят такие длинные листинги:
2010-03-14T16:45:16.2656250+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7
2010-03-14T16:45:16.5937500+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7
2010-03-14T16:45:16.9843750+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7
2010-03-14T16:45:17.2968750+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7
2010-03-14T16:45:17.7187500+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7
2010-03-14T16:45:18.0625000+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7
2010-03-14T16:45:18.4062500+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7
2010-03-14T16:45:18.7968750+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7
2010-03-14T16:45:19.2187500+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7
2010-03-14T16:45:19.5625000+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7
2010-03-14T16:45:19.8750000+03:00 [0] None => this.Order.Price=
1574,7 GetNewPrice()= 1574,7

то в это время заявка не выставлена

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 14.03.2010
Ответить


Послал на мыло.

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy