
A estratégia determina se há uma tendência unilateral súbita no mercado atual, identificando uma linha K de aumento anormal. Quando a linha K de aumento anormal é identificada, um pedido de compra e venda é estabelecido perto do ponto mais alto da linha K, e um pedido de perda de parada é estabelecido perto do ponto mais baixo da linha K anterior, formando um longo pedido de controle de risco de alto nível de alavancagem. A estratégia monitora a linha de parada em tempo real e retira imediatamente a parada se o preço for abaixo da linha de parada.
Esta estratégia determina principalmente a formação de linhas K de aumento anormal, quando ocorrem close>open e highlow[1] quando a linha K, acredita que há um aumento anormal do ciclo atual. Neste momento, será configurado um sinal de entrada longo, o preço de entrada é o preço mais alto da linha K atual. Ao mesmo tempo, o preço de parada é o preço mais baixo da linha K anterior, formando um modelo de controle de risco de alta alavancagem.
A maior vantagem da estratégia é que pode capturar a curta linha do mercado de excepcionais situações de emergência de mercado, para que a ultra-alta freqüência de negociação. Ao mesmo tempo, através da configuração de uma maior amplitude de perda de parada, pode usar o alto nível de alavancagem para o controle de risco de negociação, para obter maiores ganhos. Além disso, a estratégia de realização automática de monitoramento da linha de perda de parada, quando o preço de ruptura para baixo da linha de perda de parada, pode parar rapidamente e eficazmente controlar o risco de negociação.
O principal risco da estratégia é que o julgamento de aumento anormal não é preciso e não consegue capturar efetivamente o movimento repentino, o que leva a uma maior probabilidade de erro no julgamento do sinal de negociação. Além disso, a configuração da posição de parada de perda também tem um grande impacto no risco e no lucro da negociação.
A estratégia pode ser melhorada em vários aspectos:
Os critérios de julgamento de aumento anormal podem ser introduzidos para auxiliar o julgamento de mais indicadores ou modelos de aprendizado profundo, aumentando a precisão do julgamento de sinais de negociação estratégicos.
A configuração de stop loss permite uma grande quantidade de análises estatísticas e de otimização para encontrar uma posição de stop loss mais adequada para equilibrar os níveis de risco e de lucro da transação.
A introdução de mais mecanismos de controle de transação de alta frequência, como filtragem de volume de transação, verificação de ruptura de intervalos, etc., pode evitar a probabilidade de confinamento.
Os critérios de admissão da estratégia podem ser ajustados, não necessariamente limitados à linha K de aumento anormal, mas podem ser julgados em combinação com mais indicadores e modelos, formando um mecanismo de verificação múltipla.
A estratégia em geral é uma estratégia típica de negociação de alta frequência, pertencente à classe de estratégia de breakout de curta linha. Ela permite negociação de alta frequência através da captura de flutuações anormais súbitas da situação. Ao mesmo tempo, o uso de controle de risco de parada e mecanismo de alta alavancagem controla o risco.
/*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 //