Робот Белый ящик Стратегия айсберга

Автор:Чао Чжан, Дата: 2023-09-26 21:02:21
Тэги:

Обзор

Эта стратегия основана на торговле скользящей средней. Она устанавливает три уровня длинных и коротких линий входа для реализации двунаправленных открывающих позиций, относящихся к следующей стратегии тренда. Когда цена пробивается через скользящую среднюю, стратегия открывает длинные и короткие позиции в партиях путем размещения ожидаемых заказов.

Логика стратегии

Стратегия в основном использует прорыв скользящей средней для определения направления тренда. В частности, она рассчитывает среднее арифметическое значение цены открытия, цены закрытия, самой высокой цены, самой низкой цены и так далее, чтобы получить индикатор скользящей средней. Затем она устанавливает длинные линии входа выше скользящей средней и короткие линии входа ниже нее. Когда цена прорывается через скользящую среднюю снизу, длинные ордера запускаются один за другим. Когда цена прорывается сверху, короткие ордера запускаются один за другим.

Количество длинных и коротких ордеров постепенно увеличивается. Установив ожидаемые ордера, он реализует позиции открытия партии. Например, линия входа 1 запускает открытие 1 контракта длинный / короткий, линия входа 2 запускает добавление 1 контракта, а линия входа 3 добавляет еще 1 контракт. Это помогает диверсифицировать стоимость входа и снизить риск одного ордера.

Стратегия также имеет механизм хеджирования. Когда размер позиции не равен 0, он устанавливает следующий ордер стоп-лосса на основе движущейся средней цены. Если цена снова пробивается через движущуюся среднюю, он закрывает позицию, чтобы зафиксировать частичную прибыль и защитить капитал.

Подводя итог, эта стратегия в полной мере использует индикатор скользящей средней для определения направления тренда, максимизирует диапазон прибыли через несколько линий входа и контролирует риски с помощью ордеров стоп-лосса.

Анализ преимуществ

Преимущества этой стратегии:

  1. Использование скользящей средней для определения направления тренда ясно и осуществимо.

  2. С помощью нескольких входных линий он может максимально охватить весь диапазон тренда и расширить пространство прибыли.

  3. Открытие позиций в партиях снижает риск одного заказа.

  4. Механизм хеджирования стоп-лосса эффективно контролирует риски.

  5. Логика стратегии ясна и понятна, с гибкими параметрами, которые могут быть оптимизированы для разных рынков.

Анализ рисков

В этой стратегии есть некоторые риски:

  1. Вероятность ошибочных сигналов от скользящей средней.

  2. Стратегия предполагает тенденцию, поэтому обратные тенденции могут привести к огромным потерям.

  3. Слишком частые линии входа увеличивают частоту торговли и расходы на сдвиг.

  4. Открытие позиции партии увеличивает риск концентрации, когда размер позиции слишком большой.

  5. Неправильное настройка точки остановки может привести к преждевременной остановке или к слишком малой остановке.

Соответствующие меры управления рисками:

  1. Оптимизируйте параметры скользящей средней и выбирайте подходящие периоды.

  2. Обратите внимание на ключевые технические индикаторы, чтобы обнаружить сигналы об изменениях тренда и вовремя остановить потерю.

  3. Регулируйте расстояние между линиями входа, чтобы уменьшить частоту торговли.

  4. Оптимизировать размещение позиций и их соотношение с контролем риска концентрации.

  5. Опробовать и оптимизировать точки остановки потери для снижения риска остановки потери.

Руководство по оптимизации

Стратегия может быть оптимизирована из следующих аспектов:

  1. Проверить различные параметры скользящей средней и источники данных, чтобы найти наиболее эффективный индикатор скользящей средней для определения тенденций.

  2. Оптимизируйте расстояние интервала и соотношение размеров позиций длинных и коротких входных линий для поиска оптимальных параметров.

  3. Добавить другие индикаторы в качестве условий фильтрации, чтобы избежать ошибочных сигналов от скользящей средней, таких как MACD, RSI и т.д.

  4. Оптимизировать положение линии остановки потери или установить точки остановки потери динамически на основе ATR.

  5. Добавьте суждение об изменении тренда для закрытия всех позиций.

  6. Оптимизировать параметры для различных периодов рынка.

  7. Добавить динамическую корректировку размера позиции на основе процента использования счета.

Резюме

Эта стратегия оценивает направление тренда в основном на основе скользящих средних, и использует трендовые ходы в качестве источника прибыли. Используя несколько линий входа и открывая позиции в партиях, она может эффективно улавливать тенденции и расширять зоны прибыли. В то же время для контроля рисков используются механизмы остановки потерь. Логика стратегии проста и ясна, подходит для обучения новичков, а также для глубокой оптимизации.


/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Robot WhiteBox Iceberg", shorttitle = "Robot WhiteBox Iceberg", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
lots = 0.0
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = true

//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult

//Levels
longline1 = 0.0
longline2 = 0.0
longline3 = 0.0
shortline1 = 0.0
shortline2 = 0.0
shortline3 = 0.0
longline1 := long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 := lots[1] == 0 ? long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close : longline2[1]
longline3 := lots[1] == 0 ? long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close : longline3[1]
shortline1 := short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 := lots[1] == 0 ? short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close : shortline2[1]
shortline3 := lots[1] == 0 ? short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close : shortline3[1]

//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma, when = needtime)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma, when = needtime)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("L1")
    strategy.cancel("L2")
    strategy.cancel("L3")
    strategy.cancel("S1")
    strategy.cancel("S2")
    strategy.cancel("S3")
    strategy.cancel("TPL")
    strategy.cancel("TPS")

Больше