동적 이윤 목표가 있는 이동 평균 전략

저자:차오장, 날짜: 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')


더 많은