
자조적 다중신호 평행동적 포지션加码策略은 암호화폐 시장을 위해 특별히 설계된 양적 거래 전략으로, 기술분석 지표와 동적 포지션 관리시스템을 결합한다. 핵심 아이디어는 빠른 속도 이동 평균과 느린 속도 이동 평균의 교차 신호와 무작위적으로 상대적으로 강한 지표 ((Stochastic RSI) 를 사용하여 시장 추세 방향과 진입 시기를 결정하는 동시에, 피라미드 방식의 포지션加加加法 방법을 사용하여 가격 역조정에 대응한다. 이 전략은 예상된 가격 하락 지역 내에서 자동으로 보안 명령을 실행하며, 각 보안 명령의 크기는 예상된 비율에 따라 점차 증가하여 하락 과정에서 평균 포지션 보유 비용을 낮추고, 가격이 수익 목표 수준으로 돌아가는 한 번에 포지션 평준을 얻는다.
이 전략은 다음과 같은 몇 가지 핵심 기술 구성 요소에 기반을 두고 있습니다.
이중 이동 평균 시스템: 전략은 두 개의 이동 평균 ((빠르고 느린) 의 교차를 주요 진입 신호로 사용한다. 사용자는 간단한 이동 평균 ((SMA), 지수 이동 평균 ((EMA) 또는 헐 이동 평균 ((HMA) 을 선택할 수 있으며, 시장 상황에 따라 평균선을 교차하여 상향 또는 하향으로 진입 할 수 있다.
무작위적으로 상대적으로 약한 지표 (Stochastic RSI)보조적인 입시 조건으로, Stochastic RSI의 K선에서 5의 수준을 착용하고, 동시에 급속한 이동 평균이 상승 추세에 있을 때 구매 신호를 유발한다.
동적 보안 주문 시스템: 초기 입수 후, 전략은 기본 가격 수준 이하의 여러 안전 주문을 설정한다. 이 가격 수준은 가격 편차 변수와 단계 길이를 축소하는 인자에 따라 계산된다.
포지션 규모의 동적 조정: 각 보안 주문의 규모는 보안 주문 규모의 확장 인자에 따라 점차 증가하여 증가형 가수 구조를 형성한다.
목표 수익 평준화 기금: 전략은 평균 지분 가격에 기반한 목표 수익 수준을 설정하고, 가격이 그 수준으로 올라가면 모든 포지션이 평지화된다.
정책의 실행 과정은 다음과 같습니다:
다차원 입구 신호: 트렌드 지표 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
매우 적응력이 좋다전략 파라미터는 매우 사용자 정의 가능하며, 사용자는 다른 시장 환경과 개인 위험 선호에 따라 이동 평균 유형, 주기, 교차 방향, 가격 편차 비율 등의 파라미터를 조정할 수 있습니다.
비용 평균화 효과: 사전 설정된 보안 주문 시스템을 통해 가격이 하락하면 자동으로 포지션을 추가하여 평균 포지션 비용을 효과적으로 낮추고 최종 수익률을 향상시킵니다.
자금 효율성 최적화안전 주문의 규모가 증가하는 디자인은 자금 분배를 더 효율적으로 만들고, 더 많은 자금이 더 낮은 가격의 주문에 분배됩니다.
자동화 실행이 전략은 모든 요소가 설정되면 자동으로 실행되며, 사람의 개입이 필요하지 않아서 감정적인 거래 결정을 줄일 수 있습니다.
유연한 시장 적응력: 이동 평균의 교차 방향을 조정함으로써 (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
무해한 위험: 전략 설계에 명확하게 설정된 손해 중지 메커니즘이 없습니다. 지속적인 하락 시에는 큰 손실이 발생할 수 있습니다.
재정적 요구이 전략은 여러 보안 주문을 위해 자금을 예치해야하며, 각 주문의 규모가 증가하기 때문에 실제 필요한 자금은 초기 투입보다 훨씬 많을 수 있으므로, 투자자는 충분한 유동 자금이 있는지 확인해야합니다.
다중 편향적이 되세요.: 현재 전략 설계는 다방향성을 지원하고, 장기적인 하향 추세에서 효과가 좋지 않습니다.
매개변수 민감도: 전략의 성능은 매개 변수 설정에 크게 의존하며, 잘못된 매개 변수는 조기 보안 주문을 유발하거나 과잉 매장할 수 있다.
평균 비용 함정이 전략은 매매를 통해 평균 비용을 낮추는 것이지만, 자산가치가 계속 떨어지고 회복되지 않는다면, “돌아가는 추락” 현상과 자금 포획으로 이어질 수 있다.
위험을 완화하기 위한 방법은 다음과 같습니다: 전체적으로 좋은 자산에 이 전략을 적용; 보안 명령에 대응하기 위해 충분한 자금을 준비; 전략의 매개 변수와 시장 환경의 일치 여부를 주기적으로 검사; 최대 보안 명령 수 제한을 설정; 전략에 전체적인 손실 제도를 추가하는 것을 고려하십시오.
손해 방지 장치전략의 가장 명백한 결핍은 손해 중지 장치가 없다는 것입니다. 전체적인 손해 중지 파라미터를 추가하는 것이 좋습니다. 손실이 일정 비율에 도달하면 모든 포지션을 필연적으로 평정하여 자금을 보호하십시오.
시장 트렌드 필터에 가입하세요: 장기 이동 평균 또는 ADX 지표와 같은 더 긴 기간의 추세 판단 지표를 추가할 수 있으며, 주요 추세 방향이 일치하는 경우에만 전략을 수행하여 명백한 곰 시장에서 불필요하게 추가하는 것을 피합니다.
보안 명령어 트리거 로직을 최적화: 현재 보안 명령은 가격 편차 트리거에만 기반을 두고 있으며, 거래량, 변동률 또는 다른 기술 지표를 조합하여 보안 명령의 트리거를 더 지능화 할 수 있습니다.
동적으로 조정된 목표 수익: 시장의 변동성이나 입시 후의 가격 행동 동력에 따라 목표 수익 수준을 조정할 수 있으며, 높은 변동성 시장 환경에서 더 높은 목표 수익을 설정할 수 있다.
공백기 기능을 추가: 확장 전략은 하위 추세에서 똑같이 효과적일 수 있도록 하위 방향에 대한 지원을 제공하며 전략의 전체 시장 적응력을 향상시킵니다.
리트레이스먼트 컨트롤 추가: 최대 인출 제한을 설정하고, 전략 인출이 마이너스를 초과할 때 거래를 중지하거나, 불리한 시장 조건에서 지속적인 손실을 방지하기 위해 매개 변수를 재설정한다.
주기적 변수 최적화: 자동 변수 최적화 기능을 추가하여 최근 시장 데이터에 따라 변수를 정기적으로 조정하여 시장 특성의 변화에 대응할 수 있도록합니다.
이러한 최적화 방향은 전략의 위험 관리 능력, 시장 적응성 및 장기적 안정성을 향상시키고, 다양한 시장 환경에서 비교적 안정적인 성능을 얻을 수 있도록 하기 위함이다.
자율적 다중 신호 평행 동적 포지션 부호화 전략은 이동 평균과 임의의 비교적 강한 지표의 입문 신호를 결합하여 동적 보안 주문 시스템과 함께 암호화폐 시장에 체계화된 거래 방법을 제공합니다. 그것의 핵심 장점은 가격 회귀시 단계적으로 포지션을 추가하고, 평균 포지션 비용을 낮추고, 가격 회귀시 수익을 창출하는 것을 자동화 할 수 있다는 것입니다.
그러나, 이 전략은 또한 명백한 위험, 특히 중지 장치의 부재와 지속적인 하락 상황에서 발생할 수 있는 자금 손실을 포함합니다. 투자자는이 전략을 사용할 때 그것의 위험 특성을 충분히 이해하고, 충분한 자금 저축을 보장하고, 추가적인 위험 제어 조치를 추가하는 것을 고려해야합니다.
합리적인 매개 변수 설정과 제안된 최적화 방향을 통해, 이 전략은 암호화폐의 장기 투자자에게 강력한 도구가 될 수 있으며, 특히 특정 암호화폐 자산의 장기적인 가치를 믿는 반면 진입 비용을 최적화하려는 투자자에게 적합하다. 실제 적용에서, 시뮬레이션 환경에서 충분히 테스트하고 실제 시장의 성과에 따라 전략 매개 변수를 지속적으로 조정하고 최적화하는 것이 좋습니다.
/*backtest
start: 2024-08-19 00:00:00
end: 2025-08-18 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"BTC_USDT","balance":5000}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//
//@version=6
strategy(title = 'PEPE- DCA Strategy', overlay = true, pyramiding = 11, process_orders_on_close = true, commission_value = 0.1)
Base_order_size = input.int(1500, 'Base order Size')/close
Safety_order_size = input.int(350, 'Save order')/close
Triger_Type = input.string('Over', 'Entry at Cross Over / Under', options = ['Over', 'Under'], group = 'Deal start condition > Trading View custom signal', inline = '1', tooltip = 'Deal start condition decision')
Short_Moving_Average = input.string('SMA', 'Short Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '2', options = ['SMA', 'EMA', 'HMA'])
Short_Period = input.int(17, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '2')
Long_Moving_Average = input.string('HMA', 'Long Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '3', options = ['SMA', 'EMA', 'HMA'])
Long_Period = input.int(26, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '3')
Target_profit = input.float(1.9, 'Target profit (%)', step = 0.05, group = 'Take profit / Stop Loss', inline = '1') * 0.01
Max_safety_trades_count = input.int(5, 'Max safety trades count', maxval = 10, group = 'Safety orders', inline = '1')
Price_deviation = input.float(2.45, 'Price deviation to open safety orders (% from initial order)', step = 0.01, group = 'Safety orders', inline = '2') * 0.01
Safety_order_volume_scale = input.float(1.85, 'Safety order volume scale', step = 0.01, group = 'Safety orders', inline = '3')
Safety_order_step_scale = input.float(1.61, 'Safety order step scale', step = 0.01, group = 'Safety orders', inline = '3')
// Position status
status_none = strategy.opentrades == 0
status_long = strategy.position_size[1] == 0 and strategy.position_size > 0
/////////// Moving_Averages
Short_Moving_Average_Line = Short_Moving_Average == 'SMA' ? ta.sma(close, Short_Period) : Short_Moving_Average == 'EMA' ? ta.ema(close, Short_Period) : Short_Moving_Average == 'HMA' ? ta.sma(close, Short_Period) : na
Long_Moving_Average_Line = Long_Moving_Average == 'SMA' ? ta.sma(close, Long_Period) : Long_Moving_Average == 'EMA' ? ta.ema(close, Long_Period) : Long_Moving_Average == 'HMA' ? ta.sma(close, Long_Period) : na
///////////// Moving_Averages long condition
Base_order_Condition = Triger_Type == 'Over' ? ta.crossover(Short_Moving_Average_Line, Long_Moving_Average_Line) : ta.crossunder(Short_Moving_Average_Line, Long_Moving_Average_Line) // Buy when close crossing lower band
//////////////////// Savety order deviation
safety_order_deviation(index) =>
Price_deviation * math.pow(Safety_order_step_scale, index - 1)
pd = Price_deviation
ss = Safety_order_step_scale
//////// Cal of deviation steps
step(i) =>
i == 1 ? pd : i == 2 ? pd + pd * ss : i == 3 ? pd + (pd + pd * ss) * ss : i == 4 ? pd + (pd + (pd + pd * ss) * ss) * ss : i == 5 ? pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss : i == 6 ? pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss : i == 7 ? pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss : i == 8 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 9 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 10 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : na
long_line(i) =>
close[1] - close[1] * step(i)
////////// Savety order Triger
Safe_order_line(i) =>
i == 0 ? ta.valuewhen(status_long, long_line(0), 0) : i == 1 ? ta.valuewhen(status_long, long_line(1), 0) : i == 2 ? ta.valuewhen(status_long, long_line(2), 0) : i == 3 ? ta.valuewhen(status_long, long_line(3), 0) : i == 4 ? ta.valuewhen(status_long, long_line(4), 0) : i == 5 ? ta.valuewhen(status_long, long_line(5), 0) : i == 6 ? ta.valuewhen(status_long, long_line(6), 0) : i == 7 ? ta.valuewhen(status_long, long_line(7), 0) : i == 8 ? ta.valuewhen(status_long, long_line(8), 0) : i == 9 ? ta.valuewhen(status_long, long_line(9), 0) : i == 10 ? ta.valuewhen(status_long, long_line(10), 0) : na
l1 = Safe_order_line(1)
l2 = Safe_order_line(2)
l3 = Safe_order_line(3)
l4 = Safe_order_line(4)
l5 = Safe_order_line(5)
l6 = Safe_order_line(6)
l7 = Safe_order_line(7)
l8 = Safe_order_line(8)
l9 = Safe_order_line(9)
l10 = Safe_order_line(10)
//// take profit
TP_line = strategy.position_avg_price * (1 + Target_profit)
//Size of safety orders
safety_order_size(i) =>
Safety_order_size * math.pow(Safety_order_volume_scale, i - 1)
///plots
plot(Short_Moving_Average_Line, 'Short MA', color = color.new(color.red, 0), style = plot.style_line)
plot(Long_Moving_Average_Line, 'Long MA', color = color.new(color.green, 0), style = plot.style_line)
plot(strategy.opentrades == 1 ? l1 : na, 'Safety order1',color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 2 ? l2 : na, 'Safety order2', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 3 ? l3 : na, 'Safety order3', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 4 ? l4 : na, 'Safety order4', color =color.red, style = plot.style_linebr)
plot(strategy.opentrades == 5 ? l5 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 6 ? l6 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 7 ? l7 : na, 'Safety order6', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 8 ? l8 : na, 'Safety order7', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 9 ? l9 : na, 'Safety order8', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 10 ? l10 : na, 'Safety order9', color = color.red, style = plot.style_linebr)
plot(strategy.position_size > 0 ? TP_line : na, 'Take Profit', color = color.green, style = plot.style_linebr)
///////////////SToch-Rsi
smoothK = input.int(1, "ST_RSI -K settings for long", minval=1)
smoothD = input.int(3, "ST_RSI-D settings for long", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(9, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
////////buy cond- ST_RSI
bk = ta.crossover(k,5)
r = ta.rising(Short_Moving_Average_Line,5)
buy = bk and r
//Stradegy mod
if Base_order_Condition or buy
if (Base_order_Condition or buy ) and strategy.opentrades == 0
strategy.entry('Base order', strategy.long, qty = Base_order_size )
for i = 1 to Max_safety_trades_count by 1
i_s = str.tostring(i)
if strategy.opentrades <= i and strategy.position_size > 0 and not(strategy.position_size == 0)
strategy.entry('Safety order' + i_s, strategy.long, qty = safety_order_size(i) , limit = Safe_order_line(i))
for i = 1 to Max_safety_trades_count by 1
i_s = str.tostring(i)
if status_none
strategy.cancel('Safety order' + i_s)
strategy.exit('TP/SL', 'Base order', limit = TP_line)
strategy.exit('TP/SL', 'Safety order' + i_s, limit = TP_line)
//