Estratégia de reversão de curto prazo de linha positiva contínua


Data de criação: 2023-10-08 13:56:39 última modificação: 2023-10-08 13:56:39
cópia: 1 Cliques: 767
1
focar em
1617
Seguidores

Visão geral

Esta estratégia baseia-se em uma clássica estratégia de negociação de curto prazo, em que se formam várias linhas de sol após a formação de uma série de linhas de sol, as linhas de sol ficam vazias; após várias linhas de sol após várias linhas de sol, as linhas de sol ficam mais. Concretamente, a estratégia detecta a altura e a cor das linhas K, para determinar se há várias linhas de K da mesma cor em uma série, e depois, através do indicador RVI, para determinar se a inversão ocorreu.

Princípio da estratégia

A lógica central da estratégia é a seguinte:

  1. Detecte se a altura da entidade de linha K excede o limiar de altura mínima para filtrar oscilos elétricos e elétricos muito pequenos.

  2. Se for o caso, pode haver uma oportunidade de reversão de preço no curto prazo.

  3. Depois de determinar que as duas primeiras linhas K são da mesma cor, um sinal de transação é gerado se a linha K atual for diferente da cor das duas linhas K anteriores. Ou seja, uma linha do sol aparece depois de duas linhas negativas consecutivas; uma linha do sol aparece após duas linhas negativas consecutivas.

  4. Após a entrada de negociação, a direção da posição é julgada pelo cruzamento de vários espaços do indicador RVI. O indicador RVI pode julgar o ponto de reversão de curto prazo. Quando a linha do indicador RVI atravessa a linha de sinal, a posição é neutralizada.

  5. Em geral, a estratégia integra a linha K e os indicadores RVI, formando um sistema de negociação de reversão de curto prazo. Aproveite as oportunidades de reversão quando ocorrem comportamentos anormais de curto prazo.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Capturar as anomalias de preços de curto prazo. Quando ocorrem várias linhas positivas ou negativas em sequência, indica que os preços estão fora de norma no curto prazo, quando a operação inversa pode obter melhores retornos.

  2. Os indicadores RVI auxiliam o julgamento. Os indicadores RVI podem determinar efetivamente os pontos de reversão de curto prazo, complementando-se com as características da linha K, aumentando a estabilidade do sistema.

  3. A frequência de operação é mais alta e é adequada para operações de linha curta. As situações em que as linhas K contínuas são da mesma cor ocorrem com frequência e, em combinação com o indicador RVI, a estratégia pode oferecer mais oportunidades de negociação.

  4. Risco controlado. Utilize um número fixo de negociação e defina um stop loss.

  5. A lógica é clara e simples. É fácil de entender e implementar, a operação no disco rígido não é muito difícil.

Análise de Riscos

A estratégia também apresenta alguns riscos que devem ser lembrados:

  1. A inversão de curto prazo não é necessariamente válida. Em um cenário de tendência contínua, o sinal de inversão de curto prazo pode falhar, gerando uma entrada errada.

  2. Indicadores RVI podem emitir sinais errados. Indicadores RVI também podem falhar devido a circunstâncias especiais.

  3. A configuração inadequada da parada de perda pode aumentar os prejuízos. É necessário definir um ponto de parada de perda razoável.

  4. O padrão de linha K de cor idêntica contínua é muito rígido. Pode-se considerar a otimização para a proporção de linhas K de cor idêntica que aparecem em X% dentro da linha K de raiz N.

  5. O número de transações é muito pequeno. O número fixo de transações não controla a abertura de risco global, e as transações de grandes mãos são propensas a explosões.

Direção de otimização

A estratégia também pode ser melhorada em alguns aspectos:

  1. Otimizar a lógica de determinação de identidade de K-linhas contínuas, usando métodos estatísticos em vez de raízes fixas rígidas.

  2. Optimizar os parâmetros RVI para encontrar a melhor combinação de parâmetros.

  3. Aumentar a estratégia de trailing stop loss, que pode ser movida de acordo com as flutuações do mercado.

  4. Adição de módulo de gerenciamento de posições e ajuste dinâmico do número de transações de acordo com a taxa de utilização de fundos.

  5. Adicionar mais condições de filtragem e aumentar a estabilidade do sistema, incluindo combinações de indicadores como canais, tendências e outros.

  6. Optimização de parâmetros para diferentes variedades, aumentando a adaptabilidade.

  7. Introdução de aprendizagem de máquina para treinar dados históricos e dinamicamente otimizar os parâmetros do sistema.

Resumir

Esta estratégia, em geral, é uma típica estratégia de negociação de reversão de curto prazo baseada em anomalias de curto prazo da linha K com indicadores de RVI. Tem certas vantagens, mas também possui riscos possíveis. A estabilidade e a lucratividade da estratégia podem ser melhoradas com a otimização contínua dos parâmetros e a criação de um sistema mais rigoroso.

Código-fonte da estratégia
/*backtest
start: 2022-10-07 00:00:00
end: 2023-10-07 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//This is part of a series of strategies developed automatically by a online software. I cannot share the site url, which is not related to me in any way, because it is against the TV reules.
//
//This strategy was optimized for GBPUSD, timeframe 1D, fixed lots 0.1, initial balance 1000€
//LOGIC:
//- LONG ENTRY when previous candle is bear
//- LONG EXIT: RVI > signal line
//- SHORT ENTRY when previous candle is bull
//- SHORT EXIT: RVI <  signal line
//
//NOTE: I considered the open of actual candle instead of close otherwise there will be a back shift of 1 candle in pine script
//
//Take profit = no
//Stop loss = no

// strategy("Expert studio strategy 1 - GBPUSD", overlay=false, precision=6, initial_capital=1000,calc_on_every_tick=true, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=10000, currency=currency.EUR)

//INPUTS
src = input(close, "source")
min_body_height = input(42, "Minimum body height", type=input.float)
//bars_back=input(2, "Consecutive bars of same color")
rvi_period = input(55, "RVI period")

//CALCULATIONS_____________________________
//candle color
body_height = abs(open - close) / syminfo.mintick
body_color = open > close ? color.red : color.green

//da migliorare for i=0 to bars_back-1

//RVI -------- thanks to hecate
p = rvi_period

CO = close - open
HL = high - low

value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6

num = sum(value1, p)
denom = sum(value2, p)

RVI = denom != 0 ? num / denom : 0

RVIsig = (RVI + 2 * RVI[1] + 2 * RVI[2] + RVI[3]) / 6

plot(RVI, color=color.green, style=plot.style_line, linewidth=1)
plot(RVIsig, color=color.red, style=plot.style_line, linewidth=1)

//----------------------------------

longCondition = body_height[1] >= min_body_height and body_color[1] == color.red and 
   body_height[0] >= min_body_height and body_color[0] == color.red and 
   RVIsig > RVI
exitLong = RVI > RVIsig

shortCondition = body_height[1] >= min_body_height and body_color[1] == color.green and 
   body_height[0] >= min_body_height and body_color[0] == color.green and 
   RVIsig < RVI
exitShort = RVI < RVIsig

if longCondition and strategy.opentrades == 0
    strategy.entry("Long", strategy.long)

strategy.close("Long", when=exitLong)

if shortCondition and strategy.opentrades == 0
    strategy.entry("Short", strategy.short)

strategy.close("Short", when=exitShort)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(10, "Backtest Start Month")
testStartDay = input(7, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()