시간 단계적 피라미딩 간단한 양자 전략

저자:차오장, 날짜: 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)




더 많은