이분법 분포를 기반으로 한 가격 극단적 역전 전략

저자:차오장, 날짜: 2023-09-13 16:47:22
태그:

이 전략은 비노미얼 분포에 기반한 가격 극단적 반전 전략이라고 불립니다. 이 전략은 가격 반전의 가능성을 추정하기 위해 비노미얼 분포 함수를 사용하고 거래 신호를 생성하기 위해 이중 EMA 시스템을 설정합니다.

논리는 다음과 같습니다.

  1. 최근 20번의 근접 바의 수와 지난 100번의 근접 바의 비율을 계산합니다.

  2. 분포기수와 확률 p를 이분법 분포함수로 연결하여 누적 분포함수 (CDF) 를 계산합니다.

  3. CDF에 10일 및 20일 EMA를 적용합니다. 빠른 EMA가 느린 EMA를 넘을 때, 가격 극심 회귀의 높은 확률을 신호하여 구매 신호를 생성합니다.

  4. 빠른 EMA가 느린 EMA 아래로 넘어가면, 가격이 단기간에 최고치를 기록할 수 있습니다. 여기서 판매 신호를 생성합니다.

이 전략의 장점은 확률 방법을 통해 가격 극심회전 시기를 추정하는 것입니다. 그러나 매개 변수는 과도한 잘못된 신호를 피하기 위해 시장 조정 최적화가 필요합니다.

결론적으로, 통계적 기법은 가격 행동 패턴을 객관적으로 밝혀내는 데 도움이 됩니다. 그러나 궁극적으로, 거래자들은 기술 지표를 보조 도구로 사용하기 위해 여전히 날카로운 시장 판단이 필요합니다.


/*backtest
start: 2022-09-06 00:00:00
end: 2023-05-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © pieroliviermarquis

//@version=4
strategy("Binomial Strategy", overlay=false, default_qty_type= strategy.percent_of_equity, default_qty_value= 100, slippage=1, initial_capital= 10000, calc_on_every_tick=true)


factorial(length) =>
    n = 1
    if length != 0
        for i = 1 to length
            n := n * i
    n


binomial_pdf(success, trials, p) =>
    q = 1-p
    coef = factorial(trials) / (factorial(trials-success) * factorial(success))
    pdf = coef * pow(p, success) * pow(q, trials-success)
        
        
binomial_cdf(success, trials, p) =>
    q = 1-p
    cdf = 0.0
    for i = 0 to success
        cdf := cdf + binomial_pdf(i, trials, p)
        

up = close[0] > close[1] ? 1 : 0


//long-term probabilities
lt_lookback = 100
lt_up_bars = sum(up, lt_lookback)
prob = lt_up_bars/lt_lookback


//lookback for cdf
lookback = 20
up_bars = sum(up, lookback)
cdf = binomial_cdf(up_bars, lookback, prob)


//ema on cdf
ema1 = ema(cdf, 10)
ema2 = ema(cdf, 20)


plot(cdf*100)
plot(ema1*100, color=color.red)
plot(ema2*100, color=color.orange)


buy = ema1 > ema2
sell = ema1 < ema2


//////////////////////Bar Colors//////////////////

var color buy_or_sell = na

if buy == true
    buy_or_sell := #3BB3E4
else if sell == true
    buy_or_sell := #FF006E
    
barcolor(buy_or_sell)

///////////////////////////Orders////////////////

if buy
    strategy.entry("Long", strategy.long, comment="")

if sell
    strategy.close("Long", comment="Sell")


더 많은