Стратегия оценки быков и медведей с непрерывным числом K-line

EMA ATR
Дата создания: 2024-05-17 13:54:06 Последнее изменение: 2024-05-17 13:54:06
Копировать: 1 Количество просмотров: 682
1
Подписаться
1617
Подписчики

Стратегия оценки быков и медведей с непрерывным числом K-line

Обзор

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

Стратегический принцип

  1. Записывается количество последовательных случаев, когда выполняются условия множественного и пустого голосов. Если конечная цена выше предыдущей K-линии, множественный счет плюс 1, пустое голосовое счетное число пересчитывается на 0, если конечная цена ниже предыдущего K-линии, пустое голосовое счетное число плюс 1, множественное голосовое счетное число пересчитывается на 0, в противном случае оба счета пересчитываются на 0.
  2. Когда многоголовый счет достигнет заданного числа k, открыть многоголовую позицию, установить стоп-лосс и стоп-стоп.
  3. Для многоочередных позиций фиксируются максимальные цены после открытия позиции, когда максимальная цена превышает минимальную единицу изменения цены открытия позиции iTGT, а цена закрытия отступает до iPcnt% ниже максимальной цены.
  4. Когда количество пустых голов достигает указанного числа k2, открывается позиция пустых голов, устанавливается стоп-лосс и стоп-стоп.
  5. Для пустой позиции, записываемой после открытия позиции, когда минимальная цена ниже минимального изменения iTGT в начальной цене, а цена закрытия отражается на iPcnt% выше минимальной цены, ликвидация позиции.

Стратегические преимущества

  1. Простые, понятные, логичные решения, основанные на последовательности K-линий.
  2. Внедрены механизмы подвижных остановок, которые активно защищают прибыль после некоторого периода движения цены в благоприятном направлении.
  3. Настройки стоп-лосса и стоп-стоп позволяют эффективно контролировать риски и блокировать прибыль.
  4. Параметры настраиваются под различные рынки и стили торговли.

Стратегический риск

  1. Частые открытия позиций в условиях кризиса могут привести к более высоким затратам на прокат.
  2. Суждение о количестве последовательных K-линий зависит от рыночного шума, и частоту сигналов может быть достаточно.
  3. Фиксированные точки стоп-лосса и стоп-стопинг могут не адаптироваться к изменению волатильности рынка.

Направление оптимизации стратегии

  1. Введение дополнительных технических показателей, таких как средняя линия, волатильность и т. д., которые помогут определить силу и направление тенденции.
  2. Оптимизация условий запуска мобильного тормоза, например, адаптация процента отмены в соответствии с ATR.
  3. Используйте более динамичные методы остановки и остановки, такие как отслеживание остановки, ступенчатая остановка и т. д.
  4. Оптимизация параметров, чтобы найти оптимальное сочетание параметров для различных рынков и сортов.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2024-04-16 00:00:00
end: 2024-05-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("K Consecutive Candles 數來寶V2", max_bars_back=300, overlay=true)

// 定義用戶輸入
k = input.int(3, title="Number of Consecutive Candles for Long", minval=1)
k2 = input.int(3, title="Number of Consecutive Candles for Short", minval=1)
stopLossTicks = input.int(500, title="Stop Loss (Ticks)")
takeProfitTicks = input.int(500, title="Take Profit (Ticks)")
iTGT = input.int(200,"iTGT")  // 移動停利點
iPcnt = input.int(50,"iPcnt")  // 移動停利%

var float TrailValue = 0
var float TrailExit = 0
var float  vMP = 0

BarsSinceEntry = ta.barssince(strategy.position_size == 0)

vMP := strategy.position_size

// 创建一个包含键值对的字典
addArrayData(type, value) =>
    alert_array = array.new_string()
    array.push(alert_array, '"timenow": ' + str.tostring(timenow))
    array.push(alert_array, '"seqNum": ' + str.tostring(value))
    array.push(alert_array, '"type": "' + type + '"')
    alertstring = '{' + array.join(alert_array,', ') + '}'


// 定義條件變量
var int countLong = 0  // 記錄連續多頭條件成立的次數
var int countShort = 0 // 記錄連續空頭條件成立的次數

// 計算連續大於或小於前一根的收盤價格的次數
if close > close[1]
    countLong += 1
    countShort := 0 // 重置空頭計數
else if close < close[1]
    countShort += 1
    countLong := 0 // 重置多頭計數
else
    countLong := 0
    countShort := 0

// 開設多頭倉位條件
if countLong >= k
    strategy.entry("Long Entry", strategy.long)
    strategy.exit("Exit Long", "Long Entry", loss=stopLossTicks, profit=takeProfitTicks)
    

if vMP>0
    TrailValue := ta.highest(high,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue > strategy.position_avg_price + iTGT * syminfo.minmove/syminfo.pricescale and close < TrailExit
        
        strategy.close("Long Entry", comment = "Trl_LX"+ str.tostring(close[0]))
// 開設空頭倉位條件
if countShort >= k2
    strategy.entry("Short Entry", strategy.short)
    strategy.exit("Exit Short", "Short Entry", loss=stopLossTicks, profit=takeProfitTicks)

if vMP<0    
    TrailValue := ta.lowest(low,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue < strategy.position_avg_price - iTGT * syminfo.minmove/syminfo.pricescale and close > TrailExit
        
        strategy.close("short60", comment = "Trl_SX"+ str.tostring(close[0]))