Блог им. VARG0R

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

Решил я тут запилить пару новых роботов. Один просто гоняется за ценой, другой гоняется за ценой только в сторону сессионного тренда. Протестировал на минутках за полтора года без убыточных месяцев с просадкой 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

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

★1
9 комментариев
Извращение конечно.
Делаешь одного робота, который торгует все стратегии и выводит суммарную позицию на рынок.
avatar
Beach Bunny, Можно и так, но тут нужно с многозадачностью в Lua разбираться, а я не профессиональный программист. И так как задача решена подручными методами, особой мотивации разбираться в этом нет.
avatar
Несколько счетов у разных брокеров и пускай каждый робот, торгует себе на здоровье по отдельному счёту. 
avatar
  
avatar
  
avatar
Устанавливаете комментарий в транзакции и тогда ордер и сделки по нему будут его содержать. Правда стоит учитывать, что его длина ограничена, плюс, что важнее, не все брокеры его фиксируют. Для примера, так рекламируемый брокер Алор, не позволяет его хранить.
avatar
Пользуясь случаем… Будь проклят тот архитектор квика, который забил на доступ и хранение истории сделок!
avatar
Некто, так они наверно специально все затирают, чтобы не было возможности проверять за ними расчеты, а так можно и накинуть комиса и никто 99 не заметит
avatar
Некто, и у букмейкеров всегда затирается история… не спроста же
avatar

теги блога Cubigator

....все тэги



UPDONW
Новый дизайн