Estratégia de negociação quantitativa Clone Yin Yang


Data de criação: 2023-09-27 17:11:30 última modificação: 2023-09-27 17:11:30
cópia: 0 Cliques: 733
1
focar em
1617
Seguidores

Visão geral

A estratégia de negociação quantitativa clon é uma estratégia de negociação de curto prazo baseada na relação entre o preço e o volume do dia. A estratégia utiliza informações sobre a direção do dia para o dia de negociação de ações, combinadas com sinais de confirmação de quantidade, para operação de curto prazo de baixo risco.

Princípio da estratégia

A estratégia gera blocos de Renko através da contagem de preços de abertura, fechamento, máximo e mínimo diários das ações, em combinação com o indicador ATR. Quando os blocos de yin e yang se revertem, geram um sinal de negociação.

Concretamente, a estratégia primeiro calcula o preço de abertura o2 e o preço de fechamento c2 do bloco Renko. Se o2 < c2, indica a linha positiva, se o2 > c2, indica a linha negativa. Quando a linha negativa se transforma em linha negativa, gera um sinal de venda, quando a linha negativa se transforma em linha positiva, gera um sinal de compra.

Para filtrar as falsas rupturas, a estratégia também calcula o número de ciclos do fio solar e do fio negativo do dia anterior. Se o número de ciclos do fio solar for maior, o sinal será mais confiável. Além disso, a estratégia também configura a lógica de parada de perda após a compra e venda.

Vantagens estratégicas

  1. O uso de blocos Renko filtra o ruído do mercado e torna os sinais de negociação mais claros.

  2. A combinação de energia e quantidade evita o risco de falsas rupturas.

  3. O modelo DAPM é simples, eficaz e adequado para operações de linha curta diárias.

  4. Parâmetros ATR personalizáveis ajustam a frequência de transação.

  5. Uma estratégia de parada de prejuízos personalizada para otimizar a gestão de risco.

Análise de Riscos

  1. O risco de falhas ainda está presente, mas não há uma clara tendência.

  2. A configuração incorreta dos parâmetros de Renko pode perder tendências ou aumentar a frequência de negociação.

  3. A configuração de um ponto de parada muito pequeno pode causar um pequeno prejuízo ao ser parado por um rebote.

Direção de otimização

  1. Pode-se considerar a combinação de outros indicadores técnicos para filtrar o sinal.

  2. Pode-se considerar a adição de uma função de parada móvel ou de parada de rastreamento.

  3. Testes de otimização para diferentes parâmetros de variedades.

  4. É possível considerar uma combinação de diferentes períodos de tempo para transações em vários quadros de tempo.

Resumir

A estratégia é, em geral, uma estratégia de negociação de curto prazo muito prática. Utiliza a relação de preço e quantidade para filtrar de forma eficiente, e pode capturar pontos-chave de preços de curto prazo para cima e para baixo.

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

//@version=4
// This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License https://creativecommons.org/licenses/by-sa/4.0/
// © dman103
strategy(title="Renko Strategy V2", shorttitle="Renko Strategy V2", overlay=true,precision=3, commission_value=0.025, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)
// Version 2.0 of my previous renko strategy using Renko calculations, this time without Tilson T3 and without using security with Renko to remove repaints!
// Seems to work nicely on cryptocurrencies on higher time frames.

//== Description ==
// Strategy gets Renko values and uses renko close and open to trigger signals.
// Base on these results the strategy triggers a long and short orders, where green is uptrending and red is downtrending.
// This Renko version is based on ATR, you can Set ATR (in settings) to adjust it.

// == Notes ==
// Supports alerts.
// Supports backtesting time ranges.
// Shorts are disabled by default (can be enabled in settings).
// Link to previous Renko strategy V1: https://www.tradingview.com/script/KeWBWLGT-Renko-Strategy-T3-V1/
//
// Stay tuned for version V3 in the future as i have an in progress prototype, Follow to get updated: https://www.tradingview.com/u/dman103/#published-scripts

// === INPUT BACKTEST RANGE ===
useDate = input(true,     title='---------------- Trade Range ----------------', type=input.bool)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2017, title = "From Year", minval = 2000)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2099, title = "To Year", minval = 2010)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create 

settings = input(true,     title='---------------- Settings ----------------', type=input.bool)

allow_short = input(false,title="Allow Short")
atr_len = input(10,"ATR Length")

atr = atr(atr_len)
// Thanks to renko snippet calculations from @RafaelZioni  https://www.tradingview.com/script/2vKhpfVH-Renko-XZ/
Renko1() =>
    p1 = 0.0
    p1 := close > nz(p1[1]) + atr ? nz(p1[1]) + atr : close < nz(p1[1]) - atr ? nz(p1[1]) - atr : nz(p1[1])
    p1
Renko2() =>
    p2 = 0.0
    Br_1 = Renko1()
    p2 := Renko1() != Renko1()[1] ? Br_1[1] : nz(p2[1])
    p2

Renko3() =>
    p3 = 0.0
    p3 := open > nz(p3[1]) + atr ? nz(p3[1]) + atr : open < nz(p3[1]) - atr ? nz(p3[1]) - atr : nz(p3[1])
    p3

Renko4() =>
    open_v = 0.0
    Br_2 = Renko3()
    open_v := Renko3() != Renko3()[1] ? Br_2[1] : nz(open_v[1])
    open_v

o2 = Renko4()
c2 = Renko1()
l2 =low
h2 = high

//=== Plotting ===

crossPlot= 0.0
if (o2 < c2)
    crossPlot :=o2
else 
    crossPlot := o2

// Used to make sure that even if o2 and c2 are equal, the result (short or long) will be based on previous trend.
bars_since_up=barssince(o2 < c2)
bars_since_down=barssince(o2 > c2)
go_long= (bars_since_up<bars_since_down) and  o2<c2
go_short = (bars_since_up>bars_since_down) and o2>c2
plotColor = go_long and  o2<c2 ? color.green : go_short and o2>c2?  color.red : color.white 
plot(crossPlot, color = plotColor, style = plot.style_circles, linewidth = 2,join=true)
changeCond = plotColor != plotColor[1]

//=== Buy/Sell ===
closeStatus =  strategy.openprofit > 0 ? "win" : "lose"
long_entry = plotColor == color.green and window()  and changeCond
long_exit_entry = plotColor == color.red //or (allow_alternative_sl and close < low_result  )
short_entry = plotColor == color.red  and window() and changeCond
short_exit_entry = plotColor == color.green   // or (allow_alternative_sl and close > high_result )

strategy.entry("long", true, when = long_entry)
strategy.close("long",when=long_exit_entry,comment=closeStatus)

if (allow_short)
    strategy.entry("short",false, when = short_entry)
strategy.close("short",when=short_exit_entry,comment=closeStatus)
//=== Alerts ===
alertcondition(go_long and changeCond , title='Renko Buy Signal', message='Renko Revered to Buy Signal')
alertcondition(go_short and changeCond , title='Renko Sell Signal', message='Renko Revered to Sell Signal')