Это комплексная торговая стратегия, предназначенная для торговли биткойнами и другими криптовалютами в течение 15 минут. Она сочетает в себе несколько индикаторов для генерации сигналов покупки и продажи, включая тройную экспоненциальную скользящую среднюю (TEMA), средний истинный диапазон (ATR) и свечи Хайкина-Аши, а также функции управления рисками, такие как получение прибыли и остановка потери.
Стратегия использует следующие показатели:
Тройная экспоненциальная скользящая средняя (TEMA): три линии TEMA различной длины и источника, основанные на высоких, низких и близких ценах соответственно.
Средний истинный диапазон (ATR): персонализированный расчет ATR с упрощением EMA для измерения волатильности.
Супертенд: рассчитывается с использованием ATR и мультипликатора для определения направления тренда.
Простая скользящая средняя (SMA): применяется на короткой линии TEMA для сглаживания ее значений.
Heikin-Ashi Close: используется для дополнительного подтверждения тренда.
Сигнал длинного входа запускается, когда короткий TEMA находится выше обеих длинных линий TEMA, Supertrend является бычьим, короткий TEMA находится выше своей SMA, а закрытие Heikin-Ashi выше предыдущего закрытия.
Сигнал короткого входа запускается при выполнении противоположных условий.
Приобретение прибыли и стоп-лосс устанавливаются на 1% и 3% от входной цены.
Многочисленные факторы повышают точность Сочетание тенденций, волатильности и показателей паттернов может улучшить точность и избежать ложных сигналов.
Справедливый риск контроля стоп-лосса/прибыли Хорошо настроенные уровни стоп-лосса и прибыли блокируют прибыль и ограничивают убытки.
Большое пространство оптимизации параметров Параметры показателей могут быть гибко настроены для адаптации к изменяющимся рынкам.
Более реалистично с учетом комиссии Комиссия считает, что результаты backtest ближе к живому исполнению.
Риск ошибочных оценок от чрезмерной оптимизации Слишком большое количество комбинированных показателей также может привести к ошибочным оценкам.
Более высокий риск при краткосрочной торговле По сравнению с более длинными временными рамками, 15 минут более восприимчивы к внезапным событиям и рискам.
Стратегия стабильности нуждается в дальнейшем подтверждении Для обеспечения надежности необходимы более обширные испытания на длинной истории и рынках.
Длинная оптимизация с несколькими параметрами Многие введенные параметры приводят к длительному процессу оптимизации всех комбинаций параметров.
Оценить реальное влияние каждого показателя Обратное тестирование для проверки фактической дополнительной выгоды от каждого показателя, избегание избыточности.
Оптимизировать и протестировать стабильность Оптимизация результатов тестирования на большем количестве рынков для обеспечения надежности.
Включить стратегии стоп-лосса Например, остановка отслеживания, остановка отслеживания для дальнейшего контроля риска.
Рассмотрим другие факторы затрат Например, скольжение, чтобы сделать обратный тест ближе к живому выступлению.
Эта стратегия сочетает в себе множество индикаторов и методов управления рисками, предназначенных для 15-минутной торговли биткойнами.
/*backtest start: 2023-08-25 00:00:00 end: 2023-09-09 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © deperp //@version=5 strategy('3kilos', shorttitle='3kilos BTC 15m', overlay=true, initial_capital=100000, max_bars_back=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0) short = input.int(50, minval=1) srcShort = input(high, title='TEMA short') long = input.int(100, minval=1) srcLong = input(low, title='TEMA long 2') long2 = input.int(350, minval=1) srcLong2 = input(close, title='TEMA long 3') atrLength = input.int(550, title='ATR Length', minval=1) mult = input.float(3, title="Multiplier", minval=0.5, step=1) smaPeriod = input.int(100, title="SMA Period", minval=1) takeProfitPercent = input.float(1, title="Take Profit (%)", minval=0.1) / 100 stopLossPercent = input.float(3, title="Stop Loss (%)", minval=0.1) / 100 tema(src, length) => ema1 = ta.ema(src, length) ema2 = ta.ema(ema1, length) ema3 = ta.ema(ema2, length) 3 * (ema1 - ema2) + ema3 tema1 = tema(srcShort, short) plot(tema1, color=color.new(color.red, 0), linewidth=2) tema2 = tema(srcLong, long) plot(tema2, color=color.new(color.blue, 0), linewidth=2) tema3 = tema(srcLong2, long2) plot(tema3, color=color.new(color.green, 0), linewidth=2) // Custom ATR calculation with EMA smoothing atr_ema(src, length) => trueRange = math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1])) emaTrueRange = ta.ema(trueRange, length) emaTrueRange // Calculate ATR with EMA smoothing atr = atr_ema(close, atrLength) // Calculate Supertrend var float up = na var float dn = na var bool uptrend = na up := na(up[1]) ? hl2 - (mult * atr) : uptrend[1] ? math.max(hl2 - (mult * atr), up[1]) : hl2 - (mult * atr) dn := na(dn[1]) ? hl2 + (mult * atr) : uptrend[1] ? hl2 + (mult * atr) : math.min(hl2 + (mult * atr), dn[1]) uptrend := na(uptrend[1]) ? true : close[1] > dn[1] ? true : close[1] < up[1] ? false : uptrend[1] // Calculate SMA sma = ta.sma(tema1, smaPeriod) // Heikin-Ashi Close haTicker = ticker.heikinashi(syminfo.tickerid) haClose = request.security(haTicker, timeframe.period, close) // Trend determination using Heikin-Ashi Close longC = tema1 > tema2 and tema1 > tema3 and uptrend and tema1 > sma and haClose > haClose[1] shortC = tema1 < tema2 and tema1 < tema3 and not uptrend and tema1 < sma and haClose < haClose[1] alertlong = longC and not longC[1] alertshort = shortC and not shortC[1] useDateFilter = input.bool(true, title="Begin Backtest at Start Date", group="Backtest Time Period") backtestStartDate = input(timestamp("1 Jan 2023"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true stopLossLevelLong = close - atr * mult stopLossLevelShort = close + atr * mult longTakeProfitLevel = close * (1 + takeProfitPercent) longStopLossLevel = close * (1 - stopLossPercent) shortTakeProfitLevel = close * (1 - takeProfitPercent) shortStopLossLevel = close * (1 + stopLossPercent) if inTradeWindow and longC strategy.entry('Long', strategy.long, comment='Long') strategy.exit("TP Long", "Long", limit=longTakeProfitLevel, stop=longStopLossLevel, comment="TP/SL Long") if inTradeWindow and shortC strategy.entry('Short', strategy.short, comment='Short') strategy.exit("TP Short", "Short", limit=shortTakeProfitLevel, stop=shortStopLossLevel, comment="TP/SL Short") // Alerts alertcondition(longC, title='Long', message=' Buy Signal ') alertcondition(shortC, title='Short', message=' Sell Signal ')