Стратегия торговли с комбинацией нескольких индикаторов

Автор:Чао Чжан, Дата: 2023-10-26 15:22:28
Тэги:

img

Обзор

Эта стратегия сочетает в себе индикаторы CCI, ADX и AO для генерации торговых сигналов для длинных и коротких позиций. CCI определяет уровни перекупа и перепродажи, ADX определяет силу и направление тренда, а AO помогает в колебаниях рынков. Комбинация из нескольких индикаторов улучшает стабильность и эффективность торговой системы.

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

  1. CCI указывает на перекуп выше 100 и перепродажи ниже -100. Эта стратегия длится долго, когда CCI ниже 0.

  2. ADX измеряет силу тренда. DI+ показывает силу восходящего тренда, DI- показывает силу нисходящего тренда. ADX - это средняя сила тренда. Эта стратегия длится, когда DI+ ниже 25.

  3. AO - это быстрая SMA минус медленная SMA. Повышение AO означает усиление бычьего импульса, а падение AO - усиление медленного импульса. Эта стратегия длится, когда AO ниже 0.

  4. Правила торговли следующие: "Долго" - когда CCI < 0 и DI+ < 25 и AO < 0; "Долго" - когда DI+ > 25.

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

  6. Используйте "strategy.entry" для длинных сигналов и "strategy.close" для сигналов выхода.

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

  1. CCI фильтрует шум от различных рынков, уменьшая ложные сигналы.

  2. ADX рано выявляет более сильные тенденции.

  3. AO избегает торговли на нестабильных рынках.

  4. Многочисленные индикаторы проверяют сигналы, увеличивая надежность.

  5. Динамическое размещение позиций эффективно управляет рисками.

  6. Простая и понятная логика, легко следовать.

Риски

  1. CCI пытается определить диапазон vkosd.

  2. ADX отстает от поворотов тренда.

  3. AO борется с нестабильной консолидацией.

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

  5. Динамическое размещение зависит от волатильности и рынков.

  6. Потенциал больших вычетов, требующий строгого управления рисками.

Усовершенствования

  1. Оптимизировать параметры CCI для различных рынков.

  2. Оптимизируйте параметры ADX для улавливания изменений тренда.

  3. Корректировать параметры AO для условий волатильности.

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

  5. Добавьте стоп-потеря для контроля снижения.

  6. Включите громкость для предотвращения ложного прорыва.

  7. Настройка размеров фиксированного положения по инструменту.

Заключение

Эта стратегия объединяет CCI, ADX и AO для генерации достаточно надежных длинных сигналов. Динамическое размещение и управление позицией риска контроля. Логика проста и понятна для новичков. Но он борется в диапазоне рынков, с значительным потенциалом оптимизации, необходимым для разных рынков. Необходимо дальнейшее тестирование и настройка для надежности на всех инструментах и средах.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Strategy Niel", shorttitle="Strategy Niel", max_bars_back=2000, initial_capital=1000)

//Input variables
buywhenadxabove = input(25)
buywhendiplusbelow = input(10)
buywhenccibelow = input(0)
buywhenawesomeoscillatorbelow = input(0)
sellwhendiplusabove = input(25)

//CCI script
numberofbarsforcci = input(20)
CCI = cci(close,numberofbarsforcci)

//+DI and ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)

//plot(sig, color=red, title="ADX")
//plot(up, color=blue, title="+DI")
//plot(down, color=orange, title="-DI")


//Awesome Oscillator
nLengthSlow = input(34, minval=1, title="Length Slow")
nLengthFast = input(5, minval=1, title="Length Fast")
xSMA1_hl2 = sma(hl2, nLengthFast)
xSMA2_hl2 = sma(hl2, nLengthSlow)
xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
cClr = xSMA1_SMA2 > xSMA1_SMA2[1] ? blue : red
//plot(xSMA1_SMA2, style=histogram, linewidth=1, color=cClr)

buy = sig > buywhenadxabove and up < buywhendiplusbelow  and CCI < buywhenccibelow and xSMA1_SMA2 < buywhenawesomeoscillatorbelow 

ordersize=floor(strategy.equity/close) // Floor returns largest integer, strategy.equity gives total equity remaining - allows to dynamically calculate the order size as the account equity increases or decreases.
strategy.entry("long",strategy.long,ordersize,when= buy) //strategy.entry let's you enter the market variables id ("long"), strategy.long (long position entry), size of the order and when the order should happen
bought = strategy.position_size[0] > strategy.position_size[1]
entry_price = valuewhen(bought, open, 0)
sell = up > sellwhendiplusabove 
strategy.close("long", when=sell ) //strategy.close let's you close your position with variables id ('long') and when this should happen




Больше