시간 프레임 전력 거래 전략

저자:차오장, 날짜: 2023-11-23 15:32:00
태그:

시간 프레임 전력 거래 전략

전반적인 설명

타임프레임 파워 트레이딩 전략 (Timeframe Power Trading Strategy) 은 하루 내의 다른 시간 프레임에서 주식의 가격 트렌드 패턴을 활용하는 전략이다. 하루 내 48 시간 반 시간 프레임에서 최적의 긴 또는 짧은 기회를 식별하기 위해 노력한다.

전략 논리

이 전략의 핵심 논리는 주식 가격이 하루의 다른 기간 동안 특정 패턴을 나타내는 경향이 있다는 것입니다. 전략은 하루 동안 48 개의 반 시간 시간 프레임을 설정하고 각 시간 프레임 동안 장기간에 걸리거나 단축하거나 아무것도하지 않기를 결정합니다. 시간이 특정 시간 프레임에 들어갈 때, 설정이 long이라면 긴 포지션을 열 것입니다. 설정이 short이라면 짧은 포지션을 열 것입니다. 각 시간 프레임의 끝에서 다음 시간 프레임의 운영 유형을 확인합니다. 현재와 동일하다면 포지션을 계속 유지합니다. 다른 경우 시간 프레임이 끝나기 전에 포지션을 닫습니다.

예를 들어, 시간 프레임 6:30am - 7:00am가 long로 설정되면 전략은 6:30에 긴 포지션을 열 것입니다. 7:00am - 7:30am가 short로 설정되면 7am 전에 긴 포지션을 닫고 7am에 짧은 포지션을 열 것입니다.

이 전략의 장점은 주식의 하루 내 가격 변동에 대한 자본을 창출 할 수 있다는 것입니다. 이러한 패턴이 시간이 지남에 따라 변화하여 전략을 비효율화 할 위험이 있습니다.

이점 분석

이 전략의 가장 큰 장점은 주식의 Price is Right 속성을 활용한다는 것입니다. 가격은 하루의 다른 시간 동안 다른 평균과 변동을 가질 경향이 있습니다. 이것은 전략이 변동성 기간 동안 범위 거래 전술을 채택하고 안정적인 기간 동안 트렌드 거래 전술을 채택하여 변화하는 시장 조건에 적응 할 수있게합니다.

또 다른 장점은 매개 변수 구성의 유연성입니다. 불확실성을 상쇄하기 위해 다양한 주식에 최적의 매개 변수 세트를 사용할 수 있습니다.

위험 분석

주요 위험은 가정의 불안정성에서 비롯됩니다. 주식 내 하루 가격 패턴이 크게 변화하면 전략의 수익성 기대에 영향을 줄 것입니다. 이러한 변화는 전체 시장에 영향을 미치는 근본 변화 또는 블랙 스완 이벤트에서 발생할 수 있습니다.

또한 높은 거래 빈도는 거래 비용 측면에서 위험을 초래합니다. 충분한 거래량이 없으면 수수료의 축적은 최종 수익을 침식 할 수 있습니다.

최적화 지침

매개 변수를 동적으로 조정할 수 있도록 기계 학습 모델을 도입하는 것을 고려하십시오. 예를 들어 LSTM 모델은 다음 기간 가격을 예측하고 그에 따라 긴 / 짧은 설정을 정밀하게 조정합니다.

대안적으로, 전략 활성화를 위한 최적의 타이밍을 결정하기 위해 패턴 전환의 가능성을 측정하기 위해 주식 기본 요소를 결합합니다.

결론

타임프레임 파워 트레이딩 전략 (Timeframe Power Trading Strategy) 은 반복적인 가격 패턴을 분석할 때 서로 다른 기간 동안 최적의 내일 운영을 식별함으로써 알파를 생성한다. 유연한 매개 변수 조정 및 위험 통제로 효율적인 알고 트레이딩 전략이다. 미래 최적화 경로는 ML 채택 또는 수익성을 확대하고 불확실성에 대한 견고함을 향상시키기 위해 근본적인 컴보를 포함한다.


/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
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/

//@version=4
strategy("Timeframe Time of Day Buying and Selling Strategy", overlay=true)

frommonth = input(defval = 6, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 14, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

timeframes = array.new_string(48, '')
timeframes_options = array.new_string(49, 'None')

array.set(timeframes,0,'2330-0000')
array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='0000-0030'))
array.set(timeframes,1,'0000-0030')
array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='0030-0100'))
array.set(timeframes,2,'0030-0100')
array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='0100-0130'))
array.set(timeframes,3,'0100-0130')
array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='0130-0200'))
array.set(timeframes,4,'0130-0200')
array.set(timeframes_options,4, input(defval='Long', options=['Long','Short','None'], title='0200-0230'))
array.set(timeframes,5,'0200-0230')
array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='0230-0300'))
array.set(timeframes,6,'0230-0300')
array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='0300-0330'))
array.set(timeframes,7,'0300-0330')
array.set(timeframes_options,7, input(defval='None', options=['Long','Short','None'], title='0330-0400'))
array.set(timeframes,8,'0330-0400')
array.set(timeframes_options,8, input(defval='None', options=['Long','Short','None'], title='0400-0430'))
array.set(timeframes,9,'0400-0430')
array.set(timeframes_options,9, input(defval='None', options=['Long','Short','None'], title='0430-0500'))
array.set(timeframes,10,'0430-0500')
array.set(timeframes_options,10, input(defval='None', options=['Long','Short','None'], title='0500-0530'))
array.set(timeframes,11,'0500-0530')
array.set(timeframes_options,11, input(defval='None', options=['Long','Short','None'], title='0530-0600'))
array.set(timeframes,12,'0530-0600')
array.set(timeframes_options,12, input(defval='None', options=['Long','Short','None'], title='0600-0630'))
array.set(timeframes,13,'0600-0630')
array.set(timeframes_options,13, input(defval='None', options=['Long','Short','None'], title='0630-0700'))
array.set(timeframes,14,'0630-0700')
array.set(timeframes_options,14, input(defval='None', options=['Long','Short','None'], title='0700-0730'))
array.set(timeframes,15,'0700-0730')
array.set(timeframes_options,15, input(defval='None', options=['Long','Short','None'], title='0730-0800'))
array.set(timeframes,16,'0730-0800')
array.set(timeframes_options,16, input(defval='None', options=['Long','Short','None'], title='0800-0830'))
array.set(timeframes,17,'0800-0830')
array.set(timeframes_options,17, input(defval='None', options=['Long','Short','None'], title='0830-0900'))
array.set(timeframes,18,'0830-0900')
array.set(timeframes_options,18, input(defval='None', options=['Long','Short','None'], title='0900-0930'))
array.set(timeframes,19,'0900-0930')
array.set(timeframes_options,19, input(defval='None', options=['Long','Short','None'], title='0930-1000'))
array.set(timeframes,20,'0930-1000')
array.set(timeframes_options,20, input(defval='None', options=['Long','Short','None'], title='1000-1030'))
array.set(timeframes,21,'1000-1030')
array.set(timeframes_options,21, input(defval='None', options=['Long','Short','None'], title='1030-1100'))
array.set(timeframes,22,'1030-1100')
array.set(timeframes_options,22, input(defval='None', options=['Long','Short','None'], title='1100-1130'))
array.set(timeframes,23,'1100-1130')
array.set(timeframes_options,23, input(defval='None', options=['Long','Short','None'], title='1130-1200'))
array.set(timeframes,24,'1130-1200')
array.set(timeframes_options,24, input(defval='None', options=['Long','Short','None'], title='1200-1230'))
array.set(timeframes,25,'1200-1230')
array.set(timeframes_options,25, input(defval='None', options=['Long','Short','None'], title='1230-1300'))
array.set(timeframes,26,'1230-1300')
array.set(timeframes_options,26, input(defval='None', options=['Long','Short','None'], title='1300-1330'))
array.set(timeframes,27,'1300-1330')
array.set(timeframes_options,27, input(defval='None', options=['Long','Short','None'], title='1330-1400'))
array.set(timeframes,28,'1330-1400')
array.set(timeframes_options,28, input(defval='None', options=['Long','Short','None'], title='1400-1430'))
array.set(timeframes,29,'1400-1430')
array.set(timeframes_options,29, input(defval='None', options=['Long','Short','None'], title='1430-1500'))
array.set(timeframes,30,'1430-1500')
array.set(timeframes_options,30, input(defval='None', options=['Long','Short','None'], title='1500-1530'))
array.set(timeframes,31,'1500-1530')
array.set(timeframes_options,31, input(defval='None', options=['Long','Short','None'], title='1530-1600'))
array.set(timeframes,32,'1530-1600')
array.set(timeframes_options,32, input(defval='None', options=['Long','Short','None'], title='1600-1630'))
array.set(timeframes,33,'1600-1630')
array.set(timeframes_options,33, input(defval='None', options=['Long','Short','None'], title='1630-1700'))
array.set(timeframes,34,'1630-1700')
array.set(timeframes_options,34, input(defval='None', options=['Long','Short','None'], title='1700-1730'))
array.set(timeframes,35,'1700-1730')
array.set(timeframes_options,35, input(defval='None', options=['Long','Short','None'], title='1730-1800'))
array.set(timeframes,36,'1730-1800')
array.set(timeframes_options,36, input(defval='None', options=['Long','Short','None'], title='1800-1830'))
array.set(timeframes,37,'1800-1830')
array.set(timeframes_options,37, input(defval='None', options=['Long','Short','None'], title='1830-1900'))
array.set(timeframes,38,'1830-1900')
array.set(timeframes_options,38, input(defval='None', options=['Long','Short','None'], title='1900-0930'))
array.set(timeframes,39,'1900-0930')
array.set(timeframes_options,39, input(defval='None', options=['Long','Short','None'], title='1930-2000'))
array.set(timeframes,40,'1930-2000')
array.set(timeframes_options,40, input(defval='None', options=['Long','Short','None'], title='2000-2030'))
array.set(timeframes,41,'2000-2030')
array.set(timeframes_options,41, input(defval='None', options=['Long','Short','None'], title='2030-2100'))
array.set(timeframes,42,'2030-2100')
array.set(timeframes_options,42, input(defval='None', options=['Long','Short','None'], title='2100-2130'))
array.set(timeframes,43,'2100-2130')
array.set(timeframes_options,43, input(defval='None', options=['Long','Short','None'], title='2130-2200'))
array.set(timeframes,44,'2130-2200')
array.set(timeframes_options,44, input(defval='None', options=['Long','Short','None'], title='2200-2230'))
array.set(timeframes,45,'2200-2230')
array.set(timeframes_options,45, input(defval='None', options=['Long','Short','None'], title='2230-2300'))
array.set(timeframes,46,'2230-2300')
array.set(timeframes_options,46, input(defval='None', options=['Long','Short','None'], title='2300-2330'))
array.set(timeframes,47,'2300-2330')
array.set(timeframes_options,47, input(defval='None', options=['Long','Short','None'], title='2330-0000'))


string_hour = hour<10?'0'+tostring(hour):tostring(hour)
string_minute = minute<10?'0'+tostring(minute):tostring(minute)
current_time = string_hour+string_minute


f_strLeft(_str, _n) =>
    string[] _chars = str.split(_str, "")
    int _len = array.size(_chars)
    int _end = min(_len, max(0, _n))
    string[] _substr = array.new_string(0)
    if _end <= _len
        _substr := array.slice(_chars, 0, _end)
    string _return = array.join(_substr, "")

f_strRight(_str, _n) =>
    string[] _chars = str.split(_str, "")
    int _len = array.size(_chars)
    int _beg = max(0, _len - _n)
    string[] _substr = array.new_string(0)
    if _beg < _len
        _substr := array.slice(_chars, _beg, _len)
    string _return = array.join(_substr, "")


for i = 0 to array.size(timeframes) - 1
    start_time = f_strLeft(array.get(timeframes, i), 4)
    end_time = f_strRight(array.get(timeframes, i), 4)
    
    if current_time == end_time and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==47?0:i+1) and timestamp(toyear, tomonth, today, 00, 00)
        strategy.close_all()

    if current_time == start_time and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?47:i-1)
        if array.get(timeframes_options, i) == 'Long'
            strategy.entry("Long", strategy.long, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
        else if array.get(timeframes_options, i) == 'Short'
            strategy.entry("Short", strategy.short, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))


더 많은