모멘텀에 따른 트레이딩 전략


생성 날짜: 2023-12-20 16:06:26 마지막으로 수정됨: 2023-12-20 16:06:26
복사: 0 클릭수: 651
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

모멘텀에 따른 트레이딩 전략

전략 개요

동력 추적 거래 전략은 시장 동력을 추적하는 경향을 중심으로 여러 가지 기술 지표를 보조 판단으로 결합한 자동화 거래 전략이다. 이 전략은 K선 정보를 분석하여 현재 시장 주력 자금의 방향과 강도를 판단하고, 그 다음 양 가격 지표, 이동 평균 등 기술 지표와 결합하여 거래 신호를 발산하여 트렌드 추적을 구현한다.

전체적으로, 이 전략은 중장선 트렌드 거래에 적합하며, 시장 트렌드를 효과적으로 포착하고, 거래 빈도를 낮추고, 더 높은 단위 수익을 추구한다. 또한, 전략 매개 변수가 최적화되면, 단선 거래에도 사용할 수 있다.

전략 원칙

지배적 판단

동력 추적 전략의 핵심은 시장의 주력 자금 방향을 판단하는 것이다. 전략은 ATR 지표를 계산하여 시장의 변동성을 실시간으로 모니터링한다. 변동성이 커지면 주력이 축적되거나 배분되고 있으며, 전략은 일시적으로 시장에서 탈퇴하여 주력이 작동하는 기간을 회피한다.

변동이 약해지면, 주력이 축적되거나 분배가 끝나면, 전략이 다시 출전하여 주력의 특정 방향을 판단한다. 판단 방법은 시장의 지지 압력 위치를 계산하여 돌파의 징후가 있는지 확인하는 것이다. 명확한 돌파가 있으면 주력이 그 방향을 선택한 것을 확인한다.

보조 판단

주요 힘의 방향을 결정한 후, 전략은 여러 가지 보조 기술 지표를 다시 확인하기 위해 도입합니다. 잘못된 판단을 피하기 위해. 구체적으로, MACD, KDJ와 같은 지표를 계산하여 주요 힘의 방향과 일치하는지 판단합니다.

주력 방향과 보조 지표가 동방향 신호를 냈을 때만 전략은 포지션을 개설한다. 이것은 거래 주파수를 효과적으로 제어하고, 높은 확률의 경우에만 진입한다.

손해제출

포지션 구축 후, 동력 추적 전략은 가격 변화를 실시간으로 추적하고, ATR 값의 확장을 스톱 신호로 한다. 이것은 시장이 다시 주력 운영 단계에 들어간 것을 의미하며, 즉시 현금으로 빠져나가야 하며, 피당하는 것을 피한다.

또한, 가격이 일정 범위를 넘어서면 회전이 중단된다. 이것은 정상적인 기술적인 회전이며, 위험 관리와 함께 즉시 회전이 중단되어야 한다.

전략적 이점

체계적

동력 추적 전략의 가장 큰 장점은 매우 체계화되고 규범화되어 있다는 것입니다. 거래 논리는 명확하고, 모든 입출입에 명확한 원칙과 규칙이 있으며, 무작위 거래가 발생하지 않습니다.

이 전략은 매우 복제성이 강하여 사용자가 수동적인 개입 없이 장기적인 응용을 구성할 수 있다.

위험 통제

전략은 여러 단계의 위험 제어 메커니즘을 내장합니다. 예를 들어, 주력 판단, 보조 검증, 스톱 라인 설정 등이 비 체계적인 위험을 효과적으로 제어 할 수 있습니다.

구체적으로, 전략은 높은 확률의 경우에만 포지션을 열고 과학적인 스톱로스를 설정하여 손실이 확대되는 것을 최대한 피합니다. 이것은 자금의 안정적인 성장을 보장합니다.

더 지속가능한 수익

짧은 라인 전략에 비해 동력 추적 전략의 지분 주기가 길고 매번의 수익도 높습니다. 이것은 전략의 전체 수익을 보다 안정적이고 지속가능하게 만듭니다.

그리고 중장선 트렌드를 추적하는 전략은 트렌드의 변동성을 충분히 포착할 수 있습니다. 이것은 큰 트렌드 트렌드에서 특히 뚜렷합니다.

위험 경고

변수를 최적화하기 어려운 경우

동력 추적 전략은 ATR 파라미터, 브레이크 파라미터, 스톱 로즈 파라미터 등과 같은 더 많은 파라미터를 포함합니다. 이러한 파라미터 사이에 약간의 상관관계가 있으며, 최적의 파라미터 조합을 찾기 위해 반복 테스트가 필요합니다.

매개 변수가 잘못 구성되면 거래 빈도가 너무 높거나 위험 관리가 부족하다는 문제가 발생할 수 있습니다. 이것은 사용자가 전략 최적화 경험이 필요합니다.

침입은 속임수입니다.

전략이 지배력을 판단할 때, 지표 신호는 가격의 돌파구에 의존한다. 그러나, 돌파구 작업에서, 가짜 돌파구가 발생할 수 있는 경우가 많기 때문에, 이는 피지배가 될 확률이 높다.

만약 중요한 돌파구가 실패하면 큰 손실이 발생할 수 있다. 이것은 전략의 내재된 약점이다.

더 나은 생각

기계 학습을 도입합니다.

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

구체적으로, EnvironmentError 알고리즘을 사용하여 강도 학습에 기반한 계속 반복되는 매개 변수를 사용하여 전략 수익을 극대화 할 수 있습니다.

필터를 추가

기존의 지표에 기초하여 거래량 지표, 자금 흐름 지표 등과 같은 더 많은 보조 필터를 도입할 수 있으며, 돌파 신호에 대해 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)