Stratégie d'inversion extrême des prix basée sur la distribution binomiale

Auteur:ChaoZhang est là., Date: 2023-09-13 16:47:22 Je vous en prie.
Les étiquettes:

Cette stratégie s'appelle Price Extreme Reversion Strategy Based on Binomial Distribution. Elle utilise la fonction de distribution binomiale pour estimer la probabilité d'inversions de prix et définit un système à double EMA pour générer des signaux de trading.

La logique est la suivante:

  1. Calculer le nombre de barres rapprochées au cours des 20 dernières barres et le pourcentage p de périodes rapprochées au cours des 100 dernières barres.

  2. Branchez le nombre de périodes et la probabilité p dans la fonction de distribution binomiale pour calculer la fonction de distribution cumulative (CDF).

  3. Appliquer des EMA de 10 et 20 jours au CDF. Lorsque l'EMA rapide dépasse l'EMA lente, cela indique une forte probabilité d'une réversion extrême des prix, générant des signaux d'achat.

  4. Lorsque l'EMA rapide traverse le niveau inférieur à l'EMA lente, les prix peuvent atteindre un sommet à court terme, produisant des signaux de vente ici.

L'avantage de cette stratégie est d'estimer le moment de l'extrême réversion du prix à l'aide de méthodes de probabilité.

En conclusion, les techniques statistiques permettent de découvrir objectivement les tendances du comportement des prix.


/*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")


Plus de