ИЧИМОКУ КУМО ТВИСТ СТРАТЕГИЯ

Автор:Чао Чжан, Дата: 2023-10-27 16:36:59
Тэги:

img

Обзор

Стратегия Ichimoku Kumo Twist использует линию конверсии, базовую линию и лидирующие линии протяженности индикатора Ichimoku для построения торговых сигналов в качестве следующей стратегии тренда. Она определяет краткосрочные и среднесрочные точки обратного движения тренда, наблюдая за поворотами в облаках Ichimoku, чтобы найти точки более низкого риска и возможности перекупки / перепродажи. Стратегия может использоваться для внутридневной торговли, а также многонедельной промежуточной торговли.

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

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

Сигналы покупки генерируются, когда лидирующий спан 1 пересекает лидирующий спан 2, в то время как сигналы продажи генерируются, когда лидирующий спан 1 пересекает лидирующий спан 2.

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

  • Стратегия Ichimoku cloud twist сочетает в себе как краткосрочные, так и среднесрочные тенденции, которые могут эффективно идентифицировать точки переворота тренда.

  • Стратегии, основанные на средней реверсии, имеют некоторую задержку, чтобы отфильтровать шум.

  • Использование облаков для измерения силы тренда позволяет улучшить входы и выходы.

  • Не нужно оптимизировать параметры - стандартные параметры Ichimoku работают хорошо.

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

  • Ichimoku имеет довольно сложные внутренние компоненты и не очень чувствителен к изменениям параметров, что затрудняет чрезмерную оптимизацию.

  • На рынках с ограниченным диапазоном может быть несколько ложных сигналов.

  • Разница между краткосрочными и среднесрочными тенденциями может привести к сбоям в стратегии.

  • Стоп-потери необходимы для контроля риска, в противном случае возможны большие выводы.

Возможности для улучшения

  • Испытывать различные комбинации конверсионных и базовых периодов, чтобы найти оптимальное равновесие.

  • Добавьте фильтры с другими индикаторами, чтобы избежать приема сигналов в неблагоприятных формациях.

  • Включайте стратегии стоп-лосса, такие как динамические или отстающие стопы.

  • Оптимизировать размещение позиций на основе рыночных условий.

  • Добавьте комиссионные в обратные тесты для более реалистичных результатов.

Резюме

В целом, стратегия Ichimoku Cloud Twist является умеренной стратегией, следующей за трендом. Она может эффективно идентифицировать повороты в тренде и занимать позиции в соответствии с направлением тренда. Но для долгосрочного использования требуется мониторинг и строгий контроль рисков. Постоянные улучшения в настройке параметров, фильтрах входа, механике остановки потерь и многом другом могут еще больше повысить стабильность и прибыльность этой стратегии.


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

//@version=3
strategy(title="Ichimoku Kumo Twist Strategy (Presets)", shorttitle="Kumo Twist Strategy", overlay=true)

xlowest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := min(x, v)
    x

xlowest(src, len) =>
    na(src[len]) ? xlowest_(src, len) : lowest(src, len)

xhighest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := max(x, v)
    x

xhighest(src, len) =>
    na(src[len]) ? xhighest_(src, len) : highest(src, len)

dropn(src, n) =>
    na(src[n]) ? na : src

ichiConversionPeriods(presets) =>
    if presets == "Crypto Doubled"
        20
    else
        if presets == "Crypto Singled"
            10
        else
            if presets == "Standard Doubled"
                18
            else
                9

ichiBasePeriods(presets) =>
    if presets == "Crypto Doubled"
        60
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                52
            else
                26

ichiLaggingSpan2Periods(presets) =>
    if presets == "Crypto Doubled"
        120
    else
        if presets == "Crypto Singled"
            60
        else
            if presets == "Standard Doubled"
                104
            else
                52

ichiDisplacement(presets) =>
    if presets == "Crypto Doubled"
        30
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                26
            else
                26

scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets",  options=["Crypto Doubled", "Crypto Singled", "Standard Doubled", "Standard Singled"], defval="Crypto Doubled")
dropCandles = input(1, minval=0, title="Drop first N candles")
showClouds = input(false, "Show Clouds")
stoploss = input(true, title="Stop Loss")

conversionPeriods = ichiConversionPeriods(presets)
basePeriods = ichiBasePeriods(presets)
laggingSpan2Periods = ichiLaggingSpan2Periods(presets)
displacement = ichiDisplacement(presets)
logScaling = scaling == "Log"

lows = dropn(low, dropCandles)
highs = dropn(high, dropCandles)

lowsp = logScaling ? log(lows) : lows
highsp = logScaling ? log(highs) : highs

donchian(len) =>
    avg(xlowest(lowsp, len), xhighest(highsp, len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

golong = crossover(leadLine1, leadLine2)
goshort = crossunder(leadLine1, leadLine2)

strategy.entry("Buy", strategy.long, when=golong, stop=(stoploss ? high+syminfo.mintick : na))
strategy.entry("Sell", strategy.short, when=goshort, stop=(stoploss ? low-syminfo.mintick : na))

conversionLinep = logScaling ? exp(conversionLine) : conversionLine
baseLinep = logScaling ? exp(baseLine) : baseLine
leadLine1p = logScaling ? exp(leadLine1) : leadLine1
leadLine2p = logScaling ? exp(leadLine2) : leadLine2

plot(showClouds ? conversionLinep : na, color=#0496ff, title="Conversion Line")
plot(showClouds ? baseLinep : na, color=#991515, title="Base Line")

p1 = plot(showClouds ? leadLine1p : na, offset = displacement, color=green, title="Lead 1")
p2 = plot(showClouds ? leadLine2p : na, offset = displacement, color=red, title="Lead 2")
fill(p1, p2, color = showClouds ? (leadLine1p > leadLine2p ? green : red) : na)


Больше