Стратегия в основном обнаруживает прорыв коробки, сформированной высокими и низкими точками линии K, чтобы судить о направлении и силе рынка. Когда происходит взлет коробки вверх, стратегия будет устанавливать длинную позицию вокруг точки прорыва. Когда происходит взлет коробки вниз, стратегия будет устанавливать короткую позицию вокруг точки прорыва. Как только будет сгенерирован торговый сигнал, стратегия будет размещать ордера на открытие позиций и устанавливать стоп-лосс и получать прибыль для контроля рисков.
Стратегия определяет период времени торговли и ищет только возможности торговли в течение этого периода.
После формирования каждой линии K стратегия оценивает наличие значительного прорыва между самыми высокими и самыми низкими ценами двух предыдущих линий K.
2.1 Если самая низкая цена 2-й K-линии выше высокой цены 1-й K-линии, происходит прорыв вверх.
2.2 Если самая высокая цена 2-й K-линии ниже самой низкой цены 1-й K-линии, происходит прорыв вниз.
После подтверждения сигнала прорыва, стратегия устанавливает длинную или короткую точку входа вокруг самой высокой или самой низкой цены текущей K-линии.
После открытия позиции, стратегия устанавливает прибыль на основе двойного диапазона прорыва, чтобы уловить ускорение тренда.
Стратегия также устанавливает стоп-лосс на самой низкой или самой высокой цене второй линии K для снижения риска потерь.
Стратегия имеет следующие преимущества:
Логика проста и легко реализовать.
Использование K-линейных прорывов для оценки направления и силы рынка имеет высокую точность.
Установка "приобрести прибыль" отслеживает возможности от ускорения тренда.
Существует четкая логика остановки потери для контроля одиночных потерь.
Идея стратегии гибкая и может быть настроена в соответствии с личным стилем.
Однако в этой стратегии есть некоторые риски:
Сигналы прорыва могут быть ложными, потерь нельзя полностью избежать.
Стоп-лосс вблизи точки входа может быть легко вызван агрессивными рынками.
Он не может судить о структуре тренда, и часто могут возникать остановки на рынках с диапазоном.
В нем не учитывается влияние различных продуктов и периодов времени.
Для дальнейшей оптимизации стратегии мы можем улучшить следующие аспекты:
Установите адаптивные параметры стоп-лосса и прибыли для различных продуктов и периодов времени.
Добавьте технические показатели для оценки тренда, чтобы избежать ловушки на рынках с диапазоном.
Установите последующие дополнительные возможности для отслеживания тренда.
Объединяйте показатели громкости для оценки подлинности сигналов прорыва и фильтра.
Добавьте алгоритмы машинного обучения, чтобы помочь определить направление тренда.
Стратегия разработана на основе простого принципа прорыва, чтобы захватить ускоренные ходы после прорывов для избыточной доходности.
/*backtest start: 2024-01-07 00:00:00 end: 2024-01-14 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Dvitash //@version=5 strategy("Casper SMC Silver Bullet", shorttitle = "Casper SB", overlay=true, calc_on_order_fills = true) startTime = input(defval = "1000", title = "Start Time") endTime = input(defval = "1600", title = "End Time") contractAmt = input.int(defval = 2, title = "Contract Amount") fvgCol = input.color(defval = color.rgb(63, 61, 179, 41), title = "FVG Color") borderCol = input.color(defval = color.rgb(35, 33, 172, 41), title = "FVG Border Color") fvgExtendLength = input.int(defval = 0, minval = 0, title = "FVG Extend Length") allowedTime = not na(time(timeframe.period, startTime + "-" + endTime +":23456", "America/New_York")) newDay = bool(ta.change(time('D'))) h = hour(time('1'), "America/New_York") var bool fvgDrawn = na var float entryPrice = na var float stopPrice = na var float tpPrice = na if newDay fvgDrawn := false // a_allBoxes = box.all // if array.size(a_allBoxes) > 0 // for i = 0 to array.size(a_allBoxes) - 1 // box.delete(array.get(a_allBoxes, i)) if allowedTime and barstate.isconfirmed and h <= 16 //Long FVG if high[2] < low and not fvgDrawn // box.new(bar_index[2], low, bar_index + fvgExtendLength, high[2], bgcolor = fvgCol, border_color = borderCol) stopPrice := low[2] entryPrice := low tpPrice := entryPrice + (math.abs(low[2] - entryPrice) * 2) // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice)) strategy.entry("long", strategy.long, contractAmt, limit = entryPrice, comment = "Long Entry") fvgDrawn := true if low[2] > high and not fvgDrawn // box.new(bar_index[2], high, bar_index + fvgExtendLength, low[2], bgcolor = fvgCol, border_color = borderCol) stopPrice := high[2] entryPrice := high tpPrice := entryPrice - (math.abs(high[2] - entryPrice) * 2) // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice)) strategy.entry("short", strategy.short, contractAmt, limit = entryPrice, comment = "Short Entry") fvgDrawn := true if h >= 16 strategy.close_all() strategy.cancel_all() strategy.exit("long exit", from_entry = "long", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Long Exit") strategy.exit("short exit", from_entry = "short", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Short Exit")