Estratégia de negociação de acompanhamento do momento

Autora:ChaoZhang, Data: 2023-12-20 16:06:26
Tags:

img

Estratégia geral

A Estratégia de Negociação de Rastreamento de Momento é uma estratégia de negociação automatizada que rastreia principalmente as tendências do momento do mercado e usa vários indicadores técnicos como julgamentos auxiliares.

No geral, esta estratégia é adequada para negociação de tendências de médio e longo prazo, e pode efetivamente capturar as tendências do mercado e reduzir a frequência de negociação para buscar lucros individuais mais altos.

Princípio da estratégia

Julgamento da potência principal

O núcleo da estratégia de rastreamento de momento é julgar a direção dos principais fundos do mercado. A estratégia calcula o indicador ATR para monitorar a volatilidade do mercado em tempo real. Quando a volatilidade aumenta, isso significa que os principais fundos estão se acumulando ou distribuindo, e a estratégia sairá temporariamente do mercado para evitar o período em que os principais fundos estão operando.

Quando a volatilidade enfraquece, isso significa que a acumulação ou alocação da força principal está completa e a estratégia retornará ao mercado para determinar a direção específica da força principal. O método de julgamento é calcular as posições de suporte e pressão do mercado para ver se há sinais de avanços. Se houver um avanço claro, provará que os principais fundos escolheram essa direção.

Acórdão auxiliar

Após a determinação da direcção dos fundos principais, a estratégia introduzirá também vários indicadores técnicos auxiliares para verificação novamente, a fim de evitar erros de apreciação.

Só quando a direcção dos fundos principais e dos indicadores auxiliares emitem sinais na mesma direcção é que a estratégia abre posições.

Saída de perdas

Após a abertura de posições, a estratégia de rastreamento de momento rastreará as mudanças de preço em tempo real e usará a expansão dos valores ATR como um sinal de stop loss.

Além disso, se o movimento do preço exceder um certo intervalo e, em seguida, recuar, também ocorrerá o stop loss.

Vantagens da estratégia

Alta sistematização

A maior vantagem das estratégias de rastreamento de momento é seu alto grau de sistematização e padronização.

Isso torna a replicabilidade desta estratégia muito forte. Os usuários podem aplicá-lo para uso a longo prazo após a configuração sem intervenção manual.

Controle de riscos maduro

A estratégia inclui mecanismos de controlo de riscos em vários níveis, tais como avaliações da potência principal, verificação auxiliar, definição da linha de stop loss, etc., que podem controlar eficazmente os riscos não sistemáticos.

Especificamente, a estratégia só abre posições em situações de alta probabilidade e define pontos de stop loss científicos para maximizar a evitação de perdas.

Retorno relativamente sustentável

Em comparação com as estratégias de curto prazo, o período de detenção das estratégias de acompanhamento do momento é mais longo e cada lucro é maior.

Além disso, a estratégia acompanha as tendências de médio e longo prazo, o que permite captar plenamente a volatilidade das tendências, especialmente nos principais mercados de tendências.

Advertências de risco

Optimização de parâmetros difícil

A estratégia de acompanhamento do momento envolve vários parâmetros, como parâmetros ATR, parâmetros de penetração, parâmetros de stop loss, etc. Existe uma certa correlação entre esses parâmetros, exigindo testes repetidos para encontrar a combinação ideal de parâmetros.

A configuração incorreta dos parâmetros pode facilmente levar a uma frequência excessiva de negociação ou a um controle insuficiente do risco.

Trapa de fuga

Quando a estratégia determina os principais sinais de potência e indicador, depende da ruptura dos preços para confirmar, mas pode haver falhas nas operações de penetração, o que aumentará a probabilidade de ser preso.

Se um avanço chave falhar, pode levar a perdas maiores.

Orientações de otimização

Introduzir o aprendizado de máquina

Algoritmos de aprendizado de máquina podem ser usados para detectar automaticamente correlações entre parâmetros e encontrar combinações ótimas de parâmetros.

Especificamente, o algoritmo EnvironmentError pode ser usado para iterar continuamente parâmetros baseados em aprendizado de reforço para maximizar os retornos da estratégia.

Aumentar os filtros

Podem ser introduzidos mais filtros auxiliares com base em indicadores existentes, tais como indicadores de volume de negociação, indicadores de fluxo de capital, etc., para verificar três ou quatro vezes os sinais de ruptura para melhorar a fiabilidade.

Mas muitos filtros também podem levar a oportunidades perdidas. A intensidade do filtro precisa ser equilibrada. Além disso, os próprios filtros também devem evitar correlação.

Estratégia de Fusão

Combinar a estratégia de acompanhamento do momento com outras estratégias para aproveitar os pontos fortes de diferentes estratégias para alcançar a ortogonalidade e melhorar a estabilidade geral.

Por exemplo, a incorporação de estratégias de reversão de curto prazo e a abertura de negócios reversos após avanços podem garantir mais lucros.

Resumo

Em geral, a estratégia de negociação de rastreamento de momento é uma estratégia sistematizada de rastreamento de tendências que vale a pena recomendar.

Mas a estratégia em si também tem algumas fraquezas inerentes. requer que os usuários tenham a capacidade de otimizar parâmetros e integrar estratégias, a fim de maximizar a eficácia desta estratégia.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-15 01:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Created by frasmac2k Strategy credit to Alex Morris

//@version=5
strategy("Mechanical", shorttitle="MECH", overlay=true)

// Get the current date and time
currentYear = year
currentMonth = month
currentDay = dayofmonth

// Create a timestamp for the present date and time
currentTimestamp = timestamp(currentYear, currentMonth, currentDay)

// Define time interval for backtesting
dStart = input(timestamp('2023-07-01'), title='Set Start date', tooltip='Select a start date to run the script from')

// Define direction of strategy
direction = input.string('Forward',title='Direction', tooltip='Forward will go LONG on a Green anchor candle. Inverse will go short on a Green anchor candle and vice versa for Red candle', options=['Forward', 'Inverse'])

// Define the anchor hour as user input with a range of 0 to 23
anchorHour = input.int(11, title="Anchor Hour", tooltip='Set the hour to trade', minval=0, maxval=23)

// Define the take profit and stop loss in pips
takeProfitPips = input.int(10, title='Define TP Pips', tooltip='How many pips do you want to set TP. Choose a sensible value related to the instrument', minval=5)
stopLossPips = input.int(10,'Define SL Pips', tooltip='How many pips do you want to set SL. Choose a sensible value related to the instrument', minval=5)

// Define Tick size
tick10p = input.int(100, title='tick size', tooltip='Choose how many ticks equal 10 pips. This can vary by broker so measure 10 pips on the chart and select how many ticks that equates to. Forex is typically 100. Some instruments such as indices can be 1000', options=[100,1000])

// Declare TP/SL variables
var float takeProfit = na
var float stopLoss = na

// Calculate take profit and stop loss levels in ticks
if tick10p == 100
    takeProfit := takeProfitPips * 10
    stopLoss := stopLossPips * 10
if tick10p == 1000
    takeProfit := takeProfitPips * 100
    stopLoss := stopLossPips * 100

// Declare offset time
var int offset = na

if currentTimestamp > timestamp('2023-10-29')
    offset := 4
else
    offset := 5

//adjust for exchange time
anchorHour := anchorHour - offset

// Define the anchor hour as user input with a range of 0 to 23
tradeHour = anchorHour

// Define logical check for strategy date range
isStratTime = true

// Calculate the time condition for placing the order at the user-defined hour (start of the next hour)
isTradeTime = true

// Logic condition for forwards or inverse
isForward = direction == 'Forward'
isInverse = direction == 'Inverse'

// Declare entry condition variables
var bool longCondition = na
var bool shortCondition = na

// Declare and initialize variables for anchorCandle open and close prices
var float anchorOpen = na
var float anchorClose = na
var float tradeOpen = na
var float tradeClose = na

// Set logic by direction

if isForward
    // Strategy logic
    if isTradeTime and isStratTime
        //Obtain candle open/close
        anchorOpen := open
        anchorClose := close
        // Define entry conditions
        longCondition := anchorClose > anchorOpen
        shortCondition := anchorClose < anchorOpen
        
        // Entry logic
        if longCondition
            strategy.entry("Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Long", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')
        if shortCondition
            strategy.entry("Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Short", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')

if isInverse
    // Strategy logic
    if isTradeTime and isStratTime
        //Obtain candle open/close
        anchorOpen := open
        anchorClose := close
        // Define entry conditions
        shortCondition := anchorClose > anchorOpen
        longCondition := anchorClose < anchorOpen
        
        // Entry logic
        if longCondition
            strategy.entry("Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Long", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')
        if shortCondition
            strategy.entry("Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Short", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')

// Define the time range for the background shade
startHour = anchorHour
startMinute = 0
endHour = anchorHour
endMinute = 0

// Check if the current time is within the specified range
isInTimeRange = (hour == startHour and minute >= startMinute) or (hour == endHour and minute <= endMinute) or (hour > startHour and hour < endHour)

// Define the background color for the shade
backgroundColor = color.new(color.red, 90)

// Apply the background shade
bgcolor(isInTimeRange ? backgroundColor : na)



Mais.