
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.
A estratégia baseia-se em três lógicas fundamentais:
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.
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.
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.
A estratégia tem as seguintes vantagens:
Dispersão de riscos, distribuição de fundos entre as diferentes ordens, controle efetivo de perdas em ordens individuais.
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.
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.
É fácil de entender, a lógica da estratégia é simples e clara.
A estratégia também tem riscos:
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.
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.
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.
A estratégia pode ser otimizada em várias direções:
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.
Aumentar o limite do montante total de depósitos por dia para evitar que o pool de fundos seja excedido.
Configure diferentes stop loss proporções para diferentes pedidos, para obter um stop loss diferencial.
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.
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.
/*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)