ゴールデンクロス・デスクロス戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月11日 16:33:18
タグ:

概要

この戦略は,簡単な移動平均値の黄金十字と死十字原理を使用して,株の長期と短期を実装する.高速MAが遅いMAを超えると長期になり,高速MAが遅いMAを下回ると短くなります.

戦略の論理

戦略はまずバックテストの時間枠を定義し,その後,MAタイプと期間長さを含む2つの移動平均値の計算パラメータを設定します.

getMAType (() 関数は2つのMAの値を計算します.fastMAは短い期間のMAで,slowMAは長い期間のMAです.

基本的な論理は

  • FastMA が slowMA を越えると,Long 信号が発信されます.

  • FastMAが slowMAを下回ると,ショート信号が発信されます.

最後に,バックテスト中に,ロング信号を見るとロングポジションと,ショート信号を見るとショートポジションを取ります.

利点分析

  • シンプルで明快な戦略のアイデア 分かりやすく実行できます
  • 広範囲に適用されるMAクロスオーバー原則を使用し,ほとんどのストック製品に適しています.
  • 調整可能な MA タイプとパラメータ,高度な適応性
  • モジュラルの戦略構造 明確な機能性 最適化が簡単

リスク分析

  • MAのクロスオーバーは遅れており 取引機会を逃す可能性があります
  • 効率的に市場をフィルタリングできず 罠にかかったりします
  • パラメータ最適化は 十分に包括的ではなく 手作業の経験が必要です
  • 取引リスクと損失を効果的にコントロールできない.

リスクに対する可能な最適化:

  1. 傾向を特定するための他の技術指標を追加する.

  2. ストップ・ロスは,トレード・ロスの金額をコントロールに追加します.

  3. 量指標を追加して ショットソー市場を回避します

  4. パラメータ最適化メカニズムを構築して,最適なパラメータセットを自動的に探す.

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

この戦略は,次の側面においてさらに最適化することができる.

  1. 損失を制御するために固定ストップ・ロスト・ポイントやストップ・ロスト・トライリングなどのストップ・ロスト・戦略を追加します

  2. 固定または動的ポジションサイジングのようなポジションサイジング戦略を追加して取引リスクを制御します.

  3. 他の技術指標と組み合わせてフィルターを追加して 傾向を特定し 勝率を向上させます

  4. 格子検索や線形回帰などの方法でパラメータを最適化します

  5. 取引の戦略を拡大する 脱退の撤退や 取引の戦略を拡大する

  6. 量指標を追加して ショットソー市場を回避します

  7. 商品を株式指数,外為,暗号通貨などに拡大します

概要

この戦略は,MAクロスオーバー原則に基づくロング/ショートストック選択を実装する. 戦略のアイデアはシンプルで明確で,広く使用され,高度に適応可能で,実質的に価値があります. しかし,いくつかの遅延およびウィップソーフィルタリングの問題もあります. 将来の最適化は,ストップ損失を改善し,パラメータ最適化,フィルターを追加し,より有利にするために焦点を当てることができます.


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

//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() =>  true

///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)

source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    res
    
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)

long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)

/////////////// Plotting /////////////// 
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long", strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)

もっと