移動平均システム取引戦略


作成日: 2024-01-05 15:36:00 最終変更日: 2024-01-05 15:36:00
コピー: 1 クリック数: 683
1
フォロー
1617
フォロワー

移動平均システム取引戦略

概要

この記事では,単純移動平均に基づく取引戦略について論じます. この戦略は,長さ17の移動平均と閉店価格を比較し,閉店価格で移動平均を横切るときに多し,横切るときに空にする.

戦略原則

移動平均の計算

この戦略は,次のパラメータを使用して移動平均を計算します.

  • MA源:OHLCのデフォルト平均値 ((OHCL4)
  • MAタイプ: 既定のSMA (Simple Moving Average)
  • MA長さ:デフォルトで17

これらのパラメータに基づいて,getMAType () 関数を使用して,17周期の閉盘価格SMAを計算します.

取引シグナル生成

閉店価格と移動平均の関係を比較すると,

  • 閉店価格 > 移動平均: 長期ポジションのシグナル
  • 終了価格 < 移動平均:空置シグナル

閉盘価格が下から移動平均線を横切るときは多行シグナルを生じ,上から下を通るときは空行シグナルを生じます.

取引実行

回測周期の中で,多做信号に遭遇すると多仓が開く,空做信号に遭遇すると空仓開く.

優位分析

この戦略の最大の長所は,考え方が非常にシンプルで明快であることです. 方向の変化によってトレンドの変化を判断する指標のみです. 戦略は,理解しやすく,実行しやすく,初心者向けに適しています.

さらに,移動平均はトレンドフォロー型の指標であり,市場の短期的なノイズによる干渉を避け,トレンドの転換を効果的に追跡することができます.

パラメータの調整により,異なる周期と異なる品種に対応できます.

リスク分析

まず,この戦略は1つの指標にのみ基づいており,判断基準は単一であり,誤った信号を多く生み出す可能性があります.

この戦略はトレンド追跡システムであり, 整合や波動のある市場ではうまく機能しません.

また,ストップ・ストップが設定されていないため,損失の拡大の危険性があります.

解決策は,他の指標と組み合わせて,パラメータの組み合わせを最適化し,誤信号を減らすことです. 止損停止を設定し,リスクを制御し,撤回を最適化します.

最適化の方向

戦略の最適化には,以下の要素が役立ちます.

  1. 移動平均のパラメータを調整し,周期数を最適化します.例えば,30周期または50周期に変更します.

  2. EMA,VIDYAなど,さまざまな種類の移動平均を試してみてください. 価格の変化に対する感受性は異なります.

  3. 他の指標の組み合わせを追加する.例えば,MACDとの組み合わせは,強さを判断することができる.または,RSIとの組み合わせは,誤った信号を減らす.

  4. 追加ストップ・メカニズム。固定パーセントまたはATR値の移動ストップを設定。単発損失を制御。

  5. 利回りの目標パーセントを設定する. 利回りを最大化する.

これらの最適化は,戦略のパフォーマンスをより安定させ,過剰な撤回を回避します.

要約する

この記事では,17周期移動平均をベースにした簡単な取引戦略を分析する.戦略信号源はシンプルで,容易に理解し,実装する.典型的なトレンド追跡システムに属している.戦略を深く解読することで,その優位性とリスクを分析し,複数の次元での最適化思考が与えられている.継続的な最適化と充実によって,この戦略は徐々に進化し,現場で安定した収益を得ることができるという確信がある.

ストラテジーソースコード
/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Simple 17 BF 🚀", 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(2012, "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

///////////// Moving Average /////////////
source = input(title="MA Source", defval=ohlc4)
maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"])
length = input(title="MA Length", defval=17)

///////////// 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)
    if maType == "vwma"
        res := vwma(sourceType, maLen)
    if maType == "rma"
        res := rma(sourceType, maLen)
    res
    
MA = getMAType(maType, source, length)

/////////////// Strategy ///////////////
long = close > MA
short = close < MA

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)

/////////////// Plotting /////////////// 
p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2)
p2 = plot(close, linewidth=2)
fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)