Блог им. 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

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

#2 по комментариям
3 комментария
Извращение конечно.
Делаешь одного робота, который торгует все стратегии и выводит суммарную позицию на рынок.
avatar
Beach Bunny, Можно и так, но тут нужно с многозадачностью в Lua разбираться, а я не профессиональный программист. И так как задача решена подручными методами, особой мотивации разбираться в этом нет.
avatar
Несколько счетов у разных брокеров и пускай каждый робот, торгует себе на здоровье по отдельному счёту. 
avatar

теги блога Cubigator

....все тэги



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