Estratégia de ruptura de impulso baseada na perda de parada de amplitude interna

Autora:ChaoZhang, Data: 2023-11-23 14:14:58
Tags:

img

Resumo

Esta estratégia identifica linhas K anormalmente crescentes para julgar se há um mercado unilateral com volatilidade explosiva. Quando uma linha K anormalmente crescente é identificada, ela irá definir uma ordem de limite de lucro perto do máximo dessa linha K, ao mesmo tempo em que estabelece um stop loss perto do mínimo da linha K anterior, formando uma posição longa com alto controle de risco de alavancagem. A estratégia monitora continuamente a linha de stop loss e cancelará imediatamente a ordem de stop loss se o preço quebrar abaixo da linha de stop loss.

Princípio da estratégia

Esta estratégia julga principalmente a formação de linhas K anormalmente crescentes. Quando uma linha K com fechamento> aberto e alto baixo[1] aparece, acredita que há um período atual de mercado anormalmente crescente. Um sinal de entrada longo será gerado, com o preço de entrada perto do preço mais alto da linha K atual. O preço de stop loss também é definido perto do preço mais baixo da linha K anterior para formar um modelo de controle de risco de alavancagem alta.

Análise das vantagens

A maior vantagem desta estratégia é que ela pode capturar a volatilidade explosiva de curto prazo no mercado para alcançar negociação de freqüência ultra-alta. Ao mesmo tempo, ao definir um intervalo de stop loss maior, uma alta alavancagem pode ser usada para negociação controlada por risco para obter maiores retornos. Além disso, a estratégia realiza monitoramento automático da linha de stop loss. Quando o preço atravessa a linha de stop loss para baixo, pode parar rapidamente a perda para controlar efetivamente os riscos de negociação.

Análise de riscos

O principal risco desta estratégia é que o julgamento de aumento anormal é impreciso e não é capaz de capturar efetivamente a volatilidade explosiva do mercado, resultando em uma maior probabilidade de erro de julgamento dos sinais de negociação. Além disso, a definição de posições de stop loss também terá um grande impacto nos riscos e retornos de negociação. Se o stop loss for muito solto, o risco de perda de negociação aumentará. Se o stop loss for muito apertado, pode não ser capaz de rastrear efetivamente os ganhos no mercado. Uma grande quantidade de backtesting é necessária para otimizar a posição de stop loss.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Os critérios para julgar os aumentos anormais podem introduzir mais indicadores ou modelos de aprendizagem profunda para ajudar nos julgamentos para melhorar a precisão dos julgamentos de sinais de negociação na estratégia.

  2. A definição de posições de stop loss pode ser submetida a uma grande quantidade de análises estatísticas e de otimização para encontrar melhores posições de stop loss para equilibrar os riscos comerciais e os níveis de retorno.

  3. Podem ser introduzidos mecanismos de controlo do risco de negociação de alta frequência, tais como a filtragem do volume de transacções, a verificação da ruptura do intervalo, etc., para evitar a probabilidade de ficarem presos.

  4. Os critérios de entrada da estratégia podem ser ajustados e não precisam limitar-se a linhas K anormais. Mais indicadores e modelos podem ser combinados para fazer julgamentos e formar um mecanismo de verificação múltipla.

Resumo

Esta estratégia é uma estratégia de negociação de alta frequência típica, pertencente a uma estratégia de breakout de curto prazo. Captura a volatilidade explosiva nos movimentos do mercado para alcançar negociação de freqüência ultra-alta. Ao mesmo tempo, usa controle de risco de stop loss e mecanismos de alta alavancagem para controlar riscos. A estratégia tem grande espaço para otimização e pode ser ajustada e otimizada a partir de vários ângulos.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 08:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoshuaMcGowan
// I needed to test/verify the functionality for canceling an open limit order in a strategy and also work thru the pieces needed to set the position sizing so each loss is a set amount. 
// This is not meant to be dropped into a chart but rather gives the code/logic in order to use in your own script w/alerts or strategy. Hope it helps. 
 
//@version=4
strategy("Strategy Test - Cancel Limit Order and Position Sizing", overlay=true, precision=4)
 
/////////////////
// Backtest Period Selection
 
testStartYear = input(2020, "Backtest Start Year",minval=1980)
testStartMonth = input(2, "Backtest Start Month",minval=1,maxval=12)
testStartDay = input(1, "Backtest Start Day",minval=1,maxval=31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
 
testStopYear = input(2020, "Backtest Stop Year",minval=1980)
testStopMonth = input(12, "Backtest Stop Month",minval=1,maxval=12)
testStopDay = input(31, "Backtest Stop Day",minval=1,maxval=31)
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
 
testPeriod() => time >= true
 
//////////////
// Inside Bar
bull_inside_bar = close>open and high<high[1] and low>low[1]

// Set Levels
bull_inside_bar_sl = valuewhen(bull_inside_bar, low[1], 0) - (1*syminfo.mintick)
bull_breakout_price = valuewhen(bull_inside_bar, high, 0) + (1*syminfo.mintick)
entry_buy   = high
inside_bar_dist = entry_buy - bull_inside_bar_sl
inside_bar_be = entry_buy + (inside_bar_dist * 1)
inside_bar_tgt = entry_buy + (inside_bar_dist * 2)

///////////////////
// Position Sizing 
//////////////////
// For each trade setup that fires in this scenario we want to set our total loss amount in USD, so every trade that loses is lets say $1 and the 2:1 target would be $2 in this example. 
// The math logic for this take the risk amount and divide by the stop percentage, take that number and divide by leverage amount chosen. Stop percentage is a variable below if questions on that. 
//
// Taken from @JoshuaMorris (shout out to the UK peeps) position sizing google doc so thank you sir. 
// Would be used if risking based on percentage of a portfolio. Leaving code snippets here in case that's the direction someone wants to go. 
// xbt_price = security("BITMEX:XBTUSD", "D", close)
// account_size_xbt = input(1, "Account Size (XBT)", type=input.float)
// account_size_usd = (account_size_xbt * xbt_price)
// percentage_risk = input(0.01, "Personal Risk Percent - Default is 1%", type=input.float)
// personal_risk = (account_size_usd * percentage_risk)
// position_size_usd = (personal_risk) / risk_percent
// leverage_req = position_size_usd / account_size_usd

// Will want to hard code leverage as 1x, 5x, 10x etc and dont need it to automagically be set as is above. If you're doing 100x you are gnarly haha. 
leverage_amount = input(title="Leverage Amount Desired", type=input.integer, defval=10, options=[1, 2, 3, 5, 10, 25, 50, 100])
risk_amount = input(title="Risk Total Per Trade in USD", type=input.integer, defval=1, minval=1, step=1)

// Reminder this is for Longs. Math needs to be changed a bit for Shorts. This is the information using the long/short tool would give us if doing manually. 
stop_percent = inside_bar_dist / (entry_buy)
pos_size_no_lev = risk_amount / stop_percent
pos_size_with_lev = pos_size_no_lev / leverage_amount 

//////////////
// Strategy Section

if testPeriod()
    strategy.entry(id="Long", long=true, qty=1, limit=9320.00, when=bull_inside_bar)
    strategy.cancel(id="Long", when = low < 9310)
// as a test swap the price to be above the limit or below to see the cancel in play.
 
//////////////
// Plot Section
plotchar(bull_inside_bar, title="bull_inside_bar", char="🐂", location=location.belowbar, offset=-0, color=color.green, transp=25)
plot(bull_inside_bar_sl, title="bull_inside_bar_sl", transp=100)
plot(entry_buy, title="entry_buy", transp=100)
plot(inside_bar_dist, title="inside_bar_dist", transp=100)
plot(stop_percent, title="stop_percent", transp=100)
plot(pos_size_no_lev, title="pos_size_no_lev", transp=100)
plot(pos_size_with_lev, title="pos_size_with_lev", transp=100)

// Hidden Plots // For Data Window Eyes Only // 
// plot(longCondition==true?1:0, title="Long Condition", transp=100)
// plot(xbt_price, title="XBT Price", transp=100)
// plot(account_size_usd, title="Account Size USD", transp=100)
// plot(risk_percent, title="risk_percent", transp=100)
// plot(position_size_usd, title="position_size_usd", transp=100)
// plot(leverage_req, title="leverage_req", transp=100)

// END //

Mais.