Свечки глючат
Atom
25.03.2015
TheRoman


Ребята у кого нибудь работают свечки?

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Threading.Tasks;
using Ecng.Collections;
using Ecng.Common;
using Ecng.ComponentModel;
using StockSharp.Algo.Candles;
using StockSharp.BusinessEntities;
using StockSharp.Logging;
using StockSharp.Quik;
using System.Security;
using System.Net;
using StockSharp.Messages;


namespace Candle
{
    class Program
    {
        static void Main(string[] args)
        {
            QuikTrader connector;
            CandleManager candleManager;
            CandleSeries candleSeries;
            connector = new QuikTrader
            {
                LuaFixServerAddress = "127.0.0.1:5001".To<EndPoint>(),
                LuaLogin = "quik",
                LuaPassword = "quik".To<SecureString>(),
                RequestAllSecurities = false,
            };

            LogManager logManager = new LogManager();

            //logManager.MaxMessageCount = -1;          // без этого будет буферизация логов и они будут неактуальны при остановке в дебаггере.
            logManager.Listeners.Add(new FileLogListener("Report.log"));
            logManager.Listeners.Add(new DebugLogListener());
            ((ILogSource)connector).LogLevel = LogLevels.Debug;

            logManager.Sources.Add(connector);

            candleManager = new CandleManager(connector);
            //Подпишемся на события коннектора            
            connector.Connected += () => connector.StartExport();
            connector.ExportStarted += () => connector.LookupSecurities(new Security { Code = "SBER" });
            connector.LookupSecuritiesResult += (securities) =>
            {
                Console.WriteLine("Старт (" + securities.Count()+")");

                foreach (Security s in securities)
                {
                    Console.WriteLine("Получен инструмент: " + s.Code);


                    if (s.Code == "SBER")
                    {
                        if (connector.RegisteredSecurities.Contains(s)) continue;
                        connector.RegisterSecurity(s);
                        connector.RegisterTrades(s);

                        candleSeries = new CandleSeries(typeof(TimeFrameCandle), s, TimeSpan.FromMinutes(1));

                        candleSeries.ProcessCandle += (candle) =>
                        {
                            Console.WriteLine("candle: " + candle.OpenTime.ToString());
                        };

                        candleManager.Start(candleSeries);

                        Console.WriteLine(candleSeries.GetCandleCount());
                    
                    }
                }

            };

            connector.Connect();
            Console.ReadKey();
        }
    }
}


Инструменты находит, ProcessCandle не идёт, candleSeries.GetCandleCount() - всегда равна 0


Теги:


Спасибо:


1 2  >
Mikhail Sukhov

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


А вот теперь используйте исходники.[biggrin]
Спасибо:

TheRoman

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


Так он рабочий или нет? :)
Спасибо:

Иван З.

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


В S# есть пример SampleCandles, на нем можно было проверить.
Залез, запускаю, не запустился просит StockSharp.Licensing.
Добавил.
Chat лицензию просит, отображать не будет.
Хрен с ним ставлю останов в метод DrawCandle.
Жду несколько секунд...

Вот такой квест, но свечи ходят.
Спасибо:

Mikhail Sukhov

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


Иван З.

Chat лицензию просит, отображать не будет.


Будет. Но не под Debug.
Спасибо:

TheRoman

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


З.ы. так как свечи мне нужны скорее для работы с индикаторами и вычислениями, первый вариант более понятный просто потому что он в серию выводится, судя по манулу DrawCandle скорей для графики, сам пример выглядит как сусаненское болото, но у меня оно не работает тоже:

Добавил лицензию, запустил - вывалился список инструментов.
поставил MessageBox.Show в DrawCandle, нажал на график так и не чего не выскочило. :( Значит не грузит.

Вот код чище и понятней чем в СемплКэнди, не один не работает.

Код


QuikTrader _trader = new QuikTrader
{
   LuaFixServerAddress = "127.0.0.1:5001".To<EndPoint>(),
   LuaLogin = "quik",
   LuaPassword = "quik".To<SecureString>(),
};
_trader.Connected += () =>
{

   _trader.StartExport();

};

_trader.Connect();


Security RobotSecuritie = _trader.Securities.FirstOrDefault(sec => sec.Code == "SBER");

while (true)
{
    if (RobotSecuritie != null) break;
}

   _trader.RegisterTrades(RobotSecuritie);
   _trader.RegisterSecurity(RobotSecuritie);


    while (true)
    {
         if (RobotSecuritie.LastTrade != null)
                        break;
    }
//вариант Sample Candle

   CandleManager _candleManagerA = new CandleManager(_trader);

   _candleManagerA.Processing += (Pseries, Pcandle) => //вместо DrawCandle
   {
     Console.WriteLine("Что то здесь наконец работает");
   };

   CandleSeries seriesA = new CandleSeries(typeof(TimeFrameCandle), RobotSecuritie, TimeSpan.FromMinutes(5));
   _candleManagerA.Start(seriesA);

//альтернативный вариант

   CandleManager _candleManager = new CandleManager(_trader);
   CandleSeries _candleSeries = new CandleSeries(typeof(TimeFrameCandle), RobotSecuritie, TimeSpan.FromMinutes(5));

   _candleSeries.ProcessCandle += (candle) =>
   {
        Console.WriteLine("candle: " + candle.OpenTime.ToString());
   };

   _candleManager.Start(_candleSeries);



Спасибо:

TheRoman

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


версия: 4.2.72
Спасибо:

aq2003

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


TheRoman,

Попробуйте

CandleManager _candleManager = new CandleManager(new TradeCandleBuilderSource(_trader));
CandleSeries _candleSeries = new CandleSeries(typeof(TimeFrameCandle), RobotSecuritie, TimeSpan.FromMinutes(5));

_candleManager.Processing += (series, candle) =>
{
Console.WriteLine("candle: " + candle.OpenTime.ToString());
};

_candleManager.Start(_candleSeries);

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

Событие CandleSeries.ProcessCandle при каких-то условиях работало, при каких-то не работало. Разбираться не стал. CandleManager.Processing работает.
Спасибо:

TheRoman

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


Тоже не работает, я вижу Менеджер запускает, серия создаётся но она не заполняется.

Candle.vshost.exe (основной проект Candle.exe) - а что вот это при работе со свечками прога создаётся?

И если какой либо метод диагностики, хотя бы узнать приходят вообще свечки из Квика.


Спасибо:

TheRoman

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


поставил:

Код

_candleManagerB.ProcessDataError += (error) =>
{
Console.WriteLine("Error: {0} {1}", error.InnerException, error.Message);
};


не выводит не чего, значит до заполнения процесс так и не доходит.

aq2003 у вас версия: 4.2.72?
Спасибо:

Иван З.

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


Тоже какую то странность наблюдаю в свечка, это все что он мне за сессию выдал по си

по ри, и сберу ничего не выдал.
в SampleCandles добавил только
Код
		private void DrawCandle(CandleSeries series, Candle candle)
		{
            Debug.Print(candle.ToString());

Возможно поспешил с выводами в предыдущем сообщении.
TheRoman, попробуйте у себя на SIM5.
Спасибо:
1 2  >

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

loading
clippy