Скрипт, который вы предоставили, основан на стратегии Adaptive Zero Lag EMA (AZLEMA). Этот скрипт использует принципы исследования обработки сигналов Джона Элерса и метод, известный как Козиновое мгновенное измерение частоты (IFM), для определения доминирующего периода цикла, то есть продолжительности времени между двумя идентичными точками в последовательных циклах в ваших торговых данных.
Вот краткий обзор того, что делает торговый сценарий:
Первоначально он устанавливает стратегию с использованием конфигурации входных данных по умолчанию, таких как период, адаптивный режим, лимит прибыли, порог, точки остановки потери и точки получения прибыли.
Затем он устанавливает расчеты для адаптивного режима с использованием комбинации дифференциальных уравнений и метода Элерса (используется, когда установка
Он рассчитывает среднее значение (EMA) выбранного источника данных за выбранный период.
Он выполняет операцию петли, чтобы найти значения корреляции прибыли и ошибки (EC), которые минимизируют абсолютную ошибку.
Используя эти значения, он вычисляет окончательное значение EC и графически показывает значение EC и EMA на графике.
Он создает потенциальные условия покупки и продажи, основанные на перекрестном и перекрестном взаимодействии ЕС и EMA выше определенного определенного порога.
Он устанавливает правила для входа и выхода из длинных и коротких позиций на основе условий покупки и продажи, определенных ранее. Для каждой позиции он рассчитывает размер лота и входит в позицию, когда соответствующее условие (покупка/продажа) верно. Он устанавливает стоп-лосс и отслеживание прибыли для каждой позиции.
Этот сценарий кажется достаточно полным и универсальным, поскольку позволяет изменять несколько параметров, чтобы адаптироваться к различным стилям торговли и условиям рынка.
/*backtest start: 2023-08-08 00:00:00 end: 2023-09-07 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title="Adaptive Zero Lag EMA", shorttitle="AZLEMA", overlay = true, initial_capital=1000, currency="USD", commission_type=strategy.commission.cash_per_contract, commission_value=0.000005, slippage = 5, pyramiding=1, calc_on_every_tick=true) src = input(title="Source", defval=close) Period = input(title="Period", defval = 20) adaptive = input(title="Adaptive?", defval=true) GainLimit = input(title="Gain Limit", defval = 15) Threshold = input(title="Threshold", defval=0.03, step=0.01) fixedSL = input(title="SL Points", defval=50) fixedTP = input(title="TP Points", defval=10) risk = input(title='Risk', defval=0.01, step=0.01) PI = 3.14159265359 s2 = 0.0 s3 = 0.0 delta = 0.0 inst = 0.0 len = 0.0 v1 = 0.0 v2 = 0.0 v4 = 0.0 //IF adaptive is true, use the Cosine IFM strategy for determining the dominant //cycle period if(adaptive) v1 := src - src[7] s2 := 0.2*(v1[1] + v1)*(v1[1] + v1) + 0.8*nz(s2[1]) s3 := 0.2*(v1[1] - v1)*(v1[1] - v1) + 0.8*nz(s3[1]) if (s2 != 0) v2 := sqrt(s3/s2) if (s3 != 0) delta := 2*atan(v2) for i = 0 to 100 v4 := v4 + delta[i] if (v4 > 2*PI and inst == 0.0) inst := i - 1 if (inst == 0.0) inst := inst[1] len := 0.25*inst + 0.75*nz(len[1]) Period := round(len) LeastError = 1000000.0 EC = 0.0 Gain = 0.0 EMA = 0.0 Error = 0.0 BestGain = 0.0 alpha =2/(Period + 1) EMA := alpha*src + (1-alpha)*nz(EMA[1]) for i = -GainLimit to GainLimit Gain := i/10 EC := alpha*(EMA + Gain*(src - nz(EC[1]))) + (1 - alpha)*nz(EC[1]) Error := src - EC if(abs(Error)<LeastError) LeastError := abs(Error) BestGain := Gain EC := alpha*(EMA + BestGain*(src - nz(EC[1]))) + (1-alpha)*nz(EC[1]) plot(EC, title="EC", color=orange, linewidth=2) plot(EMA, title="EMA", color=red, linewidth=2) buy = crossover(EC,EMA) and 100*LeastError/src > Threshold sell = crossunder(EC,EMA) and 100*LeastError/src > Threshold if buy strategy.entry("Enter Long", strategy.long) else if sell strategy.entry("Enter Short", strategy.short)