Стратегия "серебряной пули", основанная на выходе из коробки

Автор:Чао Чжан, Дата: 2024-01-15 12:06:32
Тэги:

img

Обзор

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

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

  1. Стратегия определяет период времени торговли и ищет только возможности торговли в течение этого периода.

  2. После формирования каждой линии K стратегия оценивает наличие значительного прорыва между самыми высокими и самыми низкими ценами двух предыдущих линий K.

    2.1 Если самая низкая цена 2-й K-линии выше высокой цены 1-й K-линии, происходит прорыв вверх.

    2.2 Если самая высокая цена 2-й K-линии ниже самой низкой цены 1-й K-линии, происходит прорыв вниз.

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

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

  5. Стратегия также устанавливает стоп-лосс на самой низкой или самой высокой цене второй линии K для снижения риска потерь.

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

Стратегия имеет следующие преимущества:

  1. Логика проста и легко реализовать.

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

  3. Установка "приобрести прибыль" отслеживает возможности от ускорения тренда.

  4. Существует четкая логика остановки потери для контроля одиночных потерь.

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

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

Однако в этой стратегии есть некоторые риски:

  1. Сигналы прорыва могут быть ложными, потерь нельзя полностью избежать.

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

  3. Он не может судить о структуре тренда, и часто могут возникать остановки на рынках с диапазоном.

  4. В нем не учитывается влияние различных продуктов и периодов времени.

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

Для дальнейшей оптимизации стратегии мы можем улучшить следующие аспекты:

  1. Установите адаптивные параметры стоп-лосса и прибыли для различных продуктов и периодов времени.

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

  3. Установите последующие дополнительные возможности для отслеживания тренда.

  4. Объединяйте показатели громкости для оценки подлинности сигналов прорыва и фильтра.

  5. Добавьте алгоритмы машинного обучения, чтобы помочь определить направление тренда.

Резюме

Стратегия разработана на основе простого принципа прорыва, чтобы захватить ускоренные ходы после прорывов для избыточной доходности.


/*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")

Больше