Стратегия торговли биткойнами в течение суток Джона на основе нескольких индикаторов

Автор:Чао Чжан, Дата: 2023-12-07 15:23:44
Тэги:

img

Обзор

Эта стратегия сочетает в себе четыре индикатора RSI, MFI, Stoch RSI и MACD для реализации внутридневного торговли биткойнами. Заказы будут размещаться только тогда, когда несколько индикаторов дают сигналы покупки или продажи одновременно для контроля рисков.

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

  1. Индикатор RSI используется для определения того, является ли рынок перекупленным или перепроданным. Он генерирует сигнал покупки, когда RSI ниже 40, и сигнал продажи, когда RSI выше 70.

  2. Индикатор МФИ оценивает поток капитала на рынке. Он генерирует сигнал покупки, когда МФИ ниже 23, и сигнал продажи, когда МФИ выше 80.

  3. Индикатор RSI определяет, является ли рынок перекупленным или перепроданным. Он генерирует сигнал покупки, когда линия K ниже 34, и сигнал продажи, когда она выше 80.

  4. Индикатор MACD оценивает тенденцию и импульс рынка. Он генерирует сигнал покупки, когда быстрая линия ниже медленной линии, а гистограмма отрицательна, и сигнал продажи для противоположного сценария.

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

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

  2. Заказы размещаются только тогда, когда одновременно дают сигналы несколько индикаторов, что значительно снижает вероятность ложных сигналов.

  3. Принятие стратегий внутридневного трейдинга позволяет избежать рисков на один день и снижать затраты на капитал.

Риски и решения

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

  2. Все еще существует вероятность того, что индикаторы могут давать неверные сигналы.

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

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

  1. Добавить адаптивную функцию параметров индикатора.

  2. Добавьте логику стоп-лосса. Выход стоп-лосса, если потери превышают определенный процент, чтобы эффективно контролировать одиночные потери.

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

Заключение

Проверяя сигналы по четырем основным показателям, эта стратегия может эффективно снизить уровень ложных сигналов и является относительно стабильной высокочастотной стратегией прибыли.


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

Больше