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


Дата создания: 2023-11-07 16:16:45 Последнее изменение: 2023-11-07 16:16:45
Копировать: 0 Количество просмотров: 730
1
Подписаться
1617
Подписчики

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

Обзор

Стратегия автоматического трейдинга с использованием рейтингов технических индикаторов для идентификации направления и силы тенденции. Стратегия анализирует группу индикаторов, включая Ичимоку, HMA, RSI, Stoch, CCI и MACD. По результатам каждого индикатора, оценивайте его, а затем суммируйте оценки всех индикаторов, чтобы сформировать общий рейтинг.

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

Стратегия состоит из нескольких частей:

  1. Вычислить набор показателей, включая облако Ичимоку, Hull Moving Average, индекс относительной силы и слабости, случайные показатели, индекс товарных каналов и чувствительность к Moving Average.

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

  3. Сравните все показатели и получите суммарную оценку.

  4. Сравнение комплексной оценки с заранее установленным порогом позволяет определить направление общей тенденции. Если оценка выше порога, то она является высокой, а если она ниже порога, то она является низкой.

  5. Позиции открываются в зависимости от результатов оценки.

  6. Стоп-лост устанавливается по показателю ATR.

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

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

Эта стратегия имеет следующие преимущества:

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

  2. Используйте преимущества индикатора, чтобы определить тенденцию и текущую силу. Например, Ichimoku Cloud определяет большую тенденцию, Stoch определяет перекуп и перепродажу.

  3. Автоматическая торговля позволяет избежать эмоционального влияния и строго выполнять стратегические сигналы.

  4. Использование ATR для установки преимущества стоп-лосс способствует контролю риска.

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

  6. Логика стратегии проста и понятна, легко понять и изменить.

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

Также существуют следующие риски:

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

  2. Если индикатор выдает ошибочный сигнал, то средний балл не может полностью избежать потери.

  3. ATR-остановка может быть слишком близкой или слишком мягкой, требуя корректировки в зависимости от особенностей породы.

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

  5. При этом частота сделок может быть слишком высокой, а их стоимость может повлиять на конечную прибыль.

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

Эта стратегия может быть оптимизирована в следующих аспектах:

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

  2. Направление весов для каждого показателя, оптимизация алгоритмов оценки.

  3. Динамическая корректировка параметров ATR, чтобы приостановка убытков была более подходящей для рыночных колебаний.

  4. Добавление условий фильтрации сделок, уменьшение ненужной частоты сделок. Например, фильтрация тенденций, фильтрация объемов сделок и т. Д.

  5. Проводить пошаговую оптимизацию, чтобы найти оптимальный диапазон параметров, а затем случайную/сетевую оптимизацию, чтобы найти оптимальную комбинацию параметров.

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

  7. Сочетание с другими эффективными торговыми стратегиями в портфель стратегий.

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

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

Исходный код стратегии
/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Ichi HMA RSI Stoch CCI MACD Technicals Rating Strategy",shorttitle="TRSv420",overlay=true,default_qty_type=strategy.percent_of_equity,default_qty_value=50,commission_type=strategy.commission.percent,commission_value=0.05)
res = input("", title="Indicator Timeframe", type=input.resolution)
Period = input(defval = 14, title = "Period Length", minval = 2)
MinSignalStrength= input(title="Minimum Signal Strength", type=input.float, defval=1.1, minval=0.00, maxval=2.00, step=0.1)
Price = input(defval=open, title="Price Source", type=input.source)
Use_Only_Buy= input(false, title = "Use ONLY BUY mode",type=input.bool)
Use_Only_Sell= input(false, title = "Use ONLY SELL mode",type=input.bool)
Use_ATR_SL_TP= input(true, title = "Use ATR for TP & SL",type=input.bool)
Use_Ichimoku= input(true, title = "Use Ichimoku",type=input.bool)
Use_HMA= input(true, title = "Use Hull MA",type=input.bool)
Use_RSI= input(true, title = "Use RSI",type=input.bool)
Use_Stoch= input(true, title = "Use Stoch",type=input.bool)
Use_CCI= input(true, title = "Use CCI",type=input.bool)
Use_MACD= input(true, title = "Use MacD",type=input.bool)
// Ichimoku Cloud
donchian(len) => avg(lowest(len), highest(len))
ichimoku_cloud() =>
    conversionLine = donchian(9)
    baseLine = donchian(26)
    leadLine1 = avg(conversionLine, baseLine)
    leadLine2 = donchian(52)
    [conversionLine, baseLine, leadLine1, leadLine2]
[IC_CLine, IC_BLine, IC_Lead1, IC_Lead2] = ichimoku_cloud()    
calcRatingMA(ma, src) => na(ma) or na(src) ? na : (ma == src ? 0 : ( ma < src ? 1 : -1 ))
calcRating(buy, sell) => buy ? 1 : ( sell ? -1 : 0 )
calcRatingAll() =>
    //============== HMA =================
    HMA10 = hma(Price, Period)
    HMA20 = hma(Price, 20)
    HMA30 = hma(Price, 30)
    HMA50 = hma(Price, 50)
    HMA100 = hma(Price, 100)
    HMA200 = hma(Price, 200)
    // Relative Strength Index, RSI
    RSI = rsi(Price,14)
    // Stochastic
    lengthStoch = 14
    smoothKStoch = 3
    smoothDStoch = 3
    kStoch = sma(stoch(Price, high, low, lengthStoch), smoothKStoch)
    dStoch = sma(kStoch, smoothDStoch)
    // Commodity Channel Index, CCI
    CCI = cci(Price, 20)
    // Moving Average Convergence/Divergence, MACD
    [macdMACD, signalMACD, _] = macd(Price, 12, 26, 9)
    // -------------------------------------------
    PriceAvg = hma(Price, Period)
    DownTrend = Price < PriceAvg
    UpTrend = Price > PriceAvg
    float ratingMA = 0
    float ratingMAC = 0
    if(Use_HMA)
        if not na(HMA10)
            ratingMA := ratingMA + calcRatingMA(HMA10, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA20)
            ratingMA := ratingMA + calcRatingMA(HMA20, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA30)
            ratingMA := ratingMA + calcRatingMA(HMA30, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA50)
            ratingMA := ratingMA + calcRatingMA(HMA50, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA100)
            ratingMA := ratingMA + calcRatingMA(HMA100, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA200)
            ratingMA := ratingMA + calcRatingMA(HMA200, Price)
            ratingMAC := ratingMAC + 1
    if(Use_Ichimoku)
        float ratingIC = na
        if not (na(IC_Lead1) or na(IC_Lead2) or na(Price) or na(Price[1]) or na(IC_BLine) or na(IC_CLine))
            ratingIC := calcRating(
             IC_Lead1 > IC_Lead2 and Price > IC_Lead1 and Price < IC_BLine and Price[1] < IC_CLine and Price > IC_CLine,
             IC_Lead2 > IC_Lead1 and Price < IC_Lead2 and Price > IC_BLine and Price[1] > IC_CLine and Price < IC_CLine)
        if not na(ratingIC)
            ratingMA := ratingMA + ratingIC
            ratingMAC := ratingMAC + 1
    ratingMA := ratingMAC > 0 ? ratingMA / ratingMAC : na
    float ratingOther = 0
    float ratingOtherC = 0
    if(Use_RSI)
        ratingRSI = RSI
        if not(na(ratingRSI) or na(ratingRSI[1]))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(ratingRSI < 30 and ratingRSI[1] < ratingRSI, ratingRSI > 70 and ratingRSI[1] > ratingRSI)
    if(Use_Stoch)
        if not(na(kStoch) or na(dStoch) or na(kStoch[1]) or na(dStoch[1]))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(kStoch < 20 and dStoch < 20 and kStoch > dStoch and kStoch[1] < dStoch[1], kStoch > 80 and dStoch > 80 and kStoch < dStoch and kStoch[1] > dStoch[1])
    if(Use_CCI)
        ratingCCI = CCI
        if not(na(ratingCCI) or na(ratingCCI[1]))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(ratingCCI < -100 and ratingCCI > ratingCCI[1], ratingCCI > 100 and ratingCCI < ratingCCI[1])
    if(Use_MACD)
        if not(na(macdMACD) or na(signalMACD))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(macdMACD > signalMACD, macdMACD < signalMACD)
    ratingOther := ratingOtherC > 0 ? ratingOther / ratingOtherC : na
    float ratingTotal = 0
    float ratingTotalC = 0
    if not na(ratingMA)
        ratingTotal := ratingTotal + ratingMA
        ratingTotalC := ratingTotalC + 1
        ratingTotal := ratingTotal + ratingOther
        ratingTotalC := ratingTotalC + 1
    ratingTotal := ratingTotalC > 0 ? ratingTotal / ratingTotalC : na
    [ratingTotal, ratingOther, ratingMA, ratingOtherC, ratingMAC]
[ratingTotal, ratingOther, ratingMA, ratingOtherC, ratingMAC]  = security(syminfo.tickerid, res, calcRatingAll(), lookahead=false)
tradeSignal = ratingTotal+ratingOther+ratingMA
dynSLpoints(factor) => factor * atr(14) / syminfo.mintick
if not (Use_Only_Sell)
    strategy.entry("long", strategy.long, when = tradeSignal > MinSignalStrength)
if not (Use_Only_Buy)    
    strategy.entry("short", strategy.short, when = tradeSignal < -MinSignalStrength)
if(Use_ATR_SL_TP)
    strategy.exit("sl/tp", loss = dynSLpoints(3), trail_points = dynSLpoints(5), trail_offset = dynSLpoints(2))