ダイナミック利益目標を持つ移動平均戦略

作者: リン・ハーンチャオチャン,日付: 2023-09-18 21:46:47
タグ:

概要

この戦略は,移動平均値を用いてトレンドを特定し,固定ATR倍数で利益を得,ATRに基づいてポジションを動的にサイズする.リスクを制御しながらトレンドを利益のために利用することを目的としています.

原則

この戦略は,トレンド方向を決定するために長さNのシンプル・ムービング・平均値を使用する.ショート・SMAがロング・SMAを横切るとロングになり,以下を横切るとショートする.

入場後,利益目標は入場価格から固定ATR倍数に設定される.例えば,利益目標 = 入場価格 + ATR * ロングのファクタ.価格が利益目標に達すると利益が取られる.

戦略はまた,市場変動を表すATRに逆の位置をサイズします.より大きなATRは,より小さな位置サイズを意味します.

利点

  1. MAはトレンドを特定し,トレンドをフォローすることができます.

  2. ATRは,逆転を避けながら,トレンドから利益を得ています.

  3. ダイナミックポジションサイジングは,市場の変動に応じてリスクを管理します.

  4. 調整可能な利益因数とサイズパラメータ

  5. ストップ・ロスはリスクをさらに制限します

リスクと緩和策

  1. MAの遅延が遅れるので 敏感なパラメータをテストできます

  2. ATRの変動は,利益目標が小さすぎたり,大きすぎたりする可能性があります.傾向のためにATR移動平均を使用できます.

  3. 過剰な波動は,利益を制限する 小さすぎるポジションにつながる. ポジションサイズを設定することができます.

  4. ストップロスの欠如は 制御不能な損失を招くリスクです

  5. 低波動性のある資産など,シンボルの選択が不十分である場合,低パフォーマンスにつながる可能性があります.高波動性のシンボルを選択する必要があります.

増進 の 機会

  1. 最適な設定のために異なるパラメータの組み合わせをテストする.

  2. フィルターとして他の指標を追加して入力ロジックを改善します.

  3. ダイナミックな利益とストップ・ロスを 柔軟性のために研究します

  4. 変動指標に基づいてポジションを管理する.

  5. 保持期間を延長するために 再入力のメカニズムを追加します

概要

戦略は,動平均値でトレンドを特定し,ATRの倍数とサイズ位置で利益を得ます. 能力とリスクがパラメータによって調整されるいくつかのトレンドがあります. しかし,パラメータ選択と利益目標の問題があります. 戦略をより堅牢にするために最適化,ストップ損失を通じてさらなる改善が可能です.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 5m
basePeriod: 1m
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/
// © dongyun

//@version=4
strategy("利润目标止损的移动平均线", overlay=true)

period = input(80,'')
ptper = input(252,'')
ptfactor = input(12,'')
sizeper = input(20, '')

trend = 0.0
signal = 0
size = 1.0
investment = 100000
atrange = 0.0
ptrange = 0.0
stoph = 0.0
stopl = 0.0


if sizeper != 0
	atrange := atr(sizeper)

if atrange == 0 or sizeper == 0 
	size := 1
else
	size := investment/atrange * 0.1

trend := sma(close,period)


if signal != 1 and nz(trend[1]) < nz(trend[2]) and trend > nz(trend[1])
	strategy.entry('long',strategy.long, comment='open_long')
	signal := 1
else
    signal := nz(signal[1])
    
if signal != -1 and nz(trend[1]) > nz(trend[2]) and trend < nz(trend[1])
	strategy.entry('short',strategy.short, comment='open_short')
	signal := -1
else
    if signal == 0
        signal := nz(signal[1])

ptrange := atr(ptper)

if strategy.position_size > 0
	strategy.exit("exit_long", "long", qty = strategy.position_size, limit = close + ptfactor*ptrange , comment='trail_long') 
else
	if strategy.position_size < 0
		strategy.exit("exit_short", "short", qty = abs(strategy.position_size), limit = close - ptfactor*ptrange, comment='trail_short')


もっと