
A estratégia de acompanhamento de tendências da matriz de separação é uma estratégia de negociação quantitativa que combina tendências, separação e equilíbrio. A estratégia usa o indicador RSI duplo para determinar a direção da tendência do mercado e, em combinação com o equilíbrio da matriz, configura um sinal de entrada.
A estratégia de acompanhamento de tendências da matriz de separação consiste principalmente das seguintes partes:
Usar RSI rápido e RSI lento para determinar a direção da tendência do mercado. Quando o RSI rápido ocorre sobrecompra ou sobrevenda, combinar com o RSI lento para determinar a direção da tendência.
Estabelecer um conjunto de médias de matriz de acordo com o preço de entrada e ajustar a posição correspondente quando o preço toca uma média. Assim, você pode lucrar mais na tendência.
A transação bidirecional é a opção padrão.
A lógica da transação é a seguinte:
O uso do RSI rápido para avaliar o excesso de compra e venda temporários no mercado.
Usando o RSI lento para determinar a direção de tendência do mercado a médio e longo prazo.
Quando o RSI rápido aparece sobre-compra e sobre-venda, e o RSI lento mostra uma reversão de tendência, faça uma posição na direção correspondente de acordo com o julgamento de espaço excedente do RSI lento.
Após a construção do depósito, um conjunto de medianas matriciais é definido. Este conjunto de medianas matriciais gira em torno da configuração do preço de entrada, com o tamanho do intervalo definido pelo parâmetro de percentual de fluxo entre as áreas da matriz de barras.
Quando o preço toca a linha média da matriz, ajuste a posse de acordo. Se a linha média for rompida para cima, adicione mais ofertas; Se a linha média for rompida para baixo, reduza as ofertas.
Quando há uma grande correção no preço, a posição é reposta ao nível inicial.
A principal lógica de negociação desta estratégia é a seguinte: através da média da matriz, é possível bloquear mais lucros na tendência.
A estratégia de seguimento de tendências da matriz de separação tem as seguintes vantagens:
Os sinais de julgamento do RSI duplo são mais confiáveis. O RSI rápido evita falsas rupturas, e o RSI lento garante que a grande tendência esteja correta.
A matriz de linha média segue a tendência para obter lucro. Ajustar as posições de acordo com o grau de divergência dos preços pode ser um lucro contínuo.
Suporte a negociação bidirecional. Negociação bidirecional padrão, mas também pode ser mais. Adapta-se a mais ambientes de mercado.
O mecanismo de reposição de posição controla o risco. A reposição de posição pode ser interrompida em tempo hábil quando há uma mudança significativa no preço.
A configuração de parâmetros é flexível. O usuário pode escolher o melhor conjunto de parâmetros com base em dados históricos, variedades de transação e outros.
A estrutura do código é clara. As responsabilidades de cada parte são claramente divididas e são fáceis de entender, otimizar e expandir.
Em geral, a maior vantagem da estratégia é o uso de vários mecanismos para melhorar a qualidade do sinal, buscando maiores ganhos enquanto controla o risco. Esta é uma estratégia de negociação de risco e ganho.
A estratégia de acompanhamento de tendências da matriz de desvio também apresenta alguns riscos, principalmente nos seguintes pontos:
O RSI duplo julga o risco de falha. O RSI frequentemente emite falsos sinais quando o mercado está em um ajuste de choque.
O método de linha mediana da matriz é um risco inadequado. Se os parâmetros da matriz forem configurados incorretamente, o ajuste de posição pode ser muito radical, aumentando assim os prejuízos. Os parâmetros devem ser testados com cuidado.
O excesso de posição aumenta o risco. Ajustar a amplitude da posição em excesso também pode levar à expansão dos prejuízos. O parâmetro da posição máxima precisa ser ajustado com cautela.
Risco de reversão de tendência. Quando a tendência se reverte, a perda é maior se a posição não for liquidada a tempo. Isso requer atenção aos indicadores de tendência de longo prazo.
O risco de espaço limitado para otimização de código. A estratégia está mais madura e o espaço para otimização continua é limitado. A lógica de negociação global precisa ser reavaliada se o ambiente de mercado mudar muito.
Avaliação e otimização de estratégias são fundamentais para reduzir esses riscos. Medidas como o ajuste de conjuntos de parâmetros, o monitoramento de indicadores de longo ciclo e outros meios podem evitar os riscos até certo ponto.
A estratégia de seguimento da matriz de tendências de separação tem mais espaço para otimização:
Optimizar os parâmetros do RSI duplo. Mais combinações de parâmetros podem ser testadas, escolhendo o valor mais preciso do ciclo RSI.
Configuração de linha média da matriz personalizada. Permite que o usuário configure a linha média da matriz de acordo com os parâmetros de diferentes variedades, para que seja mais adequado às características da variedade.
Aumentar o mecanismo de parada de perda. Por exemplo, definir uma linha média de saída, quando o preço cai abaixo dessa linha média.
Aumentar a regra de proporção de posições. Ajustar o tamanho e a velocidade das posições de forma mais científica e racional, evitando o aumento excessivo das posições.
Em combinação com outros indicadores. Outros indicadores, como MACD, KD, podem ser introduzidos para julgamento auxiliar, melhorando a precisão do sinal.
Otimizar a estrutura do código. Continuar a melhorar a expansibilidade, a manutenção e a eficiência de execução do código.
A estratégia de acompanhamento de tendências de matriz de separação é uma estratégia de negociação quantitativa integrada de vários mecanismos. Utiliza principalmente o pensamento de determinação da direção da tendência do RSI duplo e a linha de equilíbrio da matriz para acompanhar a tendência de lucro. Em comparação com a estratégia de indicador único, a estratégia pode fornecer um sinal de negociação mais estável e eficiente.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("The Matrix 7.0 Strategy", overlay=false)
//Matrix Settings
entry_size = input(title="Entry Size", defval = 1)
max_size = input(title="Max Size", defval = 10000)
matrix = input(title="Matrix Interval %", defval = 2)
matrix_price_overwrite = input(title="Matrix Overwrite $", defval = 0.0)
adjustment = input(title="Adjustment Size", defval = 1000)
trade_short = input(title="Trade Short", type=bool, defval = true)
//RSI Settings
periods = input(title="RSI Periods", defval = 14)
overbought_short = input(title="RSI Overbought", defval = 65)
oversold_short = input(title="RSI Oversold", defval = 30)
//RSI Trend Settings
resolution_long = input(title="Resolution Trend", defval = "D")
periods_long = input(title="RSI Trend Periods", defval = 14)
overbought_long = input(title="RSI Trend Overbought", defval = 64)
oversold_long = input(title="RSI Trend Oversold", defval = 30)
//Round Off to 2 decimals
round2(x) =>
a = x * 10 * 10
a := floor(a + 0.5)
a := a / 10 / 10
a
//RSI Function
RSI = rsi(close, periods)
//RSI Market Function
rsi_oversold = RSI < oversold_short
rsi_overbought = RSI > overbought_short
market_rsi = 0.0
market_rsi := if (rsi_oversold)
RSI - oversold_short
else
if (rsi_overbought)
RSI - overbought_short
else
0
//RSI Trend Function
rsi_long = request.security(syminfo.tickerid,resolution_long,rsi(close,periods_long))
trend_rsi_long = rsi_long < oversold_long
trend_rsi_short = rsi_long > overbought_long
trend_rsi = 0
trend_rsi := if (trend_rsi_short)
-1
else
if (trend_rsi_long)
1
else
trend_rsi[1]
// // Shorter time resolution to make "close" crosses give faster positives.
// short_resolution = security(tickerid, "1", close)
// quick = round2(short_resolution) //ROUND OFF TO 2 DECIMAL PLACES.
//Declare Other Variables
entry_price = 0.0
entry_price := nz(entry_price[1])
position_size = 0.0
position_size := nz(position_size[1])
last_traded_price = 0.0
last_traded_price := nz(last_traded_price[1])
matrix_price = 0.0
if matrix_price_overwrite > 0.0
matrix_price := matrix_price_overwrite
else
matrix_price := round2((matrix/100) * entry_price)
level = 0
level := nz(level[1])
level_price = entry_price
if not na(level_price[1])
level_price := level_price[1]
// Calculate Level
if close > level_price
level_change = floor((high - level_price)/matrix_price)
level := level + level_change
else
if close < level_price
level_change = ceil((low - level_price)/matrix_price)
level := level + level_change
// Calculate Level Price
level_price := (level * matrix_price) + entry_price
// Calculate Matrix Position
matrix_position = 0.0
if position_size > 0
matrix_position := ((-1 * level) * adjustment) + entry_size
else
if position_size < 0
matrix_position := ((-1 * level) * adjustment) - entry_size
//Trend Entry or Reversal Conditions
trend_reversal_up = trend_rsi == 1 and (trend_rsi[1] == -1 or trend_rsi == 0) and position_size <= 0
trend_reversal_down = trend_rsi == -1 and (trend_rsi[1] == 1 or trend_rsi == 0) and position_size >= 0 and trade_short == true
flatten_position = trend_rsi == -1 and (trend_rsi[1] == 1 or trend_rsi == 0) and position_size >= 0 and trade_short == false
//Reset Conditions
reset_long = (position_size > 0) and (close - entry_price > matrix_price) and (market_rsi < 0) and (position_size != entry_size)
reset_short = (position_size < 0) and (entry_price - close > matrix_price) and (market_rsi > 0) and (position_size != (-1 * entry_size))
//Adjustment Conditions
increase_long = (position_size > 0) and (matrix_position > position_size) and (market_rsi < 0) and (matrix_position <= max_size)
decrease_long = (position_size > 0) and (matrix_position < position_size) and (market_rsi > 0)
increase_short = (position_size < 0) and (matrix_position < position_size) and (market_rsi > 0) and (matrix_position >= (-1 * max_size))
decrease_short = (position_size < 0) and (matrix_position > position_size) and (market_rsi < 0)
//Transactions
//Trend Reversals
if trend_reversal_up
strategy.entry("OL", strategy.long, qty=entry_size)
position_size := entry_size
matrix_position := entry_size
level := 0
else
if trend_reversal_down
strategy.entry("OS", strategy.short, qty=entry_size)
position_size := -1 * entry_size
matrix_position := -1 * entry_size
level := 0
//Reset Positions
else
if reset_long
order = entry_size - position_size[1]
strategy.order("RL", strategy.long, qty=order)
position_size := entry_size
matrix_position := entry_size
level := 0
else
if reset_short
order = position_size[1] - (-1* entry_size)
strategy.order("RS", strategy.short, qty=order)
position_size := -1 * entry_size
matrix_position := -1 * entry_size
level := 0
//Position Adjustments
else
if increase_long
order = matrix_position - position_size[1]
strategy.order("IL", strategy.long, qty=order)
position_size := position_size[1] + order
else
if decrease_long
order = position_size[1] - matrix_position
strategy.order("DL", strategy.short, qty=order)
position_size := position_size[1] - order
else
if increase_short
order = position_size[1] - matrix_position
strategy.order("IS", strategy.short, qty=order)
position_size := position_size[1] - order
else
if decrease_short
order = matrix_position - position_size[1]
strategy.order("DS", strategy.long, qty=order)
position_size := position_size[1] + order
else
if flatten_position
strategy.close_all()
position_size := 0.0
matrix_position := 0.0
level := 0
//Grouped Actions
if trend_reversal_up or trend_reversal_down or reset_short or reset_long
entry_price := round2(close)
last_traded_price := round2(close)
if increase_long or decrease_long or increase_short or decrease_short
last_traded_price := round2(close)
// //RSI Trend & Adjustment Moments. (strategy)
p1 = plot(market_rsi, color = trend_rsi > 0 ? green : red, linewidth = 4, title='Market', transp =0)
p2 = plot(trend_rsi, color = trend_rsi > 0 ? green : red, linewidth = 4, title='Trend', transp = 0)
fill(p1,p2, color=trend_rsi > 0 ? green : red, transp=0)
p3 = plot((rsi_long - 50) *2, color = white, title="Trend Index")
fill(p2,p3, color=white)
hline((overbought_long -50) * 2)
hline((oversold_long -50) * 2)
//Position Plots (strategy)
plot(matrix_position / 100, title='Matrix', color=white, linewidth = 4)
plot(position_size / 100, title='Position', color=blue, linewidth = 4)
plot(strategy.position_size / 100, title='Strategy', color=orange, linewidth = 4)
// //Price Plots (study)
// plot(level_price, title="Matrix Level Price", linewidth=4)
// plot(last_traded_price, title="Last Traded Price", linewidth=2, color=orange)
// plot(entry_price + (4 * matrix_price), title='Adjustment 4', color=white, linewidth = 1)
// plot(entry_price + (3 * matrix_price), title='Adjustment 3', color=white, linewidth = 1)
// plot(entry_price + (2 * matrix_price), title='Adjustment 2', color=white, linewidth = 1)
// plot(entry_price + matrix_price, title='Adjustment 1', color=white, linewidth = 1)
// plot(entry_price, title='Entry Price', color=white, linewidth = 3)
// plot(entry_price - matrix_price, title='Adjustment -1', color=white, linewidth = 1)
// plot(entry_price - (2 * matrix_price), title='Adjustment -2', color=white, linewidth = 1)
// plot(entry_price - (3 * matrix_price), title='Adjustment -3', color=white, linewidth = 1)
// plot(entry_price - (4 * matrix_price), title='Adjustment -4', color=white, linewidth = 1)
// //Alerts (study only)
// alertcondition(trend_reversal_up, title='Trend Reversal Up', message='Market Oversold, Lets Buy')
// alertcondition(trend_reversal_down, title='Trend Reversal Down', message='Market Overbought, Lets Sell')
// alertcondition(reset_long, title='Reset Long', message='Higher Bottom, Lets Buy')
// alertcondition(reset_short, title='Reset Short', message='Lower Top, Lets Sell')
// alertcondition(increase_long, title='Increase Long', message='Price Dropped, Lets Buy')
// alertcondition(decrease_long, title='Decrease Long', message='Price Spiked, Lets Sell')
// alertcondition(increase_short, title='Increase Short', message='Price Spiked, Lets Sell')
// alertcondition(decrease_short, title='Decrease Short', message='Price Dropped, Lets Buy')
// //Grouped Conditions
// condition_buy = trend_reversal_up or increase_long or decrease_short or reset_long
// condition_sell = trend_reversal_down or decrease_long or increase_short or reset_short
// adjustment_matrix = trend_reversal_up or increase_long or decrease_short or trend_reversal_down or decrease_long or increase_short or reset_long or reset_short
// //Grouped Alerts
// alertcondition(condition_buy, title='Condition Buy', message='You Need to Buy')
// alertcondition(condition_sell, title='Condition Sell', message='You Need to Sell!')
// alertcondition(adjustment_matrix, title='Adjustment Matrix', message='You Need to Adjust')