高周波ヘジング戦略 MACDバーカラーと線形回帰に基づく

作者: リン・ハーンチャオチャン,日付: 2023年10月27日 10:42:54
タグ:

img

概要

この戦略は,MACDバーカラーと線形回帰指標を組み合わせて,高周波の逆転取引を達成し,特に短期間の仲介とヘッジに適しています.これは典型的な市場中立戦略に属しています.

戦略の論理

戦略は以下の主要要素で構成されています.

  1. 傾向判断指標としてMACDバーの色.MACDバーの色が緑色であるとき,上向きの傾向を示すため,ショートオーダーを入れてはならない.MACDバーが赤色であるとき,下向きの傾向を示すため,ロングオーダーを入れてはならない.

  2. 線形回帰が主要な取引信号指標です.価格が線形回帰線を超えるとロングで,価格が線以下を超えるとショートします.

  3. PACチャネルは,線形回帰線の方向を決定するために,高値,低値,閉値のEMAによって形成される.線形回帰の方向がチャネルトレンドと一致するときにのみ取引シグナルが生成される.

  4. ストップ・ロスのラインとして EMA 89 を設定します.価格がこのラインを上回るとポジションを閉じる.

取引シグナルの論理は

長信号: 線形回帰がPACの下部帯を横切って行きます そして線形回帰が傾斜して行きます そしてMACDバーは赤ではありません

短信号: 線形回帰がPAC上部帯を下に横切って そして線形回帰が下向きで MACDバーは緑色ではない.

エクジットシグナル:価格がEMA89を下回る.

この戦略は,トレンド判断と主要な価格レベルを組み合わせて,高周波のヘッジ取引を達成します.

利点分析

  1. MACDバーの色は主要なトレンドを決定し,トレンドに反する取引を避けるのに役立ちます.

  2. 線形回帰はスムーズで 騒音をフィルタリングします

  3. EMAチャネルは,明らかに上昇/下落バイアスを定義しています.

  4. ストップ・ロスは合理的に利益を最大化するように設定されます.

  5. 取引頻度が高いため アルゴリズム取引に適しています

  6. 取引をヘッジし 範囲限定市場から利益を得ることができます

リスク分析

  1. 線形回帰とチャネルのパラメータは最適化が必要で,そうでなければ失敗する可能性があります.

  2. ストップ・ロスは,大きな価格変動時に頻繁に行われる可能性があります.ストップ・ロスの範囲を拡大することを検討できます.

  3. 取引頻度は高いため 取引コストは高額になる可能性があります

  4. MACDは少し遅れていて 短期的なトレンド逆転を 見逃す可能性があります

  5. EMAのチャネルも 変化する市場状況に適応するために 継続的な最適化が必要です

オプティマイゼーションの方向性

  1. 線形回帰とチャネルパラメータを調整して 異なる儀器に合わせる

  2. ストップ・ロスの範囲を拡大し,報酬/リスク比を1を超えておく.

  3. MACD パラメータを最適化して より短期信号を捉える

  4. 線形回帰を代替する他の指標を試してみてください 例えばボリンジャー帯です

  5. ポジションのサイズを追加して,過剰な一方的な損失を防ぐ.

  6. RSIのような他の指標を組み込み,いくつかの取引信号をフィルターします.

結論

この戦略は,高周波ヘッジ取引を達成するために複数の技術指標を組み合わせます.その強みは,合理的なリスク制御で短期的な逆転を捉えることにあり,範囲限定市場条件に非常に適しています.同時に,過剰なフィットメントを防ぐために特定のパラメータの最適化と改善が必要です.適切な管理により,非常に実践的な高周波取引戦略になることができます.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy("Sonic R + Linear Reg + Kumo Cloud + Barcolor MACD", overlay=true,default_qty_value=10000,initial_capital=200,currency=currency.USD, pyramiding=1)
EMA = input(defval=89, title="EMA Signal")
HiLoLen     = input(34, minval=2,title="High Low channel Length")
pacC        = ema(close,HiLoLen)
pacL        = ema(low,HiLoLen)
pacH        = ema(high,HiLoLen)
DODGERBLUE = #1E90FFFF
// Plot the Price Action Channel (PAC) base on EMA high,low and close//
L=plot(pacL, color=DODGERBLUE, linewidth=1, title="High PAC EMA",transp=90)
H=plot(pacH, color=DODGERBLUE, linewidth=1, title="Low PAC EMA",transp=90)
C=plot(pacC, color=DODGERBLUE, linewidth=2, title="Close PAC EMA",transp=80)
//Moving Average//
signalMA =ema(close,EMA)
plot(signalMA,title="EMA Signal",color=black,linewidth=3,style=line)
linereg = linreg(close, EMA, 0)
plot(linereg, color = orange, title = "Linear Regression Curve", style = line, linewidth = 1)
//////ICHIMOKU/////////
conversionPeriods = input(9),
basePeriods = input(26, minval=1, title="Base Line")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span"),
displacement = input(26, minval=1)
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine) 
leadLine2 = donchian(laggingSpan2Periods-1)
p1 = plot(leadLine1, offset = displacement-1, color=gray,title="Senkou span A", transp=90)
p2 = plot(leadLine2, offset = displacement-1, color=gray, title="Senkou span B", transp=90)
fill(p1, p2, color = leadLine1 > leadLine2 ? green : red, title="Kumo Cloud")
///////////////// MACD BARCOLOR /////////////////////
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 )
///////////// SIGNAL ///////////////
conbuy = iff(crossover(linereg,pacL) and rising(linereg,5), 1,
	     iff(crossover(linereg,pacH) or (crossunder(linereg,pacL) and pacL<signalMA), -1, nz(conbuy[1], 0)))
consell = iff(crossunder(linereg,pacH) and falling(linereg,5), 1,
	     iff(crossunder(linereg,pacL) or (crossover(linereg,pacH) and pacH>signalMA), -1, nz(consell[1], 0)))
golong= conbuy==1 and close>open and open<pacH and close>linereg and hisdown!=1
goshort= consell==1 and close<open and open>pacL and close<linereg and hisup!=1
if(golong)
    strategy.entry("Buy",strategy.long)
if(goshort)
    strategy.entry("Sell",strategy.short)
closelong= conbuy==-1
closeshort=consell==-1
if(closelong)
    strategy.close("Buy")
if(closeshort)
    strategy.close("Sell")
 ////////////// TP and SL//.
//SL = input(defval=200.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) 

もっと