
Strategi ini adalah berdasarkan kombinasi rata-rata bergerak yang licin dengan penunjuk Stochastic, dengan tujuan untuk menangkap lebih banyak peluang dalam trend. Ia menggunakan rata-rata bergerak indeks dari dua tempoh yang berbeza untuk membentuk isyarat strategi, digabungkan dengan persilangan garis K dan garis D dalam penunjuk Stochastic sebagai pilihan masa masuk untuk mengharapkan keuntungan yang lebih tinggi dalam trend.
Strategi ini menggunakan dua rata-rata bergerak licin 12 kitaran dan 26 kitaran. Apabila garis pantas melintasi garis perlahan dari bawah, lakukan lebih banyak; Apabila garis pantas melintasi garis perlahan dari atas ke bawah, kosongkan. Untuk menyaring isyarat palsu, ia memerlukan garis pantas dan garis perlahan yang sama arah, garis pantas boleh dilakukan lebih banyak di atas garis perlahan, dan garis pantas boleh kosong di bawah garis perlahan.
Garis K dalam penunjuk Stochastic bersalin dengan garis D sebagai pilihan masa masuk. Garis K bersalin dengan garis D dari arah bawah garis superbeli, buat lebih; Garis K bersalin dengan garis D dari arah bawah kawasan superbeli, buat kosong.
Rata-rata bergerak yang lancar menentukan arah trend, penunjuk Stochastic menyaring Noise dan memilih masa masuk. Gabungan mereka dapat memberikan lebih banyak peluang keuntungan dalam trend.
Oleh itu, strategi ini boleh dilakukan secara beransur-ansur dan secara selektif untuk merebut peluang yang menghasilkan kadar keuntungan yang lebih tinggi.
Untuk mengurangkan risiko ini, kita boleh menetapkan stop loss, atau menggunakan kombinasi parameter purata bergerak yang lebih longgar.
Strategi ini boleh dioptimumkan dengan cara berikut:
Dengan menguji kombinasi parameter yang berbeza, parameter yang lebih kuat dapat dijumpai; pada masa yang sama, menetapkan strategi stop loss dapat mengurangkan risiko dengan berkesan dan meningkatkan kestabilan strategi.
Strategi ini menggabungkan kelebihan rata-rata bergerak yang licin dengan penunjuk Stochastic, boleh mengikuti trend secara beransur-ansur, dan memilih masa masuk yang lebih baik. Ia mudah dikendalikan, boleh dikawal risiko, dan mempunyai nilai praktikal yang besar.
/*backtest
start: 2024-01-18 00:00:00
end: 2024-01-25 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// author SoftKill
strategy(title="Price EMA with stock", shorttitle="EMA STOCH", overlay=true)
src = input(title="Source", type=input.source, defval=close)
src_0 = src[0]
src_1 = src[1]
src_2 = src[2]
src_3 = src[3]
src_4 = src[4]
len50 = input(50, minval=1, title="Length")
src50 = input(close, title="Source")
out50 = ema(src50, len50)
len100 = input(100)
src100 = input(close, title="Source")
out100 = ema(src100, len100)
len1 = input(1, minval=1, title="Length")
src1 = input(close, title="Source")
out1 = sma(src1, len1)
length = input(5, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3
k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
cu = crossover(k,OverSold)
co = crossunder(k,OverBought)
sma_down = crossunder(out1, out50)
sma_up = crossover(out1,out50)
//if (not na(k) and not na(d))
// if (co and k < OverSold)
// strategy.entry("StochLE", strategy.long, comment="StochLE")
//if (cu and k > OverBought)
// strategy.entry("StochSE", strategy.short, comment="StochSE")
crossCandle_4 = crossover(src[4],out50)
crossCandleUnder_4= cross(src[4],out50)
crossCandle_3 = crossover(src[3],out50)
crossCandleUnder_3= crossunder(src[3],out50)
crossCandle_2 = crossover(src[2],out50)
crossCandleUnder_2= crossunder(src[2],out50)
crossCandle_1 = crossover(src[1],out50)
crossCandleUnder_1= crossunder(src[1],out50)
crossCandle_0 = crossover(src[0],out50)
crossCandleUnder_0= crossunder(src[0],out50)
conditionOver = (crossCandle_4 or crossCandle_3 or crossCandle_2 or crossCandle_1 or crossCandle_0)
conditionUnder =(crossCandleUnder_4 or crossCandleUnder_3 or crossCandleUnder_2 or crossCandleUnder_1 or crossCandleUnder_0)
touch4 = (cross(low[4],out50) or cross(high[4],out50))
touch3 = (cross(low[3],out50) or cross(high[3],out50))
touch2 = (cross(low[2],out50) or cross(high[2],out50))
touch1 = (cross(low[1],out50) or cross(high[1],out50))
touch = touch1 or touch2 or touch3 or touch4
//and sma_up
//and sma_down
// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src_macd = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)
// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src_macd, fast_length) : ema(src_macd, fast_length)
slow_ma = sma_source ? sma(src_macd, slow_length) : ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
//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) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)
// plot((conditionOver or conditionUnder or touch) and src[0] >= out50 and close >= out50 and (cu) and out50 > out100 and hist>=0 , title="Buy", style=plot.style_columns, color=color.lime)
// plot((conditionOver or conditionUnder or touch) and src[0] <= out50 and close <= out50 and (co) and out50< out100 and hist<=0 , title="sell", style=plot.style_columns, color=color.red)
long_cond = ((conditionOver or conditionUnder or touch) and src[0] >= out50 and close > out50 and (cu) and out50 > out100 and hist>=0)
short_cond = ((conditionOver or conditionUnder or touch) and src[0] <= out50 and close < out50 and (co) and out50< out100 and hist<=0)
tp=input(0.1)
sl=input(0.1)
strategy.entry("long",strategy.long, when=long_cond)
strategy.entry("short",strategy.short, when=short_cond)
strategy.exit("X_long", "long", profit=close * tp / syminfo.mintick, loss=close * sl / syminfo.mintick, when=touch )
strategy.exit("x_short", "short",profit=close * tp / syminfo.mintick,loss=close * sl / syminfo.mintick,when = touch )
// //tp = input(0.0003, title="tp")
// tp = 0.0003
// //sl = input(1.0 , title="sl")
// sl = 1.0
// strategy.exit("closelong", "long" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closelong")
// strategy.exit("closeshort", "short" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closeshort")