RealTimeEmulationTrader

RealTimeEmulationTrader
Atom
2/11/2017
Prival


недостаточно денег для регистрации заявки.... Подскажите что может быть не так

  1. Создал трейдера и портфель

var quikMd = new LuaFixMarketDataMessageAdapter(new MillisecondIncrementalIdGenerator())
            {
                Login = "quik",
                Password = "quik".To<SecureString>(),
                Address = QuikTrader.DefaultLuaAddress,
                TargetCompId = "StockSharpMD",
                SenderCompId = "quik",
                RequestAllSecurities = true
            };

            _trader = new RealTimeEmulationTrader<IMessageAdapter>(quikMd);

            _portfolio = new Portfolio { Name = "test account", BeginValue = 1000000, CurrentValue = 1000000};

По кнопке запускаю стратегию

    class Strategy01:Strategy
    {
        protected override void OnStarted()
        {
            this.AddInfoLog("---Start---{0}---{1}---{2}---{3}---{4}---", Connector, Security, Portfolio, Portfolio.BeginValue, Portfolio.CurrentValue);
            var order = this.BuyAtMarket();
            RegisterOrder(order);
            base.OnStarted();

        }

В логе ошибка недостаточно средств ((( RealTimeEmulationTrader1 11.02.2017 18:32:47 Info Создан новый портфель Симулятор. RealTimeEmulationTrader1 11.02.2017 18:33:01 Info Инструмент SBER@QJSIM зарегистрирован на получение рыночных данных для MarketDepth. RealTimeEmulationTrader1 11.02.2017 18:33:01 Info Инструмент SBER@QJSIM зарегистрирован на получение рыночных данных для Level1. RealTimeEmulationTrader1 11.02.2017 18:33:01 Info Инструмент SBER@QJSIM зарегистрирован на получение рыночных данных для Trades. RealTimeEmulationTrader1 11.02.2017 18:33:01 Info RegisterOrder: 0/ Покупка Цена=0 Объем=1 Сост=None Бал=0 RealTimeEmulationTrader1 11.02.2017 18:33:01 Info New order: 66767638/ Покупка Цена=0 Объем=1 Сост=Pending Бал=1 S_SBER@QJSIM_test account 11.02.2017 18:33:01 Info Стратегия Запущена. [0,-1]. Позиция 0. S_SBER@QJSIM_test account 11.02.2017 18:33:01 Info ---Start---RealTimeEmulationTrader`1---SBER@QJSIM---test account---1000000---1000000--- S_SBER@QJSIM_test account 11.02.2017 18:33:01 Info Регистрация новой Market (0x65FB2A) заявки на Buy с ценой 0 и объемом 1. SecurityMarketEmulator 11.02.2017 18:33:01 Info Заявка 66767638 не зарегистрирована. Причина 'На счету test account недостаточно денег для регистрации заявки 66767638. Необходимо 131.92, имеется 0, заблокировано 0.00.'.




Thanks:


<< < 2 3 4 5  >
Support

Avatar
Date: 9/18/2017
Reply


Prival:

Support: Воспроизводится 1 и 2 ошибки - это баг. Так в strategy.MyTrades сделки есть или нет?

Скажите описанные баги в этой ветке уже поправлены ?

Спасибо за вашу информацию. Проверьте, пожалуйста, на последних версиях.

Thanks:

Prival

Avatar
Date: 9/21/2017
Reply


А вы что не знаете ? Исправили вы это или нет ? Баг был показан в апреле месяце, сейчас конец сентября ... пол года жду.

Thanks:

Prival

Avatar
Date: 1/25/2018
Reply


Проверил на версии 4.4.4 - ошибка не исправлена. на 800-м перевороте снова недостаточно денег на счете. 23:31:03.100| |SecurityMarketEmulator|Заявка 84322794 зарегистрирована. 23:31:03.100| |SecurityMarketEmulator|Заявка 84322794. Исполнение объема 2 по цене 130030. 23:31:03.100| |SecurityMarketEmulator|Заявка 84322794 полностью исполнена. 23:31:03.100| |SecurityMarketEmulator|Сделка 798 заявки 84322794 P=130030 V=2. 23:31:03.082| |RealTimeEmulationTrader1|Order changed: 84322794/810 RIH8@FORTS Симулятор Продажа Цена=0 Объем=2 Сост=Done Бал=0 23:31:03.082| |RealTimeEmulationTrader1|RegisterOrder: 0/ RIH8@FORTS Симулятор Покупка Цена=0 Объем=2 Сост=None Бал=0 23:31:03.082| |RealTimeEmulationTrader1|New order: 84322795/ RIH8@FORTS Симулятор Покупка Цена=0 Объем=2 Сост=Pending Бал=2 23:31:03.101| |SecurityMarketEmulator|Заявка 84322795 зарегистрирована. 23:31:03.101| |SecurityMarketEmulator|Заявка 84322795. Исполнение объема 1 по цене 130040. 23:31:03.101| |SecurityMarketEmulator|Заявка 84322795 отменяется, так как является рыночной с неисполненным объемом 1. 23:31:03.101| |SecurityMarketEmulator|Сделка 799 заявки 84322795 P=130040 V=1. 23:31:03.082| |RealTimeEmulationTrader1|Order changed: 84322795/811 RIH8@FORTS Симулятор Покупка Цена=0 Объем=2 Сост=Done Бал=1 23:31:03.082| |RealTimeEmulationTrader1|RegisterOrder: 0/ RIH8@FORTS Симулятор Покупка Цена=0 Объем=1 Сост=None Бал=0 23:31:03.082| |RealTimeEmulationTrader1|New order: 84322796/ RIH8@FORTS Симулятор Покупка Цена=0 Объем=1 Сост=Pending Бал=1 23:31:03.102| |SecurityMarketEmulator|Заявка 84322796 не зарегистрирована. Причина 'На счету Симулятор недостаточно денег для регистрации заявки 84322796. Необходимо 1016816.43, имеется 985580, заблокировано 1002079.96.'. 23:31:03.082|Error |RealTimeEmulationTrader`1|OrderRegisterFailed 84322796/ RIH8@FORTS Симулятор Покупка Цена=0 Объем=1 Сост=Failed Бал=1 System.InvalidOperationException: На счету Симулятор недостаточно денег для регистрации заявки 84322796. Необходимо 1016816.43, имеется 985580, заблокировано 1002079.96.

Скоро будет год как жду исправления...

Thanks:

Prival

Avatar
Date: 3/7/2018
Reply


Support: Сделайте следующую проверку с последней версией: посмотрите добавляются ли сделки в коллекцию strategy.MyTrades

Проверил. Одну ошибку так и не поправили. Версия 4.4.5.3 order .WhenMatched(Connector) .Do(() => { this.AddInfoLog(@"{0} Заявка {2} {3} полностью исполнена Volume={4}. Позиция {1} Price={5} TH={6}", TimeHelper.Now.TimeOfDay, Position, order.Direction, order.Security.Code, order.Volume, order.Price, TraderHelper.GetAveragePrice(order, Connector)); }

в лог выводиться 20:31:30.086| |S_RIH8@FORTS_Симулятор|20:31:30.1103235 Заявка Buy RIH8 полностью исполнена Volume=1. Позиция 1 Price=0 TH=0

Может я что то не так делаю (не понимаю). Мне нужно получить цену по которой прошла сделка. Как её получить ?

Thanks:

Константин

Avatar
Date: 3/8/2018
Reply


Может я что то не так делаю (не понимаю). Мне нужно получить цену по которой прошла сделка. Как её получить ? Вам наверное нужно подписаться на сделки по ордеру чтоб узнать их цену

order.WhenNewTrade

На сколько я понимаю Price = 0 может быть у ордера который исполнен по рынку.

Thanks:

Prival

Avatar
Date: 3/8/2018
Reply


Ордер большой объем, и нужно получить среднюю цену когда он весь исполниться. order.WhenNewTrade пробовал, там да, цена приходит this.AddInfoLog(@"WhenNewTrade Цена заявки ={0}, Цена сделки={0} ", trade.Order.Price, trade.Trade.Price);

а вот как её получить в order.WhenMatched никак не пойму. TraderHelper.GetAveragePrice(order, Connector) то что нужно, но он возвращает ноль (((

Thanks:

Константин

Avatar
Date: 3/8/2018
Reply


А если так:

                order.WhenNewTrade(Connector).Do((trade) =>
                    {

                                                if (trade.Order.State == OrderStates.Done)
                        {
                            //Заявка исполнена полностью
                            var averagePrice = order.GetAveragePrice(Connector);
                        }
                        else
                        {
                            //Заявка исполнена не полностью
                            return;
                        }

                    })
                    .Apply(this);

Thanks:

Prival

Avatar
Date: 3/16/2018
Reply


Support:

Prival:

Support: Воспроизводится 1 и 2 ошибки - это баг. Так в strategy.MyTrades сделки есть или нет?

Скажите описанные баги в этой ветке уже поправлены ?

Спасибо за вашу информацию. Проверьте, пожалуйста, на последних версиях. 1 ошибка все таки осталась или я неправильно понимаю PnL Вот лог 07:41:13.611| |S_RIM8@FORTS_Симулятор|Стратегия Запущена. [0,-1]. Позиция 0. 07:41:13.611| |S_RIM8@FORTS_Симулятор|07:41:14.6011093 Strategy OnStarted: S_RIM8@FORTS_Симулятор BeginValue=1000000 CurrentValue=1000000 Position=0 10:07:32.771| |S_RIM8@FORTS_Симулятор|=> ENTER SHORT. 10:07:32.771| |S_RIM8@FORTS_Симулятор|Регистрация новой Market (0x2B3FFA1) заявки на Sell с ценой 0 и объемом 1. 10:07:32.823| |S_RIM8@FORTS_Симулятор|Новая позиция: (S#:RIM8@FORTS, Native:,Type:Future, Симулятор)=-1. 10:07:32.823| |S_RIM8@FORTS_Симулятор|Заявка 27662344 (0x2B3FFA1) больше не активна. 10:07:32.823| |S_RIM8@FORTS_Симулятор|Новая Sell сделка 1 по цене 125890 на 1 заявки 27662344. 10:07:32.823| |S_RIM8@FORTS_Симулятор|*** Заявка исполнена полностью Цена заявки =0, Цена сделки=125890 AveragePrice=125890 TP=125790 SL= 125990 *** 10:07:32.823| |S_RIM8@FORTS_Симулятор|Position = -1 Current P/L = 0 10:23:18.514| |S_RIM8@FORTS_Симулятор|<= EXIT SHORT. 10:23:18.514| |S_RIM8@FORTS_Симулятор|Регистрация новой Market (0x1C5627E) заявки на Buy с ценой 0 и объемом 1. 10:23:18.514| |S_RIM8@FORTS_Симулятор|Новая позиция: (S#:RIM8@FORTS, Native:,Type:Future, Симулятор)=0. 10:23:18.514| |S_RIM8@FORTS_Симулятор|Заявка 27662345 (0x1C5627E) больше не активна. 10:23:18.514| |S_RIM8@FORTS_Симулятор|Новая Buy сделка 2 по цене 125720 на 1 заявки 27662345. 10:23:18.514| |S_RIM8@FORTS_Симулятор|*** Заявка исполнена полностью Цена заявки =0, Цена сделки=125720 AveragePrice=125720 TP=125790 SL= 125990 *** 10:23:18.514| |S_RIM8@FORTS_Симулятор|Position = 0 Current P/L = 194,539840

Не могу понять почему PnL= 194,539840 Это сделка фьючерс RIM8 125890-125720 должно быть.... =170

this.AddInfoLog("Position = {0} Current P/L = {1} ", Position, this.PnLManager.PnL);

Вопрос PnL он в пунктах выводиться или в деньгах ? Если в деньгах, то как его привести к пунктам ? Заранее спасибо. Версия 4.4.5.3

Thanks:

Prival

Avatar
Date: 4/21/2018
Reply


Support:

Prival:

Support: Воспроизводится 1 и 2 ошибки - это баг. Так в strategy.MyTrades сделки есть или нет?

Скажите описанные баги в этой ветке уже поправлены ?

Спасибо за вашу информацию. Проверьте, пожалуйста, на последних версиях.

Проверил. К сожалению режим совсем поломался ((( Quik 7.16.3.14 Версия 4.4.6.1 В режиме RealQuikConnector(); Все работает, все приходит В режиме EmulationQuikConnector() и EmulationQuikConnector2(); событие ValuesChanged срабатывает, но OpenInterest BidsCount ... не приходят ((

Версия 4.4.5.4 В режиме RealQuikConnector(); Все работает, все приходит В режиме EmulationQuikConnector() и EmulationQuikConnector2(); событие ValuesChanged срабатывает, но OpenInterest BidsCount ... не приходят ((

Версия 4.4.5.3 Во всех режимах, все приходит. Получен портфель - Симулятор SBER@TQBR - зарегестрирован, все ок RIM8@FORTS - зарегестрирован, все ок RIM8@FORTS BidsCount=798 RIM8@FORTS OpenInterest=510700

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Security;
using System.Windows;
using Ecng.Common;
using MoreLinq;
using StockSharp.Algo;
using StockSharp.Algo.Testing;
using StockSharp.BusinessEntities;
using StockSharp.Logging;
using StockSharp.Messages;
using StockSharp.Quik;
using StockSharp.Quik.Lua;

namespace Test2
{
    public partial class MainWindow : Window
    {
        private Connector _trader;

        public MainWindow()
        {
            InitializeComponent();
        }

        private QuikTrader RealQuikConnector()
        {
            var qtrader = new QuikTrader
            {
                LuaLogin = "quik",
                LuaFixServerAddress = QuikTrader.DefaultLuaAddress,
                LuaPassword = "quik".To<SecureString>()
            };
            return qtrader;
        }

        private RealTimeEmulationTrader<IMessageAdapter> EmulationQuikConnector()
        {
            var tMessageAdapter = new QuikTrader
            {
                LuaLogin = "quik",
                LuaFixServerAddress = QuikTrader.DefaultLuaAddress, //"127.0.0.1:5001".To<EndPoint>(),
                LuaPassword = "quik".To<SecureString>(),
                LogLevel = LogLevels.Debug,
                UpdateSecurityByLevel1 = true
            }.MarketDataAdapter;

            var portfolio = new Portfolio {Name = "Симулятор", BeginValue = 100000};
            var etrader = new RealTimeEmulationTrader<IMessageAdapter>(tMessageAdapter, portfolio);

            return etrader;
        }

        private RealTimeEmulationTrader<IMessageAdapter> EmulationQuikConnector2()
        {
            var quikMd = new LuaFixMarketDataMessageAdapter(new MillisecondIncrementalIdGenerator())
            {
                Login = "quik",
                Password = "quik".To<SecureString>(),
                Address = QuikTrader.DefaultLuaAddress,
                TargetCompId = "StockSharpMD",
                SenderCompId = "quik",
                RequestAllSecurities = true
            };

            var portfolio = new Portfolio {Name = "Симулятор", BeginValue = 100000};
            var etrader = new RealTimeEmulationTrader<IMessageAdapter>(quikMd, portfolio);

            return etrader;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (_trader == null)
            {
                //_trader = RealQuikConnector();
                _trader = EmulationQuikConnector2();


                _trader.NewSecurities += securities =>
                {
                    securities.ForEach(s =>
                    {
                        try
                        {
                            if (s.Id == "SBER@TQBR" || s.Id == "SBER@QJSIM") //
                            {
                                _trader.RegisterMarketDepth(s);
                                _trader.RegisterSecurity(s);
                                _trader.RegisterTrades(s);
                                Console.WriteLine(@"{0} - зарегестрирован, все ок", s);
                            }

                            if (s.Id == "RIM8@FORTS") //
                            {
                                _trader.RegisterMarketDepth(s);
                                _trader.RegisterSecurity(s);
                                _trader.RegisterTrades(s);
                                Console.WriteLine(@"{0} - зарегестрирован, все ок", s);
                            }
                        }
                        catch (Exception exc)
                        {
                            Console.WriteLine(exc.Message, @" Ошибка регистрации ", s);
                            throw;
                        }
                    });
                };

                _trader.NewPortfolio += portfolio => { Console.WriteLine(@"Получен портфель - {0}", portfolio.Name); };
                //_trader.NewTrades += Trader_NewTrades;
                //_trader.SecuritiesChanged += Trader_SecuritiesChanged;
                _trader.ValuesChanged += _trader_ValuesChanged;
            }

            _trader.Connect();
        }


        private void _trader_ValuesChanged(Security security, IEnumerable<KeyValuePair<Level1Fields, object>> value,
            DateTimeOffset serverTime, DateTimeOffset localTime)
        {
            if (security == null || value == null) return;
            if (security.Code == "SBER" || security.Code == "RIM8")
                foreach (var keyValuePair in value)
                    if (keyValuePair.Key == Level1Fields.OpenInterest || keyValuePair.Key == Level1Fields.BidsCount)
                        Console.WriteLine(@"{0} {1}={2}", security, keyValuePair.Key, keyValuePair.Value);
        }

        private void Trader_SecuritiesChanged(IEnumerable<Security> securities)
        {
            foreach (var security in securities)
            {
                Console.Write(@"Событие SecuritiesChanged");
                if (security.LastTrade != null)
                    Console.WriteLine(@" Name={0} LastTrade.Price={1} AsksCount={2}", security.Id, security.LastTrade.Price, security.AsksCount);
                else
                    Console.WriteLine(@" LastTrade.Price=null");
            }
        }

        private void Trader_NewTrades(IEnumerable<Trade> trades)
        {
            foreach (var trade in trades) Debug.Print(trade.ToString());
        }
    }
}

Пожалуйста сделайте режим работоспособным. И курсы покупал и платная тех поддержка, а за эти годы так рабочего варианта и не смог получить (увидеть). Обидно очень ....

Test2.rar 18 MB (567)
Thanks:

Mikhail Sukhov

Avatar
Date: 4/21/2018
Reply


Prival: и платная тех поддержка

У вас нет активной подписки на техническую поддержку. По нашей информации она истекла более полу года назад. Наши специалисты не видят ваши сообщения. Приобретите подписку и тогда мы сможем вам помочь - http://stocksharp.ru/support/ Или вы можете найти программиста на S# среди зарегистрированных пользователей и на коммерческой основе помочь вам сделать желаемый результат.

Thanks:
<< < 2 3 4 5  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy