В процессе загрузки ресурсов... загрузка...

В случае, если в соответствии со статьей 312 (b) CRR, "основные" позиции не могут быть включены в списки.

Автор:Чао Чжан, Дата: 2024-05-15 16:56:03
Тэги:CCIРСИККSMAЕМАСММАКРСTMA

img

Обзор

Эта стратегия сочетает в себе три технических индикатора: CCI, RSI и Keltner Channels (KC), а также трендовый фильтр для достижения двунаправленной торговли на валютных парах AUDNZD и GBPNZD. Она использует CCI и RSI для определения условий перекупки и перепродажи, KC в качестве ориентира для остановки потерь и получения прибыли и скользящей средней в качестве трендового фильтра для открытия позиций в соответствии с трендом.

Принципы стратегии

  1. Вычислите показатели CCI, RSI и KC. Верхняя линия KC - это средняя линия плюс ATR, а нижняя линия - средняя линия минус ATR.
  2. Выберите тип скользящей средней (SMA, EMA, SMMA, CMA или TMA) и метод фильтра тренда (OFF, Normal или Reversed) на основе входных параметров.
  3. Условия входа в длинные позиции: допускается длинная, CCI < линия перепродажи, закрытие < нижняя линия KC, RSI < линия перепродажи, объем > 50-периодный средний объем * мультипликатор, отсутствует текущая длинная позиция.
  4. Условия входа на короткие позиции: допускаются короткие, CCI > перекупленная линия, закрытие > верхняя линия KC, RSI > перекупленная линия, объем > 50-периодный средний объем * множитель, отсутствует текущая короткая позиция.
  5. Долгое условие выхода: CCI > 0.
  6. Отправлять предупреждения при открытии и закрытии позиций.

Преимущества стратегии

  1. Сочетает в себе несколько показателей для всеобъемлющего анализа, улучшая точность сигнала.
  2. Использует методы фильтрации тенденций, позволяющие гибкие корректировки на основе рыночных тенденций.
  3. Предлагает несколько типов скользящих средних, адаптирующихся к различным характеристикам рынка.
  4. Подтверждена на основе долгосрочных исторических данных, демонстрирующих хорошую стабильность и пригодность для длительного использования.
  5. Двухнаправленная торговля, подходящая для различных рыночных условий, обеспечивающая больше возможностей для получения прибыли.
  6. Высоко автоматизированный, не требующий ручного вмешательства, экономия времени и усилий.

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

  1. Отсутствует традиционный режим стоп-лосса и "take profit", что может привести к значительным снижениям при экстремальных рыночных условиях.
  2. Может часто открывать и закрывать позиции на нестабильных рынках, увеличивая расходы на торговлю.
  3. Использует относительно короткие периоды CCI, потенциально генерируя звуковые сигналы.
  4. Фильтры тенденций могут иметь ограниченную эффективность, когда тенденции неясны или волатильность рынка увеличивается.
  5. Фиксированный размер позиции, неспособный адаптироваться к изменениям волатильности рынка.

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

  1. Для контроля риска одной сделки следует рассмотреть возможность добавления остановок или остановок с фиксированной точкой потерь.
  2. Дальнейшая оптимизация параметров RSI и CCI для снижения шума.
  3. Рассмотреть возможность введения показателей волатильности, таких как ATR, для корректировки размеров позиций и стоп-лосс на основе волатильности рынка.
  4. Добавьте больше валютных пар и оптимизируйте параметры индивидуально на основе характеристик каждого инструмента.
  5. Попытка внедрить машинное обучение и другие технологии ИИ для адаптивной оптимизации параметров.

Резюме

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


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('CCI Strategy with Trend Filter AUDNZD, GBPNZD', overlay=true, default_qty_type=strategy.cash, default_qty_value=50000, commission_value=0.0005, slippage=2, initial_capital=10000)

// State variables to ensure one entry per signal
var bool isLongOpen = false
var bool isShortOpen = false

// Input Parameters for allowing long and short trades
allowLong = input(true, title='Allow Long Trades')
allowShort = input(true, title='Allow Short Trades')

// Trend Filter Inputs
maType = input.string(title='MA Type', options=['OFF', 'SMA', 'EMA', 'SMMA', 'CMA', 'TMA'], defval='OFF')
trendFilterMethod = input.string(title='Trend Filter Method', options=['OFF', 'Normal', 'Reversed'], defval='OFF')
maLength = input(14, title='MA Length')

// Other Input Parameters
lengthKC = input(30, title='Keltner Channels Length')
multKC = input(0.7, title='Keltner Channels Multiplier')
lengthCCI = input(5, title='CCI Length')
overboughtCCI = input(75, title='CCI Overbought Level')
oversoldCCI = input(-75, title='CCI Oversold Level')
rsiPeriod = input(30, title='RSI Period')
rsiOverbought = input(60, title='RSI Overbought Level')
rsiOversold = input(60, title='RSI Oversold Level')
volumeMultiplier = input.float(0, title='Volume Multiplier', step=0.1, minval=0)

// Define Moving Averages
var float maValue = na
if maType == 'SMA'
    maValue := ta.sma(close, maLength)
else if maType == 'EMA'
    maValue := ta.ema(close, maLength)
else if maType == 'SMMA'
    float initialSMMA = ta.sma(close, maLength)
    maValue := na(maValue[1]) ? initialSMMA : (maValue[1] * (maLength - 1) + close) / maLength
else if maType == 'CMA'
    float firstSMA = ta.sma(close, maLength)
    float secondSMA = ta.sma(close, maLength)
    maValue := na(maValue[1]) ? firstSMA : (firstSMA + secondSMA - maValue[1]) / 2
else if maType == 'TMA'
    maValue := ta.sma(ta.sma(close, math.round(maLength / 2)), math.round(maLength / 2) + 1)

// Entry Conditions with Trend Filter
longCondition = allowLong and (trendFilterMethod == 'OFF' or trendFilterMethod == 'Normal' and close > maValue or trendFilterMethod == 'Reversed' and close < maValue)
shortCondition = allowShort and (trendFilterMethod == 'OFF' or trendFilterMethod == 'Normal' and close < maValue or trendFilterMethod == 'Reversed' and close > maValue)

// Keltner Channels
typicalPrice = hlc3
middleLine = ta.sma(typicalPrice, lengthKC)
range_1 = multKC * ta.atr(lengthKC)
upperChannel = middleLine + range_1
lowerChannel = middleLine - range_1

// CCI
cci = ta.cci(close, lengthCCI)

// RSI
rsi = ta.rsi(close, rsiPeriod)

// Volume
volCondition = volume > ta.sma(volume, 50) * volumeMultiplier

// Combined Entry Conditions with Trend Filter and state check
longCondition := longCondition and cci < oversoldCCI and low < lowerChannel and rsi < rsiOversold and volCondition and not isLongOpen
shortCondition := shortCondition and cci > overboughtCCI and high > upperChannel and rsi > rsiOverbought and volCondition and not isShortOpen

// Execute orders at the open of the new bar after conditions are met
if longCondition
    strategy.entry('Long', strategy.long)
    alert('LicenseID,buy,AUDNZD,risk=1')
    isLongOpen := true
if shortCondition
    strategy.entry('Short', strategy.short)
    alert('LicenseID,sell,AUDNZD,risk=1')
    isShortOpen := true

// Exit Conditions and Alerts
longExitCondition = cci > 0
shortExitCondition = cci < 0
if (longExitCondition and isLongOpen)
    strategy.close('Long')
    alert('LiceneseID,closelong,AUDNZD')
    isLongOpen := false
if (shortExitCondition and isShortOpen)
    strategy.close('Short')
    alert('LicenseID,closeshort,AUDNZD')
    isShortOpen := false

// Plotting
plot(upperChannel, color=color.new(color.red, 0), linewidth=1)
plot(lowerChannel, color=color.new(color.green, 0), linewidth=1)
hline(overboughtCCI, 'Overbought', color=color.red)
hline(oversoldCCI, 'Oversold', color=color.green)


Связанные

Больше