2つの移動平均のクロスオーバー・スカルピング戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月30日 11:19:48
タグ:

img

概要

ダブル移動平均クロスオーバーは,価格と移動平均間のクロスオーバー信号をエントリー・アウトシグナルとして利用して短期的なトレンド動きを把握するシンプルで効果的なスカルピング戦略です.

戦略の論理

この戦略は,異なる期間の2つの移動平均値 - 短期MA線と長期MA線を使用する.短い期間のMAが下から長い期間のMAを横切ったときに購入信号を生成する.短い期間のMAが上から長いMAを下に横切ったときに販売信号を生成する.

この戦略は,最初に変数長度を定義し,より長いMAラインの期間を50に指定し,その後,閉じる価格として価格を定義し,長度50のMA値を計算し,ma変数に保存する.さらに,価格がma値を超えているかどうかを確認するためにb秒を定義する.そうであれば,bcountは1倍増やされ,そうでなければ0にリセットされる.b秒が連続してconfirmBarsを誘発すると (デフォルト2),購入信号が生成される.価格がma値を下回るときも同様の販売信号が生成される.

いくつかの無効な信号をフィルタリングするために,現在のバーと前のバーの価格関係をチェックするclc,clc0,clc1のような追加のフィルタが追加されます.これらの条件を満たす場合にのみ取引信号が生成されます.

最後に,価格がMA線を逆方向に横切ると,既存のポジションは閉鎖されます.

利点

  • シンプルな論理で 分かりやすく実行できます
  • 短期的な傾向を有効に把握する.
  • 追加されたフィルターは,無効な信号からの干渉を軽減します.
  • 固定ストップ損失メカニズムは,単一の取引での損失を制御します.

リスク

  • 市場が変わると 余分なコストがかかります
  • 固定パラメータであるMPA期間は,すべての市場条件に適合しない可能性があります.
  • 固定ストップ損失は,ストップレベルを超えた強いトレンド動きで早期に終了する可能性があります.

リスクは,変動,遅延停止,百分比停止等に基づく動的MA期間を使用して軽減できます.

改良

戦略は,いくつかの方法で改善することができます:

  1. 動的に変動をベースに MA パラメータを最適化する.

  2. 信号の質を改善するために音量ピークのような追加フィルターを追加します

  3. 早期停止を減らすために浮動式または百分比停止を使用します.

  4. マックド,RSIなどの他の指標と組み合わせて 多条件検証をします

  5. 取引ごとに損失を制御するために ダイナミックなポジションサイズのような 自動リスク管理を追加します

  6. より正確な信号生成モデルのために 機械学習を使用します

結論

ダブルMAクロスオーバー戦略は,短期取引のための効果的なシステムである.細かな調整パラメータ,リスク管理,その他のツールとの組み合わせにより収益性がさらに向上することができる.全体的に,より小さな日中の動きのスカルピングのために理解し,実装することは簡単である.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MovingAvg Cross", overlay=true)
length = input(50)
confirmBars = input(2)
price = close

ma = sma(price, length)

bcond = price > ma

bcount = 0
bcount := bcond ? nz(bcount[1]) + 1 : 0

clc=close[0]>close[1]
clc0=close[0]>open[0]
clc1=close[1]>open[1]

if clc and clc0 and clc1 and (bcount == confirmBars)
    strategy.entry("buy", strategy.long)


scond = price < ma
scount = 0
scount := scond ? nz(scount[1]) + 1 : 0

csc=close[0]<close[1]
csc0=close[0]<open[0]
csc1=close[1]<open[1]

if csc and csc0 and csc1 and (scount == confirmBars)
    strategy.entry("sell", strategy.short)

strategy.close("buy", when=scond)
strategy.close("sell",when=bcond)
    
plot(ma, color=color.red)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)


もっと