свечи micex10index
Atom Ответить
04.05.2011


Добрый день. Прошу помощи - после отработки кода параметры свечей(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 Ответов
Mikhail Sukhov

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


Спасибо:

patermind

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


Да, конечно. Всю документацию и форум на тему свечей перечитал на несколько раз.
Если вы имеете ввиду, что нет блока
Код
_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

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


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

patermind

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


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

Код
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

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


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

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


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

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

patermind

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


Need help, please...
Автор топика
Спасибо:

patermind

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


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

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

Mikhail Sukhov

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


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

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


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

Посмотрите пример SampleCandles.
Спасибо:

patermind

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


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

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


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

patermind

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


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

Mikhail Sukhov

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


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

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


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


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

patermind

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


Не могли бы вы посмотреть мой код и сказать, где я чего не доделал, чтобы все заработало? Я пытаюсь поставить обработку события - не нравятся аргументы DrawCandles, не нравится type
http://imageshack.us/pho...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

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


patermind Перейти
Не могли бы вы посмотреть мой код и сказать, где я чего не доделал, чтобы все заработало? Я пытаюсь поставить обработку события - не нравятся аргументы DrawCandles, не нравится type
https://imageshack.us/pho...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

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


лан, буду сам разбираться
Автор топика
Спасибо:

Ilya Gruntal

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


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


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

В соседнем топике, https://stocksharp.ru/fo...les--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

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


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

patermind

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


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

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

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

Alexander

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


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

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

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



1) Хорошо ThumpUp
2) получаете позицию: Trader.GetPosition(Portfolio, Security).CurrentValue
и отправляете нужные вам заявки
3) без использования стратегий - в цикле, каждые 10 секунд проверяете состояние заявки.
Спасибо:

patermind

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


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.");
}
}

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

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

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

спасибо!
Автор топика
Спасибо:

Mikhail Sukhov

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


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


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

patermind

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


Mikhail Sukhov Перейти
patermind Перейти
по нулям вывелось в параметрах свечек.


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

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

patermind

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


Интересно. Ни разу процедура 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");

...
Автор топика
Спасибо:


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

loading
clippy