모멘텀 추적 거래 전략

저자:차오장, 날짜: 2023-12-20 16:06:26
태그:

img

전략 개요

모멘텀 추적 거래 전략 (Momentum Tracking Trading Strategy) 은 주로 시장 모멘텀 트렌드를 추적하고 여러 기술적 지표를 보조 판단으로 사용하는 자동화 거래 전략이다. 이 전략은 현재 시장의 주요 자금의 방향과 강도를 결정하기 위해 K 라인 정보를 분석하고, 그 다음 거래 시그널을 발행하여 거래량 가격 및 이동 평균과 같은 지표를 기반으로 트렌드 추적을 달성합니다.

전체적으로, 이 전략은 중장기 트렌드 트레이딩에 적합하며, 시장 트렌드를 효과적으로 포착하고 더 높은 단일 수익을 추구하기 위해 거래 빈도를 줄일 수 있습니다. 동시에 전략 매개 변수를 최적화 한 후 단기 거래에도 사용할 수 있습니다.

전략 원칙

주력권 판단

모멘텀 추적 전략의 핵심은 시장의 주요 자금의 방향을 판단하는 것입니다. 전략은 실시간으로 시장의 변동성을 모니터링하기 위해 ATR 지표를 계산합니다. 변동성이 증가하면 주요 자금이 축적되거나 분배되는 것을 의미하며 전략은 주요 자금이 운영되는 시기를 피하기 위해 일시적으로 시장에서 벗어날 것입니다.

변동성이 약화되면 주요 힘 축적 또는 할당이 완료되어 전략이 주요 힘의 특정 방향을 결정하기 위해 시장에 다시 진입한다는 것을 의미합니다. 판단 방법은 시장의 지원 및 압력 위치를 계산하여 돌파구 징후가 있는지 확인하는 것입니다. 명확한 돌파구가있는 경우 주요 펀드가 그 방향을 선택했음을 증명합니다.

보조판결

주요 기금의 방향을 결정한 후 전략은 또다시 검증을 위한 여러 보조 기술 지표를 도입하여 잘못된 판단을 피합니다. 특히 MACD, KDJ 및 기타 지표가 주요 기금의 방향과 일치하는지 여부를 결정하기 위해 계산됩니다.

주요 펀드와 보조 지표의 방향이 같은 방향으로 신호를 발산 할 때만 전략이 포지션을 열 수 있습니다. 이것은 거래 빈도를 효과적으로 제어하고 높은 확률로만 진입합니다.

손실 중지 출구

포지션 개척 후, 모멘텀 추적 전략은 실시간으로 가격 변화를 추적하고, ATR 값의 확장을 스톱 로스 신호로 사용합니다. 이것은 시장이 다시 주요 운영 단계에 들어갔고, 함락되지 않도록 즉시 현금으로 빠져 나야한다는 것을 의미합니다.

또한, 가격 움직임이 특정 범위를 초과하고 그 다음 인하가 발생하면 Stop Loss도 발생합니다. 이것은 정상적인 기술적 인 인회전이며 위험 통제를 위해 즉시 중단해야합니다.

전략 의 장점

높은 체계성

모멘텀 추적 전략의 가장 큰 장점은 높은 수준의 체계화 및 표준화입니다. 거래 논리는 명확하며 각 입출구에는 임의적인 거래 대신 명확한 원칙과 규칙이 있습니다.

이것은 이 전략의 복제성을 매우 강력하게 만듭니다. 사용자는 수동 개입없이 구성 후 장기 사용에 적용 할 수 있습니다.

성숙 한 위험 관리

이 전략에는 주요 전력 판단, 보조 검증, 스톱 손실 라인 설정 등과 같은 다단계 위험 관리 메커니즘이 내장되어 있으며, 비 체계적 위험을 효과적으로 제어 할 수 있습니다.

구체적으로, 전략은 높은 확률 상황에서만 포지션을 개설하고 손실을 최대한 피하기 위해 과학적 스톱 손실 지점을 설정합니다. 이것은 안정적인 자본 성장을 보장합니다.

비교적 지속 가능한 수익

단기 전략에 비해 모멘텀 트래킹 전략의 보유 기간은 길고 각 수익은 더 높습니다. 이는 전체 전략 수익을 더 안정적이고 지속 가능하게 만듭니다.

또한 전략은 중장기 트렌드를 추적하여 트렌드의 변동성을 완전히 포착 할 수 있습니다. 이것은 특히 주요 트렌드 시장에서 눈에 띄습니다.

위험 경고

어려운 매개 변수 최적화

모멘텀 추적 전략은 ATR 매개 변수, 침투 매개 변수, 스톱 손실 매개 변수 등 여러 매개 변수를 포함합니다. 이러한 매개 변수 사이에 특정 상관관계가 있으므로 최적의 매개 변수 조합을 찾기 위해 반복 테스트가 필요합니다.

부적절한 매개 변수 구성은 과도한 거래 빈도 또는 불충분한 위험 통제로 쉽게 이어질 수 있습니다. 이것은 사용자에게 전략 최적화에 대한 특정 경험을 필요로합니다.

탈출 함정

전략이 주요 파워와 지표 신호를 결정하면 가격의 돌파구에 의존하여 확인됩니다. 그러나 침투 거래에서 잘못된 돌파구가 발생할 수 있습니다. 함락 될 확률을 높일 것입니다.

중요한 돌파구가 실패하면 더 큰 손실이 발생할 수 있습니다. 이것은 전략의 본질적인 약점입니다.

최적화 방향

기계 학습을 도입

기계 학습 알고리즘을 사용하여 매개 변수 간의 상관관계를 자동으로 감지하고 최적의 매개 변수 조합을 찾을 수 있습니다. 이것은 수동 테스트보다 훨씬 효율적입니다.

구체적으로, 환경 오류 알고리즘은 전략 수익을 극대화하기 위해 강화 학습에 기반한 매개 변수를 지속적으로 반복하는 데 사용할 수 있습니다.

필터를 늘려

기존의 지표, 예를 들어 거래량 지표, 자본 흐름 지표 등에 기반한 더 많은 보조 필터를 도입하여 신뢰성을 높이기 위해 돌파구 신호를 3번 또는 4번 검증할 수 있습니다.

그러나 너무 많은 필터도 기회를 놓칠 수 있습니다. 필터 강도는 균형을 잡아야합니다. 또한 필터 자체는 상관관계를 피해야합니다.

전략 융합

운동 추적 전략을 다른 전략과 결합하여 서로 다른 전략의 장점을 활용하여 직각성을 달성하고 전반적인 안정성을 향상시킵니다.

예를 들어, 단기적인 반전 전략을 적용하고 돌파구를 발견한 후 반전 거래를 시작하면 더 많은 이익을 얻을 수 있습니다.

요약

일반적으로 모멘텀 추적 거래 전략은 권장 할 가치가있는 체계화된 트렌드 추적 전략입니다. 명확한 거래 논리, 충분한 위험 통제가 있으며 사용자에게 안정적이고 효율적인 투자 수익을 가져올 수 있습니다.

그러나 전략 자체에는 몇 가지 내재된 약점도 있습니다. 이 전략의 효과를 극대화하기 위해 사용자가 매개 변수를 최적화하고 전략을 통합 할 수있는 능력을 갖추어야합니다. 전반적으로 모멘텀 추적 전략은 어느 정도의 기초를 가진 양적 열광자들에게 적합한 양적 제품입니다.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-15 01:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Created by frasmac2k Strategy credit to Alex Morris

//@version=5
strategy("Mechanical", shorttitle="MECH", overlay=true)

// Get the current date and time
currentYear = year
currentMonth = month
currentDay = dayofmonth

// Create a timestamp for the present date and time
currentTimestamp = timestamp(currentYear, currentMonth, currentDay)

// Define time interval for backtesting
dStart = input(timestamp('2023-07-01'), title='Set Start date', tooltip='Select a start date to run the script from')

// Define direction of strategy
direction = input.string('Forward',title='Direction', tooltip='Forward will go LONG on a Green anchor candle. Inverse will go short on a Green anchor candle and vice versa for Red candle', options=['Forward', 'Inverse'])

// Define the anchor hour as user input with a range of 0 to 23
anchorHour = input.int(11, title="Anchor Hour", tooltip='Set the hour to trade', minval=0, maxval=23)

// Define the take profit and stop loss in pips
takeProfitPips = input.int(10, title='Define TP Pips', tooltip='How many pips do you want to set TP. Choose a sensible value related to the instrument', minval=5)
stopLossPips = input.int(10,'Define SL Pips', tooltip='How many pips do you want to set SL. Choose a sensible value related to the instrument', minval=5)

// Define Tick size
tick10p = input.int(100, title='tick size', tooltip='Choose how many ticks equal 10 pips. This can vary by broker so measure 10 pips on the chart and select how many ticks that equates to. Forex is typically 100. Some instruments such as indices can be 1000', options=[100,1000])

// Declare TP/SL variables
var float takeProfit = na
var float stopLoss = na

// Calculate take profit and stop loss levels in ticks
if tick10p == 100
    takeProfit := takeProfitPips * 10
    stopLoss := stopLossPips * 10
if tick10p == 1000
    takeProfit := takeProfitPips * 100
    stopLoss := stopLossPips * 100

// Declare offset time
var int offset = na

if currentTimestamp > timestamp('2023-10-29')
    offset := 4
else
    offset := 5

//adjust for exchange time
anchorHour := anchorHour - offset

// Define the anchor hour as user input with a range of 0 to 23
tradeHour = anchorHour

// Define logical check for strategy date range
isStratTime = true

// Calculate the time condition for placing the order at the user-defined hour (start of the next hour)
isTradeTime = true

// Logic condition for forwards or inverse
isForward = direction == 'Forward'
isInverse = direction == 'Inverse'

// Declare entry condition variables
var bool longCondition = na
var bool shortCondition = na

// Declare and initialize variables for anchorCandle open and close prices
var float anchorOpen = na
var float anchorClose = na
var float tradeOpen = na
var float tradeClose = na

// Set logic by direction

if isForward
    // Strategy logic
    if isTradeTime and isStratTime
        //Obtain candle open/close
        anchorOpen := open
        anchorClose := close
        // Define entry conditions
        longCondition := anchorClose > anchorOpen
        shortCondition := anchorClose < anchorOpen
        
        // Entry logic
        if longCondition
            strategy.entry("Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Long", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')
        if shortCondition
            strategy.entry("Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Short", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')

if isInverse
    // Strategy logic
    if isTradeTime and isStratTime
        //Obtain candle open/close
        anchorOpen := open
        anchorClose := close
        // Define entry conditions
        shortCondition := anchorClose > anchorOpen
        longCondition := anchorClose < anchorOpen
        
        // Entry logic
        if longCondition
            strategy.entry("Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Long", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')
        if shortCondition
            strategy.entry("Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Short", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')

// Define the time range for the background shade
startHour = anchorHour
startMinute = 0
endHour = anchorHour
endMinute = 0

// Check if the current time is within the specified range
isInTimeRange = (hour == startHour and minute >= startMinute) or (hour == endHour and minute <= endMinute) or (hour > startHour and hour < endHour)

// Define the background color for the shade
backgroundColor = color.new(color.red, 90)

// Apply the background shade
bgcolor(isInTimeRange ? backgroundColor : na)



더 많은