
Стратегия определяет направление и силу рынка, в основном, путем мониторинга прорывов коробки, образованных высокими и низкими точками K-линии. Когда происходит прорыв вверх по коробке, стратегия устанавливает позитивную точку входа вблизи точки прорыва; когда происходит прорыв вниз по коробке, стратегия устанавливает обратную точку входа вблизи точки прорыва.
Стратегия определяет торговый период, в течение которого она будет искать торговые возможности.
После формирования каждой K-линии стратегия определяет, имеются ли существенные прорывы в верхней и нижней ценах на первых двух K-линиях.
2.1 Если минимальная цена второй K-линии выше максимальной цены первой K-линии, то происходит прорыв вверх по коробке.
2.2 Если максимальная цена второй K-линии ниже минимальной цены первой 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")