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