Стратегия изменения структуры рынка с колебательным прорывом


Дата создания: 2023-12-05 15:17:01 Последнее изменение: 2023-12-05 15:17:01
Копировать: 0 Количество просмотров: 699
1
Подписаться
1619
Подписчики

Стратегия изменения структуры рынка с колебательным прорывом

Обзор

Oscillation Breakthrough - Market Structure Shift Strategy) - стратегия отслеживания тенденций, использующая отношения между различными временными периодами для выявления изменений в структуре рынка. Эта стратегия использует отношения между различными временными периодами в качестве сигнала изменения структуры рынка, чтобы улавливать новые направления тенденций.

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

Центральная логика этой стратегии заключается в том, чтобы использовать в качестве сигнала для изменения структуры рынка в среднесрочном и долгосрочном периоде низкие и высокие поглощения. В частности, стратегия одновременно отслеживает K-линии среднесрочного периода (например, 60-минутная линия) и короткого периода (например, 15-минутная линия).

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

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

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

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

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

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

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

Анализ стратегических рисков

Основные риски этой стратегии:

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

  2. Риск обратного тренда. В случае возникновения V-образного поворота на рынке, эта стратегия будет трудно контролировать отступ.

  3. Риск несовместимости параметров. В среднем и коротком периоде параметры установлены не вовремя, сигнал может быть неэффективным и требует повторного оптимизации тестов.

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

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

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

  2. Оптимизация параметров в длинном и коротком циклах, улучшение качества сигнала.

  3. Оптимизация алгоритмов стоп-стоп с использованием технологий машинного обучения.

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

  5. Побогатить типы стратегий, разработать производные стратегии, сформировать портфель стратегий.

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

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

Исходный код стратегии
/*backtest
start: 2022-11-28 00:00:00
end: 2023-12-04 00:00:00
period: 1d
basePeriod: 1h
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/
// © jl01794

//@version=5
strategy(title="ICT_MSS[PROTOTYPE]", overlay=true, initial_capital=10000, currency="USD", margin_long=15, margin_short=15, max_lines_count=500)


// INPUTS
Time_Frame  = input.timeframe("60", title="Focused Time Frame")
FTF_LTF = input.timeframe("15", title="Focused Time Frame(LTF)")
//

// SECURITY DATA [FOR ONE TIMEFRAME REFERENCE]

FTF_Close = request.security(syminfo.tickerid, Time_Frame, close)
FTF_Open = request.security(syminfo.tickerid, Time_Frame, open)
FTFLTF_High = request.security(syminfo.tickerid, FTF_LTF, ta.highest(2)) 
FTFLTF_Low = request.security(syminfo.tickerid, FTF_LTF, ta.lowest(2)) 
FTFLTF_Close = request.security(syminfo.tickerid, FTF_LTF, close)
FTFLTF_Open = request.security(syminfo.tickerid, FTF_LTF, open)

// TIME BASED CLOSE AND OPEN
_close = FTF_Close
_open = FTF_Open
_LTFclose = FTFLTF_Close
_LTFopen = FTFLTF_Open

// CANDLE STATE
greenCandle = close > open
redCandle = close < open
LTFgreenCandle = FTFLTF_Close > FTFLTF_Open
LTFredCandle = FTFLTF_Close < FTFLTF_Open

// ENGULFING TIMEFRAME REFERENCE
FTF_greenCandle = request.security(syminfo.tickerid, Time_Frame, greenCandle)
FTF_redCandle = request.security(syminfo.tickerid, Time_Frame, redCandle)
FTFLTF_greenCandle = request.security(syminfo.tickerid, FTF_LTF, LTFgreenCandle)
FTFLTF_redCandle = request.security(syminfo.tickerid, FTF_LTF, LTFredCandle)

//--------------------------------------------------------------------------------------------------------------

//ENGULFING_FTF_LTF
B_EnP_mss = FTFLTF_redCandle[1] and        // 1E PIVOT BUY
     FTFLTF_greenCandle
//


B_EnPs_mss = FTFLTF_greenCandle[1] and        // 1E PIVOT SELL
     FTFLTF_redCandle
//  

//--------------------------------------------------------------------------------------------------------------

display_LTF = timeframe.isintraday and timeframe.multiplier <= 15

//--------------------------------------------------------------------------------------------------------------

// STORED DATAS
var float EH_MSS1 = na
var float EL_MSS1 = na
var bool can_draw = false
var line l1_mss = na
var line l1s_mss = na

//--------------------------------------------------------------------------------------------------------------

// MSS BUY
if (B_EnPs_mss) and (display_LTF)                                                 
    EH_MSS1 := FTFLTF_High 
    can_draw := true                                                            
    l1_mss := line.new(bar_index, EH_MSS1, bar_index -3, EH_MSS1, color=color.purple)     
else
    if (can_draw)
        if (FTFLTF_High > EH_MSS1)                                                    
            can_draw := false                                                  
        else
            line.set_x2(l1_mss, bar_index) 
//

// MSS SELL
if (B_EnP_mss) and (display_LTF)                                                 
    EL_MSS1 := FTFLTF_Low 
    can_draw := true                                                            
    l1s_mss := line.new(bar_index, EL_MSS1, bar_index -3, EL_MSS1, color=color.purple)     
else
    if (can_draw)
        if (FTFLTF_Low < EL_MSS1)                                                    
            can_draw := false                                                  
        else
            line.set_x2(l1s_mss, bar_index) 
          

//--------------------------------------------------------------------------------------------------------------

// ORDER

// BUY
longCondition_mssB = B_EnPs_mss and FTFLTF_High and close and high[1]
openOr = FTFLTF_High 

//SELL
shortCondition_mssS = B_EnP_mss and FTFLTF_Low and close and low[1]
openOrs = FTFLTF_Low 


if (longCondition_mssB) 
    strategy.entry("Buy", strategy.long, 1, stop = openOr, when = longCondition_mssB)
//

if (shortCondition_mssS) 
    strategy.entry("Sell", strategy.short, 1, stop = openOrs, when = shortCondition_mssS)
//

// EXIT 
long_tp = open < FTFLTF_Close[1]
short_tp = open > FTFLTF_Close[1]

//if (long_tp)
    //strategy.close("Buy", qty_percent = 100, when = long_tp)
//

//if (short_tp)
    //strategy.close("Sell", qty_percent = 100, when = short_tp)
//