この戦略は,MACD指数に基づいてトレンドの方向を判断し,Stoch指数と組み合わせて具体的な買い売り操作を行う.この戦略は,より長い周期のMACDを用い,大トレンドを判断し,より短い周期のStochを市場に出る.
MACDの指数で大きなトレンドの方向を判断する
長周期EMA快線,慢線,MACD柱状線を計算する
MACDの変化を比較して,トレンドの方向を判断する
ストック指数を使って 特定の売り場を特定する
%K線と%D線を計算する
ストックが超買超売区の近くで反発し,また引き上げられ,買出信号として使われた.
トレンドの方向とストック信号を組み合わせて,買入販売を行う.
大周期MACDが上昇すると,Stochの買入シグナルが現れ,多額の取引をする
大周期MACDが下落すると,ストックがセールシグナルを発し,空白する
ストップ・ロスト・ストップを設定し,資金管理を最適化
この戦略は,トレンド追跡と超買い超売り指標を組み合わせて,中長線トレンドを効果的に捉えることができます.
MACDは大方向を判断し,Stochは取引の詳細を処理し,リスクを効果的に制御します.
指標の組み合わせを活用して指標戦略を策定する
ストップ・ストップ・メカニズムを設定し,取引リスクを管理する
戦略のパラメータは,異なる市場環境に対応して最適化できます.
中長線トレンド判断に誤りがあり,逆行取引の損失を招く可能性がある
ストック指数では誤った信号が与えられ,利益が不足したり,損失が発生したりします.
傾向が変化すると,ストップポイントが突破され,損失が拡大する可能性があります.
収益目標が大きすぎても小さすぎても 戦略の効果は影響される
不適切なパラメータと市場環境の変化に適応しないことにより,戦略が失敗する
トレンド判断の最適化方法,ストック信号の検証,ストップ・ストップ位置の調整などでリスクを軽減できます.
MACDパラメータの組み合わせを最適化して,トレンドの判断の精度を向上させる
偽信号を避けるために,多周期のストック指標を考慮する
市場変動に対応するストップ・ストップ・ストップ比率の動的調整
他の指標信号と組み合わせて verifies を行い,信号の有効性を向上させる
異なる品種特性と取引時期に応じてパラメータを最適化
機械学習のアルゴリズムを導入し,トレンドの方向性を判断する
結合量能指標,不十分なまたは過度の追及下落を避ける
この戦略は,MACDとStochの2つの指標の優位性を統合し,リスクを制御した前提で中長線トレンドを捕獲して取引する.パラメータ最適化,ストップ・ストップ設定,シグナル検証などの方法によって戦略効果を強化し,さまざまな市場環境に適応し,実際の取引価値を持つ.最適化スペースが残っており,パラメータ設定を最適化し続け,シグナル正確性を向上させ,機械学習などの手段を補助して戦略をより全面的かつスマートにすることができる.
/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// strategy(title="自用策略v0.2",calc_on_order_fills=false,calc_on_every_tick =false, initial_capital=10000,commission_type=strategy.commission.percent, commission_value=0.00,overlay = true,default_qty_type = strategy.cash, default_qty_value = 10000)
//STOCH
periodD = input(3, title="%D Smoothing", minval=1)
periodK = input(14, title="%K Length", minval=1)
periodK2 = input(42, title="%K2 Length", minval=1)
periodK3 = input(126, title="%K3 Length", minval=1)
periodK4 = input(378, title="%K4 Length", minval=1)
periodK5 = input(14, title="%K5 Length", minval=1)
periodK6 = input(30, title="%K6 Length", minval=1)
smoothK = input(1, title="%K Smoothing", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
k2 = sma(stoch(close, high, low, periodK2), smoothK*3)
k3 = sma(stoch(close, high, low, periodK3), smoothK*3*3)
k4 = sma(stoch(close, high, low, periodK4), smoothK*3*3*3)
d = sma(k, periodD)
all = (k+k2*3+k3*9+k4*18)/31
allp = sma(all, periodK6)
buffer = input(title="buffer", type=input.float, defval=0.3, minval = 0, step = 0.1)
b1 = close[1]* (1+buffer/100)
b2 = close[1]* (1-buffer/100)
//MACD
fast_length = input(title="Fast Length", defval=144)
slow_length = input(title="Slow Length", defval=312)
src = input(title="Source", defval=close)
signal_length = input(title="Signal Smoothing", minval = 1, maxval = 200, defval = 108)
sma_source = input(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
MACDCHA = input(title="MACDCHA步长", defval=30)
MACDCHA2 = input(title="MACDCHA步长2", defval=20)
MACDCHA3 = input(title="MACDCHA步长3", defval=10)
MACDCHA4 = input(title="MACDCHA步长4", defval=5)
MACDCHA5 = input(title="MACDCHA步长5", defval=3)
MACDCHA6 = input(title="MACDCHA步长6", defval=1)
HISTCHA = input(title="hist步长", defval=50)
macdcha = hist - hist[MACDCHA]
macdcha2 = hist - hist[MACDCHA2]
macdcha3 = hist - hist[MACDCHA3]
macdcha4 = hist - hist[MACDCHA4]
macdcha5 = hist - hist[MACDCHA5]
macdcha6 = hist - hist[MACDCHA6]
histcha = hist[HISTCHA]
var true2 = 0
var true2_1 = 0
var true2_2 = 0
var true2_3 = 0
var true2_4 = 0//延伸
var fangxiang =0
//确认方向
if(macdcha>=0 and macdcha2>=0 and macdcha3>=0 and macdcha4>=0 and macdcha5>=0 and macdcha6>=0)
fangxiang := 1
true2_2 := 0
if(macdcha<=0 and macdcha2<=0 and macdcha3<=0 and macdcha4<=0 and macdcha5<=0 and macdcha6<=0)
fangxiang :=-1
true2_1 := 1
//k3min = min(k3,k3[1],k3[2],k3[3],k3[4],k3[5],k3[6],k3[7],k3[8],k3[9],k3[10],k3[11],k3[12],k3[13],k3[14],k3[15],k3[16],k3[17],k3[18],k3[19],k3[20],k3[21],k3[22],k3[23],k3[24],k3[25],k3[26],k3[27],k3[28],k3[29],k3[30],k3[31],k3[32],k3[33],k3[34],k3[35],k3[36],k3[37],k3[38],k3[39],k3[40],k3[41],k3[42],k3[43],k3[44],k3[45],k3[46],k3[47],k3[48],k3[49],k3[50])
//k3max = max(k3,k3[1],k3[2],k3[3],k3[4],k3[5],k3[6],k3[7],k3[8],k3[9],k3[10],k3[11],k3[12],k3[13],k3[14],k3[15],k3[16],k3[17],k3[18],k3[19],k3[20],k3[21],k3[22],k3[23],k3[24],k3[25],k3[26],k3[27],k3[28],k3[29],k3[30],k3[31],k3[32],k3[33],k3[34],k3[35],k3[36],k3[37],k3[38],k3[39],k3[40],k3[41],k3[42],k3[43],k3[44],k3[45],k3[46],k3[47],k3[48],k3[49],k3[50])
allpmax = max(allp[1],allp[2],allp[3],allp[4],allp[5],allp[6])
allpmin = min(allp[1],allp[2],allp[3],allp[4],allp[5],allp[6])
if(histcha < 0 and macdcha>=0 and macdcha2>=0 and macdcha3>=0 and macdcha4>=0 and macdcha5>=0 and macdcha6>=0 and d < 20 and volume > volume[1] and true2_1 == 1 and allp>allp[1] and allp <80)//and k3max < 80 //and k3min < 30 and k3 >20 and k2<50
strategy.entry("开多", true, comment = "开多") // and close > close[1] and cci1> MEA1
true2_1 :=0
if(d >80)
strategy.close( "开多", comment = "平多")
true2_1 :=1
stop_loss=input(4, "做多止损 %", minval = 1, step = 1)
sl = strategy.position_avg_price * (1-stop_loss/100)
close_Stop = close < sl
if(close_Stop or(allp<20 and allp[1]>20))
strategy.close( "开多", comment = "做多止损")
true2_1 :=1
Target_profit=input(10, "做多止盈 %", minval = 1, step = 1)
tp = strategy.position_avg_price * (1+Target_profit/100)
close_Target = close > tp
strategy.close("开多", when = close_Target, comment ="做多盈利")
//空
if(histcha > 0 and macdcha<=0 and macdcha2<=0 and macdcha3<=0 and macdcha4<=0 and macdcha5<=0 and macdcha6<=0 and d > 80 and volume > volume[1] and true2_2 == 1 and allp<allp[1] and allp >20) // and k3max>70 and k3<80
//strategy.entry("开空", comment = "开空")
strategy.entry("开空", strategy.short,comment ="开空")
true2_2 := 0
if( d <20)
// strategy.close( comment = "平空")
strategy.close("开空", comment = "平空")
true2_2 := 1
stop_loss2=input(4, "做空止损 %", minval = 1, step = 1)
sl2 = strategy.position_avg_price * (1+stop_loss2/100)
close_Stop2 = close > sl2
if(close_Stop2 or(allp>80 and allp[1]<80))
strategy.close( "开空", comment = "做空止损")
true2_2 == 1
Target_profit2=input(10, "做空止盈 %", minval = 1, step = 1)
tp2 = strategy.position_avg_price * (1-Target_profit2/100)
close_Target2 = close < tp2
strategy.close("开空", when = close_Target2, comment ="做空盈利")