В процессе загрузки ресурсов... загрузка...

Стратегия прорыва "двойной черепахи"

Автор:Чао Чжан, Дата: 2023-11-28 16:25:41
Тэги:

img

Обзор

Стратегия Double Turtle Breakthrough объединяет стратегию прорыва торгового торгового процесса черепахи и принцип движения стоп-лосса Линды Рашке с отличными показателями прорыва и строгим контролем рисков.

Принцип стратегии

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

Конкретными этапами работы являются:

  1. Вычислить большой цикл (20 циклов) высокая точка предвысокой и малый цикл (4 цикла) высокая точка маленькийPeriodHigh.

  2. Когда максимум последней K-линии больше, чем prevHigh, и prevHigh больше, чем smallPeriodHigh, это указывает на то, что высокая точка большого цикла прерывает высокую точку малого цикла.

  3. После открытия позиции настроить движущийся стоп-лосс. подождать, пока позиция перевернется, прежде чем отменить ордер стоп-лосса, чтобы не быть остановленным.

  4. Когда объем удержания достигает установленного цикла цикла движения прибыли (в настоящее время 0 циклов), выйдите из половины позиции в следующем цикле и установите движущуюся стоп-лосс и движущуюся прибыль для отслеживания спреда и блокировки прибыли.

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

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

Это весьма всеобъемлющая прорывная стратегия со следующими преимуществами:

  1. Объединение двойного цикла торговли черепахами может эффективно идентифицировать прорывные сигналы.

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

  3. Выход в два этапа, получение прибыли пополам, затем полный выход через переход, получение прибыли, блокировка прибыли.

  4. Принимать во внимание как длинные, так и короткие операции, соответствующие характеристикам чередующихся рынков с несколькими пустыми рынками.

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

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

Основные риски и контрмеры следующие:

  1. Риск ложных прорывов: надлежащим образом регулировать параметры цикла, чтобы обеспечить действенность прорыва.

  2. Риск преследования увеличивается, а риск убийства падает.Фильтрация должна сочетаться с тенденциями и моделями, чтобы избежать открытия позиций в конце тенденций.

  3. Риск отмывания стоп-потери.

  4. Риск чрезмерно чувствительной движущейся остановки потери.

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

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

  1. Добавить фильтры прорыва объема для обеспечения подлинности прорывов.

  2. Добавить индикаторы оценки тренда, чтобы избежать открытия позиций в конце тренда.

  3. Объедините больше временных циклов, чтобы определить время прорыва.

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

  5. Комбинировать с другими стратегиями статистического арбитража.

Резюме

Стратегия Double Turtle Breakthrough Strategy широко использует методы двойного цикла, прорывные теории и строгие методы управления рисками, чтобы обеспечить высокие показатели выигрыша при обеспечении стабильной доходности. Эта стратегия проста и понятна, легко понимается и применяется, и это отличная количественная стратегия. Эта стратегия все еще имеет большой потенциал для оптимизации. Инвесторы могут внедрять инновации на этой основе, чтобы создать еще лучшие торговые системы.


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

//@version=3
strategy(title = "Turtle soup plus one", shorttitle = "Turtle soup plus one", overlay=true)

bigPeriod = input(20)
smallPeriod = input(4)
takeProfitBars = input(0)
trailingStop = input(5, title = "Trailing stop percentages")
if (strategy.position_size == 0)
    strategy.cancel("Long")
    strategy.cancel("Short")
    strategy.cancel("Stop")



stopLossPrice = 0.1
stopLossPrice := nz(stopLossPrice[1])
takeProfitStarted = false
takeProfitStarted := nz(takeProfitStarted[1])

prevHigh = highest(high, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodHigh = highest(high, smallPeriod - 1)[1]
if (high > prevHigh and prevHigh > smallPeriodHigh and close > prevHigh and strategy.position_size == 0)
    strategy.order("Short", strategy.short, stop = prevHigh)

if strategy.position_size < 0 and strategy.position_size[1] == 0
    stopLossPrice := high[1]
    strategy.order("Stop", strategy.long, qty = -strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size < 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close < strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.long, qty = ceil(-strategy.position_size / 2), stop = close)
    if (strategy.position_size != -1)
        strategy.exit("ExitFull", "Short", qty = -strategy.position_size - ceil(-strategy.position_size / 2), loss = stopLossPrice, trail_price  = close, trail_offset = -(close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)
        

prevLow = lowest(low, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodLow = lowest(low, smallPeriod - 1)[1]
if (low < prevLow and prevLow < smallPeriodLow and close < prevLow and strategy.position_size == 0)
    strategy.order("Long", strategy.long, stop = prevLow)

if strategy.position_size > 0 and strategy.position_size[1] == 0
    stopLossPrice := low[1]
    strategy.order("Stop", strategy.short, qty = strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size > 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close > strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.short, qty = ceil(strategy.position_size / 2), stop = close)
    if (strategy.position_size != 1)
        strategy.exit("ExitFull", "Long", qty = strategy.position_size - ceil(strategy.position_size / 2),loss = stopLossPrice, trail_price  = close, trail_offset = (close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2038, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()

Больше