
Эта стратегия объединяет четыре индикатора RSI, MFI, Stoch RSI и MACD для осуществления суточной торговли биткойном. Для контроля риска стратегия размещает ордеры только тогда, когда несколько индикаторов одновременно подают сигналы о покупке или продаже.
RSI используется для определения того, является ли рынок перекупленным или перепроданным. RSI создает сигнал покупки, когда он ниже 40, и сигнал продажи, когда он выше 70.
Показатель MFI определяет движение денег на рынке. MFI создает сигнал покупки, когда оно ниже 23, и сигнал продажи, когда оно выше 80.
Stoch RSI определяет, является ли рынок перекупленным или перепроданным. Под K-линией ниже 34 создается сигнал покупки, выше 80 - сигнал продажи.
Индекс MACD определяет тенденции и динамику рынка. Быстрая линия выражает сигнал к покупке, когда она ниже медленной линии, а столбик отрицательный, и наоборот, это сигнал к продаже.
В сочетании с четырьмя основными показателями, повышается точность сигнала, избегая потерь из-за сбоя одного показателя.
Только при одновременном появлении сигналов из нескольких индикаторов, можно значительно снизить вероятность ложного сигнала.
Применение стратегии торговли в течение дня, избежание риска на ночь, снижение стоимости капитала.
Стратегия может иметь низкую частоту торговли, существует определенный временной риск. Можно уместно ослабить параметры индикатора, увеличить количество торгов.
Вероятность того, что индикатор выдаст ошибочный сигнал, все еще существует. Можно ввести алгоритмы машинного обучения, которые помогут определить надежность индикаторного сигнала.
Существует определенный риск перекупа и перепродажи. Можно соответствующим образом изменить параметры показателя или добавить логику оценки других показателей.
Добавлена функция самостоятельной адаптации параметров индикатора. Параметры индикатора в режиме реального времени настраиваются в зависимости от волатильности рынка и скорости изменения.
Добавление логики остановки убытков. Если убыток превышает определенную долю, то остановка убытков выходит, эффективно контролируя единичные убытки.
В сочетании с эмоциональными показателями. Повышение температуры рынка, повышение уровня паники на рынке и другие многомерные оценки, повышение стратегической прибыли.
Эта стратегия эффективно снижает частоту ложных сигналов, используя четыре основных показателя, которые взаимно проверяются, и является относительно стабильной стратегией высокой частоты прибыли. По мере постоянной оптимизации параметров и моделей, ожидается дальнейшее повышение выигрышности и прибыльности стратегии.
/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('John Day Stop Loss', overlay=false, pyramiding=1, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency='USD', precision=2)
strategy.risk.allow_entry_in(strategy.direction.long)
from_day = input.int(defval=1, title='From Day', minval=1)
from_month = input.int(defval=1, title='From Month', minval=1)
from_year = input.int(defval=2021, title='From Year', minval=2020)
to_day = input.int(defval=1, title='To Day', minval=1)
to_month = input.int(defval=1, title='To Month', minval=1)
to_year = input.int(defval=2025, title='To Year', minval=2020)
time_cond = time > timestamp(from_year, from_month, from_day, 00, 00) and time < timestamp(to_year, to_month, to_day, 00, 00)
//time_cond = true
//Stop Loss
longProfitPerc = input.float(title="Stop Loss Profit (%)", defval=2.1) / 100
longExitPrice = strategy.position_avg_price * (1 - longProfitPerc)
//RSI - yellow
up = ta.rma(math.max(ta.change(close), 0), 14)
down = ta.rma(-math.min(ta.change(close), 0), 14)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, "RSI", color=#00FFFF)
buy_rsi = true // rsi < 40
sell_rsi = true //rsi > 70
//MFI - cyan
mf = ta.mfi(hlc3, 14)
plot(mf, "MF", color=#FFFF00)
buy_mfi = mf < input.int(defval=23, title='Max MF', minval=1)
sell_mfi = mf > input.int(defval=80, title='Min MF', minval=1)
//Stoch RSI
OverBought_StochRSI = input(80)
OverSold_StochRSI = input(34)
smoothK = input.int(3, "K", minval=1)
smoothD = input.int(2, "D", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(14, "Stochastic Length", minval=1)
srcRSI = input(close, title="RSI Source")
rsi1 = ta.rsi(srcRSI, lengthRSI)
kStochRSI = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(kStochRSI, smoothD)
co = ta.crossover(kStochRSI,d)
cu = ta.crossunder(kStochRSI,d)
buy_stochRSI = co and kStochRSI < OverSold_StochRSI
sell_stochRSI = cu and kStochRSI > OverBought_StochRSI
plot(kStochRSI, "K", color=#2962FF)
plot(d, "D", color=#FF6D00)
h0 = hline(OverBought_StochRSI, "Upper Band", color=#787B86)
h1 = hline(OverSold_StochRSI, "Lower Band", color=#787B86)
fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")
//MACD
// Getting inputs
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Plot colors
//col_macd = input(#2962FF, "MACD Line ", group="Color Settings", inline="MACD")
//col_signal = input(#FF6D00, "Signal Line ", group="Color Settings", inline="Signal")
//col_grow_above = input(#26A69A, "Above Grow", group="Histogram", inline="Above")
//col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
//col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
//col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
buy_MACD = macd < signal and hist < 0
sell_MACD = macd > signal and hist > 0
//buy_MACD = true
//sell_MACD = true
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
//plot(macd, title="MACD", color=col_macd)
//plot(signal, title="Signal", color=col_signal)
sessionColor = color(na)
if time_cond
if (not na(kStochRSI) and not na(d))
cmt = str.tostring(close)
if (buy_stochRSI and buy_MACD and buy_mfi and buy_rsi)
strategy.entry("BUY", strategy.long, comment='BUY @ ' + cmt)
if longProfitPerc != 0
strategy.exit(id="x", stop=longExitPrice, comment='EXIT @ ' + str.tostring(longExitPrice))
sessionColor := input.color(#0000FF, "buy") //red
if (sell_stochRSI and sell_MACD and sell_mfi and sell_rsi)
strategy.entry("SELL", strategy.short, comment='SELL @ ' + cmt)
sessionColor := input.color(#FF0000, "sell") //green
bgcolor(sessionColor)