
A estratégia combina indicadores de volume de transação e indicadores de tendência para julgar a movimentação de preços em relação a um sistema de negociação automatizado de seguimento de tendência e de ruptura. Quando o volume de transação aumenta e a volatilidade é menor, compra-se e é julgada a parada ou perda de acordo com o ponto de parada e a movimentação de preços.
O uso de Bollinger Bands para determinar se os preços flutuam menos. A concretização é comparar a banda de banda dos canais ATR e BOLL.
Calcule o volume médio de transações nos últimos N dias e compare com o volume atual para ver se o volume aumentou.
Quando os preços estão baixos, o volume de transação aumenta, e quando os preços estão mais baixos, os clientes compram.
Configure um ponto de parada e acompanhe as atualizações de preços mínimos.
A perda é quando o preço se move para baixo e quebra o ponto de parada.
O preço de uma moeda é o preço de uma moeda, e o preço de uma moeda é o preço da moeda.
A combinação de indicadores de volume de transação e de volatilidade permite filtrar eficazmente as brechas falsas.
A utilização de um método de tracking de tendências para travar o máximo de lucro.
O uso de julgamentos morfológicos, como o devorador de cabeças múltiplas, como sinal de parada, pode ser usado para parar a tendência na véspera de uma reversão.
A estratégia é intuitiva, simples, fácil de entender e seguir.
As regras de stop loss e stop stop são mais claras, reduzindo a incerteza causada pelo antisipato de fechamento.
Os indicadores de conclusão estão atrasados e podem ter perdido os melhores pontos de entrada.
A determinação de formas como o engolimento de várias cabeças pode não ser suficientemente confiável como sinal de parada, existindo o risco de parada prematura.
A estratégia do ponto de parada é a estratégia posterior, com maior risco de perda individual.
A necessidade de ajustes de parâmetros razoáveis, como ATR e ciclo de volume de transação, pode ocorrer com frequência.
A necessidade de prestar atenção e otimizar as regras de stop-loss para reduzir a possibilidade de liquidação desnecessária.
Tente combinar os sinais de entrada de filtragem com outros indicadores, como MACD.
Optimizar o ATR e os parâmetros do ciclo de volume de transação, reduzindo o risco de transações frequentes.
Tente outros sinais de parada, como mecanismos de saída, como o preço de ruptura do trilho abaixo.
Estudar a possibilidade de bloquear mais lucros através de um ajuste dinâmico de stop loss.
Teste o impacto de diferentes períodos de posse no desempenho, procurando o melhor período de posse.
Revisar os efeitos dos contratos de diferentes variedades para encontrar as mais adequadas.
A estratégia em geral é simples e intuitiva, combinando indicadores de volume de negócios e julgamento de preços, para implementar uma estratégia de seguimento de tendência. O benefício é que a geração de sinais é mais clara, fácil de seguir, reduzindo o risco de operação inversa.
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DojiEmoji (kevinhhl)
//@version=4
strategy("[KL] Relative Volume Strategy",overlay=true,pyramiding=1)
ENUM_LONG = "Long"
VERBOSE_MODE = false
opened_position = false
// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("01 May 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }
// Volatility Indicators {
// BOLL:
BOLL_length = 20, BOLL_src = close, SMA20 = sma(BOLL_src, BOLL_length), BOLL_sDEV_x2 = 2 * stdev(BOLL_src, BOLL_length)
BOLL_upper = SMA20 + BOLL_sDEV_x2, BOLL_lower = SMA20 - BOLL_sDEV_x2
plot(SMA20, "Basis", color=#872323, offset = 0)
BOLL_p1 = plot(BOLL_upper, "BOLL Upper", color=color.navy, offset = 0, transp=50)
BOLL_p2 = plot(BOLL_lower, "BOLL Lower", color=color.navy, offset = 0, transp=50)
//fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85)
// ATR v. sDev of prices
ATR_x2 = atr(input(10,title="Length of ATR [Trailing Stop Loss] (x2)"))*2
//plot(SMA20+ATR_x2, "SMA20 + ATR_x2", color=color.gray, offset = 0, transp=50)
//plot(SMA20-ATR_x2, "SMA20 - ATR_x2", color=color.gray, offset = 0, transp=50)
//plotchar(ATR_x2, "ATR_x2", "", location = location.bottom)
is_low_volat = ATR_x2 > BOLL_sDEV_x2
// }
// Trailing stop loss {
TSL_source = low
var entry_price = float(0), var stop_loss_price = float(0)
TSL_line_color = color.green
if strategy.position_size == 0 or not within_timeframe
TSL_line_color := color.black
stop_loss_price := TSL_source - ATR_x2
else if strategy.position_size > 0
stop_loss_price := max(stop_loss_price, TSL_source - ATR_x2)
plot(stop_loss_price, color=TSL_line_color)
// }
// Relative volume indicator {
LEN_RELATIVE_VOL = input(5, title="SMA(volume) length (for relative comparison)")
relative_vol = sma(volume,LEN_RELATIVE_VOL)
// }
// price actions {
bar_range_ratio = abs(close-open)/(high-low)
engulfing = low < low[1] and high > high[1] and abs(close-open) > abs(close-open)[1]
// }
// MAIN:
if within_timeframe
entry_msg = "", exit_msg = close <= entry_price ? "stop loss" : "take profit"
// ENTRY :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if close > open and volume > relative_vol and is_low_volat
if strategy.position_size > 0
entry_msg := "adding"
else if strategy.position_size == 0
entry_msg := "initial"
if strategy.position_size == 0
entry_price := close
stop_loss_price := TSL_source - ATR_x2
ATR_x2 := ATR_x2
strategy.entry(ENUM_LONG, strategy.long, comment=entry_msg)
// EXIT ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if strategy.position_size > 0
bExit = false
// EXIT: Case (A) touches trailing stop loss
if TSL_source <= stop_loss_price
exit_msg := exit_msg + "[TSL]"
bExit := true
// EXIT: Case (B)
else if close < open and not is_low_volat and engulfing and (high-low) > ATR_x2
exit_msg := VERBOSE_MODE ? exit_msg + "[engulfing bearish]" : exit_msg
bExit := true
strategy.close(ENUM_LONG, when=bExit, comment=exit_msg)
// CLEAN UP:
if strategy.position_size == 0
entry_price := 0
stop_loss_price := float(0)