Стратегия комбинирования двойной скользящей средней и индикатора Уильямса

Автор:Чао Чжан, Дата: 2024-02-01 15:04:51
Тэги:

img

Обзор

Эта стратегия сочетает в себе две разные стратегии. Первая стратегия генерирует сигналы на основе двойного скользящего среднего перекрестка цен на акции. Вторая стратегия основана на Удивительном осцилляторе из Индикаторов Уильямса.

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

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

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

Длинная позиция принимается, когда обе стратегии дают сигнал покупки. Короткая позиция принимается, когда обе стратегии дают сигнал продажи.

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

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

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

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

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

Кроме того, множество параметров создает некоторые трудности для оптимизации. Неподходящие комбинации параметров могут привести к плохой эффективности стратегии.

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

Возможности для расширения

Стратегия может быть улучшена в нескольких аспектах:

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

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

  3. Для диверсификации комбинации стратегий следует рассмотреть возможность замены двойной скользящей средней с другими техническими показателями, такими как KDJ.

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

Заключение

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 20/06/2019
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
//    This indicator plots the oscillator as a histogram where blue denotes 
//    periods suited for buying and red . for selling. If the current value 
//    of AO (Awesome Oscillator) is above previous, the period is considered 
//    suited for buying and the period is marked blue. If the AO value is not 
//    above previous, the period is considered suited for selling and the 
//    indicator marks it as red.
//  You can make changes in the property for set calculating strategy MA, EMA, WMA
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

BillWilliamsAC(nLengthSlow, nLengthFast,nLengthMA, nLengthEMA, nLengthWMA, bShowWMA, bShowMA, bShowEMA) =>
    pos = 0
    xSMA1_hl2 = sma(hl2, nLengthFast)
    xSMA2_hl2 = sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    xResWMA = wma(nRes, nLengthWMA)
    xResMA = sma(nRes, nLengthMA)
    xResEMA = ema(nRes, nLengthEMA)
    xSignalSeries = iff(bShowWMA, xResWMA,
                     iff(bShowMA, xResMA, 
                      iff(bShowEMA, xResEMA, na)))
    cClr = nRes > nRes[1] ? blue : red
    pos := iff(xSignalSeries[2] < 0 and xSignalSeries[1] > 0, 1,
	         iff(xSignalSeries[2] > 0 and xSignalSeries[1] < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Bill Williams. Awesome Oscillator (AC) with Signal Line", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
nLengthSlow = input(34, minval=1, title="Length Slow")
nLengthFast = input(5, minval=1, title="Length Fast")
nLengthMA = input(15, minval=1, title="MA")
nLengthEMA = input(15, minval=1, title="EMA")
nLengthWMA = input(15, minval=1, title="WMA")
bShowWMA = input(type=bool, defval=true, title="Show and trading WMA")
bShowMA = input(type=bool, defval=false, title="Show and trading MA")
bShowEMA = input(type=bool, defval=false, title="Show and trading EMA")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posBillWilliamsAC = BillWilliamsAC(nLengthSlow, nLengthFast,nLengthMA, nLengthEMA, nLengthWMA, bShowWMA, bShowMA, bShowEMA)
pos = iff(posReversal123 == 1 and posBillWilliamsAC == 1 , 1,
	   iff(posReversal123 == -1 and posBillWilliamsAC == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? red: possig == 1 ? green : blue )

Больше