P 신호 반전 전략

저자:차오장, 날짜: 2024-01-29 14:44:56
태그:

img

전반적인 설명

P-신호 반전 전략은 확률적 신호 공간을 구성하기 위해 통계 매개 변수와 오류 함수를 기반으로 구축된 양적 거래 전략이다. 시장 반전 지점을 포착하기 위해 일련의 K-라인의 극단적 가치 분포를 추적하여 동적으로 거래 신호를 획득합니다.

전략 원칙

이 전략의 핵심 지표는 이동 평균과 표준편차의 통계 매개 변수를 결합하고 가우스 오류 함수를 통해 -1에서 1까지의 범위로 매핑하여 정량화된 판단 지표를 형성하는 P 신호입니다. P 신호가 양에서 음으로 역전될 때 짧고, 음에서 양으로 역전될 때 길게 이동하여 역전 전략 논리를 형성합니다.

전략 매개 변수에는 카디널리티, ΔErf 및 관찰 시간이 포함됩니다. 카디널리티는 표본 크기를 제어하고, ΔErf는 거래 빈도를 줄이기 위해 오류 함수의 죽은 대역을 제어합니다. 관찰 시간은 전략의 시작 시간을 제어합니다.

이점 분석

P 신호 반전 전략의 가장 큰 장점은 통계 매개 변수의 확률 분포에 기반하여 시장의 특징적인 점을 효과적으로 판단하고 반전 기회를 포착 할 수 있다는 것입니다. 단일 기술 지표에 비해 더 많은 시장 정보를 통합하고 더 포괄적이고 신뢰할 수있는 판단을합니다.

또한, 전략의 매개 변수 설계는 잘 조절되어 있으며, 사용자가 최적의 조합을 찾기 위해 자신의 필요에 따라 매개 변수 공간을 조정할 수 있습니다. 이것은 전략의 적응력과 유연성을 보장합니다.

위험 분석

P 신호 역전 전략의 주요 위험은 확률 분포의 매개 변수에 너무 의존하고 있으며, 이는 잘못된 판단을 초래하는 비정상적인 데이터에 의해 쉽게 영향을 받는다. 또한 역전 전략의 위험/이익 비율은 일반적으로 낮고 단일 이익이 제한적입니다.

표본 크기를 증가시키기 위해 카디널리티 매개 변수를 증가시키는 것은 데이터 이상의 영향을 줄일 수 있습니다. 거래 빈도를 줄이기 위해 ΔErf 범위를 적절히 확장하는 것은 위험을 제어하는 데 도움이됩니다.

최적화 방향

P 신호 반전 전략은 다음 측면에서 최적화 될 수 있습니다:

  1. 부피가 급격히 증가하는 것과 같은 비정상적인 신호를 필터링하기 위해 다른 지표를 포함하십시오.

  2. 판단의 안정성을 높이기 위해 여러 시간 프레임에서 신호를 검증합니다.

  3. 단일 손실을 줄이기 위해 스톱 로스 전략을 늘려라.

  4. 최적화된 매개 변수를 통해 최적의 조합을 찾고 수익성을 높여

  5. 동적 매개 변수 조절을 위한 기계 학습을 통합합니다.

요약

P 신호 반전 전략은 유연한 매개 변수 설계와 사용자 친화성을 가진 확률 분포를 기반으로 한 양적 거래 프레임워크를 구축합니다. 시장의 통계적 특성을 효과적으로 판단하고 반전 기회를 포착합니다. 전략은 멀티 지표 검증, 스톱 로스 최적화 및 기타 방법을 통해 안정성과 수익성을 더욱 향상시킬 수 있습니다. 양적 기술을 사용하여 알고리즘 거래를위한 효율적이고 신뢰할 수있는 패러다임을 제공합니다.


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

//@version=5
// **********************************************************************************************************
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// P-Signal Strategy RVS © Kharevsky
// **********************************************************************************************************
strategy('P-Signal Strategy RVS.', precision=3, process_orders_on_close=true, pyramiding=0, 
     commission_type=strategy.commission.percent,
     commission_value=0.2)
// Parameters and const of P-Signal.
nPoints = input.int(title='Cardinality:', defval=4, minval=4, maxval=200, group='Parameters of strategy.')
ndErf = input.float(title='|ΔErf|:', defval=0, minval=0, maxval=1, step=0.01, group='Parameters of strategy.')
tStartDate = input(title='Start date:', defval=timestamp('30 Dec 1957 00:00 +0300'), group='Observation time.')
int nIntr = nPoints - 1
// Horner's method for the error (Gauss) & P-Signal functions.
fErf(x) =>
    nT = 1.0 / (1.0 + 0.5 * math.abs(x))
    nAns = 1.0 - nT * math.exp(-x * x - 1.26551223 + 
     nT * (1.00002368 + nT * (0.37409196 + nT * (0.09678418 + 
     nT * (-0.18628806 + nT * (0.27886807 + nT * (-1.13520398 + 
     nT * (1.48851587 + nT * (-0.82215223 + nT * 0.17087277)))))))))
    x >= 0 ? nAns : -nAns
fPSignal(ser, int) =>
    nStDev = ta.stdev(ser, int)
    nSma = ta.sma(ser, int)
    nStDev > 0 ? fErf(nSma / nStDev / math.sqrt(2)) : math.sign(nSma)
// Data.
float nPSignal = ta.sma(fPSignal(ta.change(ohlc4), nIntr), nIntr)
float ndPSignal = math.sign(nPSignal[0] - nPSignal[1])
bool isStartDate = true
// Reversal Strategy.
strategy.entry('short', strategy.short, when=isStartDate and nPSignal > ndErf and ndPSignal < 0)
strategy.entry('long', strategy.long, when=isStartDate and nPSignal < -ndErf and ndPSignal > 0)
// Plotting. 
hline(+1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
plot(nPSignal, color=color.new(color.blue, 0), style=plot.style_line)
// Table of state.
if barstate.isconfirmed
    var Table = table.new(position=position.bottom_right, columns=3, rows=1, 
     frame_color=color.new(color.orange, 70), frame_width=1, 
     border_color=color.new(color.orange, 70), border_width=1)
    table.cell(table_id=Table, column=0, row=0, 
     text=strategy.position_size > 0 ? 'Long: ' + str.tostring(strategy.position_size) : 'Short: ' + str.tostring(strategy.position_size), 
     text_color=strategy.position_size > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=1, row=0, 
     text='Net P/L: ' + str.tostring(strategy.netprofit, '#.#'), 
     text_color=strategy.netprofit > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=2, row=0, 
     text='Open P/L: ' + str.tostring(strategy.openprofit, '#.#'), 
     text_color=strategy.openprofit > 0 ? color.green : color.red)
// The end.



더 많은