Простая квантовая стратегия пирамидизации по времени

Автор:Чао Чжан, Дата: 2023-12-27 17:39:40
Тэги:

img

Обзор

Эта стратегия представляет собой простую квантовую торговую стратегию, которая использует временную пирамиду. Основная идея заключается в том, чтобы открывать длинные позиции каждый день в фиксированное время и устанавливать разные уровни получения прибыли и остановки убытков для каждой позиции, чтобы реализовать отбор прибыли и остановку убытков.

Принципы

Стратегия основана на трех ключевых логиках:

  1. Временная пирамида

    ИспользуйтеsessionTimeпараметр для установления ежедневного торгового времени окна, пирамида длинных позиций шаг за шагом на рынке открытой в течение этого окна.

  2. Индивидуальное получение прибыли и остановка убытков

    Набор соответствующего уровня получения прибылиtakeProfitи уровень остановки потерьstopLossдля каждой открытой позиции, так что каждая позиция имеет свою собственную логику получения прибыли и остановки убытков для реализации партийных исполнений.

  3. Закрыть все позиции после окончания окна времени

    Выберите, хотите ли вы закрыть все позиции, открытые в течение времени в конце окна.

Преимущества

Стратегия имеет следующие преимущества:

  1. Диверсификация рисков: равномерное распределение капитала на разные позиции для эффективного контроля потери одной позиции.

  2. Различные позиции имеют независимую логику, чтобы избежать массовых потерь.

  3. Гибкие конфигурации, настраиваемые параметры, такие как максимальное время пирамидирования, ежедневное время, соотношение получения прибыли/остановки убытков и т.д.

  4. Простая и понятная логика.

Риски

Существуют также некоторые риски:

  1. Риск застоя всего капитала, если все позиции запускают стоп-лосс до получения прибыли.

  2. Нет ограничения на общий капитал открытых позиций в день. Слишком много позиций может превысить допустимую сумму капитала, если возникают необычные рыночные ситуации. Рассмотрим возможность добавления максимального общего капитала позиций в день.

  3. Неправильная конфигурация временного окна может привести к упущению торговых возможностей.

Улучшение

Стратегия может быть усовершенствована из следующих аспектов:

  1. Добавьте условия открытой позиции, основанные на технических показателях, чтобы избежать безрассудной пирамиды.

  2. Добавить ежедневный общий лимит капитала открытых позиций, чтобы не превышать допустимость капитала.

  3. Установка различных коэффициентов прибыли/остановки убытков для различных позиций для достижения дифференцированного прибыли и прекращения убытков.

  4. Добавьте логику, чтобы связать сумму позиции с балансом капитала.

Заключение

В заключение, это очень простой шаблон квантовой стратегии торговли, использующий методологию пирамидизации по времени. Логика проста и ясна, в то время как есть также некоторые риски и возможности для улучшения. Разработчики могут правильно оптимизировать его, чтобы сделать его относительно стабильной и надежной квантовой стратегией.


/*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)




Больше