
시간대 파워 바이딩 전략은 주가가 하루의 다른 시간대에서 가격의 움직임을 이용하는 전략이다. 그것은 하루의 48시간 반 시간대에서 최적의 상장 시기를 판단한다.
이 전략의 핵심 논리는, 주식은 하루의 다른 시간대에, 그것의 가격 움직임이 규칙적으로 따라 할 수 있다는 것입니다. 전략은 48시간 반의 시간대를 설정하여, 각 시간대에 대가, 공백 또는 무작위 3가지의 선택을 판단합니다. 시간이 특정 시간대에 들어서면, 설정이 많으면, 더 많이 입장을 열고, 설정이 빈다면, 포지션을 열고 공백합니다. 구역이 끝나면, 다음 시간대의 동작 유형을 조사합니다.
예를 들어, 6시 30분에서 7시 사이에 더 많은 것을 설정하면, 전략은 6시 30분에 더 많은 것을 열고, 7시에서 7시 30분 사이에 공백으로 설정하면, 7시 전에 전략은 이전 다수를 평행하고, 7시에 공백을 열고 있다.
이 전략의 장점은 주가가 하루 동안 변하는 법칙을 포착할 수 있다는 것이다. 위험은, 가격 변동 법칙이 시간이 지남에 따라 변할 수 있다는 것이며, 이로 인해 전략이 실패할 수 있다는 것이다.
이 전략의 가장 큰 장점은 주식의 가격이 옳다는 특성을 이용한다는 것입니다. 즉, 가격은 다른 시간대에 다른 평균과 차원을 가지고 있습니다. 이것은 전략이 큰 변동이있는 시간에 범위 거래 전략을 채택하고, 낮은 변동이있는 시간에 트렌드 전략을 채택하여 시장 변화에 유연하게 대응 할 수있게합니다.
또 다른 장점은 변수 설정의 유연성이다. 상이한 주식의 특성에 따라 최적의 변수 조합을 선택할 수 있으며, 부분적인 불확실성 위험을 보호한다.
주요 위험은 가설의 불안정성에서 나온다. 주식 가격의 하루 내 변화 규칙이 변하면 전략의 수익 기대가 영향을 받는다. 이러한 변화는 주식의 기본 요소에서 비롯될 수도 있고, 큰 환경의 블랙 스 사건에서 비롯될 수도 있다.
또한, 너무 자주 거래하는 것은 거래 비용의 위험을 초래할 수 있습니다. 충분한 거래량이 뒷받침되지 않으면 거래 비용의 축적은 최종 수익에도 영향을 미칠 수 있습니다.
기계 학습 모델을 도입하여 변수를 동적으로 조정하는 것을 고려할 수 있습니다. 예를 들어, LSTM 모델을 훈련하여 다음 시간 간격의 주가 가격을 예측하고 이에 따라 더 많은 공백을 만드는 변수를 조정합니다.
또는, 주식과 결합된 기본 지표를 사용해 가격변동의 법칙이 변할 가능성을 판단하여 전략을 시작할 때를 결정할 수 있다.
시간대 파워 바이딩 전략은 주가가 하루 동안의 가격 변화를 분석하여, 다른 시간대에서 최적의 동작을 취하여 알파를 얻기 위한 것이다. 이것은 파라미터를 조절하는 유연하고, 위험을 제어할 수 있는 고효율 알고리즘 거래 전략이다. 미래 최적화 방향은 기계 학습 모델을 도입하는 것을 고려할 수 있다. 또는 기본 판단과 결합하여, 전략의 수익 공간을 더 넓히고, 위험 저항력을 더 강화할 수 있다.
/*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)))