Прорыв колебаний - стратегия изменения структуры рынка

Автор:Чао Чжан, Дата: 2023-12-05 15:17:01
Тэги:

img

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

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

Основная логика этой стратегии состоит в том, чтобы использовать короткие временные рамки вниз и вверх поглощающих моделей в качестве сигналов для более длительных временных сдвигов рыночной структуры. В частности, стратегия одновременно отслеживает более длинные временные рамки (например, 60m бар) и более короткие временные рамки (например, 15m бар). Когда снижающаяся поглощающая красная полоса появляется на более коротких временных рамках, в то время как более длинная временная полоса зелена, определяется, что произошло рыночное устройство и принята длинная смена позиции. Когда вверх поглощающая зеленая полоса появляется на более коротких временных рамках, в то время как более длинная временная полоса красная, определяется, что произошло изменение рыночной структуры и принята позиция.

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

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

Преимущества этой стратегии:

  1. Использование временных отношений позволяет избежать заблуждения от шума из одного временного периода.

  2. Автоматически определяет новое направление тренда. Сдвиги структуры рынка автоматически запускают длинные/короткие записи без необходимости ручного суждения.

  3. Эффективный контроль рисков: короткие временные рамки, используемые для контроля рисков, помогают ограничить потери от одной сделки.

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

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

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

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

  2. Риск обратного тренда. Стратегия пытается контролировать снижение во время V-образных перемен. Алгоритм стоп-лосса должен быть откорректирован.

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

Руководство по оптимизации

Дальнейшие направления оптимизации стратегии включают:

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

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

  3. Используйте машинное обучение для оптимального получения прибыли / остановки убытков.

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

  5. Расширить варианты стратегии, чтобы сформировать стратегический ансамбль.

Заключение

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


/*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)
//

Больше