Estratégia de compressão de onda quantitativa


Data de criação: 2023-11-14 14:04:24 última modificação: 2023-11-14 14:04:24
cópia: 0 Cliques: 640
1
focar em
1617
Seguidores

Estratégia de compressão de onda quantitativa

Visão geral

A ideia principal da estratégia é combinar o indicador de dinâmica do Lazy Bear com o indicador de MFI do Crypto Face, comprando quando a tendência é alta e vendendo quando a tendência é baixa, para realizar uma estratégia de negociação quantitativa que acompanha a tendência do mercado.

Princípio da estratégia

  1. O BlueWave, um indicador de dinâmica do Lazy Bear, é usado para determinar a direção da tendência, calculado a regressão linear do preço de fechamento em relação aos pontos altos, baixos e próximos dos 20 dias. Quando o BlueWave passa por 0 acima, a tendência é para cima; quando o BlueWave passa por 0 abaixo, a tendência é para baixo.

  2. O indicador de MFI melhorado do Crypto Face é usado para julgar o fluxo de fundos através da análise dos últimos 58 dias de alta e baixa e volume de transações. MFI maior que 0 indica entrada de fundos, MFI menor que 0 indica saída de fundos.

  3. Quando o BlueWave ultrapassa 0 e o MFI é maior que 0, é emitido um sinal de compra, abrindo uma posição a mais; quando o BlueWave ultrapassa 0 e o MFI é menor que 0, é emitido um sinal de venda, abrindo uma posição a zero.

  4. Estabeleça um stop loss, acompanhe as tendências do mercado para obter lucro, mas controle o risco.

Vantagens estratégicas

  1. A combinação de dois indicadores permite uma melhor avaliação da direção das tendências do mercado.

  2. O indicador BlueWave suaviza a curva, evita ser desviado por dados anormais e julga a tendência do mercado com mais confiança.

  3. Os indicadores de MFI ajudam a avaliar o fluxo de fundos e a evitar perdas com falhas.

  4. A estratégia tem menos parâmetros e é mais fácil de implementar e operar.

  5. Pode definir com flexibilidade as condições de suspensão de perdas para controlar o risco de transação.

  6. Pode-se definir um período de compra e venda para evitar oscilações anormais em determinados momentos do mercado.

Risco estratégico

  1. A estratégia pode continuar a caçar a baixa e causar prejuízos quando os mercados continuam a cair.

  2. Se o indicador emitir um sinal falso, pode ser bloqueado após a entrada.

  3. O ponto de paragem é muito alto, o risco de expansão dos prejuízos.

  4. O mercado está muito flutuante, e é provável que o ponto de parada seja ultrapassado.

  5. Otimizar os parâmetros de forma inadequada pode levar a uma má eficácia da estratégia.

  6. A estratégia gera sinais de negociação muito frequentes, aumentando as taxas de negociação e os custos de deslizamento.

Direção de otimização

  1. Optimizar os parâmetros do BlueWave e do MFI para tornar o indicador mais estável e confiável.

  2. Combinação de indicadores de tendência para evitar a persistência de prejuízos de baixa.

  3. Ajuste dinâmico do Stop Loss Stop Loss Ratio para reduzir a probabilidade de cobertura.

  4. Otimizar as condições de abertura das posições e reduzir os sinais falsos.

  5. Considere a adição de controle de posições para evitar a queda.

  6. A combinação de algoritmos de aprendizagem de máquina para um ponto de venda mais preciso.

Resumir

A estratégia usa uma combinação de BlueWave e MFI dois indicadores para determinar a direção da tendência, fazer mais quando a tendência é ascendente, para baixo, para fazer o mercado de forma eficiente para obter lucro. Mas também existem alguns parâmetros de configuração, parar de perda de parada, persistência de queda, etc. riscos, a necessidade de continuar a otimizar a configuração de parâmetros, paragem mecanismo, filtragem condições, etc., para melhorar a eficácia da estratégia e estabilidade.

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

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bunghole 2021
strategy(title="Crypto Squeeze Strategy", initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, currency = 'USD', overlay=true)

//// Stoploss and Take Profit Parameters
// Enable Long Strategy
enable_long_strategy = input(true, title="Enable Long Strategy", group="SL/TP For Long Strategy",inline="1")
long_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_stoploss_percentage = (close * (long_stoploss_value / 100)) / syminfo.mintick
long_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_takeprofit_percentage = (close * (long_takeprofit_value / 100)) / syminfo.mintick

// Enable Short Strategy
enable_short_strategy = input(true, title="Enable Short Strategy", group="SL/TP For Short Strategy",inline="3")
short_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group= "SL/TP For Short Strategy",inline="4")
short_stoploss_percentage = (close * (short_stoploss_value / 100)) / syminfo.mintick
short_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Short Strategy",inline="4")
short_takeprofit_percentage = (close * (short_takeprofit_value / 100)) / syminfo.mintick

// Plot Stoploss & Take Profit Levels
long_stoploss_price = strategy.position_avg_price * (1 - long_stoploss_value/100)
long_takeprofit_price = strategy.position_avg_price * (1 + long_takeprofit_value/100)
short_stoploss_price = strategy.position_avg_price * (1 + short_stoploss_value/100)
short_takeprofit_price = strategy.position_avg_price * (1 - short_takeprofit_value/100)
plot(enable_long_strategy and not enable_short_strategy ? long_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Long SL Level")
plot(enable_long_strategy and not enable_short_strategy ? long_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Long TP Level")
plot(enable_short_strategy and not enable_long_strategy ? short_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Short SL Level")
plot(enable_short_strategy and not enable_long_strategy ? short_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Short TP Level")

// Date Range
start_date = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Date Range")
start_month = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
start_year = input(title="Start Year", type=input.integer, defval=1804, minval=1800, maxval=3000, group="Date Range")
end_date = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=3, group="Date Range")
end_month = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
end_year = input(title="End Year", type=input.integer, defval=2077, minval=1800, maxval=3000, group="Date Range")
in_date_range = (time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0)) and (time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0))


//// Indicator Inputs
// Lazy Bear's Momentum Indicator
BlueWave = linreg(close - avg(avg(highest(high, 20), lowest(low, 20)), sma(close, 20)), 20, 0)

// Replicated version of Crypto Face's MFI Indicator
mfiUpper = sum(volume * (change(hlc3) <= 0 ? 0 : hlc3), 58)
mfiLower = sum(volume * (change(hlc3) >= 0 ? 0 : hlc3), 58)
_mfiRsi(mfiUpper, mfiLower) =>
    if mfiLower == 0
        100
    if mfiUpper == 0
        0
	100.0 - (100.0 / (1.0 + mfiUpper / mfiLower))

mf = _mfiRsi(mfiUpper, mfiLower)
mfi = (mf - 50) * 3


//// Strategy
// Creating Long and Short Strategy
buy_signal = crossover(BlueWave, 0) and mfi > 0 
sell_signal = crossunder(BlueWave, 0) and mfi < 0 

// Long Strategy
if buy_signal and in_date_range and enable_long_strategy == true
    strategy.entry("Long", true, when=buy_signal, alert_message="Open Long Position")
    strategy.exit("Long  SL/TP", from_entry="Long", loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message="Your Long SL/TP Limit As Been Triggered.")
    strategy.close("Long", when=sell_signal, alert_message="Close Long Position")

// Short Strategy
if sell_signal and in_date_range and enable_short_strategy == true
    strategy.entry("Short", false, when = sell_signal, alert_message="Open Short Position")
    strategy.exit("Short SL/TP", from_entry="Short", loss=short_stoploss_percentage, profit=short_takeprofit_percentage, alert_message="Your Short SL/TP Limit As Been Triggered.")
    strategy.close("Short", when=buy_signal, alert_message="Close Short Position")