
Эта стратегия основана на комбинации высоких, низких, средних и супертенденционных индикаторов для определения рыночных тенденций.
Показатель высоких и низких значений определяет, была ли цена высокой или низкой в течение последнего определенного цикла, и накапливает баллы. Когда балл повышается, это означает усиление многоголосной силы; когда балл снижается, это означает усиление пустой силы.
С помощью среднелинейного показателя можно определить, находится ли цена в восходящей тенденции с лестничной лестницы вверх или в нисходящей тенденции с лестничной лестницы вверх. Когда среднелиния представляет собой лестничную тенденцию вверх, она представляет собой усиление многосторонних сил; когда среднелиния представляет собой лестничную тенденцию вниз, она представляет собой усиление воздушных сил.
В сочетании с высоким и низким показателем и средним показателем, определить рыночную тенденцию; затем в сочетании с направлением супертенденционного показателя, искать возможности для создания позиции. В частности, когда высокий и низкий показатели и средний показатель показывают увеличение многосторонней силы, и когда индикатор супертенденции направлен вниз, создать длинную позицию; когда высокий и низкий показатели и средний показатель показывают увеличение пустой силы, и когда индикатор супертенденции направлен вверх, создать пустую позицию.
Высокий и низкий индикаторы эффективно определяют ценовые тенденции и изменения сил, а равнолинейный индикатор эффективно определяет ценовые тенденции, которые в сочетании позволяют более точно определить направление рынка.
Создание позиций в сочетании с индикатором супертенденции позволяет избежать раннего или позднего создания позиций. Индикатор супертенденции позволяет эффективно идентифицировать точку обратной цены.
Многочисленные индикаторы взаимно проверяются, что позволяет уменьшить количество ложных сигналов.
Если высокий, низкий и средний показатели посылают ошибочные сигналы, это может привести к потере позиций.
Недостаточная настройка параметров индикатора супертенденции может привести к ошибочному сигналу.
Если же тренд изменится слишком быстро, то неправильная стоп-стадия может привести к большим потерям.
Снижение риска может быть достигнуто путем оптимизации параметров показателя, корректировки точки остановки и т. Д.
Можно тестировать различные типы среднелинейных показателей, чтобы найти оптимальное сочетание параметров.
Можно оптимизировать параметры высокого и низкого показателей и показателей средней линии, чтобы сделать сигнал более стабильным и надежным.
Для проверки в сочетании с другими показателями, такими как MACD, KD и т. д., уменьшается количество ложных сигналов.
Автоматическая оптимизация параметров и весов сигналов с использованием алгоритмов машинного обучения.
Помимо анализа эмоций, можно оценить рыночную жару и избежать торговли низкожарными сортами.
Эта стратегия использует высокие и низкие показатели и средние показатели, чтобы оценить тенденции и силы рынка, а затем в сочетании с сигналом фильтрации сверхтенденционных показателей, чтобы построить позицию при противостоянии сверхсилы и обратном повороте сверхтенденционных показателей, чтобы реализовать низкую рискованную торговлю. Преимущество стратегии заключается в проверке нескольких показателей и своевременном создании позиции, чтобы эффективно контролировать риск. Существующая проблема заключается в ложном сигнале и ошибке в оценке тенденций.
/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HeWhoMustNotBeNamed
//@version=4
strategy("AlignedMA and Cumulative HighLow Strategy", overlay=true, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)
MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
includePartiallyAligned = input(true)
HighLowPeriod = input(50, minval=1,step=1)
LookbackPeriod = input(10, minval=1,step=1)
supertrendMult = input(2, minval=1, maxval=10, step=0.5)
supertrendLength = input(10, minval=1)
tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
backtestYears = input(10, minval=1, step=1)
f_getMovingAverage(source, MAType, length)=>
ma = sma(source, length)
if(MAType == "ema")
ma := ema(source,length)
if(MAType == "hma")
ma := hma(source,length)
if(MAType == "rma")
ma := rma(source,length)
if(MAType == "vwma")
ma := vwma(source,length)
if(MAType == "wma")
ma := wma(source,length)
ma
f_getMaAlignment(MAType, includePartiallyAligned)=>
ma5 = f_getMovingAverage(close,MAType,5)
ma10 = f_getMovingAverage(close,MAType,10)
ma20 = f_getMovingAverage(close,MAType,20)
ma30 = f_getMovingAverage(close,MAType,30)
ma50 = f_getMovingAverage(close,MAType,50)
ma100 = f_getMovingAverage(close,MAType,100)
ma200 = f_getMovingAverage(close,MAType,200)
upwardScore = 0
upwardScore := close > ma5? upwardScore+1:upwardScore
upwardScore := ma5 > ma10? upwardScore+1:upwardScore
upwardScore := ma10 > ma20? upwardScore+1:upwardScore
upwardScore := ma20 > ma30? upwardScore+1:upwardScore
upwardScore := ma30 > ma50? upwardScore+1:upwardScore
upwardScore := ma50 > ma100? upwardScore+1:upwardScore
upwardScore := ma100 > ma200? upwardScore+1:upwardScore
upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0
f_getHighLowValue(HighLowPeriod)=>
currentHigh = highest(high,HighLowPeriod) == high
currentLow = lowest(low,HighLowPeriod) == low
currentHigh?1:currentLow?-1:0
inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0)
maAlignment = f_getMaAlignment(MAType,includePartiallyAligned)
alignedMaIndex = sum(maAlignment,LookbackPeriod)
maAlignmentDirection = alignedMaIndex > alignedMaIndex[1] ? 1 : alignedMaIndex < alignedMaIndex[1] ? -1 : 0
maAlignmentDirection := maAlignmentDirection == 0? nz(maAlignmentDirection[1],0):maAlignmentDirection
highLowIndex = f_getHighLowValue(HighLowPeriod)
cumulativeHighLowIndex = sum(highLowIndex,LookbackPeriod)
hlDirection = cumulativeHighLowIndex > cumulativeHighLowIndex[1] ? 1 : cumulativeHighLowIndex < cumulativeHighLowIndex[1] ? -1 : 0
hlDirection := hlDirection == 0? nz(hlDirection[1],0):hlDirection
[superTrend, dir] = supertrend(supertrendMult, supertrendLength)
buyEntry = (dir == -1 and maAlignmentDirection == 1 and hlDirection == 1)
sellEntry = (dir == 1 and maAlignmentDirection == -1 and hlDirection == -1)
barColor = buyEntry?color.lime:sellEntry?color.orange:color.gray
barcolor(barColor)
// strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when=barColor == color.lime and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=dir == 1)
strategy.entry("Sell", strategy.short, when=barColor == color.orange and inDateRange, oca_name="oca_sell")
strategy.close("Sell", when=dir == -1)