Eine einfache quantitative Strategie basierend auf zeitschrittweiser Positionsaddition


Erstellungsdatum: 2023-12-27 17:39:40 zuletzt geändert: 2023-12-27 17:39:40
Kopie: 0 Klicks: 684
1
konzentrieren Sie sich auf
1623
Anhänger

Eine einfache quantitative Strategie basierend auf zeitschrittweiser Positionsaddition

Überblick

Die Strategie ist eine einfache Strategie, um mit der Zeitleiter-Positionierung zu quantifizieren. Die Hauptidee der Strategie besteht darin, täglich zu einem festen Zeitpunkt mehrere Positionen zu eröffnen und dann für jede Position unterschiedliche Stop-Loss-Bedingungen zu setzen, um Stop-Loss oder Stop-Loss in Gruppen zu erreichen.

Strategieprinzip

Die Strategie basiert auf drei zentralen Logiken:

  1. Die Zeitleiter wird aufgeschoben.

NutzungsessionTimeDie Parameter setzen einen Tageshandel auf, in dem die Anzahl der Positionen pro Tag auf der Grundlage der durchschnittlichen Verteilung der größten Positionen im Kapitalpool in einer FIXED-Leiter schrittweise erhöht wird.

  1. Individualisierte Stop Loss

Ein entsprechender Stop-Off für jede EinlagerungtakeProfitund Stop LossstopLossDas bedeutet, dass jeder Auftrag eine eigenständige Stop-Loss-Logik hat, um die Stop-Loss-Logik in Chargen zu realisieren.

  1. End der Zeiträume

Am Ende des Tagesgeschäfts kann die Option ausgewählt werden, ob alle Orders, die während des Tagesgeschäfts nicht stillgelegt wurden, stillgelegt werden sollen.

Strategische Vorteile

Diese Strategie hat folgende Vorteile:

  1. Risikodistributionen, die die Verteilung der Mittel in den Fondspools auf verschiedene Aufträge ermöglichen und die Verluste auf einzelnen Aufträgen wirksam kontrollieren.

  2. Ein unabhängiges Stop-Loss-System für verschiedene Bestellungen verhindert, dass alle Bestellungen gleichzeitig gestoppt werden.

  3. Flexible Konfiguration mit individuellen Parametern wie maximaler Aufschlag, tägliche Handelszeiträume, Stop-Loss-Ratio und mehr.

  4. Es ist einfach zu verstehen, die Logik der Strategie ist einfach und klar.

Strategisches Risiko

Die Strategie birgt einige Risiken:

  1. Es besteht die Gefahr, dass ein größerer Verlust entsteht, wenn die entsprechende Stop-Line ausgelöst wird, bevor alle Bestellungen die Stop-Line erreicht haben. Dies kann durch eine vernünftige Konfiguration des Stop-Loss-Ratios vermieden werden.

  2. Es ist nicht möglich, die tägliche Gesamthöhe zu begrenzen. In besonderen Fällen kann es sein, dass zu viele Aufträge gleichzeitig über die finanzielle Tragfähigkeit hinaus gelagert werden. Es kann eine Höchstgrenze für die tägliche Gesamthöhe berücksichtigt werden.

  3. Eine falsche Zeitrahmenkonfiguration kann zu verpassten Marktchancen führen. Es wird empfohlen, die Zeitrahmen für den Handel nach den aktiven Zeitrahmen der Zielhandelsvariante zu konfigurieren.

Strategieoptimierung

Die Strategie kann in folgenden Richtungen optimiert werden:

  1. Die Logik der Positionseröffnung wurde erweitert, um Positionen nur zu eröffnen, wenn bestimmte technische Indikatoren erfüllt sind, um eine blinde Aufstockung zu vermeiden.

  2. Erhöhung der Grenze für die tägliche Einzahlung der Gesamtsumme, um zu verhindern, dass die Kapazität des Fondspools überschritten wird.

  3. Setzen Sie unterschiedliche Stop-Loss-Verhältnisse für verschiedene Aufträge, um differenzierte Stop-Loss-Verhältnisse zu erreichen.

  4. Die Logik, die Anzahl der Bestellungen mit dem Saldo des Fondspools zu verknüpfen, so dass die Anzahl der Bestellungen mit den verfügbaren Mitteln verknüpft ist.

Zusammenfassen

Die Strategie als Ganzes ist eine sehr einfache Strategie-Template, die die Zeitleiter-Hauflage-Idee nutzt, um quantitative Transaktionen durchzuführen. Die Strategie-Logik ist klar, aber es gibt auch ein gewisses Risiko und Optimierungsraum, auf dem die Entwickler eine angemessene Optimierung vornehmen können, was sie zu einer stabileren und zuverlässigeren Quantitätsstrategie macht.

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