Стратегия количественного перевода на основе МФИ и МР

Автор:Чао Чжан, Дата: 2023-12-27 14:42:16
Тэги:

img

Обзор

Эта стратегия использует индикатор МФИ для выявления зон перекупления и перепродажи в сочетании с MA для фильтрации направления переворота цен.

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

Стратегия использует индикатор МФИ для оценки условий перекупления и перепродажи на рынке. Когда МФИ опускается ниже 20 в зону перепродажи, это сигнализирует о том, что актив недооценен и формируется дно, что подразумевает длинный сигнал. Когда МФИ поднимается выше 80 в зону перекупления, это предполагает, что актив переоценен и, вероятно, скорее всего, скорректируется ниже, вызывая короткий сигнал.

Чтобы избежать ложных переворотов, стратегия также использует индикатор MA для определения направления тренда.

Конкретная логика торговли:

  1. Когда МФИ пробивается ниже 20 в зону перепроданности и закрытие находится выше линии MA, генерируется сигнал покупки.

  2. Когда МФИ проходит через 80 в зону перекупленности, а закрытие проходит через линию MA, запускается сигнал продажи.

Благодаря подтверждению двойного показателя стратегия может эффективно выявлять возможности для отмены с надежными сигналами входа.

Преимущества

  1. Подтверждение с двумя индикаторами предотвращает ложные прорывы и обеспечивает высокую надежность сигнала.

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

  3. Включение фильтрации трендов делает сигналы более точными и надежными.

  4. Применяется на различных рынках с высокой адаптивностью.

Риски

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

  2. Необходимо следить за систематическими рисками в экстремальных рыночных условиях, вызывающих пропущенные точки переворота.

  3. Высокая частота торгов может привести к увеличению затрат на транзакции.

Уменьшение последствий:

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

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

  3. Оптимизируйте параметры, чтобы избежать ненужных сделок.

Возможности для расширения

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

  2. Отметьте уровень перекупленности/перепроданности на основе колебаний на рынке.

  3. Включить правила размещения позиций для более контролируемой прибыли.

Заключение

Эта стратегия объединяет классические методы анализа с современными квантовыми методами.


/*backtest
start: 2023-12-19 00:00:00
end: 2023-12-26 00:00:00
period: 1m
basePeriod: 1m
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/
// © vikris

//@version=4
strategy("[VJ]Thor for MFI", overlay=true, calc_on_every_tick = false,pyramiding=0)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01    

i_MFI = input(3, title="MFI Length")
OB=input(100, title="Overbought Level")
OS=input(0, title="Oversold Level")
barsizeThreshold=input(.5, step=.05, minval=.1, maxval=1, title="Bar Body Size, 1=No Wicks")
i_MAFilter = input(true, title="Use MA Trend Filter")
i_MALen = input(80, title="MA Length")
// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0
// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = true

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
 

MFI=mfi(close,i_MFI)
barsize=high-low
barbodysize=close>open?(open-close)*-1:(open-close)
shortwicksbar=barbodysize>barsize*barsizeThreshold
SMA=sma(close, i_MALen)
MAFilter=close > SMA



BUY = MFI[1] == OB and close > open and shortwicksbar and (i_MAFilter ? MAFilter : true)

SELL = MFI[1] == OS and close < open and shortwicksbar and (i_MAFilter ? not MAFilter : true) 

//Final Long/Short Condition
longCondition = BUY
shortCondition = SELL
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("Buy", strategy.long)
    strategy.exit("TP/SL", "Buy", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("Sell", strategy.short)
    strategy.exit("TP/SL", "Sell", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

Больше