El guión que ha proporcionado se basa en la estrategia Adaptive Zero Lag EMA (AZLEMA). Este guión utiliza los principios de la investigación de procesamiento de señales de John Ehlers y un método conocido como Cosine Instantaneous Frequency Measurement (IFM) para determinar el período de ciclo dominante, es decir, la duración del tiempo entre dos puntos idénticos en ciclos sucesivos en sus datos comerciales.
He aquí una breve descripción de lo que hace el guión de negociación:
Inicialmente, establece la estrategia utilizando una configuración de entradas predeterminadas como período, modo adaptativo, límite de ganancia, umbral, puntos de stop loss y puntos de take profit.
Luego establece cálculos para el modo adaptativo utilizando una combinación de ecuaciones diferenciales y el método Ehlers
Calcula el valor medio (EMA) de la fuente de datos seleccionada durante el período seleccionado.
Realiza una operación de bucle para encontrar los valores de correlación de ganancia y error (EC) que minimizan el error absoluto.
Utilizando estos valores, se calcula el valor final de la EC y se traza el valor de la EC y de la EMA en el gráfico.
Crea condiciones de compra y venta potenciales basadas en el cruce y el cruce de EC y EMA por encima de un cierto umbral definido.
Establece reglas para entrar y salir de posiciones largas y cortas basadas en las condiciones de compra y venta determinadas anteriormente. Para cada posición, calcula el tamaño del lote y entra en una posición cuando la condición respectiva (compra/venta) es cierta. Establece un stop loss y un trailing take profit para cada posición.
Este script parece bastante completo y versátil, ya que le permite cambiar múltiples parámetros para adaptarse a diferentes estilos de negociación y condiciones del mercado.
/*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)