En la carga de los recursos... Cargando...

K Velas consecutivas Estrategia Bull Bear

El autor:¿ Qué pasa?, fecha: 2024-05-17 13:54:06
Las etiquetas:El EMAEl ATR

img

Resumen general

Esta estrategia determina los mercados alcista o bajista en función del número de velas ascendentes o descendentes consecutivas y realiza operaciones en consecuencia. Cuando el precio de cierre es consecutivamente más alto que el cierre de las velas anteriores durante un número especificado de veces, entra en una posición larga; cuando el precio de cierre es consecutivamente más bajo que el cierre de las velas anteriores durante un número especificado de veces, entra en una posición corta. Se establecen stop loss y take profit, y se introduce un mecanismo de stop trailing para proteger las ganancias.

Principio de la estrategia

  1. Registre el número de veces que se cumplen las condiciones alcistas y bajistas consecutivas. Si el cierre es mayor que la vela anterior, el recuento alcista aumenta en 1 y el recuento bajista se restablece a 0; si el cierre es menor, el recuento bajista aumenta en 1 y el recuento alcista se restablece a 0; de lo contrario, ambos recuentos se restablecen a 0.
  2. Cuando el conteo alcista alcance el número k especificado, ingrese a una posición larga con stop loss y tome ganancias.
  3. Para las posiciones largas, registrar el precio más alto después de la entrada. Cuando el precio más alto exceda el precio de entrada en unidades de variación mínima de precios iTGT y el cierre se retrae por debajo del precio más alto en iPcnt%, cerrar la posición.
  4. Cuando el recuento bajista alcance el número especificado k2, ingrese una posición corta con stop loss y tome ganancias.
  5. Para las posiciones cortas, registrar el precio más bajo después de la entrada. Cuando el precio más bajo sea inferior al precio de entrada por unidades de variación mínima de precios iTGT y el rebote cerrado sobre el precio más bajo por iPcnt%, cerrar la posición.

Ventajas estratégicas

  1. Simple y fácil de entender, tomando decisiones comerciales basadas en la continuidad de las velas con lógica clara.
  2. Introduce un mecanismo de detención para proteger activamente las ganancias después de que el precio se mueva una cierta distancia en la dirección favorable.
  3. Establecer stop loss y take profit puede controlar los riesgos de manera efectiva y bloquear las ganancias.
  4. Parámetros ajustables para adaptarse a diferentes mercados y estilos de negociación.

Riesgos estratégicos

  1. En los mercados agitados, la apertura y cierre frecuentes de posiciones pueden dar lugar a grandes costos de deslizamiento.
  2. El juicio de los números consecutivos de velas se ve afectado por el ruido del mercado, que puede dar lugar a señales frecuentes.
  3. Los niveles fijos de stop loss y take profit pueden no adaptarse a los cambios en la volatilidad del mercado.

Direcciones para la optimización de la estrategia

  1. Introducir más indicadores técnicos, como las medias móviles y la volatilidad, para ayudar a juzgar la fuerza y la dirección de las tendencias.
  2. Optimizar las condiciones de activación para la parada de retraso, como ajustar el porcentaje de retroceso basado en ATR.
  3. Adoptar métodos de stop loss y take profit más dinámicos, como los trailing stop y los step take profit.
  4. Optimizar los parámetros para encontrar la combinación óptima para diferentes mercados e instrumentos.

Resumen de las actividades

Esta estrategia captura las tendencias alcistas y bajistas a través de la continuidad de las velas, mientras que establece stop loss y take profit para controlar los riesgos. La introducción de un trailing stop puede proteger mejor las ganancias. Sin embargo, puede generar señales frecuentes en mercados agitados, lo que requiere una mayor optimización de la confiabilidad de la señal. Además, la configuración de stop loss y take profit puede ser más flexible para adaptarse a los cambios dinámicos del mercado. En general, la estrategia tiene una idea simple y clara, adecuada para los mercados de tendencia, pero todavía hay espacio para la optimización.


/*backtest
start: 2024-04-16 00:00:00
end: 2024-05-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("K Consecutive Candles 數來寶V2", max_bars_back=300, overlay=true)

// 定義用戶輸入
k = input.int(3, title="Number of Consecutive Candles for Long", minval=1)
k2 = input.int(3, title="Number of Consecutive Candles for Short", minval=1)
stopLossTicks = input.int(500, title="Stop Loss (Ticks)")
takeProfitTicks = input.int(500, title="Take Profit (Ticks)")
iTGT = input.int(200,"iTGT")  // 移動停利點
iPcnt = input.int(50,"iPcnt")  // 移動停利%

var float TrailValue = 0
var float TrailExit = 0
var float  vMP = 0

BarsSinceEntry = ta.barssince(strategy.position_size == 0)

vMP := strategy.position_size

// 创建一个包含键值对的字典
addArrayData(type, value) =>
    alert_array = array.new_string()
    array.push(alert_array, '"timenow": ' + str.tostring(timenow))
    array.push(alert_array, '"seqNum": ' + str.tostring(value))
    array.push(alert_array, '"type": "' + type + '"')
    alertstring = '{' + array.join(alert_array,', ') + '}'


// 定義條件變量
var int countLong = 0  // 記錄連續多頭條件成立的次數
var int countShort = 0 // 記錄連續空頭條件成立的次數

// 計算連續大於或小於前一根的收盤價格的次數
if close > close[1]
    countLong += 1
    countShort := 0 // 重置空頭計數
else if close < close[1]
    countShort += 1
    countLong := 0 // 重置多頭計數
else
    countLong := 0
    countShort := 0

// 開設多頭倉位條件
if countLong >= k
    strategy.entry("Long Entry", strategy.long)
    strategy.exit("Exit Long", "Long Entry", loss=stopLossTicks, profit=takeProfitTicks)
    

if vMP>0
    TrailValue := ta.highest(high,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue > strategy.position_avg_price + iTGT * syminfo.minmove/syminfo.pricescale and close < TrailExit
        
        strategy.close("Long Entry", comment = "Trl_LX"+ str.tostring(close[0]))
// 開設空頭倉位條件
if countShort >= k2
    strategy.entry("Short Entry", strategy.short)
    strategy.exit("Exit Short", "Short Entry", loss=stopLossTicks, profit=takeProfitTicks)

if vMP<0    
    TrailValue := ta.lowest(low,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue < strategy.position_avg_price - iTGT * syminfo.minmove/syminfo.pricescale and close > TrailExit
        
        strategy.close("short60", comment = "Trl_SX"+ str.tostring(close[0]))






Relacionados

Más.