
Esta estrategia se llama estrategia de negociación cuantitativa basada en la comparación de los precios de cierre de la línea K con el filtro EMA. La estrategia se basa en la estadística del número de líneas K de múltiples cabezas y líneas K de cabezas vacías que constituyen los precios de cierre de la línea K en el período más reciente, en combinación con el filtro de la EMA, para determinar si se cumple con el período de tiempo de negociación.
La lógica central de esta estrategia es la estadística de la cantidad de líneas K que aparecen en el alza y cerramiento en el último ciclo de lookback upCloseCount y la cantidad de líneas K que aparecen en el alza y cerramiento en el último ciclo de lookback downCloseCount, si la cantidad de cerramientos en alza es mayor, se juzga como mercado de más cabeza, si la cantidad de cerramientos en caída es mayor, se juzga como mercado de más cabeza. Al mismo tiempo, en combinación con el indicador EMA para determinar la tendencia de los precios y como filtro, solo se considera hacer más cuando el precio está por encima de EMA y se considera hacer nada cuando el precio está por debajo de EMA. Además, la estrategia también establece períodos de tiempo de negociación session1 y session2, en los que solo se negocian en estos dos períodos de tiempo.
La lógica del juicio es:
Condiciones de activación de señales múltiples: inSession es “true” (dentro del período de tiempo de negociación) y upCloseCount > downCloseCount (con un mayor número de líneas de cierre de K en alza) y close > ema (con un precio de cierre superior al EMA) y currentSignal no es “long” (sin posición actual)
Condiciones de activación de la señal de cabeza vacía: inSession es verdadera y downCloseCount > upCloseCount (con un mayor número de líneas K de cierre de la caída) y close < ema (con un precio de cierre inferior al EMA) y currentSignal no es “short” (sin posición actual)
Respuesta:
Esta estrategia identifica las señales de tendencia en un período de tiempo de negociación específico establecido mediante la estadística del número de líneas K de cierre de cierre de línea y líneas K de cierre de línea en un período histórico determinado, combinado con el efecto de filtración del indicador EMA. Sin embargo, también existe un cierto riesgo de transacciones erróneas, que requieren mejoras mediante la optimización de parámetros, estrategias de stop loss y filtración de señales.
/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Up vs Down Close Candles Strategy with EMA and Session Time Frames", shorttitle="UvD Strat EMA Session", overlay=true)
// User input to define the lookback period, EMA period, and session strings for time frames
int lookback = input(20, title="Lookback Period")
int emaPeriod = input(50, title="EMA Period")
string session1 = input("0900-1200", title="Time Frame 1 Session")
string session2 = input("1300-1600", title="Time Frame 2 Session")
// Calculate the EMA
float ema = ta.ema(close, emaPeriod)
// State variable to track the current signal
var string currentSignal = na
// Counting up-close and down-close candles within the lookback period
int upCloseCount = 0
int downCloseCount = 0
if barstate.isnew
upCloseCount := 0
downCloseCount := 0
for i = 0 to lookback - 1
if close[i] > close[i + 1]
upCloseCount += 1
else if close[i] < close[i + 1]
downCloseCount += 1
// Define the long (buy) and short (sell) conditions with EMA filter and session time frame
bool inSession = time(timeframe.period, session1) or time(timeframe.period, session2)
bool longCondition = inSession and upCloseCount > downCloseCount and close > ema and currentSignal != "long"
bool shortCondition = inSession and downCloseCount > upCloseCount and close < ema and currentSignal != "short"
// Enter or exit the market based on conditions
if longCondition
currentSignal := "long"
strategy.entry("Buy", strategy.long)
if shortCondition
currentSignal := "short"
strategy.entry("Sell", strategy.short)
// Exit logic for long and short positions
if currentSignal == "long" and strategy.position_size <= 0
strategy.close("Sell")
if currentSignal == "short" and strategy.position_size >= 0
strategy.close("Buy")
plot(ema, color=color.blue, title="EMA")