Многопараметрическая стратегия случайного шока для интеллектуальной торговли по тренду

STOCH EMA SMA RR SL TP POP
Дата создания: 2025-01-06 16:09:58 Последнее изменение: 2025-01-06 16:09:58
Копировать: 1 Количество просмотров: 374
1
Подписаться
1617
Подписчики

Многопараметрическая стратегия случайного шока для интеллектуальной торговли по тренду

Обзор

Данная стратегия представляет собой интеллектуальную торговую систему, основанную на стохастическом осцилляторе. Он сочетает в себе динамическое распознавание трендов, множественное подтверждение сигналов и интеллектуальные функции управления рисками, а также может автоматически определять состояния перекупленности и перепроданности рынка и совершать сделки. Стратегия визуально отображает состояние рынка с помощью системы цветовой кодировки, интегрирует многопериодные скользящие средние (EMA) для подтверждения тренда и предоставляет гибкие настройки стоп-лосса и тейк-профита.

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

В основе стратегии лежит координация стохастического осциллятора и системы множественных скользящих средних. Торговый сигнал генерируется, когда значение К пробивает заданный уровень перекупленности или перепроданности (9315) или средний уровень (40). Система визуально отображает состояние рынка посредством изменения цвета (красный цвет указывает на возможное падение, зеленый — на возможный рост, синий — на нейтральное состояние). Он также включает в себя экспоненциальные скользящие средние (EMA) с периодами 20, 50, 100 и 200 для подтверждения тренда. Стратегия также включает интеллектуальную систему управления рисками, которая поддерживает различные настройки соотношения риска и доходности, такие как 1:1, 1:4 и 1:8.

Стратегические преимущества

  1. Система сигналов понятна и интуитивно понятна, с цветовым кодированием для быстрого определения состояния рынка.
  2. Механизм подтверждения множественных сигналов для снижения риска ложных сигналов
  3. Гибкая система управления рисками, поддерживает индивидуальное соотношение риска и доходности
  4. В сочетании с многопериодными скользящими средними обеспечивается подтверждение тренда
  5. Автоматические настройки стоп-лосса и тейк-профита для снижения риска ручного управления
  6. Структура кода понятна, проста в обслуживании и оптимизации.

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

  1. На нестабильном рынке могут генерироваться частые торговые сигналы
  2. Фиксированные пороговые значения перекупленности и перепроданности могут не подходить для всех рыночных условий.
  3. Системы скользящих средних могут отставать на нестабильных рынках
  4. Необходимо установить разумный стоп-лосс для контроля риска. Решения включают в себя: добавление механизмов фильтрации сигналов, динамическую настройку пороговых значений, оптимизацию параметров скользящей средней и строгое внедрение стратегий стоп-лосса.

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © petrusvorenusperegrinus

//██████╗ ███████╗████████╗██████╗ ██╗   ██╗███████╗                             
//██╔══██╗██╔════╝╚══██╔══╝██╔══██╗██║   ██║██╔════╝                             
//██████╔╝█████╗     ██║   ██████╔╝██║   ██║███████╗                             
//██╔═══╝ ██╔══╝     ██║   ██╔══██╗██║   ██║╚════██║                             
//██║     ███████╗   ██║   ██║  ██║╚██████╔╝███████║                             
//╚═╝     ╚══════╝   ╚═╝   ╚═╝  ╚═╝ ╚═════╝ ╚══════╝                             
                                                                               
//██╗   ██╗ ██████╗ ██████╗ ███████╗███╗   ██╗██╗   ██╗███████╗                  
//██║   ██║██╔═══██╗██╔══██╗██╔════╝████╗  ██║██║   ██║██╔════╝                  
//██║   ██║██║   ██║██████╔╝█████╗  ██╔██╗ ██║██║   ██║███████╗                  
//╚██╗ ██╔╝██║   ██║██╔══██╗██╔══╝  ██║╚██╗██║██║   ██║╚════██║                  
// ╚████╔╝ ╚██████╔╝██║  ██║███████╗██║ ╚████║╚██████╔╝███████║                  
//  ╚═══╝   ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝                  
                                                                               
//██████╗ ███████╗██████╗ ███████╗ ██████╗ ██████╗ ██╗███╗   ██╗██╗   ██╗███████╗
//██╔══██╗██╔════╝██╔══██╗██╔════╝██╔════╝ ██╔══██╗██║████╗  ██║██║   ██║██╔════╝
//██████╔╝█████╗  ██████╔╝█████╗  ██║  ███╗██████╔╝██║██╔██╗ ██║██║   ██║███████╗
//██╔═══╝ ██╔══╝  ██╔══██╗██╔══╝  ██║   ██║██╔══██╗██║██║╚██╗██║██║   ██║╚════██║
//██║     ███████╗██║  ██║███████╗╚██████╔╝██║  ██║██║██║ ╚████║╚██████╔╝███████║
//╚═╝     ╚══════╝╚═╝  ╚═╝╚══════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝

//@version=6
strategy("CM Stochastic POP Method 3", shorttitle="CM_Stochastic POP_M3", overlay=true)

// Stochastic Settings
length = input.int(14, "Stochastic Length", minval=1)
smoothK = input.int(5, "Smooth K", minval=1)

// Risk:Reward Settings
use_rr = input.bool(true, "Use Risk:Reward Ratio")
use_sl = input.bool(true, "Use Stop Loss")  // New input for Stop Loss toggle
rr_options = input.string("1:1", "Risk:Reward Ratio", options=["1:1", "1:4", "1:8"])
stop_percent = input.float(1.0, "Stop Loss (%)", minval=0.1, step=0.1)

// Convert selected R:R ratio to number
get_rr_multiplier(rr) =>
    switch rr
        "1:1" => 1.0
        "1:4" => 4.0
        "1:8" => 8.0
        => 1.0  // default case
rr_ratio = get_rr_multiplier(rr_options)

// Fixed Level Settings
upperLine = 93.0  // Fixed sell level
midLine = 40.0    // Buy/Sell level
lowerLine = 15.0  // Fixed buy level

// EMA Settings
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)

// Calculate Stochastic with smoothing
k = ta.sma(ta.stoch(close, high, low, length), smoothK)

// Dynamic color based on K value
kColor = k >= upperLine ? color.red :    // Above 93 -> Red
         k <= lowerLine ? color.green :   // Below 15 -> Green
         k <= midLine ? color.green :     // Below 40 -> Green
         color.blue                       // Between 40-93 -> Blue

// Buy Signals:
longCondition1 = ta.crossover(k, lowerLine)   // Cross above 15
longCondition2 = ta.crossover(k, midLine)     // Cross above 40

// Sell Signals:
shortCondition1 = ta.crossunder(k, upperLine) // Cross below 93
shortCondition2 = ta.crossunder(k, midLine)   // Cross below 40

calc_tp_sl(entry_price, is_long) =>
    sl_distance = entry_price * (stop_percent / 100)
    sl = is_long ? entry_price - sl_distance : entry_price + sl_distance
    tp_distance = sl_distance * rr_ratio
    tp = is_long ? entry_price + tp_distance : entry_price - tp_distance
    [sl, tp]

// Long entries
if (longCondition1)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, true)
        strategy.entry("Long_15", strategy.long)
        if (use_sl)
            strategy.exit("Exit_15", "Long_15", stop=sl, limit=tp)
        else
            strategy.exit("Exit_15", "Long_15", limit=tp)
    else
        strategy.entry("Long_15", strategy.long)

if (longCondition2)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, true)
        strategy.entry("Long_40", strategy.long)
        if (use_sl)
            strategy.exit("Exit_40", "Long_40", stop=sl, limit=tp)
        else
            strategy.exit("Exit_40", "Long_40", limit=tp)
    else
        strategy.entry("Long_40", strategy.long)

// Short entries
if (shortCondition1)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, false)
        strategy.entry("Short_93", strategy.short)
        if (use_sl)
            strategy.exit("Exit_93", "Short_93", stop=sl, limit=tp)
        else
            strategy.exit("Exit_93", "Short_93", limit=tp)
    else
        strategy.entry("Short_93", strategy.short)

if (shortCondition2)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, false)
        strategy.entry("Short_40", strategy.short)
        if (use_sl)
            strategy.exit("Exit_40", "Short_40", stop=sl, limit=tp)
        else
            strategy.exit("Exit_40", "Short_40", limit=tp)
    else
        strategy.entry("Short_40", strategy.short)

// Plot EMAs
plot(ema20, title="EMA 20", color=color.blue, linewidth=1, force_overlay = true)
plot(ema50, title="EMA 50", color=color.yellow, linewidth=1, force_overlay = true)
plot(ema100, title="EMA 100", color=color.orange, linewidth=1, force_overlay = true)
plot(ema200, title="EMA 200", color=color.purple, linewidth=1, force_overlay = true)

// Plot Stochastic line 
plot(k, title="Stochastic", color=kColor, linewidth=2)

// Plot reference lines 
hline(100, title="100 Line", color=color.white, linestyle=hline.style_solid)
hline(upperLine, title="93 Line", color=color.red, linestyle=hline.style_solid)
hline(midLine, title="40 Line", color=color.green, linestyle=hline.style_dashed)
hline(lowerLine, title="15 Line", color=color.green, linestyle=hline.style_solid)
hline(0, title="0 Line", color=color.white, linestyle=hline.style_solid)