Блог им. hobbit
Тенденция — это, попросту говоря, направление рыночного движения.… Рынки зачастую движутся между двумя параллельными линиями
Джон Мэрфи
Алгоритмические стоп-лоссы и тейк-профиты всегда можно визуализировать. То же можно проделать и с другими алгосигналами открытия и закрытия. Главное преимущество человека над торговым роботом — визуальное восприятие картинки торгов, как текущей, так и в прошлой истории. Так почему бы этим не воспользоваться?
Как-то упоминал о своем любимом индикаторе SavMeter, основанном на линиях двух SAR. Одна линия — трендовая. По ней открывается позиция. Другая, более быстрая, — замена трейлинг-стопа. При ее пробитии, позиция закрывается. Глядя на историю можно легко отрегулировать расстояние линий так, чтобы не было слишком много ложных сигналов. Это проще и быстрее, чем гонять тестера на истории.
Что особенно важно, индикатор SavMeter несет в себе эффект синергии. Объединяет сразу несколько инструментов. Объединенный график становится более сглаженными, это тоже уменьшает ложные сигналы. Корректировать параметры на одном графике проще, чем заниматься оптимизацией на графиках каждого отдельного инструмента.
Получается, синергия — более эффективная диверсификация. Среднегодовая доходность SavMeter на часовых фьючерсах на истории у меня всегда превышала 200%. На спотовом рынке получается в 5 раз меньше. Приблизительно 40%. Но есть еще более эффективный способ получения дохода.
Однажды меня заинтересовал блог AlexChi на Смартлабе. Он предлагает достаточно простую систему (BWS) выборки акций на недельном моменте. Система позволяет обогнать индекс. Нечто похожее, с сортировкой в таблице, я уже встречал. Не помню иностранного автора. Решил проверить. Действительно. На 4х-часовых фьючерсах доходность увеличилась в 1.5-2 раза больше, чем давал индикатор SavMeter, настроенный на одни и те же инструменты. Но прежде нужно было править LbotTest.
О новых свежих возможностях 2025. Они достаточно принципиальны, как и 3D. Речь идет об использовании внешних функций. Раньше, язык Lbot был замкнутым. Закрытым для сложных внешних алгоритмов и расчетов. Сейчас таких проблем нет. Фактически, можно расширять и развивать Lbot дальше по своему усмотрению, не вторгаясь во внутренности LbotTest_2025 и Lbot3D_2025. Для расширения нужно только знать язык Qlua (Lua для QUIK).
Пример использования внешней функции best34() на языке Lbot.
OpenLong = {best34(), 1} >= 29 CloseLong = {best34(), 1} < 29 OpenShort = {best34(), 1} <= -29 CloseShort = {best34(), 1} > -29
По правилам выше, позиция открывается в лонг только у тех инструментов, которые входят в шестерку сильнейших. Имеют вес от 29 до 34. Более сильный получает больший вес (больший номер). Критерием выборки может быть индикатор RSI. Ниже пример такой функции best34(). Код требуется поместить в файл LbotExternal.lua (внутри нового дистрибутива). Робот выбирает лучшие на данный момент инструменты из заранее заданных 34х в массиве TGS.
------------------------------------------------------------------ local getCBar = getConcBar -- Выборка лучшего инструмента по RSI (*_h4_r) local TGS = { 'Si_h4_r', 'CR_h4_r', 'Eu_h4_r', 'GL_h4_r', 'BR_h4_r', 'NA_h4_r', 'RI_h4_r', 'MM_h4_r', 'NG_h4_r', 'GD_h4_r' , 'SV_h4_r', 'SF_h4_r', 'ED_h4_r', 'SR_h4_r', 'GZ_h4_r', 'RN_h4_r', 'SN_h4_r', 'LK_h4_r', 'VB_h4_r', 'YD_h4_r' , 'TI_h4_r', 'MN_h4_r', 'ME_h4_r', 'GK_h4_r', 'TT_h4_r', 'AL_h4_r', 'PZ_h4_r', 'AF_h4_r', 'NK_h4_r', 'AK_h4_r' , 'MT_h4_r', 'PI_h4_r', 'CH_h4_r', 'VK_h4_r' } local MEDIUM = 17 function best34(id, tag, line, index) local tg = tag .. '_r' local n = getNumCandles(tg) if n == 0 then message('best34() ОШИБКА Отсутствует график ' .. tg, 3) return 0 end local b, n = getCandlesByIndex(tg, line, index - 1, 1) if n ~= 1 then message('best34() ОШИБКА Отсутствует значение №' .. index .. ' графика ' .. tg, 3) return 0 end b = b[0] local c = b.close local rate = 1 local exists local p, k = 0, 0 if c > 50 then p = p + 1 elseif c < 50 then k = k + 1 end index = index - 1 for _, tg1 in pairs(TGS) do if tg1 and tg1 ~= tg then local b1 = getCBar(tag, index, tg1, line) if b1 then local c1 = b1.close if c1 > 50 then p = p + 1 elseif c < 50 then k = k + 1 end exists = true if c > c1 then rate = rate + 1 end end end end assert(exists, 'best34() ОШИБКА Отсутствуют сравниваемые значения для графика ' .. tg) local rm if p >= MEDIUM then rm = p elseif k <= MEDIUM then rm = -k else rm = 0 end if rm < 0 then rate = rate - #TGS - 1 end return rate end
Продолжение следует. Пожалуйста, ставьте лайки, чтобы поддержать проект.
Начало здесь
Тестер для конструктора роботов Lbot3D. Ч1. Нужна обратная связь
Ч2. Как все начиналось (из истории трейдера и программиста)
Ч3. В начале все стратегии были приведены к одной общей формуле
Ч4. Расшифровка торговой формулы E=#X%VD
Ч5. Пример расчета потерь при торговле на нескольких таймфреймах
Ч6. Оптимальное распределение активов при торговле фьючерсами
Ч7. Первое время, сама торговля для меня была тестированием
Ч8. Роботам недостаточно одного теста, тем более без добавок и низкого качества