移動平均動的利益確定戦略


作成日: 2023-09-18 21:46:47 最終変更日: 2023-09-18 21:46:47
コピー: 3 クリック数: 606
1
フォロー
1617
フォロワー

概要

この戦略は,移動平均に基づいてトレンドの方向を判断し,ATRの一定比率でストップを停止し,ATRの動的調整ポジションと組み合わせます. 目標は,トレンドを利潤に追及し,同時にリスクを制御することです.

原則

戦略は,長さがNの単純な移動平均を使用してトレンドの方向を判断します. 短期SMAで長期SMAを履くと,多めに実行します. 短期SMAの下で長期SMAを履くと,空いてください.

入場後,戦略はATRの一定倍数でストップとして位置付け,長ポジションの場合,ストップはEntry Price + ATR * Factorである。価格がストップを超えるとストップは出場する。

また,戦略はATRの大きさでポジションを調整する.ATRのサイズは市場の変動率を表し,ポジションのサイズはATRと反比例する.ATRが大きいほど,ポジションは小さい.

利点

  1. 移動平均を使ってトレンドの方向を判断し,トレンドに一定の追跡能力を有する.

  2. ATRの止まる方法は,反転を回避しながら利益を得ることができる.

  3. ダイナミックなポジションの調整は,市場の波動程度に応じてリスクを制御できます.

  4. ストップファクターとポジションパラメータはカスタマイズできます.

  5. ストップ・ローズと組み合わせると リスクをさらに制限できます

リスクと解決策

  1. 移動平均が遅滞しているため,入場が遅れる可能性があります.より敏感なパラメータをテストすることができます.

  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')