
この戦略は,価格チャネル指標とMACD指標を組み合わせて,複数の時間枠でトレンドを追跡し,オーバーバイオーバーセルの判断を可能にするため,買付決定を策定する. 戦略は,同時にもストップ・ストップを組み合わせてリスクを管理する.
価格チャネル指数は,最高価格と最低価格のEMA均線に基づいて価格チャネルを構築し,価格突破チャネルによってトレンドを判断する.MACD指数は,多気勢を判断し,ゼロ軸上は多頭市場,下は空頭市場である.
この戦略の取引シグナルは以下の要素から生まれます.
MACD ヒストグラム 赤いEnter多頭,緑のEnter空頭
価格が通路の底に近づき,MACDがゼロ軸の下にあるとき,空頭Enter
価格がチャネルの頂点に近づき,MACDがゼロ軸上にある場合
MACD上はゼロ軸を横切るときにEnter多頭,下はゼロ軸を横切るときにEnter空頭
エクジット信号は止損停止セットから発生する.
マルチメーター・コンビネーション・検証,偽突破を避ける
異なる時間枠の指標の組み合わせにより,トレンドの方向性をより確実に判断できます.
単一損失を効果的に制御するための止損防止メカニズムを導入
パラメータ最適化スペースは限られ,過度最適化が容易である.
価格通路のパラメータが低すぎると,大きな損失が発生します.
ストップポイントが小さすぎると,大きな損失を伴う.
解決策は
ウォーク・フォワードで,過剰な最適化パラメータを回避する.
価格チャネルパラメータを自在パラメータに設定します.
波動率ストップを導入してストップ距離を動的に調整する
MACD パラメータの組み合わせを最適化
価格通路の最適化パラメータを自律的に計算する
フィルタリング条件を追加し,偽突破を回避して効率を上げます.
この戦略は,価格チャネル指標とMACD指標の優位性を統合し,合理的なパラメータ設定と最適化スペースが広く,トレンド判断とオーバーバイオーバーセール判断において効果が優れている.止損防止メカニズムは,1回の損失リスクを制御し,より安定した取引戦略である.その後,パラメータ最適化,フィルタ条件の追加,止損防止メカニズムの最適化などで改善することができる.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Sonic R + Barcolor MACD", overlay=true)
HiLoLen = input(34, minval=2,title="High Low channel Length")
pacL = ema(low,HiLoLen)
pacH = ema(high,HiLoLen)
// Plot the Price Action Channel (PAC) base on EMA high,low and close//
L=plot(pacL, color=yellow, linewidth=1, title="High PAC EMA",transp=0)
H=plot(pacH, color=yellow, linewidth=1, title="Low PAC EMA",transp=0)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
hisup= iff(delta>delta[1] and delta>0, 1,
iff(delta<delta[1], -1, nz(hisup[1], 0)))
hisdown = iff(delta<delta[1] and delta<0, 1,
iff(delta>delta[1], -1, nz(hisdown[1], 0)))
barcolor(hisup==1 and MACD>0 ? lime: hisdown==1 and MACD<0 ? red : blue )
//SR
PeriodLookBack = input(34)
xHighest = highest(PeriodLookBack)
xLowest = lowest(PeriodLookBack)
Trend= close>xHighest[1] ? 1: close< xLowest[1]?-1 : nz(Trend[1],0)
// Strategy//
conbuy= hisdown==1 or MACD<0 ? 1: hisup[5]==1 and MACD[5]>0 ?-1 : nz(conbuy[1],0)
gobuy= conbuy==1 and close-open<2*(pacH-pacL) and high-close<(pacH-pacL)/2 and hisup==1 and MACD>0 and close-pacH<1.5*(pacH-pacL) and close>open and high-close<close-open and close>pacH
consell= hisup==1 or MACD>0 ?1 : hisdown[5]==1 and MACD[5]<0 ?-1 : nz(consell[1],0)
gosell= consell==1 and open-close<2*(pacH-pacL) and close-low<(pacH-pacL)/2 and hisdown==1 and MACD<0 and pacL-close<1.5*(pacH-pacL) and close<open and close-low<open-close and close<pacL
if(gobuy)
strategy.entry("Buy",strategy.long)
if(gosell)
strategy.entry("Sell",strategy.short)
//if(Trend==-1 and close<pacL)
// strategy.close("Buy")
//if(Trend==1 and close>pacH)
// strategy.close("Sell")
////////////// TP and SL//
SL = input(defval=100.00, title="Stop Loss Point", type=float, step=1)
rr= input(defval=0.1,title="Reward/Risk",type=float)
useTPandSL = input(defval = false, title = "Use exit order strategy?")
Stop = SL
Take=SL*rr
Q = 100
if(useTPandSL)
strategy.exit("Out Long", "Buy", qty_percent=Q, profit= Take, loss=Stop)
strategy.exit("Out Short", "Sell", qty_percent=Q, profit= Take, loss=Stop)