S#

Прошу помощи: реализация stop и limit приказов, как они понимаются в WLD


Прошу помощи: реализация stop и limit приказов, как они понимаются в WLD
Atom Ответить
26.10.2011


Приветствую!

Я делаю первые шаги в освоении S# (в C++ и C# ориентируюсь), прошу помочь с вопросом, который может быть элементарным. Есть код для WLD3, который иллюстрирует использование stop и limit приказов, его нужно реализовать под S#:

Код

var nPeriod: integer  = 3;
var setEntry: integer = #Low;
var serExit: integer  = #High;

var Bar: integer;
for Bar := nPeriod to BarCount() - 1 do
begin
    if not LastPositionActive() then
    begin
        var fEnterLimitPrice: float = Highest(Bar, setEntry, nPeriod);
        BuyAtLimit(Bar + 1, fEnterLimitPrice, 'Enter');
    end
    else
    begin
        var fExitStopPrice: float = Lowest(Bar, serExit, nPeriod);
        SellAtStop(Bar + 1, fExitStopPrice, LastPosition(), 'Exit');
    end;
end;


Пример со скользящей средней я смотрел, как на его основе сделать нужное не понял. Большая просьба к авторам библиотеки и ко всем, кто тайное знание уже постиг: не могли бы вы продемонстрировать, как логика, реализованная выше, должна выглядеть при использовании S# ? Мне кажется, что портирование такого кода под S# можно использовать как ещё один пример, включаемый в поставку библиотеки, поскольку на логическом скелете этого кода (перебор баров, ветки "если есть поза" и "если нет позы", стоп и лимт приказы) строится львиная доля систем, реализуемых в пакетах теханализа.

Заранее благодарен.

Теги:


Спасибо:




15 Ответов
frontman

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


А что именно то не понятно? Как стопы выставлять? Или лимитированные заявки? Потому что все остальное это уже C#...
Спасибо:

Romant

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


У меня в голове цельная картина того, как правильно использовать S#, не собирается.

Чтобы она собралась, нужен листинг программы на шарпе с использованием S#, который бы реализовал описанную в терминах WLD3 логику. Документацию курил, пример с SMA курил - но собрать на основании этого систему с такой логикой, как в приведённом коде, не получается.
Автор топика
Спасибо:

Alexander

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


Romant Перейти
У меня в голове цельная картина того, как правильно использовать S#, не собирается.

Чтобы она собралась, нужен листинг программы на шарпе с использованием S#, который бы реализовал описанную в терминах WLD3 логику. Документацию курил, пример с SMA курил - но собрать на основании этого систему с такой логикой, как в приведённом коде, не получается.


Давайте конкретно - в чём проблема. Где возникают ошибки
"Проблема со всем" - не проблема.
Спасибо:

Romant

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


Хорошо.

Вопрос первый: как выставить в квик stop и limit ордера, чтобы они в квике отработали так же, как они работают при симуляции в WLD3 ? В WLD3 это работает так:

BuyAtLimit(Bar, Price) - купить бумагу по цене, меньшей или равной Price, в течение бара Bar; если купить не получилось и бар кончился, то ордер не срабатывает.
BuyAtStop(Bar, Price) - купить бумагу по цене, большей или равной Price, в течение бара Bar; если купить не получилось и бар кончился, то ордер не срабатывает.

Вопрос второй: как проконтролировать выполнение этих ордеров (сработали/не сработали) ?

Вопрос третий: каким вообще образом верно организовывать робота, который априори работает с барами, а не с тиками ? Это я про использование событийной модели или же модели дискретного опроса.

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

Alexander

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


Romant Перейти
Хорошо.

Вопрос первый: как выставить в квик stop и limit ордера, чтобы они в квике отработали так же, как они работают при симуляции в WLD3 ? В WLD3 это работает так:

BuyAtLimit(Bar, Price) - купить бумагу по цене, меньшей или равной Price, в течение бара Bar; если купить не получилось и бар кончился, то ордер не срабатывает.
BuyAtStop(Bar, Price) - купить бумагу по цене, большей или равной Price, в течение бара Bar; если купить не получилось и бар кончился, то ордер не срабатывает.

Вопрос второй: как проконтролировать выполнение этих ордеров (сработали/не сработали) ?

Вопрос третий: каким вообще образом верно организовывать робота, который априори работает с барами, а не с тиками ? Это я про использование событийной модели или же модели дискретного опроса.

Спасибо.



1) смотрите пример выставления стоп заявок. сделайте им время жизни (ExpiryDate) до конца текущего бара. Либо отслеживайте время вручную и вызывайте CancelOrder
2) Документация, состояния заявок
3) см. пример SampleSMA
Спасибо:

Romant

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


Александр,

Насколько я понимаю, авторы Stock# позиционируют данную библиотеку в качестве инструмента, достаточно простого в освоении, при условии знания C#. По моему опыту, миллиона вопросов можно избежать, сделав один пример, который бы включал в себя не только какой-то один компонент, а некую систему в совокупности. Это прекрасно, что Вы перечислили пункты (1), (2) и (3) - для меня это пока что ссылки на то, что я уже смотрел, но всё равно был вынужден задать вопрос на форуме.

В общем, спасибо :-)
Автор топика
Спасибо:

Alexander

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


Romant Перейти
Александр,

Насколько я понимаю, авторы Stock# позиционируют данную библиотеку в качестве инструмента, достаточно простого в освоении, при условии знания C#. По моему опыту, миллиона вопросов можно избежать, сделав один пример, который бы включал в себя не только какой-то один компонент, а некую систему в совокупности. Это прекрасно, что Вы перечислили пункты (1), (2) и (3) - для меня это пока что ссылки на то, что я уже смотрел, но всё равно был вынужден задать вопрос на форуме.

В общем, спасибо :-)



Да, мы позиционируем Stock# как простую библиотеку для написания роботов.
Вы предлагаете нам написать примеры на все случаи жизни? Это не удастся сделать.
Что нам лучше - писать тысячи примеров или всё же вводить новую функциональность в Stock#, исправлять существующие проблемы?
Примеры может написать любой пользователь - пишите, мы их готовы включать в библиотеку. Примеры к тому же на codeplex все выложили - доступны для правки.

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

А так - тот десяток примеров, которые мы написали, покрывает половину случаев точно - и инструменты для тестирования, и опционов, и стратегии.
Спасибо:

Romant

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


Я отдаю себе отчёт, что продукт бесплатен, но тем не менее ...

Поскольку я сам разработчик, мне понятно, почему Ваш ответ именно таков – но мне так же понятно, что причины этого ответа не в том, что всё время уходит на добавление фичей и правку багов, а в том, что саппортом девелоперу заниматься, как правило, не хочется. В переписке с одним из членов команды стокшарп, когда я пытался решить для себя, стоит ли инвестировать время в освоение продукта, было сказано, что на форуме, по мере возможности, поддержка юзеров осуществляется. Думаю, что Вы сами, как разработчик, едва ли будете вдохновлены ответом поддержки в стиле «мы очень заняты, делаем новые фичи, а вы читайте доку».
Автор топика
Спасибо:

Alexander

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


Romant Перейти
Я отдаю себе отчёт, что продукт бесплатен, но тем не менее ...

Поскольку я сам разработчик, мне понятно, почему Ваш ответ именно таков – но мне так же понятно, что причины этого ответа не в том, что всё время уходит на добавление фичей и правку багов, а в том, что саппортом девелоперу заниматься, как правило, не хочется. В переписке с одним из членов команды стокшарп, когда я пытался решить для себя, стоит ли инвестировать время в освоение продукта, было сказано, что на форуме, по мере возможности, поддержка юзеров осуществляется. Думаю, что Вы сами, как разработчик, едва ли будете вдохновлены ответом поддержки в стиле «мы очень заняты, делаем новые фичи, а вы читайте доку».


Роман, думаю вы не будете спорить с тем, что у нас поддержка одна из лучших на российском рынке.
Покажите хоть сколько-нибудь похожее.

На какие вопросы я не ответил?
Если по 3му вопросу - то в SampleSma идёт именно работа с барами.
По 2му - чётко дан ответ по поводу того как понять исполнилась ли заявка, отменена ли или ещё что
По 1му - лимит и стоп ордера выставляются в большинстве примеров на квик. как сделать так чтоб снималась по истечению бара - дал 2 решения.

Что ещё?
Спасибо:

Supervisor

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


Romant Перейти

Вопрос первый: как выставить в квик stop и limit ордера, чтобы они в квике отработали так же, как они работают при симуляции в WLD3 ? В WLD3 это работает так:

BuyAtLimit(Bar, Price) - купить бумагу по цене, меньшей или равной Price, в течение бара Bar; если купить не получилось и бар кончился, то ордер не срабатывает.
BuyAtStop(Bar, Price) - купить бумагу по цене, большей или равной Price, в течение бара Bar; если купить не получилось и бар кончился, то ордер не срабатывает.

Условно для BuyAtLimit(Bar, Price):
Код

var order = new Order
{
Portfolio = _portfolio,
Price = _price,
Security = _security,
Volume = 1,
Direction = OrderDirections.Buy,
CancelTime = _currentTime + _timeframe,
};
trader.RegisterOrder(order);

Для BuyAtStop несколько хитрее.
Спасибо:

Alexander

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


Supervisor Перейти
Romant Перейти

Вопрос первый: как выставить в квик stop и limit ордера, чтобы они в квике отработали так же, как они работают при симуляции в WLD3 ? В WLD3 это работает так:

BuyAtLimit(Bar, Price) - купить бумагу по цене, меньшей или равной Price, в течение бара Bar; если купить не получилось и бар кончился, то ордер не срабатывает.
BuyAtStop(Bar, Price) - купить бумагу по цене, большей или равной Price, в течение бара Bar; если купить не получилось и бар кончился, то ордер не срабатывает.

Условно для BuyAtLimit(Bar, Price):
Код

var order = new Order
{
Portfolio = _portfolio,
Price = _price,
Security = _security,
Volume = 1,
Direction = OrderDirections.Buy,
CancelTime = _currentTime + _timeframe,
};
trader.RegisterOrder(order);

Для BuyAtStop несколько хитрее.


только ExpiryDate, а не CancelTime
Спасибо:

frontman

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


BigGrin
Спасибо:

Romant

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


to Supervisor: большое спасибо.

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

esper

Фотография
Программист
Дата: 26.10.2011
Ответить


Стоп заявки тут. Лимитные есть в SampleSMA.
Спасибо:

Alexander

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


Romant Перейти
to Supervisor: большое спасибо.

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


Quik\Sample
NewOrderWindow.xaml.cs и NewStopOrderWindow.xaml.cs
Спасибо:


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

loading
clippy