Estratégia de julgamento de alta e baixa de número contínuo K-line

EMA ATR
Data de criação: 2024-05-17 13:54:06 última modificação: 2024-05-17 13:54:06
cópia: 1 Cliques: 682
1
focar em
1617
Seguidores

Estratégia de julgamento de alta e baixa de número contínuo K-line

Visão geral

A estratégia baseia-se no número de ascensões ou descensões consecutivas da linha K para determinar se o mercado está em alta ou baixa e, portanto, para negociar. Quando o preço de fechamento é continuamente superior ao preço de fechamento da linha K anterior e chega ao número especificado, abrem posições de alta posição. Quando o preço de fechamento é continuamente inferior ao preço de fechamento da linha K anterior e chega ao número especificado, abrem posições de baixa posição.

Princípio da estratégia

  1. Registre o número de vezes que a condição de cabeça-de-cabeça e cabeça-de-cabeça se estabelecem em sequência. Se o preço de fechamento for superior à linha K anterior, a contagem de cabeça-de-cabeça mais 1, a contagem de cabeça-de-cabeça será reajustada para 0; se o preço de fechamento for inferior à linha K anterior, a contagem de cabeça-de-cabeça mais 1, a contagem de cabeça será reajustada para 0; caso contrário, as duas contagens serão reajustadas para 0.
  2. Quando a contagem multi-cabeça atingir o número k indicado, abra uma posição multi-cabeça e configure o stop loss e o stop loss.
  3. Para uma posição multi-cabeça, o preço mais alto após a abertura da posição é registrado. Quando o preço mais alto excede o preço de abertura iTGT uma unidade mínima de variação e o preço de fechamento retorna para iPcnt% abaixo do preço mais alto, a posição é neutralizada.
  4. Quando a contagem de cabeças vazias atingir o número especificado de k2, abra a posição de cabeças vazias e configure o stop loss e o stop loss.
  5. Para posições em aberto, o preço mínimo após a abertura da posição é registrado quando o preço mínimo é inferior ao preço de abertura iTGT uma unidade mínima de mudança e o preço de fechamento rebota para iPcnt% acima do preço mínimo.

Vantagens estratégicas

  1. Simples, fácil de entender, baseado na continuidade das linhas K para tomar decisões comerciais, com lógica clara.
  2. A introdução de um mecanismo de suspensão móvel protege os lucros de forma ativa após a corrida de preços em direção a uma posição favorável.
  3. A configuração de stop loss e stop-loss pode ser eficaz para controlar o risco e bloquear os lucros.
  4. Os parâmetros são ajustáveis para diferentes mercados e estilos de negociação.

Risco estratégico

  1. Em situações de turbulência, a abertura frequente de posições pode levar a um custo de deslizamento maior.
  2. O julgamento do número de linhas K em sequência é influenciado pelo ruído do mercado, podendo ocorrer sinais frequentes.
  3. Os pontos de stop loss e stop loss fixos podem não se adaptar às mudanças na volatilidade do mercado.

Direção de otimização da estratégia

  1. A introdução de mais indicadores técnicos, tais como a linha média, a taxa de flutuação, etc., para auxiliar na determinação da força e direção da tendência.
  2. Otimizar as condições de acionamento do travão móvel, como a percentagem de retração ajustada de acordo com o ATR.
  3. O uso de métodos mais dinâmicos de parada e parada, como parada por rastreamento, parada por escadas, etc.
  4. Otimizar os parâmetros para encontrar a combinação ideal de parâmetros para diferentes mercados e variedades.

Resumir

A estratégia capta tendências de alta e baixa através da continuidade da linha K, enquanto configura um stop loss para controlar o risco. A introdução de um stop loss móvel pode proteger melhor os lucros. Mas pode haver sinais frequentes em mercados turbulentos, e é necessário otimizar ainda mais a confiabilidade do sinal. Além disso, a configuração do stop loss pode ser mais flexível para se adaptar às mudanças dinâmicas do mercado.

Código-fonte da estratégia
/*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]))