Cubigator
Cubigator личный блог
18 июля 2024, 00:35

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

Решил я тут запилить пару новых роботов. Один просто гоняется за ценой, другой гоняется за ценой только в сторону сессионного тренда. Протестировал на минутках за полтора года без убыточных месяцев с просадкой 20%. Тут надо торговать, но встал вопрос, как запустить их в Квике если если каждый мой робот, перед открытием позиции сверяет текущую открытую позицию по инструменту и открывает новую согласно этому. А если несколько роботов начнут кидать свои заявки по одному инструменту, то, соответственно, понять какая позиция должна быть в данный момент открыта роботы не смоут.
Первая мысль была открыть субсчета и запускать каждого робота на своём субсчете, но прикинув сколько нужно открыть таких субсчетов я от этой мысли отказался, когда вспомнил, что читал тут на форуме статью одного товарища, к сожалению, не помню его имени, где он писал, что у него торгуют сотни роботов, а объем позиции вычисляется по сумме их текущих позиций. Эврика! Кстати, о «бесполезности» чтения Смарт-лаба.
Дальше возник вопрос как технически отслеживать текущую сумму позиции. Передавать переменную между скриптами без организации какого-нибудь сервера не получится, и есть ли в Lua вообще такая возможность не знаю, но есть возможность передавать данные через простой текстовый файл. Роботы ежеминутно скидывают их текущий объем позиции, а написанный специально для этого робот считывает у всех эти данные и уже он устанавливает нужный объем.
        -------------------------------передача данных для установки объема внешним скриптом----------------------
        function instOutVol()
          local vol_name=DataScriptFolder.."\\"..ScriptName.."_vol.params" — название файла
          local requiredVol=0 — размер позиции
          if Trade and TradeSide==«SELL» then requiredVol=-vol elseif Trade and TradeSide==«BUY» then requiredVol=vol else requiredVol = 0 end
          local confline = os.time()..","..requiredVol..","..DayRezPip+TradeRezPip
          f_write2(vol_name, confline)
          -----------------------------
          if not file_exists(vol_name) then
            mes(string.format("%s — %s — Объём %s %s НЕ передан.", ScriptName, sec_code,requiredVol,voldecl(requiredVol)),3)
          else
            mes(string.format("%s — %s — Передан объём %s %s.", ScriptName, sec_code,requiredVol,voldecl(requiredVol)),1)
          end
        end

Объем передаю с временной меткой, чтобы робот считыватель знал, обновились данные или нет.
Вот так задачка была решена.

9 Комментариев
  • Beach Bunny
    18 июля 2024, 01:00
    Извращение конечно.
    Делаешь одного робота, который торгует все стратегии и выводит суммарную позицию на рынок.
  • Андрей &
    18 июля 2024, 03:22
    Несколько счетов у разных брокеров и пускай каждый робот, торгует себе на здоровье по отдельному счёту. 
    • __rtx
      18 июля 2024, 22:41
        
  • __rtx
    18 июля 2024, 22:41
      
  • nicknh
    18 июля 2024, 08:54
    Устанавливаете комментарий в транзакции и тогда ордер и сделки по нему будут его содержать. Правда стоит учитывать, что его длина ограничена, плюс, что важнее, не все брокеры его фиксируют. Для примера, так рекламируемый брокер Алор, не позволяет его хранить.
  • Некто
    19 июля 2024, 00:39
    Пользуясь случаем… Будь проклят тот архитектор квика, который забил на доступ и хранение истории сделок!
    • VалиБакS
      21 октября 2024, 08:07
      Некто, так они наверно специально все затирают, чтобы не было возможности проверять за ними расчеты, а так можно и накинуть комиса и никто 99 не заметит
    • VалиБакS
      21 октября 2024, 08:07
      Некто, и у букмейкеров всегда затирается история… не спроста же

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн