移動平均交差ロングとショート戦略


作成日: 2023-10-24 11:02:52 最終変更日: 2023-10-24 11:02:52
コピー: 0 クリック数: 607
1
フォロー
1617
フォロワー

移動平均交差ロングとショート戦略

概要

この戦略は,主に移動平均線の金叉死叉とK線突破平均線を利用して多空の決定を行う.短期移動平均線上を長期移動平均線上よりも突破すると多空を,短期移動平均線下を長期移動平均線上よりも突破すると空空をする.同時,K線を組み合わせた閉盘価格突破平均線を入場信号としてする.

戦略原則

  1. 2つの異なる周期の移動平均EMA1とEMA2を計算する.EMA1周期は短い,EMA2周期は長い.

  2. EMA1がEMA2を装着するかどうかを判断し,そうなら,さらに装着してください.

  3. EMA1がEMA2を履いているかどうかを判断し,もしそうなら,空白する.

  4. EMA1を突破したかどうかを判断する.

  5. 止損退出メカニズム: 固定止損ポイントを設定するか,ドンチアン通路で止損を設定する.

主に以下の関数を使用します.

  • ema (():指数移動平均線を計算する
  • crossover ():EMA1がEMA2を装着するかどうかを判断する
  • crossunder ((():EMA1がEMA2を横切っているかどうかを判断する
  • rising (() /falling ((): 価格が上昇/下落しているかを判断する
  • 条件によって異なる値を返します.

優位分析

  1. 戦略はシンプルで理解しやすい.

  2. 均線システムのトレンド追跡機能を利用して,トレンドを効果的に追跡することができる.

  3. K線の閉盤価格の突破を入場時として用いると,偽突破を回避することができる.

  4. 異なるパラメータの均線組み合わせを柔軟に適用し,異なる周期に対応する.

  5. リスクコントロールのセットアップ

リスク分析

  1. 市場が揺れ動いているとき,均線は金叉死叉信号を頻繁に発生させ,損なわれやすい.

  2. 固定ストップポイントは,市場変化に合わせて調整できないほど,固定すぎます.

  3. 平均線システムは遅滞しており,トレンドの転換点において反転信号を逃すのが容易である.

  4. 偽突破をフィルターするには,均線傾きを正確に判断する必要があります.

  5. パラメータは慎重に選択し,パラメータの組み合わせが頻繁にまたは遅れている場合,戦略の効果に影響を与えます.

最適化の方向

  1. MACD指標のゼロ軸交差を活用してトレンドを決定し,振動をフィルターする.

  2. ドンチアン通路は,動的ストップラインを設定し,固定ストップの問題を改善するために加入できます.

  3. ブルイン帯の指数は,強弱なトレンドを判断し,波動的な市場での無効取引を回避できます.

  4. 平均線パラメータの組み合わせを最適化し,異なる周期戦略の実効性をテストする.

  5. 固定移動平均線を加えることも検討できます.

要約する

この戦略の全体的な考え方はシンプルで明確で,通常の均線金叉死叉取引戦略を利用し,同時にK線突破を組み合わせて,偽信号を効果的にフィルターできます.最適化の余地は,トレンドの強弱を判断し,ダイナミックストップを設定するための他の指標を使用することです.全体的に,均線に基づいたトレンド追跡戦略のクラシックを理解しやすく,その最適化のスペースを探索する価値があります.

ストラテジーソースコード
/*backtest
start: 2023-09-01 00:00:00
end: 2023-10-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='Mega crypto bot strategy', shorttitle='megacryptobot_Strategy', overlay=true, pyramiding=0, initial_capital=10000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
period = input('720')
ch1 = request.security(syminfo.tickerid, period, open)
ch2 = request.security(syminfo.tickerid, period, close)
longCondition = crossover(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

///////////////////////////////////////////////////////////////////////////////////////////