Alexander
|
Дата: 17.01.2012
Как связаны гидра с тестированием? Можно подробнее про последовательность действий и про наблюдаемые тормоза гидры
|
|
|
|
FiNick
|
Дата: 19.01.2012
Да, вопрос именно по тестированию, я думал оно связанно с гидрой)
1) Тестирую медленную стратегию, которая работает с 15мин свечками, о приходе каждой 15 мин свечки сообщение в лог. Захожу в позу и 15 мин свечки начинают приходить медленно, выхожу из позы опять быстро. Я не вижу, чтобы какая-то часть моего кода так тормозила, даже если просто отключить стратегию и по кнопке заходить/выходить тормоза есть.
2) Тестирую оч быструю стратегию, которая на каждый тик должна реагировать, стратегия реализована как событийная. В методе OnProcess() выдаю лог с ценой/временем последней сделки (this.Security.LastTrade). Ожидал увидеть все тики, с вместо этого лог выдает трейды с разницей 1-2екунды. Это так должно быть? Как тестировать быстрые стратегии?
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 19.01.2012
|
|
|
|
FiNick  Да, вопрос именно по тестированию, я думал оно связанно с гидрой)
1) Тестирую медленную стратегию, которая работает с 15мин свечками, о приходе каждой 15 мин свечки сообщение в лог. Захожу в позу и 15 мин свечки начинают приходить медленно, выхожу из позы опять быстро. Я не вижу, чтобы какая-то часть моего кода так тормозила, даже если просто отключить стратегию и по кнопке заходить/выходить тормоза есть.
2) Тестирую оч быструю стратегию, которая на каждый тик должна реагировать, стратегия реализована как событийная. В методе OnProcess() выдаю лог с ценой/временем последней сделки (this.Security.LastTrade). Ожидал увидеть все тики, с вместо этого лог выдает трейды с разницей 1-2екунды. Это так должно быть? Как тестировать быстрые стратегии? 1. Тестирование замедляется при матчинге заявок. Что вполне нормально, так как загрузка данных быстрее, чем загрузка данных + исполнение заявок. 2. TF модель лучше вообще забыть. Она реагирует не на каждый тик, а со своим дифференциалом.
|
|
|
|
FiNick
|
Дата: 19.01.2012
Mikhail Sukhov  2. TF модель лучше вообще забыть. Она реагирует не на каждый тик, а со своим дифференциалом.
Я и не использую TF модель, у меня событийная, стоит правило SecurityNewTrades. Так всетаки, EmulationTrader выдает все тики точно также, как это делал бы PlazaTrader или QuikTrader? Или из-за вопроса быстродействия большая часть тиков пропускается?
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 19.01.2012
FiNick  Я и не использую TF модель, у меня событийная, стоит правило SecurityNewTrades.
OnProcess - это что?
|
|
|
|
FiNick
|
Дата: 19.01.2012
Mikhail Sukhov  OnProcess - это что? OnProcess это обработчик события прихода новых трейдов. У меня в стратегии включено правило: Код
this
.When(this.Security.SecurityNewTrades())
.Do(OnProcess);
Т.е. OnProcess должно вызываться на каждый тик. Внутри OnProcess пишу в лог цену и время последней сделки. Время между сделками получается достаточно большим, значит либо OnProcess не успевает обрабатывать все тики, либо EmulationTrader присылает не все тики.
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 19.01.2012
FiNick  Т.е. OnProcess должно вызываться на каждый тик. Внутри OnProcess пишу в лог цену и время последней сделки. Время между сделками получается достаточно большим, значит либо OnProcess не успевает обрабатывать все тики, либо EmulationTrader присылает не все тики.
EmulationTrader.NewTrades что пишет?
|
|
|
|
FiNick
|
Дата: 19.01.2012
Mikhail Sukhov  EmulationTrader.NewTrades что пишет? Короче я понял, NewTrades при срабатывании выдает обьект типа IEnumerable<MyTrade>, т.е. пачку трейдов, если раскрыть эту пачку трейдов то какраз получатся все тики(сравнивал с тем что гидра из квика накачала). По какому принципу тики упакованы в пачки не понятно, не по времени, и не по цене, как я вижу. Далее, OnProcess похоже вызывается ровно столько же раз сколько и NewTrades, причем если взять strategy.Security.LastTrade то мы какраз получим последний трейд последней пачки. Т.е. правило SecurityNewTrades срабатывает не на каждый тик, а по приходу последней пачки тиков, и вот интересно, оно внутрь пачки заглядывает, чтобы понять менялась ли цена, или только на последний трейд пачки смотрит.
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 20.01.2012
S# какой версии?
|
|
|
|
FiNick
|
Дата: 20.01.2012
Mikhail Sukhov  S# какой версии? StockSharp.Algo(и другие) версия 4.0.14.0 Данные качал гидрой с квика.
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 21.01.2012
FiNick  Mikhail Sukhov  S# какой версии? StockSharp.Algo(и другие) версия 4.0.14.0 Данные качал гидрой с квика. Не подтверждается. Можете это зарепродюсить на примере SampleHistoryTesting?
|
|
|
|
FiNick
|
Дата: 22.01.2012
Хорошо, как время будет, сделаю.
|
Автор топика
|
|
|
hobo
|
Дата: 17.02.2012
|
|
|
|
Mikhail Sukhov  Не подтверждается. Можете это зарепродюсить на примере SampleHistoryTesting? Наблюдаю тот же эффект: в стратегии сделки из EmulationTrader приходят частями. На картинке: что пришло в EmulationTrader, затем в стратегии видна лишь последняя сделка из пачки  На примере SampleHistoryTesting "зарепродюсил" на 4.0.19 (на 4.0.1 и релизном 4.0.14 тоже самое) Код
Стратегию изменил так:
namespace SampleHistoryTesting
{
using System;
using StockSharp.Algo;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Indicators.Trend;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
class SmaStrategy : Strategy
{
private readonly CandleManager _candleManager;
private bool _isShortLessThenLong;
private DateTime _nextTime;
public SmaStrategy(CandleManager candleManager, SimpleMovingAverage longSma, SimpleMovingAverage shortSma, TimeSpan timeFrame)
{
_candleManager = candleManager;
LongSma = longSma;
ShortSma = shortSma;
}
public SimpleMovingAverage LongSma { get; private set; }
public SimpleMovingAverage ShortSma { get; private set; }
protected override void OnStarting()
{
this
.When(this.Security.SecurityNewTrades())
.Do(OnProcess);
base.OnStarting();
}
void OnProcess()
{
var l = Security.LastTrade;
}
}
}
В MainWindow
1) Изменил security
var security = new Security
{
Id = "RIH2@RTS", // по идентификатору инструмента будет искаться папка с историческими маркет данными
Code = "RIH2",
Name = "RTS-3.12",
MinStepSize = 5,
MinStepPrice = 2,
Exchange = Exchange.Test,
};
2) Изменил время тестирования на 1 февраля
// в реальности период может быть другим, и это зависит от объема данных,
// хранящихся по пути HistoryPath,
var startTime = new DateTime(2012, 2, 1);
var stopTime = new DateTime(2012, 2, 2);
3) Подписался на новые сделки вот в этом месте
_trader.StateChanged += () =>
{
};
_trader.NewTrades += (tr) =>
{
};
// устанавливаем в визуальный элемент ProgressBar максимальное количество итераций)
TestingProcess.Maximum = (stopTime - startTime).Ticks;
|
|
|
|
Mikhail Sukhov
|
Дата: 17.02.2012
hobo  Mikhail Sukhov  Не подтверждается. Можете это зарепродюсить на примере SampleHistoryTesting? Наблюдаю тот же эффект: в стратегии сделки из EmulationTrader приходят частями. На картинке: что пришло в EmulationTrader, затем в стратегии видна лишь последняя сделка из пачки Перед анализом еще раз уточню - в пачках сделки от разного времени?
|
|
|
|
hobo
|
Дата: 18.02.2012
Хм, время одинаковое. Вот первые 4 пачки. Код
497896647 10:00:00.070
497896648 10:00:00.070
497896649 10:00:00.070
497896650 10:00:00.070
497896651 10:00:00.070
497896652 10:00:00.070
497896660 10:00:01.513
497896661 10:00:01.513
497896662 10:00:01.513
497896663 10:00:01.513
497896664 10:00:01.513
497896665 10:00:01.513
497896684 10:00:01.607
497896685 10:00:01.643
Раз вы про время спросили, видимо все работает правильно
|
|
|
|
Mikhail Sukhov
|
Дата: 18.02.2012
hobo  Раз вы про время спросили, видимо все работает правильно Видимо. И видимо, раз предыдущей рапортер так же не развивал тему, то и у него все заработало правильно.
|
|
|