← Zurück

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

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

Я делаю первые шаги в освоении 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# можно использовать как ещё один пример, включаемый в поставку библиотеки, поскольку на логическом скелете этого кода (перебор баров, ветки "если есть поза" и "если нет позы", стоп и лимт приказы) строится львиная доля систем, реализуемых в пакетах теханализа.

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (15)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

frontman
frontman

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

Romant
Romant Autor

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

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

Alexander
Alexander

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

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

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

Romant
Romant Autor

Хорошо.

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

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

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

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

Спасибо.

Alexander
Alexander

Romant: Хорошо.

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

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

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

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

Спасибо.

  1. смотрите пример выставления стоп заявок. сделайте им время жизни (ExpiryDate) до конца текущего бара. Либо отслеживайте время вручную и вызывайте CancelOrder
  2. Документация, состояния заявок
  3. см. пример SampleSMA
Supervisor
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 несколько хитрее.

Alexander
Alexander

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
Romant
Romant Autor

Александр,

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

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

Alexander
Alexander

Romant: Александр,

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

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

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

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

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

Romant
Romant Autor

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

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

Alexander
Alexander

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

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

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

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

Что ещё?

frontman
frontman

😀

Romant
Romant Autor

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

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

Alexander
Alexander

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

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

Quik\Sample NewOrderWindow.xaml.cs и NewStopOrderWindow.xaml.cs

esper
esper

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