6 семинар ноябрь 2012
Atom Ответить
13.02.2013




План:
  • Дочерние стратегии
  • Свечки
  • CandleChart
  • Стратегии на свечках


Вложения:
Проекты

Теги:


Спасибо:




22 Ответов
UsilaDobry

Фотография
Курсы
Дата: 19.04.2013
Ответить


Каким образом можно внедрить монитор логирования в форму Wpf, чтобы он открывался не отдельным окном, а в приложении?
Спасибо:

IvanB

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


UsilaDobry Перейти
Каким образом можно внедрить монитор логирования в форму Wpf, чтобы он открывался не отдельным окном, а в приложении?


Код

xmlns:SX="clr-namespace:StockSharp.Xaml;assembly=StockSharp.Xaml"

....

<SX:Monitor Name="MonitorControl" Margin="5,5,5,5" />
Спасибо: UsilaDobry

UsilaDobry

Фотография
Курсы
Дата: 20.04.2013
Ответить


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

Пишу код в конструктор MainWindow()

var candleManger = new CandleManager(InterfaceConnection.SafeConnection.Trader);
TimeFrameComboBox.ItemsSource = candleManger.GetSupportedRanges(null); //здесь в качестве аргумента надо указать серию свечек, я ставлю по совету решайпера null, но это не правильно, при запуске выпадает Exception, аргумент вызываемого метода не может быть null.

В обработчик события по нажатию кнопки пишу

var candleManger = new CandleManager(InterfaceConnection.SafeConnection.Trader);
var candleSeries = new CandleSeries(typeof (TimeFrameCandle), InterfaceConnection.SelectedSecurity,TimeFrameComboBox.SelectedValue);
if (BeginDatePicker != null && EndDatePicker != null)
{
if (BeginDatePicker.SelectedDate != null) candleSeries.From = (DateTime) BeginDatePicker.SelectedDate;
if (EndDatePicker.SelectedDate != null) candleSeries.To = (DateTime) EndDatePicker.SelectedDate;
}
Приложение вообще не запускается.
Спасибо:

IvanB

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


UsilaDobry Перейти
...
Пишу код в конструктор MainWindow()

var candleManger = new CandleManager(InterfaceConnection.SafeConnection.Trader);
TimeFrameComboBox.ItemsSource = candleManger.GetSupportedRanges(null); //здесь в качестве аргумента надо указать серию свечек, я ставлю по совету решайпера null, но это не правильно, при запуске выпадает Exception, аргумент вызываемого метода не может быть null.

...

Правильно пишите, это не верно:
Код

TimeFrameComboBox.ItemsSource = candleManger.GetSupportedRanges(null);

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

Спасибо:

UsilaDobry

Фотография
Курсы
Дата: 20.04.2013
Ответить


Как вариант создал обработчик события
private void TimeFrameComboBox_ContextMenuOpening(object sender, System.Windows.Controls.ContextMenuEventArgs e)
{
var candleManger = new CandleManager(InterfaceConnection.SafeConnection.Trader);
TimeFrameComboBox.ItemsSource = candleManger.GetSupportedRanges(candleSeries);
}
Все равно программа просит конкретное значение candleSeries, в таком виде воспринимает как null.
Спасибо:

IvanB

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


UsilaDobry Перейти
Как вариант создал обработчик события
private void TimeFrameComboBox_ContextMenuOpening(object sender, System.Windows.Controls.ContextMenuEventArgs e)
{
var candleManger = new CandleManager(InterfaceConnection.SafeConnection.Trader);
TimeFrameComboBox.ItemsSource = candleManger.GetSupportedRanges(candleSeries);
}
Все равно программа просит конкретное значение candleSeries, в таком виде воспринимает как null.

На сколько я теперь понимаю, Вы не правильно пытаетесь использовать метод GetSupportedRanges. Вы пытаетесь получить из него коллекцию таймфреймов свечей, но этот метод возвращает не это, он возвращает "временные диапазоны, для которых у данного источниках для передаваемой серии свечек есть данные.". Подробнее здесь
Спасибо:

UsilaDobry

Фотография
Курсы
Дата: 20.04.2013
Ответить


Тогда как можно получить значения таймфреймов, которые есть в Quik?
Спасибо:

IvanB

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


UsilaDobry Перейти
Тогда как можно получить значения таймфреймов, которые есть в Quik?

Я думаю, что из Квика никак не извлечь значения таймфреймов, которые используются в его выпадающем списке.
Обычно, если надо выбирать значение таймфрейма из списка, то используют специальный компонент (Xceed:TimePicker) или в ручную, в цикле заполняют стандартный компонент выпадающего списка.
Спасибо:

UsilaDobry

Фотография
Курсы
Дата: 20.04.2013
Ответить


Я в ручную занес значения через ComboBoxItem, потом вызываю значение в следующем коде

var candleSeries = new CandleSeries(typeof (TimeFrameCandle), InterfaceConnection.SelectedSecurity, TimeSpan.FromMinutes((double) TimeFrameComboBox.SelectedItem));

Выдает exception - Заданное приведение является недопустимым. Где-то явное приведение типов не сделал?

Спасибо:

IvanB

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


UsilaDobry Перейти
Я в ручную занес значения через ComboBoxItem, потом вызываю значение в следующем коде
Код

var candleSeries = new CandleSeries(typeof (TimeFrameCandle), InterfaceConnection.SelectedSecurity, TimeSpan.FromMinutes((double) TimeFrameComboBox.SelectedItem));

Выдает exception - Заданное приведение является недопустимым. Где-то явное приведение типов не сделал?

Всего скорее Вы поместили в TimeFrameComboBox значения не типа double.
Спасибо:

UsilaDobry

Фотография
Курсы
Дата: 21.04.2013
Ответить


IvanB Перейти

Всего скорее Вы поместили в TimeFrameComboBox значения не типа double.


<ComboBox x:Name="TimeFrameComboBox" Width="50" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="144,-22,0,0" SelectedIndex="0" >
<ComboBoxItem>1</ComboBoxItem>
<ComboBoxItem>5</ComboBoxItem>
<ComboBoxItem>10</ComboBoxItem>
<ComboBoxItem>15</ComboBoxItem>
<ComboBoxItem>30</ComboBoxItem>
<ComboBoxItem>60</ComboBoxItem>
</ComboBox>

Здесь значения int32. Как здесь в коде указать тип значения double? Просто поставить 1.0; 5.0... Это не помогает...
Спасибо:

IvanB

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


UsilaDobry Перейти



Здесь значения int32. Как здесь в коде указать тип значения double? Просто поставить 1.0; 5.0... Это не помогает...


Предлагаю заполнять в коде C#:
Код
TimeFrameComboBox.Items.Add(1);
TimeFrameComboBox.Items.Add(5);
...


И можно в цикле это сделать.
Спасибо:

UsilaDobry

Фотография
Курсы
Дата: 21.04.2013
Ответить


Это все сложно...
Хорошо, поставлю элемент TimePicker, он передает значения типа DateTime, а нам надо передать значение типа TimeSpan.
Явное преобразование в этой строке не катит, как тогда обратиться к TimePicker в строке:

Finam.History.GetHistoryCandles(InterfaceConnection.SelectedSecurity, TfTimePicker.Value, (DateTime)BeginDatePicker.SelectedDate, (DateTime)EndDatePicker.SelectedDate).ToArray();
Спасибо:

UsilaDobry

Фотография
Курсы
Дата: 21.04.2013
Ответить


Вот так правильно

Finam.History.GetHistoryCandles(InterfaceConnection.SelectedSecurity, TimeSpan.Parse(TfTimePicker.Value.ToString()), (DateTime)BeginDatePicker.SelectedDate, (DateTime)EndDatePicker.SelectedDate).ToArray();


не правильно... Exception
Строка не распознана как действительный TimeSpan.

TimeSpan.Parse(TfTimePicker.Value.ToString()), что здесь не так? берем значение типа DateTime, преобразуем его методом ToString в строку, а потом парсим в тип TimeSpan...
Спасибо:

UsilaDobry

Фотография
Курсы
Дата: 21.04.2013
Ответить


Убрал вывод исторических данных, на старте candleManager выдает Exception- Значение не может быть неопределенным

Спасибо:

UsilaDobry

Фотография
Курсы
Дата: 21.04.2013
Ответить


Я дописал создание candleManager в обработчик события ChartButton_Click. Ошибка не вылетает, но свечи не выводятся на график, появляется только сетка координат
Спасибо:

UsilaDobry

Фотография
Курсы
Дата: 22.04.2013
Ответить


Вопросы отпали после просмотра видео-урока CandleChartsProject. Сразу надо было мне смотреть видео-урок.
Спасибо:

Compressor

Фотография
Курсы
Дата: 15.07.2013
Ответить


По какой причине CancelActiveOrders() не работает?
Спасибо:

IvanB

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


Compressor Перейти
По какой причине CancelActiveOrders() не работает?

Всего скорее Вы вызываете этот метод, где он в принципе не может работать, например если Вы вызываете CancelActiveOrders в переопределенном методе OnStopping, этот метод вызывается когда стратегия уже перешла в остановку и по этому не воспринимает торговые команды.
Информация из логирования должна помочь в определении причины не работы CancelActiveOrders.
Спасибо:

Compressor

Фотография
Курсы
Дата: 16.07.2013
Ответить


Он работает в ProcessCandle(Candle candle), в стандартной схеме (как в болинджере). Какие параметры надо выводить в лог, чтобы понять в чем причина?
Спасибо:

IvanB

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


Compressor Перейти
Он работает в ProcessCandle(Candle candle), в стандартной схеме (как в болинджере). Какие параметры надо выводить в лог, чтобы понять в чем причина?


Перед вызовом метода CancelActiveOrders() надо проверить есть ли активные заявки, примерно так:
Код

Orders.Count(o => o.State == OrderStates.Active)

И если Вы используете старую версию S#, то желательно перейти на одну из последних, если это ошибка в S# старой версии, то переход на новую версию поможет ее решить.
Спасибо:

wkj

Фотография
Курсы
Дата: 05.02.2014
Ответить


Код
private bool NoActiveOrders
        {get{return Orders.Count(o => o.State != OrderStates.Active) == 0;}}

А как переписать данную конструкцию с учетом введения Messages?
Спасибо:


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

loading
clippy