듀얼 사이클 변동성 조정 돌파거래 시스템 및 동적 포지션 관리, 피라미드 포지션 전략

ATR Donchian Channels BREAKOUT TREND FOLLOWING POSITION SIZING PYRAMIDING Turtle Trading
생성 날짜: 2025-06-16 15:14:24 마지막으로 수정됨: 2025-08-12 17:46:27
복사: 0 클릭수: 333
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

듀얼 사이클 변동성 조정 돌파거래 시스템 및 동적 포지션 관리, 피라미드 포지션 전략 듀얼 사이클 변동성 조정 돌파거래 시스템 및 동적 포지션 관리, 피라미드 포지션 전략

개요

이중주기 변동율 조정 돌파 거래 시스템은 유명한 해파리 거래 법칙을 기반으로 설계된 양적 전략으로, 이 전략은 두 개의 다른 시간 주기 ((20일과 55일) 를 사용하여 시장 돌파구를 포착하고, 변동율 지표와 결합하여 역동적인 포지션 관리를 수행한다. 이 시스템은 트렌드 추적, 돌파구 거래, 변동율 조정 포지션 및 피라미드 포지션과 같은 여러 가지 양적 거래 기술을 통합하여 중·장기 시장 추세를 효과적으로 포착하는 것을 목표로 한다. 전략의 핵심 논리는 가격 돌파구 전의 최고점이나 낮은 시점에 진입하여 변동율 ((ATR) 을 계산하는 합리적인 포지션 크기를 계산하고, 추세가 지속될 때 피라미드 포지션을 수행하고, 결국 단기 반기동 돌파구를 통해 손실을 입히거나 이익을 얻는다. 이 전략은 특히 금과 같은 명백한 추세 특성을 가진 자산 유형에 적합합니다.

전략 원칙

코드 분석을 통해, 이 전략의 핵심 원칙은 다음과 같습니다:

  1. 이중주기 진입전략: 두 개의 입시 시스템을 사용한다. 시스템 1은 20 일간의 고/저점 돌파구를 주요 입시 신호로 사용한다. 시스템 2은 이전 거래 손실 후 55 일간의 고/저점 돌파구를 입시 신호로 사용한다. 이 디자인은 시장 상태에 따라 입시 민감도를 자동으로 조정할 수 있다.

  2. 변동률 측정 및 포지션 관리전략: 20 일 평균 실제 파동량 ((ATR) 을 시장의 변동률의 척도로 사용하여 공식: 단위 포지션 = 위험 금액 / (N * 점값) 을 사용하여 합리적인 포지션을 계산하십시오. 위험 금액은 계정 이자율 곱하기 설정된 위험 비율 ((부설 설정 1%) 입니다. 이 방법은 다양한 변동률 환경에서 일관된 위험 노출을 유지하도록 보장합니다.

  3. 피라미드 가장장제: 이미 이윤을 올리는 포지션의 가격이 유리한 방향으로 계속 움직일 때 (적어도 0.5N의 거리) 전략은 동일한 크기의 새로운 단위를 추가 할 수 있습니다. 이러한 피라미드형 포지션 방식은 강한 추세 시장에서 이윤 잠재력을 확장 할 수 있습니다.

  4. 짧은 주기는 역으로 평준을 돌파했다.전략: 10일 낮은/높은 지점을 상위/공백 지점의 탈퇴 신호로 사용한다. 가격이 10일 낮은 지점을 넘어갈 때, 모든 상위 지점을 평행한다. 가격이 10일 높은 지점을 넘어갈 때, 모든 공백 지점을 평행한다.

  5. 시스템 전환 메커니즘: 전략은 거래 결과에 따라 자동으로 입시 시스템을 조정한다. 어떤 방향의 거래가 손실되면, 다음 방향의 거래는 시스템 2 ((55 일 주기) 를 사용한다.

이러한 원리들의 조합을 통해 전략은 트렌드 시장에 조기에 진입하고, 순차적으로 포지션을 부양하고, 트렌드 반전 초기에는 탈퇴하여 중기 및 장기 시장의 트렌드를 효과적으로 포착할 수 있다.

전략적 이점

코드에 대한 분석을 통해, 우리는 이 전략이 다음과 같은 몇 가지 주요 장점을 가지고 있다고 결론을 내릴 수 있습니다:

  1. 자동화된 거래 결정: 전략은 완전히 정량 규칙에 기반하여 거래를 수행하고, 인위적인 감정적 간섭을 제거하고, 거래 규율의 엄격한 집행을 보장합니다. 코드는 입점, 가장 및 출구 조건을 명확하게 정의하고, 주관적 판단이 필요하지 않습니다.

  2. 동적 위험 관리: 각 거래의 위험을 계정 이득의 일정한 비율로 제한하여 (설정값은 1%) 그리고 ATR을 사용하여 포지션 크기를 조정함으로써, 이 전략은 다양한 변동률 환경에서 일관된 위험 노출을 유지할 수 있습니다. 이 방법은 높은 변동성 시장에서 포지션을 자동으로 줄이고 낮은 변동성 시장에서 포지션을 적절하게 증가시킵니다.

  3. 시장 조건에 적응: 쌍주기 설계는 전략이 시장 상태에 따라 자동으로 조정할 수 있도록 한다. 연속적으로 수익을 올리는 트렌드 시장에서 짧은 주기 ((20일) 를 사용하여 민감성을 유지한다. 손실이 발생한 후 더 긴 주기 ((55일) 로 전환하면 가짜 신호를 줄인다.

  4. 수익성 성장 메커니즘전략: 현재 계정 권익을 기반으로 포지션 크기를 계산하고, 계정 성장에 따라 자동으로 포지션을 증가시켜 수익 효과를 달성합니다. 동시에 피라미드 포지션 메커니즘을 통해 강한 추세에서 수익 잠재력을 확장합니다.

  5. 다 시장 적응성: 전략 디자인은 여러 자산 클래스에 적용되며, 특히 금과 같은 명백한 추세 특성이있는 시장에서 더 잘 수행합니다. 파라미터를 조정하여 다른 시장 특성에 최적화 할 수 있습니다.

  6. 명확한 위험 통제10일 역폭을 출전 신호로 사용하여 각 거래에 대해 명확한 중지 손실을 제공하여 단일 거래 위험을 효과적으로 제어하고 최대 위험 비율을 설정하여 체계적인 위험을 제어합니다.

전략적 위험

이 전략의 장점에도 불구하고, 다음과 같은 잠재적인 위험들이 있습니다.

  1. 가짜 침입 위험위기 시장에서 가격이 높은/저한 지점을 자주 돌파하고 그 후 빠르게 다시 떨어지면서 연속적인 손실을 초래할 수 있다. 코드에서 가짜 돌파구를 필터링하는 메커니즘이 부족하여 트렌드없는 시장에서 더 많은 무효 신호를 생성할 수 있다.

  2. 가축의 위험 증가: 피라미드 상장 메커니즘은 추세가 지속되는 동안 매우 효과적이지만, 추세가 갑자기 반전되면, 다단위 포지션은 큰 손실을 초래할 수 있습니다. 전략이 탈퇴 조건을 설정했지만, 급격한 반전에서는 여전히 큰 손실을 입을 수 있습니다.

  3. 매개변수 민감도: 전략 성능은 다양한 파라미터 설정에 크게 의존합니다 (입장 주기, 출장 주기, ATR 주기, 입점 간격 등). 다른 시장 환경에는 다른 파라미터 조합이 필요할 수 있으며 고정된 파라미터로 인해 성능이 불안정할 수 있습니다.

  4. 유동성 위험: 유동성이 낮은 시장에서, 많은 가설은 점유율을 증가시키거나 예상된 가격에 거래하기 어렵게 만들 수 있으며, 실제 실행 효과에 영향을 미칩니다. 코드에는 유동성 문제에 대한 처리 메커니즘이 없습니다.

  5. 체계적인 위험 노출순수 트렌드 추적 전략으로서, 시장의 일반적인 하락이나 급격한 변동 기간 동안 다른 트렌드 전략과 매우 연관성이있을 수 있으며, 다양성 보호를 제공하는 것은 어렵습니다.

  6. 계산 정확도 문제: 코드에서 math.floor 함수를 사용하여 아래로 전체 계산 포지션을 가져옵니다. 소액 계정에서는 포지션이 너무 작거나 거래할 수 없게 될 수 있습니다. 또한, 점값 설정이 잘못되면 포지션 계산 오류가 발생할 수 있습니다.

이러한 위험에 대해, 트렌드 필터를 추가하고, 최대 포지션 제한을 설정하고, 포지션 규칙을 최적화하고, 변동률 조정 메커니즘을 증가시키는 등의 방법을 고려하여 위험을 통제할 수 있습니다.

전략 최적화 방향

코드 분석을 바탕으로, 이 전략은 다음과 같은 몇 가지 최적화 방향이 있습니다.

  1. 트렌드 필터 추가: 현재 전략은 순전히 가격 돌파 거래에 기반하여 가짜 돌파의 영향을 받기 쉽다. 트렌드 지표 (예를 들어 이동 평균, ADX 등) 를 필터링 조건으로 추가하여 트렌드 방향이 일치하는 경우에만 거래를 실행하여 흔들리는 시장에서 손실 거래를 줄일 수 있습니다.

  2. 가맹점 규칙의 최적화: 기존의 포지션 메커니즘은 비교적 간단하며, 점진적인 포지션 비율을 도입하거나 최대 포지션 수 제한을 설정하여 수익을 확대하고 위험을 제어하는 요구를 균형을 잡을 수 있습니다.

  3. 동적 변수 조정: 시장의 변동률이나 트렌드 강도에 따라 진입/출출 사이클과 상장 간격을 동적으로 조정할 수 있다. 예를 들어, 높은 변동률의 시장에서 진입 사이클을 연장하고 낮은 변동률의 시장에서 출구 사이클을 단축하여 전략을 더 적응시킬 수 있다.

  4. 필터링 시간을 추가합니다.거래 시간 필터링을 추가하여 중요한 경제 자료가 발표되거나 유동성이 떨어지는 시기를 피하고 비정상적인 변동의 위험을 줄입니다.

  5. 다중 시간 프레임 확인: 더 긴 시간 주기의 트렌드 방향과 결합하여 거래 필터 조건으로, 예를 들어 일계 트렌드가 4 시간 트렌드 방향과 일치하는 경우에만 거래를 실행하여 신호 품질을 향상시킵니다.

  6. 자금 관리 최적화: 더 복잡한 자금 관리 모델, 예를 들어 케일리 공식 또는 최적의 f 값 방법, 예상된 승률과 수익률에 따라 동적으로 조정되는 위험 비율을 도입하여 자금 성장 곡선을 더 최적화 할 수 있습니다.

  7. 제동장치를 추가: 현재 전략은 역으로 돌파하는 출전 메커니즘에만 기반하고 있으며, 특정 수익 목표가 달성되면 일부 포지션을 평행하는 것과 같은 일부 수익 잠금 메커니즘을 추가하는 것이 고려 될 수 있습니다.

이러한 최적화 방향은 전략의 안정성과 수익성을 효과적으로 향상시킬 수 있으며, 특히 다양한 시장 환경에서의 적응력을 향상시킬 수 있습니다.

요약하다

이중주기 변동률 조정 돌파 거래 시스템은 해파리 거래 법칙에 기반한 완전한 양적 거래 전략으로, 돌파 입문, 변동률 포지션 관리, 피라미드 가축 및 적응 주기 등 여러 가지 양적 거래 기술을 통합한다. 전략은 가격 돌파구를 포착하여 트렌드에 들어가며, 변동률을 통제하는 위험 구멍을 이용하고, 피라미드 가축을 통해 트렌드 수익을 극대화한다.

이 전략의 핵심 가치는 전체적인 시스템 설계, 입출장, 포지션 관리 및 위험 제어와 같은 모든 측면을 포함하여 자율적인 거래 시스템을 형성한다는 것입니다. 특히, 변동률 조정 포지션 메커니즘과 두 번의 주기 적응 설계는 전략이 다른 시장 환경에서 상대적으로 안정적인 성능을 유지할 수 있도록합니다.

그러나, 트렌드 추적 전략으로서, 그것은 불안정한 시장에서 잘 작동하지 않을 수 있으며, 트렌드 필터를 추가하고, 가축 규칙을 최적화하고, 동적 변수 조정과 같은 방법으로 개선해야 한다. 또한, 이 전략은 포트폴리오의 일부로 적합하며, 다른 유형의 전략 (예: 평균 회귀 전략과 같은) 과 결합하여 더 부드러운 수익 곡선을 달성한다.

전반적으로, 이것은 합리적이고 논리적으로 설계된 양적 거래 전략이며, 좋은 이론적 기초와 실용적 가치를 가지고 있습니다. 적절한 매개 변수 최적화 및 보충 메커니즘을 통해, 이 전략은 다양한 시장 환경에서 안정적인 수익을 창출 할 잠재력을 가지고 있습니다.

전략 소스 코드
/*backtest
start: 2024-06-16 00:00:00
end: 2025-06-15 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
//策略声明和基础设置
strategy("Turtle Trading System (Full Version)", overlay=true, pyramiding=5)

//风险控制参数
riskPercent = input.float(0.5, title="每笔交易风险占资金百分比", minval=0.1, maxval=5.0, step=0.1)
pointValue = input.float(1.0, title="点值($/点)")

//入场周期参数
entryPeriod1 = input.int(20, title="系统1入场周期")
entryPeriod2 = input.int(55, title="系统2入场周期(亏损后)")

//出场和波动性参数
exitPeriod = input.int(10, title="出场周期")
nPeriod = input.int(20, title="N周期(ATR)")
pyramidSpacing = input.float(0.5, title="每N x ...添加单位", step=0.1)

//波动性指标计算
N = ta.atr(nPeriod)//计算ATR作为市场波动性的量化标准

//系统1入场通道计算(20周期)
entryHigh1 = ta.highest(high, entryPeriod1)//计算20周期内最高价作为做多突破位
entryLow1 = ta.lowest(low, entryPeriod1)//计算20周期内最低价作为做空突破位

//系统2入场通道计算(55周期)
entryHigh2 = ta.highest(high, entryPeriod2)//计算55周期内最高价作为保守做多突破位
entryLow2 = ta.lowest(low, entryPeriod2)//计算55周期内最低价作为保守做空突破位

//出场通道计算(10周期)
exitLong = ta.lowest(low, exitPeriod)//计算10周期内最低价作为多头出场位
exitShort = ta.highest(high, exitPeriod)//计算10周期内最高价作为空头出场位

//交易状态跟踪变量
var bool lastLongLoss = false//记录上次多头交易是否亏损
var bool lastShortLoss = false//记录上次空头交易是否亏损
var float lastLongEntryPrice = na//记录上次多头入场价格
var float lastShortEntryPrice = na//记录上次空头入场价格

//账户权益和风险计算
equity = strategy.equity//获取当前账户总权益
riskDollars = equity * (riskPercent / 100)//计算每笔交易允许的风险金额
unitSize = riskDollars / (N * pointValue)//基于ATR计算标准头寸规模
positionSize = math.round(unitSize, 3)//设定最终头寸大小

//入场信号生成逻辑
useSystem1Long = close > entryHigh1[1]//系统1多头入场条件
useSystem2Long = lastLongLoss and close > entryHigh2[1]//系统2多头入场条件(仅在上次亏损后)
useSystem1Short = close < entryLow1[1]//系统1空头入场条件
useSystem2Short = lastShortLoss and close < entryLow2[1]//系统2空头入场条件(仅在上次亏损后)

//金字塔加仓条件
canAddLong = strategy.opentrades > 0 and strategy.position_size > 0 and close >= lastLongEntryPrice + (pyramidSpacing * N)
//多头加仓条件
canAddShort = strategy.opentrades > 0 and strategy.position_size < 0 and close <= lastShortEntryPrice - (pyramidSpacing * N)
//空头加仓条件

//出场信号生成
longExit = close < exitLong//多头出场条件
shortExit = close > exitShort//空头出场条件

//多头入场执行
if (useSystem1Long or useSystem2Long)
    strategy.entry("Long", strategy.long, qty=positionSize)//执行多头开仓
    lastLongEntryPrice := close//记录多头入场价格作为加仓基准
    lastLongLoss := false//重置多头亏损状态

//空头入场执行
if (useSystem1Short or useSystem2Short)
    strategy.entry("Short", strategy.short, qty=positionSize)//执行空头开仓
    lastShortEntryPrice := close//记录空头入场价格作为加仓基准
    lastShortLoss := false//重置空头亏损状态

//多头加仓执行
if (canAddLong)
    strategy.entry("Long Add", strategy.long, qty=positionSize)//执行多头加仓
    lastLongEntryPrice := close//更新多头入场价格基准

//空头加仓执行
if (canAddShort)
    strategy.entry("Short Add", strategy.short, qty=positionSize)//执行空头加仓
    lastShortEntryPrice := close//更新空头入场价格基准

//多头出场执行
if (longExit)
    strategy.close("Long")//平掉初始多头头寸
    strategy.close("Long Add")//平掉所有多头加仓头寸
    lastLongLoss := close < lastLongEntryPrice//根据出场价格更新亏损状态

//空头出场执行
if (shortExit)
    strategy.close("Short")//平掉初始空头头寸
    strategy.close("Short Add")//平掉所有空头加仓头寸
    lastShortLoss := close > lastShortEntryPrice//根据出场价格更新亏损状态

//系统1入场信号可视化
plot(entryHigh1, title="20周期高点", color=color.green)//绘制系统1多头入场线
plot(entryLow1, title="20周期低点", color=color.red)//绘制系统1空头入场线

//系统2入场信号可视化
plot(entryHigh2, title="55周期高点", color=color.lime, linewidth=1)//绘制系统2多头入场线
plot(entryLow2, title="55周期低点", color=color.maroon, linewidth=1)//绘制系统2空头入场线

//出场信号可视化
plot(exitLong, title="10周期低点(多头出场)", color=color.orange)//绘制多头出场信号线
plot(exitShort, title="10周期高点(空头出场)", color=color.blue)//绘制空头出场信号线