В RealTimeEmulationTrader не происходят сделки
Atom Ответить
25.03.2013


Специально для проверки StopLossStrategy кидаю лимитки близко к спреду. Но сделки, судя по логу, не происходят.
Что-то делаю не так?

Лог файл
Код
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:59:00.104 |            | Правило 'Интервал 00:01:00 (0x1C4D180)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:54:53.440 |            | Переход из состояния Stopped в Started.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:54:53.442 |            | Стратегия запущена. [0,-1]. Позиция при старте 0.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:56:00.039 |            | Правило 'Интервал 00:01:00 (0x1C4D180)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:56:00.064 |            | Регистрация новой Limit (0x31AE540) заявки на Buy с ценой 9847 и объемом 1. 
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:56:00.112 |            | Правило 'Полное исполнение  60886354/0 (0x36B20B7)'. Подписалось на события.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:56:00.113 |            | Правило 'Отмена заявки  60886354/0 (0x283D6C)'. Подписалось на события.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:56:00.113 |            | Правило 'Ошибка регистрации заявки  60886354/0 (0x271D65F)'. Подписалось на события.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:57:00.062 |            | Правило 'Интервал 00:01:00 (0x1C4D180)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:57:00.063 |            | Регистрация новой Limit (0xEB7DE3) заявки на Buy с ценой 9841 и объемом 1. 
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:57:00.064 |            | Правило 'Полное исполнение  60886355/0 (0x4D82E1)'. Подписалось на события.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:57:00.064 |            | Правило 'Отмена заявки  60886355/0 (0x86693B)'. Подписалось на события.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:57:00.064 |            | Правило 'Ошибка регистрации заявки  60886355/0 (0x2874BB6)'. Подписалось на события.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:58:00.085 |            | Правило 'Интервал 00:01:00 (0x1C4D180)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:58:00.085 |            | Регистрация новой Limit (0x3F13BE6) заявки на Buy с ценой 9845 и объемом 1. 
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:58:00.085 |            | Правило 'Полное исполнение  60886356/0 (0xCEF4B6)'. Подписалось на события.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:58:00.085 |            | Правило 'Отмена заявки  60886356/0 (0x17B6DE0)'. Подписалось на события.
RS_SRM3@RTS_SPBFUT007r0 | 25.03.2013 16:58:00.085 |            | Правило 'Ошибка регистрации заявки  60886356/0 (0xDC417)'. Подписалось на события.




Код стратегии
Код

using System;
using System.Globalization;
using System.Windows;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Ecng.Collections;
using Ecng.Xaml;

using StockSharp.Algo;
using StockSharp.Algo.Strategies;
using StockSharp.Algo.Candles;
using System.Threading;
using StockSharp.BusinessEntities;


namespace Spikes_Test_it
{
    internal class RobotStrategy : TimeFrameStrategy
    {
        private readonly CandleManager _candleManager;  //Менеджер свечей

        private readonly CandleSeries _candleSeries;    //Свечи

        private DateTime _nextTime;                     

        private decimal _delta;

        private readonly decimal _deltaPercent;

        private decimal _stopLoss;

        private readonly decimal _stopLossPercent;

        public RobotStrategy(CandleManager candleManager, CandleSeries candleSeries, decimal deltaPercent, decimal stopLossPercent, TimeSpan timeFrame)
            : base(timeFrame)
        {
            _candleManager = candleManager;

            _candleSeries = candleSeries;

            _deltaPercent = deltaPercent;

            _stopLossPercent = stopLossPercent;
            
        }


        /// <summary>
        /// Метод вызывается тогда, когда вызвался метод <see cref="M:StockSharp.Algo.Strategies.Strategy.Start"/>, и состояние <see cref="P:StockSharp.Algo.Strategies.Strategy.ProcessState"/> перешло в значение <see cref="F:StockSharp.Algo.ProcessStates.Started"/>.
        /// </summary>
        protected override void OnStarted()
        {

            //Вычисляем время окончания текущей свечки
            _nextTime = Interval.GetCandleBounds(base.Trader.GetMarketTime(Exchange.Me)).Max;
            
            Thread.Sleep(_nextTime - base.Trader.GetMarketTime(Exchange.Me));

            base.OnStarted();
        }


        protected override ProcessResults OnProcess()
        {
            //Если наша стратегия в процессе остановки 
            if (base.ProcessState == ProcessStates.Stopping)
            {
                //Отменяем активные заявки 
                CancelActiveOrders();

                //Так как все активные заявки гарантированно были отменены, то возвращаем ProcessResults.Stop 
                return ProcessResults.Stop;
            }
            
            
            //Событие обработки торговой стратегии вызвалось в первый раз, что раньше, чем окончания текущей свечки 
            if (Trader.GetMarketTime(Exchange.Me) < _nextTime)
            {
                
                //Возвращаем ProcessResults.Continue, так как наш алгоритм еще не закончил свою работу, а просто ожидает следующего вызова. 
                return ProcessResults.Continue;
                
            }
             
            //Получаем сформированную свечку
            var candle = _candleSeries.GetTimeFrameCandle(_nextTime-TimeFrame);
            
            //если свечки не существует (не было ни одной сделке в тайм-фрейме), то ждем окончания следующей свечки. 
            if (candle == null)
            {
                // если прошло больше 10 секунд с момента окончания свечки, а она так и не появилась, 
                // значит сделок в прошедшей 5-минутке не было, и переходим на следующую свечку 
                if ((this.GetMarketTime() - _nextTime) > TimeSpan.FromSeconds(10))
                    _nextTime = TimeFrame.GetCandleBounds(Trader.GetMarketTime(Exchange.Me)).Max;
                
                return ProcessResults.Continue;
            }
            
            _nextTime += TimeFrame;

            //Создаем заявку
            var order = this.CreateOrder(OrderDirections.Buy, candle.ClosePrice - 3, Volume);

            //Регистрируем правило, отслеживающее появление новых сделок, осуществленных трейдером
            Trader
                .WhenNewMyTrades()
                .Do(OnNewMyTrades)
                .Apply(this);

            RegisterOrder(order);

            return ProcessResults.Continue;
        }

        protected override void OnNewMyTrades(IEnumerable<MyTrade> trades)
        {
            //Для каждой сделки добавляем защитную стоп-лосс стратегию
            var protectiveStrategies = trades.Select(t =>
                                                         {
                                                             MessageBox.Show("Идентификатор сделки: " +
                                                                             t.Trade.Id.ToString(
                                                                                 CultureInfo.InvariantCulture));
                _stopLoss = t.Trade.Price * _stopLossPercent/100;
                //Выставляем стоп-лосс 2% от цены входа
                var stopLossStrategy = new AutoProtectiveStrategy
                                           {
                                               StopLossLevel = _stopLoss,
                                               //TakeProfitTimeOut = TimeSpan.FromMinutes(TimeFrame.Minutes*2)
                                               TakeProfitTimeOut = TimeSpan.FromSeconds((_nextTime+TimeFrame+TimeFrame).Second-t.Trade.Time.Second)
                                           };
                MessageBox.Show(stopLossStrategy.TakeProfitTimeOut.ToString());
                return stopLossStrategy;
            });

            ChildStrategies.AddRange(protectiveStrategies);
            
            base.OnNewMyTrades(trades);
        }


    }
}



Спасибо:




6 Ответов
ak

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


вероятно, по этой же самой причине - https://stocksharp.ru/fo...eEmulationTrader/?page=3
Спасибо:

Mikhail Sukhov

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


На этой неделе запланировали устранить проблему. Извиняюсь за задержку.
Спасибо:

Lipot

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


Будем ждать.

Спасибо за библиотеку.
Автор топика
Спасибо:

Lipot

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


Вышла новая версия StockSharp. Скачал, обновил ссылки.
Но проблема до сих пор не ушла.
При тестировании в реал-тайм заявки выставляются, но сделки не происходят.
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 02.04.2013
Ответить


Экспорт стакана у вас для этого инструмента запущен?
Спасибо:

AASorokovoy

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


Скорее всего из за:
https://stocksharp.ru/fo...RealTimeEmulationTrader/

Но к сожалению этот баг так тщательно игнорируется... Sad
Спасибо:


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

loading
clippy