この戦略は,平滑な移動平均とストキャスティック指標の組み合わせに基づいており,トレンドの中でより多くの機会を捉えることを目的としています.これは,主に2つの異なる周期の指数移動平均を使用して戦略信号を形成し,ストキャスティック指標のK線とD線の交差を入力タイミングの選択として組み合わせて,トレンドの中でより高い率を期待します.
この戦略は,12周期と26周期の2つの平滑な移動平均を使用している. 速線が下からゆっくりとした線を横切るときは,多行する. 速線が上からゆっくりとした線を横切るときは,空白する. 偽信号をフィルターするために,それは速線とゆっくりとした線を同方向に要求し,速線はゆっくりとした線の上に多行し,速線はゆっくりとした線の下に空白する.
ストキャスティック指標のK線がD線と交差する際は,入場時刻として選択する.K線が超買線の下方向からD線と交差する際は,多めにする.K線が超売線下方向からD線と交差する際は,空っぽにする.
滑動平均はトレンドの方向を決定し,ストキャスティック指標はノイズをフィルタリングし,入場タイミングを選択します. これらの組み合わせにより,トレンドの中でより多くの利益を得ることができます.
この戦略は,順番に,選択的にチャンスを掴み,より高い利益率を得ることができます.
これらのリスクを減らすために,ストップを設定したり,移動平均のパラメータのより緩やかな組み合わせを使用することもできます.
この戦略は,以下の点でさらに最適化できます.
異なるパラメータの組み合わせをテストすることで,より強力なパラメータを見つけることができます.同時に,ストップ・ローズ戦略を設定することで,リスクを効果的に軽減し,戦略の安定性を向上させることができます.
この戦略は,平らな移動平均とストキャスティック指標の優位性を統合し,順番にトレンドを追跡し,より良いタイミングで入場を選択します.操作が簡単で,リスクが制御可能で,大きな実用価値があります.継続的なテストと最適化により,そのパフォーマンスはさらに向上できます.それは,高効率で安定したトレンドを追跡する戦略モデルを量化トレーダーに提供します.
/*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")