相対的な動力戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-29 08:38:04
タグ:

img

概要

相対的な動向戦略は,株の相対的な強さをより広い市場と判断するために,個々の株とインデックスの動向を比較する.株の動向がインデックスよりも高いときに購入し,株の動向がインデックスよりも低いときに販売し,個々の株の成長ピークを把握する.

原則

この戦略の主な論理は,個々の株式の相対的な強さを市場と比較して判断すること,特に:

  1. 株式の動向として,一定の期間における収益を計算する.
  2. インデックス回報をインデックスモメントと同じ期間で計算する.
  3. 株式とインデックスの動向を平滑させるために移動平均を使用する
  4. 株の動向平均が指数の動向を上回ると,株の動向は市場全体よりも強いと考えられます.
  5. 株の動向平均が指数動向動向平均を下回ると,株の動向が弱くなると考えられ,売り信号が発信されます.

この論理によって 株の成長が活発なときに 株を購入し 成長の勢いが衰えるにつれて 売り切れます 株の成長ピーク期に 余剰収益を貯めることができます

利点分析

相対的な勢力の戦略の主な利点:

  1. 株の成長が市場全体を上回るときに購入する
  2. 移動平均値でスムーズ化することで,短期変動をフィルター化し,信号の信頼性が向上します
  3. シンプルな直接の買い物・販売条件,理解し操作が簡単
  4. 相対モメントを計算し,最適化するための時間帯を設定する柔軟性

リスク分析

相対的な動向戦略にはいくつかのリスクもあります:

  1. 成長ピークが終わると 株価が下がり 利益を得るリスクが不十分になる
  2. 相対的な運動量信号は偽であり,実際のピークではなく偽のピークを識別する
  3. 最大損失を制御するために停止損失を設定する必要があります.

これらのリスクは,合理的な利益を得ること,ストップ損失,パラメータ調整などによって管理できます.

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

相対的な動力戦略は主に以下の側面から最適化することができます.

  1. 計算のインパクトを測るための異なる時間段をテストして,最適を見つける
  2. 最適なパラメータのための移動平均の異なる種類と長さを試す
  3. ボリュームフィルターを追加して,モメント不足による偽ブレイクを避ける
  4. 適正なエントリータイミングを確認するために他の指標を組み込む

結論

相対勢力の戦略は,アルファを生成するために,個々の株式と全体の市場の過剰成長段階を捕捉する. シンプルで明確な購入/販売論理と操作の容易さと,パラメータ最適化とリスク管理と組み合わせると,この戦略は非常にうまく機能することができます.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-01-28 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HeWhoMustNotBeNamed

//@version=4
strategy("Relative Returns Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

index_ticker=input("BTC_USDT:swap")
Loopback = input(40, step=20)
useStopAndIndexReturns = input(true)
useStopAndIndexReturnsMa = input(true)

useDifference = not useStopAndIndexReturns

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
MALength = input(10, minval=10,step=10)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time)
inDateRange = true

f_secureSecurity(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on)
f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

index = f_secureSecurity(index_ticker, '1D', close, 0)
stock_return = (close - close[Loopback])*100/close
index_return = (index - index[Loopback])*100/index

stock_return_ma = f_getMovingAverage(stock_return, MAType, MALength)
index_return_ma = f_getMovingAverage(index_return, MAType, MALength)
relativeReturns = stock_return - index_return
relativeReturns_ma = f_getMovingAverage(relativeReturns, MAType, MALength)

plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma : stock_return : na, title="StockReturn", color=color.green, linewidth=1)
plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? index_return_ma : index_return : na, title="IndexReturn", color=color.red, linewidth=1)

plot(useDifference?relativeReturns:na, title="Relative-Returns", color=color.blue, linewidth=1)
plot(useDifference?relativeReturns_ma:na, title="MA", color=color.red, linewidth=1)

buyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma > index_return_ma : stock_return > index_return : relativeReturns > relativeReturns_ma)
closeBuyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma < index_return_ma : stock_return < index_return : relativeReturns < relativeReturns_ma)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca")
strategy.close("Buy", when=closeBuyCondition)

もっと