Стратегия экстремальной реверсии цен на основе биномиального распределения

Автор:Чао Чжан, Дата: 2023-09-13 16:47:22
Тэги:

Эта стратегия называется Стратегия экстремального переворота цены на основе биномиального распределения. Она использует функцию биномиального распределения для оценки вероятности переворота цен и устанавливает двойную систему EMA для генерации торговых сигналов.

Логика такова:

  1. Вычислите количество ближайших строк за последние 20 строк и процент p периодов за последние 100 строк.

  2. Подключите счёт периодов и вероятность p к биномиальной функции распределения, чтобы вычислить кумулятивную функцию распределения (CDF).

  3. Применять 10-дневные и 20-дневные EMA на CDF. Когда быстрая 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")


Больше