Заявка, приведенная ниже регистрируется но не отрабатывает при наступлении условий. Вопрос: А работает ли TakeProfitStopLimit под RealTimeEmulationTrader <QuikTrader> ?
TargetOrder22 = new Order // CreateTakeProfitAndStopLimit() //Sell back
{
Type = OrderTypes.Conditional,
Volume = 1,
Price = _contactRIZ1.MinPrice,
Security = _contactRIZ1,
Direction = OrderDirections.Sell,
Portfolio = MainWindow.Instance._portfolio,
StopCondition = new QuikStopCondition
{
Type = QuikStopConditionTypes.TakeProfitStopLimit,
ExpiryDate = DateTime.MaxValue,
StopPrice = _contactRIZ1.ShrinkPrice(_contactRIZ1.BestAsk.Price + (decimal)dblTragetProfit),
StopLimitPrice = _contactRIZ1.ShrinkPrice(_contactRIZ1.BestAsk.Price- (decimaldblTragetProfit),
Offset = new Unit((decimal)dblTragetProfit), // Величина отступа от максимума (минимума) цены последней сделки.
Spread = new Unit(0), // Величина защитного спрэда
//ActiveTime = new Range<DateTime>,
ActiveTime = new Range<DateTime>(DateTime.Today - TimeSpan.FromDays(5), DateTime.Today + TimeSpan.FromDays(5)),
},
};
Kommentare (33)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
нет, стоп заявки не работают
Стоп заявки в эмуляторе не работают. Работают только защитные стратегии S#.
Вот жаль, со стратегиями одна проблема, что надо писать собственный кусок StrategyRule, если событие, запускающее стратегию не входить в список стандартных. Например,если стратегия подключается к событийной модели с нестандартным событием (хочу купить акциию к дню рождения моей двоюродной тети:). Вот если бы было что-то типа: .When(день рождения моей двоюродной тети.IsTrue()).Do(() =>) .. именно пооизвольный делегат внутри Do() и простой предикат внутри When(). Может это можно легко сделать, а я чего-то не догоняю?
Так напишите свой StrategyRule и используйте как хотите. В чём пожелание \ сложность? суметь понять "день рождение двоюродной тети"? :))
Спасибо. Как я понимаю самое простое правило должно выглядеть так: public static class MyAntStrategyRule:StrategyRule { public StrategyRule MyAntStrategyRule( DateTime MyAntBirthday) { if (MyAntBirthday == DateTime.Today) this.Activate(); return this;} } Если можно еще проще - подскажите.
Добрый день! При попытке добавить защитные стратегии (как в документации) в SampleHistoryTestyng выводятся следующие ошибки об отсутствии расширений метода where, addrange, select и count. В обще каким образом можно добавить стоплосс стратегию к тесту? Или эти стратегии действуют только на релтайм тестах? Заранее благодарю
Разобрался! Но теперь почему-то не работает, хотя стратегия стартует но дальше от нее никаких действий нет. Может я что-нибудь не так делаю, хотя сделал все как описано в документации.
Т.е. она стартует, есть об этом вывод, но в OnProcess не заходит, фактически ни разу не запускается? Тогда не на ту папку с данными дали путь.
Сама стратегия запускается и отрабатывает, не отрабатывает StopLoss стратегия, которая является дочерней к основной. Причем по логу видно что эта стратегия запустилась но за весь период теста нет ни одного обращения к методу OnNewMyTrades(IEnumerable<MyTrade> trades) При это видно что имеются убыточные сделки.
Что за метод и при чём он здесь? Приведите кусок кода где вы пытаетесь определить работоспособность вложенной защитной стратегии, где вы добавляете стратегию и покажите для какого MyTrade и protectiveDelta её создаёте.
Это просто пример который идет с библиотекой
по защитной стратегии код как описано здесь http://stocksharp.com/doc/html/63952fce-6e43-4427-985a-1654e8d9cfc1.htm
if (_isShortLessThenLong != isShortLessThenLong) { // если короткая меньше чем длинная, то продажа, иначе, покупка. var direction = isShortLessThenLong ? OrderDirections.Sell : OrderDirections.Buy;
вот лог:
из него что стратегия запускается, но когда начинается резкое падение курса стратегия не срабатывает. отсюда вопрос на истории она вообще работает или я все таки чего-то не доделал, может там еще что дописать надо, например написать правила или еще что?
00:00:00.000 | | SS | Стратегия запущена. 11:20:00.000 | | MQS | Стратегия запущена. 11:20:00.000 | | MS | Стратегия запущена. 11:20:00.990 | | MQS | Регистрация новой заявки на Sell с ценой 85 и объемом 1. 11:20:00.990 | | MQS | Заявка 74305730 на Sell отправлена с ценой 85 объемом 1. 11:20:04.990 | | MQS | Цена текущей 85 и лучшей 90. 11:20:04.990 | | MQS | Лучший бид 84,4800000 и лучший аск 89,4800000. 11:20:04.990 | | MQS | Котирование заявки 74305730 на Sell с ценой 85 объемом 1. 11:20:04.990 | | MQS | Отмена заявки 74305730. 11:20:05.990 | | MQS | Отмена заявки 74305730 прошло успешно. 11:20:05.990 | | MQS | Регистрация новой заявки на Sell с ценой 85 и объемом 1. 11:20:05.990 | | MQS | Заявка 74305731 на Sell отправлена с ценой 85 объемом 1. 11:20:06.990 | Warning | MQS | Заявка 74305731 не имеет состояния. 11:20:07.990 | Warning | MQS | Заявка 74305731 не имеет состояния.
последнее не понятно событие MyTrade Вызываается только в стратегии MyStrategy, но пример теста на истории какимто образом считает трэйды.
Вобщем из всего вышесказанного нужно в основной стратегии вызывать событие NewMyTrades?
Я совсем запутался.
MyStrategy - это что? Вы писали что используете SampleHistoryTestyng, там есть SmaStrategy. Где вы взяли MyStrategy? Что делает эта ваша стратегия?
Можете конкретно привести строчку где вы добавляете создаёте StopLossStrategy?
на все вопросы нет я взял SempleSMA и пытаюсь понять как к ней еще можно добавить стоплос стратегию. Ведь нет не одного примера который ее реализует.
Нет на последний вопрос что означает - у вас даже у SampleSMA сделок нет? А на первый что означает - вы и не пытаетесь добавить StopLossStrategy к SampleSma, т.е. никакого ордера не передаёте?
Можно как-то более конкретно ответить на вопросы. А то ответ "нет" на запрос лога вызывает удивление.
вот я ее и использовал, теперь пытаюсь понять как заставить ее работать
Да проблема похоже не стоп-лоссе, судя по логу, тут котирование не порождает сделок
И ещё просьба - посмотрите, пожалуйста, когда поднимается событие NewOrder у стратегии MQS - добавьте вывод этого сообщения в лог.
Стратегия считает средние, пример SampleHistoryTesting я пытаюсь понять как сделать так чтоб с ней вместе работала еще TakeProfitStrategy и StopLossStrategy. Вот этот код из SampleSMA стратегии куда я попытался добавить вызов MyStrateg.
Вот у меня и возник вопрос что я сделал не так, если весь код взят из примеров?
if (_isShortLessThenLong != isShortLessThenLong) { // если короткая меньше чем длинная, то продажа, иначе, покупка. var direction = isShortLessThenLong ? OrderDirections.Sell : OrderDirections.Buy;
Т.е. мне не надо создавать новую стратегию, а все что написано тут добавить в основную стратегию?
Да, только т.к. вам не нужен TakeProfit - вам ни к чему BasketStrategy, а можно обойтись лишь StopLossStrategy
при добавлении в конструктор SampleSMA строчки:
Программа вылетает с ошибкой в StockSharp.BusinessEntities возник бесконечный цикл ну и StackOverride или что-то подобное
base.NewMyTrades += OnNewMyTrades;
тогда возникает другой вопрос если отсюда:
ясно откуда мы берем переменную типа MyTrade, то если я добавляю вот так:
непонятно откуда брать значение MyTrade
// для каждой сделки добавляем для защиты по пакетной стратегии basket.ChildStrategies.AddRange(trades.Select(t => { var s = new BasketStrategy(BasketStrategyFinishModes.First);
Ну как - StopLossStrategy создаётся для чего - для сделки стратегии, для MyTrade. Вот и берите откуда надо - либо по событиям, либо из Strategy, либо из Trader.
Попробуйте побольше изучать примеры, данные вопросы тогда отпадут.
Один, ошибка возникает только при добавлении этой строчки
public SmaStrategy(CandleManager candleManager, SimpleMovingAverage longSma, SimpleMovingAverage shortSma, TimeSpan timeFrame) : base(timeFrame) { _candleManager = candleManager;
через отладчик, хотя ... сейчас еще раз гляну уже с this
с this то же самое, второй раз до конструктора не доходит