← Zurück

Посоветуйте как правильно организовать стратегии:

Хочу реализовать такую стратегию:

  1. в зависимости от значания индекса сделать выборку по инструментам для торговли и сформировать несколько списков инструментов

  2. по каждому списку инструментов запустить отдельную стратегию

  3. проверять значение индекса и если нужно переформировать списки инструментов

  4. проверять списки на счет того правильная ли стратегия работает на инструментах в них

Причем позиции , ордера и P/L по всему этому нужно считать как для одной стратегии.

И еще маленький вопрос знатокам C# , как по простому записать в код такое:

есть Collection1 = ThreadSafeObservableCollection<Security> Collection2 = ThreadSafeObservableCollection<Position> Collection3 = ThreadSafeObservableCollection<Security>

если в Collection2 есть позиция с полем Security и в тоже время такой Security нет в Collection1 , то внести эту Security в Collection3 .

Спасибо.

War dieses Thema hilfreich?

Thema teilen

Kommentare (32)

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

lesser
lesser Autor

Видно слишком сложный вопрос я задал 🤨 .

Ладно буду думать сам.

Тогда следующий вопрос:

Чтоб создать свою стратегию я должен создавать клас стратегии , или могу просто создать переменную и добавить в нее правила ?

если да тогда как ?

Такое вот я догадался :

        Strategy trade = new Strategy();

        trade.Rules.Add(trade.Security.MarketDepthChanged()); 

а вот как описать что делать когда правило сработает ?

lesser
lesser Autor

Кжись нашел сам :

Strategy trade = new Strategy();

trade.Rules.Add(trade.Security.MarketDepthChanged().Do(trade_action));

Так будет правильно ?

lesser
lesser Autor

И еще два вопросы :

  1. Можно ли с основной стратегии запустить дочерную стратегию на несколько инструментов ?
  2. можно ли запустить их так что - бы не дожыдатся их завершения . то есть я например передал инстумент дочерней стратегии на котирование но в тоже время реагирую на события основной стратегии.
Ortn
Ortn

lesser: Хочу реализовать такую стратегию:

  1. в зависимости от значания индекса сделать выборку по инструментам для торговли и сформировать несколько списков инструментов

  2. по каждому списку инструментов запустить отдельную стратегию

  3. проверять значение индекса и если нужно переформировать списки инструментов

  4. проверять списки на счет того правильная ли стратегия работает на инструментах в них

Причем позиции , ордера и P/L по всему этому нужно считать как для одной стратегии.

И еще маленький вопрос знатокам C# , как по простому записать в код такое:

есть Collection1 = ThreadSafeObservableCollection<Security> Collection2 = ThreadSafeObservableCollection<Position> Collection3 = ThreadSafeObservableCollection<Security>

если в Collection2 есть позиция с полем Security и в тоже время такой Security нет в Collection1 , то внести эту Security в Collection3 .

Спасибо.

Не знаток C# но как на счет

foreach (var missing_security in Collection2.Where(p => !Collection1.Contains(p.Security))) Collection3.add(missing_security)

Код взял из головы за компилируимость не отвечаю

lesser
lesser Autor

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

lesser
lesser Autor

Итак сформировали мы список секурити , идем дальше:

есть описана стратегия , теперь надо запустить ее на всех секурити из списка 🤨

Если вот так сделать ? foreach (Security sec in security_list) { var strategy = new MyStrategy(sec) strategy.Start();

             }

Будет работать ?

Alexander
Alexander

lesser: Итак сформировали мы список секурити , идем дальше:

есть описана стратегия , теперь надо запустить ее на всех секурити из списка 🤨

Если вот так сделать ? foreach (Security sec in security_list) { var strategy = new MyStrategy(sec) strategy.Start();

             }

Будет работать ?

А если попробовать? :)

lesser
lesser Autor

Alexander Mukhanchikov: А если попробовать? :)

Обязательно попробую :), но нужно ждать до понедельника пока торги стартанут , жалко времени , если так не работает до понедельника еще можна думать как по другому замутить.

Alexander
Alexander

lesser:

Alexander Mukhanchikov: А если попробовать? :)

Обязательно попробую :), но нужно ждать до понедельника пока торги стартанут , жалко времени , если так не работает до понедельника еще можна думать как по другому замутить.

Стратегии стартуют в независимости от наличия или отсутствия торгов на бирже

lesser
lesser Autor

lesser: Стратегии стартуют в независимости от наличия или отсутствия торгов на бирже

Моя система не стартует так как список формирует налету, неужто вам так трудно сказать будет такое работать или нет ?

Alexander
Alexander

Alexander Mukhanchikov:

lesser: Стратегии стартуют в независимости от наличия или отсутствия торгов на бирже

Моя система не стартует так как список формирует налету, неужто вам так трудно сказать будет такое работать или нет ?

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

да, это работать должно

lesser
lesser Autor

Спасибо ,

Подскажите , основная стратегия должна ждать пока отработает дочерная ?

Если да, то как сделать чтоб не ждала , видел гдето тему на форуме где писали что должна ждать, но теперь никак не могу найти эту тему.

может нужно запускать дочерние в разных потоках ? или както через GuiAsync ?

Alexander
Alexander

lesser: Спасибо ,

Подскажите , основная стратегия должна ждать пока отработает дочерная ?

Если да, то как сделать чтоб не ждала , видел гдето тему на форуме где писали что должна ждать, но теперь никак не могу найти эту тему.

может нужно запускать дочерние в разных потоках ? или както через GuiAsync ?

Цитата из документации

Родительская и все ее дочерние стратегии исполняются параллельно.

lesser
lesser Autor

Спасибо , успокоили :)

lesser
lesser Autor

Второой день себе голову ломаю, как получить мои активные заявки по инструменту ? может через стакан както можна а то var orderbuy = _trader.Orders.Where(o => o.Security == securi && o.Direction == OrderDirections.Buy && o.State == OrderStates.Active);

получается неактуальная инфа :(

Alexander
Alexander

lesser: Второой день себе голову ломаю, как получить мои активные заявки по инструменту ? может через стакан както можна а то var orderbuy = _trader.Orders.Where(o => o.Security == securi && o.Direction == OrderDirections.Buy && o.State == OrderStates.Active);

получается неактуальная инфа :(

пример неактуальной инфы приведите

lesser
lesser Autor

Если так сделать :

        var quotes_Ask =  stakan.GetQuotes(OrderDirections.Buy);
        var quotes_Ask_w_my = stakan.GetFilteredQuotes(OrderDirections.Buy,null);

То потом как вычислить есть ли там мои заявки ?

quotes_Ask = quotes_Ask_w_my ?

lesser
lesser Autor

Почему у меня не срабатывает такое правило основной стратегии :

MainSystem.Rules.Add(MainSystem.Security.Changed().Do(Strategy1));

Причем все другие правила срабатывают нормально.

Основную стратегию не описывал отдельным классом потому что не могу понять как отуда что-то выводить в окошка программы.

lesser
lesser Autor

Пробовал соорудить скальпера и ордера по инструменту определять с помощью _trader.Orders...

но видно ордера в нем не успевают так быстро обновлятся и мой бот засылал столько заявок подряд что даже после его виключения заявки все еще шли :)

как я понял это все из за запаздывания регистрации ордеров .

Уде придумал новый алгоритм для работы , спасибо.

Посмотрите, плиз, на последний мой вопрос в этой теме.

Alexander
Alexander

lesser: Пробовал соорудить скальпера и ордера по инструменту определять с помощью _trader.Orders...

но видно ордера в нем не успевают так быстро обновлятся и мой бот засылал столько заявок подряд что даже после его виключения заявки все еще шли :)

как я понял это все из за запаздывания регистрации ордеров .

Уде придумал новый алгоритм для работы , спасибо.

Посмотрите, плиз, на последний мой вопрос в этой теме.

Приведите подробнее данный кусок кода. непонятно что есть что

lesser
lesser Autor

Подскажите, плиз, почему может не срабатывать такое правило :

MainSystem.Rules.Add(MainSystem.Security.Changed().Do(Step1));

lesser
lesser Autor

Непойму , я как то неправильно задал вопрос , или на него так трудно ответить ?

Секурити стратегии изменяется постоянно но событие не срабативает , знаю по том что поставил точку остановки в функции которую вызивает событие и есче ни разу программа не останавливалась .

esper
esper

Что такое MainSystem? Как создается и инициализируется?

lesser
lesser Autor

Strategy MainSystem = new Strategy();

        MainSystem.Security = sec;
        MainSystem.Trader = _trader;
        MainSystem.Portfolio = account;
        MainSystem.RemoveChildStrategies = true;

        MainSystem.Rules.Add(MainSystem.Security.Changed().Do(Step1));

        MainSystem.Rules.Add(MainSystem.Started().Do(StartTrade));
        MainSystem.Rules.Add(MainSystem.Stopping().Do(StopTrade));


        MainSystem.Start();
esper
esper

Секурити стратегии изменяется постоянно Как смотрите что оно меняется?

lesser
lesser Autor

ето фьючерс...

стоп , вы имеете в виду что это событие произойдет когда я сделаю MainSystem.Security = sec1;

какже мне вызвать событие когда просто цена sec изменится ?

esper
esper

lesser: стоп , вы имеете в виду что это событие произойдет когда я сделаю MainSystem.Security = sec1; Нет, установка инструмента для стратегии не вызывает это событие. Это событие вызывается когда меняются данные в таблице инструментов, они у вас меняются?

lesser
lesser Autor

но в примере записано :

а также правило на событие изменения фьючерсного контракта (его цены):

this .When(base.Security.Changed()) .Do(ReHedge);

lesser
lesser Autor

Делаю ,

_trader.NewTrades += trades => this.GuiAsync(() =>

this.Instrument.Text = sec.LastTrade.Price.ToString();

Значение в текстовом поле програмки меняется

esper
esper

LastTrade.Price, скорее всего, берется из Таблицы всех сделок, а не из инструментов. Какие настройки у таблицы инструменты? Если в ней только стандартные столбцы, то событие вызываться не будет.

lesser
lesser
lesser Autor

В таблице инструментов которая идет в настройках последней версии S# брал те что для опционов вобше нету поля последняя цена :( но все таки в примере Sample в таблице инструментов последняя сделка видна :)

lesser
lesser Autor

Я понял, спасибо , попробую через : MainSystem.Security.LastTradePriceLess и море .