Хочу реализовать такую стратегию:
в зависимости от значания индекса сделать выборку по инструментам для торговли и сформировать несколько списков инструментов
по каждому списку инструментов запустить отдельную стратегию
проверять значение индекса и если нужно переформировать списки инструментов
проверять списки на счет того правильная ли стратегия работает на инструментах в них
Причем позиции , ордера и P/L по всему этому нужно считать как для одной стратегии.
И еще маленький вопрос знатокам C# , как по простому записать в код такое:
есть Collection1 = ThreadSafeObservableCollection<Security> Collection2 = ThreadSafeObservableCollection<Position> Collection3 = ThreadSafeObservableCollection<Security>
если в Collection2 есть позиция с полем Security и в тоже время такой Security нет в Collection1 , то внести эту Security в Collection3 .
Спасибо.
Комментарии (32)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Видно слишком сложный вопрос я задал 🤨 .
Ладно буду думать сам.
Тогда следующий вопрос:
Чтоб создать свою стратегию я должен создавать клас стратегии , или могу просто создать переменную и добавить в нее правила ?
если да тогда как ?
Такое вот я догадался :
а вот как описать что делать когда правило сработает ?
Кжись нашел сам :
Strategy trade = new Strategy();
trade.Rules.Add(trade.Security.MarketDepthChanged().Do(trade_action));
Так будет правильно ?
И еще два вопросы :
Не знаток C# но как на счет
foreach (var missing_security in Collection2.Where(p => !Collection1.Contains(p.Security))) Collection3.add(missing_security)
Код взял из головы за компилируимость не отвечаю
Спасибо, добрый человек , а то уже начал думать что я тут сам с собой разговариваю 😭.
Итак сформировали мы список секурити , идем дальше:
есть описана стратегия , теперь надо запустить ее на всех секурити из списка 🤨
Если вот так сделать ? foreach (Security sec in security_list) { var strategy = new MyStrategy(sec) strategy.Start();
Будет работать ?
А если попробовать? :)
Обязательно попробую :), но нужно ждать до понедельника пока торги стартанут , жалко времени , если так не работает до понедельника еще можна думать как по другому замутить.
Стратегии стартуют в независимости от наличия или отсутствия торгов на бирже
Моя система не стартует так как список формирует налету, неужто вам так трудно сказать будет такое работать или нет ?
инструменты получаются как из квика, так из плазы и смарткома даже когда биржа не работает. т.е. этот ваш список сформирован будет.
да, это работать должно
Спасибо ,
Подскажите , основная стратегия должна ждать пока отработает дочерная ?
Если да, то как сделать чтоб не ждала , видел гдето тему на форуме где писали что должна ждать, но теперь никак не могу найти эту тему.
может нужно запускать дочерние в разных потоках ? или както через GuiAsync ?
Цитата из документации
Спасибо , успокоили :)
Второой день себе голову ломаю, как получить мои активные заявки по инструменту ? может через стакан както можна а то var orderbuy = _trader.Orders.Where(o => o.Security == securi && o.Direction == OrderDirections.Buy && o.State == OrderStates.Active);
получается неактуальная инфа :(
пример неактуальной инфы приведите
Если так сделать :
То потом как вычислить есть ли там мои заявки ?
quotes_Ask = quotes_Ask_w_my ?
Почему у меня не срабатывает такое правило основной стратегии :
MainSystem.Rules.Add(MainSystem.Security.Changed().Do(Strategy1));
Причем все другие правила срабатывают нормально.
Основную стратегию не описывал отдельным классом потому что не могу понять как отуда что-то выводить в окошка программы.
Пробовал соорудить скальпера и ордера по инструменту определять с помощью _trader.Orders...
но видно ордера в нем не успевают так быстро обновлятся и мой бот засылал столько заявок подряд что даже после его виключения заявки все еще шли :)
как я понял это все из за запаздывания регистрации ордеров .
Уде придумал новый алгоритм для работы , спасибо.
Посмотрите, плиз, на последний мой вопрос в этой теме.
Приведите подробнее данный кусок кода. непонятно что есть что
Подскажите, плиз, почему может не срабатывать такое правило :
MainSystem.Rules.Add(MainSystem.Security.Changed().Do(Step1));
Непойму , я как то неправильно задал вопрос , или на него так трудно ответить ?
Секурити стратегии изменяется постоянно но событие не срабативает , знаю по том что поставил точку остановки в функции которую вызивает событие и есче ни разу программа не останавливалась .
Что такое MainSystem? Как создается и инициализируется?
Strategy MainSystem = new Strategy();
ето фьючерс...
стоп , вы имеете в виду что это событие произойдет когда я сделаю MainSystem.Security = sec1;
какже мне вызвать событие когда просто цена sec изменится ?
но в примере записано :
а также правило на событие изменения фьючерсного контракта (его цены):
this .When(base.Security.Changed()) .Do(ReHedge);
Делаю ,
_trader.NewTrades += trades => this.GuiAsync(() =>
this.Instrument.Text = sec.LastTrade.Price.ToString();
Значение в текстовом поле програмки меняется
LastTrade.Price, скорее всего, берется из Таблицы всех сделок, а не из инструментов. Какие настройки у таблицы инструменты? Если в ней только стандартные столбцы, то событие вызываться не будет.
В таблице инструментов которая идет в настройках последней версии S# брал те что для опционов вобше нету поля последняя цена :( но все таки в примере Sample в таблице инструментов последняя сделка видна :)
Я понял, спасибо , попробую через : MainSystem.Security.LastTradePriceLess и море .