Uma estratégia quantitativa simples baseada na adição de posições em intervalos de tempo


Data de criação: 2023-12-27 17:39:40 última modificação: 2023-12-27 17:39:40
cópia: 0 Cliques: 684
1
focar em
1623
Seguidores

Uma estratégia quantitativa simples baseada na adição de posições em intervalos de tempo

Visão geral

A estratégia é uma estratégia simples de negociação de quantidade usando o método de acréscimo de posição por escala de tempo. A principal idéia da estratégia é criar várias posições abertas por dia em horários fixos e, em seguida, definir diferentes condições de stop-loss para cada posição, permitindo o stop-loss ou o stop-loss em lotes.

Princípio da estratégia

A estratégia baseia-se em três lógicas fundamentais:

  1. A escada do tempo está a subir.

UtilizaçãosessionTimeO parâmetro define um período de tempo de negociação diária, durante o qual a posição é adicionada gradualmente em uma escala FIXED no início de cada dia de negociação, e o número de posições adicionadas é a média da distribuição do número de posições máximas do pool de capital.

  1. Paragem de parada personalizada

Para cada ordem de abertura de posição, definir um ponto de parada correspondentetakeProfite ponto de paradastopLossCada ordem tem uma lógica de stop loss independente, permitindo a realização de stop loss em lotes.

  1. Fim do período de equilíbrio

No final do período de negociação do dia, pode-se optar por se colocar em posição de liquidação todas as ordens que não tiverem sido detidas durante esse período.

Vantagens estratégicas

A estratégia tem as seguintes vantagens:

  1. Dispersão de riscos, distribuição de fundos entre as diferentes ordens, controle efetivo de perdas em ordens individuais.

  2. O bloqueio de stop loss em lotes, com uma lógica de stop loss independente para evitar que todos os pedidos sejam interrompidos ao mesmo tempo.

  3. Configuração flexível, com parâmetros personalizados como o número máximo de acréscimos, o período de negociação diária, o índice de stop loss.

  4. É fácil de entender, a lógica da estratégia é simples e clara.

Risco estratégico

A estratégia também tem riscos:

  1. Há um risco de cobertura, se todos os pedidos não chegarem ao limite de parada, o primeiro a desencadear a correspondente linha de parada, haverá um grande prejuízo. Pode ser evitado através da configuração razoável de proporção de parada.

  2. Não é possível limitar o total de posições abertas por dia. Se ocorrer uma situação especial, o excesso de pedidos e a acumulação de posições podem exceder a capacidade de suporte financeiro. Pode-se considerar a adição de um limite máximo de total de posições abertas por dia.

  3. A configuração incorreta do intervalo de tempo pode perder oportunidades de mercado. Recomenda-se que o intervalo de tempo de negociação seja configurado com base no período de tempo ativo da variedade de negociação alvo.

Otimização de Estratégia

A estratégia pode ser otimizada em várias direções:

  1. Aumentar a lógica de julgamento de condições de abertura de posições, abrindo posições apenas quando um sinal de indicador técnico específico é atendido, evitando o acréscimo cego de posições.

  2. Aumentar o limite do montante total de depósitos por dia para evitar que o pool de fundos seja excedido.

  3. Configure diferentes stop loss proporções para diferentes pedidos, para obter um stop loss diferencial.

  4. A lógica de aumentar o número de ordens ligadas ao saldo do pool de fundos, fazendo com que o número de ordens seja vinculado ao capital disponível.

Resumir

O conjunto da estratégia é um modelo de estratégia muito simples para a quantificação de transações usando a idéia de acréscimo de risco em escala de tempo, a lógica da estratégia é clara, mas há também um certo risco e espaço de otimização, que o desenvolvedor pode otimizar adequadamente com base nisso, tornando-se uma estratégia de quantificação mais estável e confiável.

Código-fonte da estratégia
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 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/
// © A3Sh

//@version=5
strategy("Simple_Pyramiding", overlay=true, pyramiding=99, initial_capital=500, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.075, close_entries_rule='FIFO')

// Study of a Simple DCA strategy that opens a position every day at a specified time.
// A position is opened at the start time of the Timeframe.
// Positions exit individually when the take profit level is triggered.
// Option to activate Stop Loss and/or Position exit at the end of the Timeframe


// Backtest Window
start_time   = input(defval=timestamp("01 April 2021 20:00"), group = "Backtest Window", title="Start Time")
end_time     = input(defval=timestamp("01 Aug 2022 20:00"),  group = "Backtest Window", title="End Time")
window() => true


// Inputs
posCount     = input.int    (6,           group = "Risk",         title = "Max Amount of DCA Entries")
takeProfit   = input.float  (2.5,         group = "Risk",         title = "Take Profit %")
slSwitch     = input.bool   (true,        group = "Risk",         title = "Activate Stop Loss")
stopLoss     = input.float  (9,           group = "Risk",         title = "Stop Loss %")
sessionTime =  input("1800-1700", group = "DCA Settings", title = "DCA Order Timeframe", tooltip="Open order at the start/If ativated, close order at the end")
exitDCA     =  input.bool   (false,       group = "DCA Settings", title = "Exit DCA Entry at end of Timeframe")


// Order size based on max amount of pyramid orders
q = (strategy.equity  / posCount) / open


// Timeframe for opening and closing a DCA order
// example taken from https://stackoverflow.com/questions/69230164/pinescript-basic-question-open-a-trade-at-a-set-time-each-day
t       = time("D", sessionTime)
isStart = na(t[1]) and not na(t) or t[1] < t
isEnd   = na(t) and not na(t[1]) or t[1] < t
bgcolor(t ? color.new(color.blue,95) : na, title = " TimeFrame Color")


// Create DCA Entries
entry_price = 0.0
if isStart and window() 
    for i = 0 to strategy.opentrades
        if strategy.opentrades == i
            entry_price := close
            entry_id = "PE_" + str.tostring(i + 1) 
            strategy.entry(id = entry_id, direction=strategy.long, limit=entry_price, qty=q)
        if strategy.opentrades == posCount
            break
            
 
//Exit DCA Entries when take profit or stop loss is triggered
if strategy.opentrades > 0 and window() 
    for i = 0 to strategy.opentrades 
        exit_from = "PE_" + str.tostring(i + 1)
        exit_id = "Exit_" + str.tostring(i + 1)
        strategy.exit(id= exit_id, from_entry= exit_from, profit = close * takeProfit / 100 / syminfo.mintick, loss = slSwitch ? close * stopLoss /100 / syminfo.mintick :na)
        

//Exit DCA Entries at end of DCA Timeframe
if strategy.opentrades > 0 and exitDCA and isEnd and window() 
    for i = 0 to strategy.opentrades 
        exit_from = "PE_" + str.tostring(i + 1)
        exit_id = "Exit_" + str.tostring(i + 1)
        strategy.exit(id= exit_id, from_entry= exit_from, stop = close)