← Назад

свечи micex10index

Добрый день. Прошу помощи - после отработки кода параметры свечей(candle.OpenPrice, candle.ClosePrice) пустые: Модифицирую SampleConsole

инициализируем

private static CandleManager _candleManager;

потом в коде

_candleManager = new CandleManager(trader);

потом в ``` trader.NewSecurities += securities => {

делаю

_mmvb = securities.FirstOrDefault(sec => sec.Code == "MICEX10INDEX"); if (_mmvb != null) { _candleManager.RegisterTimeFrameCandles(_mmvb, TimeSpan.FromMinutes(10)); Console.WriteLine("micex ok."); }


и в конце цикла

var candles = _candleManager.GetTimeFrameCandles(_mmvb, TimeSpan.FromMinutes(10), 5); foreach (var candle in candles) { Console.WriteLine(candle.OpenPrice + "\n"); Console.WriteLine(candle.ClosePrice); } }

Комментарии (23)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

patermind
patermind Автор

Да, конечно. Всю документацию и форум на тему свечей перечитал на несколько раз. Если вы имеете ввиду, что нет блока

_candleManager.NewCandles += DrawCandles;
_candleManager.CandlesChanged += DrawCandles;

private void DrawCandles(CandleToken token, IEnumerable<Candle> candles)
{
	// ...
	wnd.Candles.AddRange(candles);
}

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

private void DrawCandles(CandleToken token, IEnumerable<Candle> candles)
{
	
}

в ``` class Program { private static Security _instrument0; private static Security _mmvb; private static Portfolio _portfolio; private static MarketDepth _depth; private static CandleManager _candleManager;

    private void DrawCandles(CandleToken token, IEnumerable<Candle> candles)
    {
        //this.GuiAsync(() =>
        //{
        //    var wnd = _chartWindows.TryGetValue(token);
        //    if (wnd != null)
        //        wnd.Chart.Candles.AddRange(candles);
        //});
    }

	static void Main()
	{

		try
		{

и вызывать его 

_candleManager = new CandleManager(trader); _candleManager.NewCandles += DrawCandles; _candleManager.CandlesChanged += DrawCandles;

но у меня студия ругалась, что у += DrawCandles; отсутствуют аргументы. 
Скриншот ошибки прилагаю.

Извините, не смог приложить - выложил на хостинг - http://imageshack.us/photo/my-images/857/errj.jpg/ .

Не могли бы вы подсказать, что нужно поправить, чтобы заработало?
Alexander
Alexander

Похоже свечки не успевают сформироваться. Попробуйте печатать открытия \ закрытия не сразу, а как раз из события NewCandles

patermind
patermind
patermind Автор

Александр, верно ли я понимаю: я беру свечки ровно в час дня - они в любом случае должны быть?

var candles = _candleManager.GetTimeFrameCandles(_mmvb, TimeSpan.FromMinutes(10), 5);
                                foreach (var candle in candles)
                                {
Console.WriteLine(candle.OpenPrice + "\n");
Console.WriteLine(candle.ClosePrice);
                                    }
                                } 

А регистрирую таймфрейм я при запуске робота. Должен сказать - биржа еще не работает, до работы - примерно в 8 утра. Может ли в этом быть проблема?

Alexander
Alexander

patermind: Александр, верно ли я понимаю: я беру свечки ровно в час дня - они в любом случае должны быть?

var candles = _candleManager.GetTimeFrameCandles(_mmvb, TimeSpan.FromMinutes(10), 5); foreach (var candle in candles) { Console.WriteLine(candle.OpenPrice + "\n"); Console.WriteLine(candle.ClosePrice); } }

> 
> А регистрирую таймфрейм я при запуске робота. Должен сказать - биржа еще не работает, до работы - примерно в 8 утра. Может ли в этом быть проблема?

Не должно быть.
У вас зарегистрирован таймфрейм в 10 минут для свечек?

Скиньте весь кусок кода.
patermind
patermind Автор

Извините плиз, копировал из блокнота, могло сбиться форматирование http://pastebin.com/TaxxZbhL

Закомментировал только аккаунт и кусок логики. Возможны пара лишних фигурных скобочек, это опять издержки копирования из блокнота - на работе нет стока и квика, все дома..

patermind
patermind Автор

Need help, please...

patermind
patermind Автор

Друзья, не получится ли помочь сегодня до конца рабочего дня? Очень хочу наконец завести функционал, дома уже все что только можно и нельзя попробовал - не заводятся свечки, хоть ты тресни. Всю голову уже сломал за неделю.

Это же не тот функционал, где специалисты думать долго будут, - разве нет?

Mikhail Sukhov
Mikhail Sukhov

patermind: Друзья, не получится ли помочь сегодня до конца рабочего дня? Очень хочу наконец завести функционал, дома уже все что только можно и нельзя попробовал - не заводятся свечки, хоть ты тресни. Всю голову уже сломал за неделю.

Это же не тот функционал, где специалисты думать долго будут, - разве нет?

Все есть в документации и примерах. Смысл - свечки нужно получать через событие. Если вызывать метод GetTimeFrameCandles, то они могут быть еще не сформированы (тики с программу не мгновенно попадают с биржи и нужно какое то время, чтобы все свечки создались).

Посмотрите пример SampleCandles.

patermind
patermind Автор

Mikhail Sukhov: Все есть в документации и примерах. Смысл - свечки нужно получать через событие. Если вызывать метод GetTimeFrameCandles, то они могут быть еще не сформированы (тики с программу не мгновенно попадают с биржи и нужно какое то время, чтобы все свечки создались).

Посмотрите пример SampleCandles.

И пример, и документацию я смотрел. Не могли бы Вы подсказать, как мне модифицировать код ( http://pastebin.com/TaxxZbhL ) таким образом, чтобы оно заработало? У меня не получается поставить в код обработчик события таким образом, чтобы к GetTimeFrameCandles свечи были готовы - ссылка на скрин ошибки - http://imageshack.us/photo/my-images/857/errj.jpg/ .

Mikhail Sukhov
Mikhail Sukhov

patermind:

Mikhail Sukhov: Все есть в документации и примерах. Смысл - свечки нужно получать через событие. Если вызывать метод GetTimeFrameCandles, то они могут быть еще не сформированы (тики с программу не мгновенно попадают с биржи и нужно какое то время, чтобы все свечки создались).

Посмотрите пример SampleCandles.

И пример, и документацию я смотрел. Не могли бы Вы подсказать, как мне модифицировать код ( http://pastebin.com/TaxxZbhL ) таким образом, чтобы оно заработало? У меня не получается поставить в код обработчик события таким образом, чтобы к GetTimeFrameCandles свечи были готовы - ссылка на скрин ошибки - http://imageshack.us/photo/my-images/857/errj.jpg/ .

Как уже писали несколько раз в этом топике, пользоваться нужно событиями. GetTimeFrameCandles возвращает свофрмированые свечки, которые прошли через событие.

patermind
patermind Автор

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

patermind
patermind Автор

Не могли бы вы посмотреть мой код и сказать, где я чего не доделал, чтобы все заработало? Я пытаюсь поставить обработку события - не нравятся аргументы DrawCandles, не нравится type http://imageshack.us/photo/my-images/853/123fx.jpg/

сама функция

	class Program
	{
		private static Security _instrument0;
        private static Security _mmvb;
		private static Portfolio _portfolio;
		private static MarketDepth _depth;
        private static CandleManager _candleManager;

        private void DrawCandles(CandleToken token, IEnumerable<Candle> candles)
        {
            // ...
           // wnd.Candles.AddRange(candles);
        }

     

		static void Main()
		{

			try
			{

кажется, чего-то не хватает )))

Alexander
Alexander

patermind: Не могли бы вы посмотреть мой код и сказать, где я чего не доделал, чтобы все заработало? Я пытаюсь поставить обработку события - не нравятся аргументы DrawCandles, не нравится type http://imageshack.us/photo/my-images/853/123fx.jpg/

сама функция

class Program
{
	private static Security _instrument0;
    private static Security _mmvb;
	private static Portfolio _portfolio;
	private static MarketDepth _depth;
    private static CandleManager _candleManager;

    private void DrawCandles(CandleToken token, IEnumerable<Candle> candles)
    {
        // ...
       // wnd.Candles.AddRange(candles);
    }

 

	static void Main()
	{

		try
		{
> 
> 
> кажется, чего-то не хватает )))


Пример SampleCandles как раз занимается построением свечек. стоит его ещё раз посмотреть ;)
patermind
patermind Автор

лан, буду сам разбираться

Ilya Gruntal
Ilya Gruntal

patermind: лан, буду сам разбираться

Дорогой patermind, попробуйте действительно запустить пример SampleCandles. Если у Вас не будут рисоваться свечи в этом примере, значит скорей всего что-то с экспортом, например в таблице всех сделок колонки местами перепутались :)) Если же в примере SampleCandles свечи всё таки рисуются,то возвращайтесь к своему проекту и попробуйте повесить GetTimeFrameCandles на отдельную кнопку, тем самым подождав немного после запуска Экспорта по ДДЕ, чтобы свечи могли сформироваться.

В соседнем топике, http://stocksharp.com/forum/1573/GetTimeFrameCandles--dubliazh-sviechiei/ вы найдёте немного кода, который мог бы вам пригодиться.

А для того чтобы попробовать события в своём примере попробуйте



candleManager.RegisterTimeFrameCandles(blablaSecurity, blablaTimeframe);
candleManager.NewCandles += new Action<CandleToken, IEnumerable<Candle>>(NewCandles);

        
void NewCandles(CandleToken token, IEnumerable<Candle> candles)
{
   foreach (var candle in candles)
      {
         // candle.                  <- объект свечки
      }
}


Сам не проверял, всё в ваших руках :)

patermind
patermind Автор

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

patermind
patermind Автор
  1. Сегодня вечером приду, оставлял машину включенной с программой, посмотрим, работают свечки или нет.

  2. Не подскажете - предположим, в течении дня я руками делаю приказы, покупаю что-то, продаю. И к трем часам дня у меня сформировался портфель - например текущие остатки получаются 1 лот сбербанка и -7 лотов лукойла. Заранее сколько у меня к трем часам будет бумаг и каких - я не знаю. Как в программе на S# продать(и купить) все, что на настоящий момент есть в портфеле? Например, продать 1 лот сбербанка и купить 7 лотов лукойла по рыночным ценам. Т.е. полностью выйти из бумаг, вернув деньги.

  3. Еще одна проблема - как в примере SampleConsole сделать выставление лимитированной заявки на продажу + если заявка не была отработана в течении 10 секунд(цена ушла) передвинуть заявку опять на лучшее предложение по рынку и так до тех пор, пока заявка не будет удовлетворена? Котирование? как его правильно сделать в коде без использования стратегий?

Alexander
Alexander

patermind:

  1. Сегодня вечером приду, оставлял машину включенной с программой, посмотрим, работают свечки или нет.

  2. Не подскажете - предположим, в течении дня я руками делаю приказы, покупаю что-то, продаю. И к трем часам дня у меня сформировался портфель - например текущие остатки получаются 1 лот сбербанка и -7 лотов лукойла. Заранее сколько у меня к трем часам будет бумаг и каких - я не знаю. Как в программе на S# продать(и купить) все, что на настоящий момент есть в портфеле? Например, продать 1 лот сбербанка и купить 7 лотов лукойла по рыночным ценам. Т.е. полностью выйти из бумаг, вернув деньги.

  3. Еще одна проблема - как в примере SampleConsole сделать выставление лимитированной заявки на продажу + если заявка не была отработана в течении 10 секунд(цена ушла) передвинуть заявку опять на лучшее предложение по рынку и так до тех пор, пока заявка не будет удовлетворена? Котирование? как его правильно сделать в коде без использования стратегий?

  1. Хорошо 👍
  2. получаете позицию: Trader.GetPosition(Portfolio, Security).CurrentValue и отправляете нужные вам заявки
  3. без использования стратегий - в цикле, каждые 10 секунд проверяете состояние заявки.
patermind
patermind Автор
  1. не заработало, по нулям вывелось в параметрах свечек. Попробую обработчик вот такой сделать вместо пустого, как советовали
        private static void DrawCandles(CandleToken token, IEnumerable<Candle> candles)
        {
            var candles1 = _candleManager.GetTimeFrameCandles(_micex, TimeSpan.FromMinutes(10), 5);
            foreach (var candle in candles1)
            {
                Console.WriteLine(candle.OpenPrice);
                Console.WriteLine(candle.ClosePrice);
                Console.WriteLine("---------------");
                // candle.                  <- объект свечки
            }
        }

инициализация

if (_micex == null)
                                {
                                    _micex = securities.FirstOrDefault(sec => sec.Code == "MICEX10INDEX");
                                    if (_micex != null)
                                    {
                                        _candleManager = new CandleManager(trader);
                                        _candleManager.NewCandles += DrawCandles;
                                        _candleManager.CandlesChanged += DrawCandles;
                                        CandleToken token = _candleManager.RegisterTimeFrameCandles(_micex, TimeSpan.FromMinutes(10));
                                        Console.WriteLine("micex ok.");
                                    }
                                }

посмотрим завтра, получится что или нет...

  1. Понял, благодарю. Заведу свечки - попробую.

  2. Ок, потом покажу, как делаю - нужен будет совет, правильно или нет.. без свечей пока рано говорить.

спасибо!

Mikhail Sukhov
Mikhail Sukhov

patermind: по нулям вывелось в параметрах свечек.

Это выражение означает что ничего не вывелось или вывелись нули?

patermind
patermind Автор

Mikhail Sukhov:

patermind: по нулям вывелось в параметрах свечек.

Это выражение означает что ничего не вывелось или вывелись нули? Вот это не знаю. я с параметрами некоторые операции произвожу, и записываю результат в decimal переменные. Сегодня вечером смогу отписать, выводятся пустое или выводятся нули.

patermind
patermind Автор

Интересно. Ни разу процедура DrawCandles не вызвалась. Точнее, может и вызвалась - но цикл ни раз не исполнился

private static void DrawCandles(CandleToken token, IEnumerable<Candle> candles)
        {
            var candles1 = _candleManager.GetTimeFrameCandles(_micex, TimeSpan.FromMinutes(10), 5);
            foreach (var candle in candles1)
            {
                Console.WriteLine(candle.OpenPrice);
                Console.WriteLine(candle.ClosePrice);
                Console.WriteLine("---------------");
                // candle.                  <- объект свечки
            }
        }

поставить проверку после var candles1 что ли

Console.WriteLine("draw ok");

...