Strategi Perdagangan Daya Kerangka Waktu
Timeframe Power Trading Strategy adalah strategi yang memanfaatkan pola tren harga saham selama rentang waktu yang berbeda dalam sehari.
Logika inti dari strategi ini adalah bahwa harga saham cenderung menunjukkan pola tertentu selama periode yang berbeda dalam sehari. Strategi menetapkan 48 kerangka waktu setengah jam sepanjang hari dan menentukan apakah untuk pergi panjang, pergi pendek atau tidak melakukan apa-apa selama setiap kerangka waktu. Ketika waktu memasuki kerangka waktu tertentu, jika pengaturan adalah
Misalnya, jika jangka waktu 6:30am - 7:00am ditetapkan menjadi
Keuntungan dari strategi ini terletak pada kemampuannya untuk memanfaatkan perubahan harga intraday saham.
Keuntungan terbesar dari strategi ini adalah bahwa ia memanfaatkan atribut
Keuntungan lain adalah fleksibilitas konfigurasi parameter. set parameter optimal dapat digunakan untuk saham yang berbeda untuk mengimbangi ketidakpastian.
Risiko utama berasal dari ketidakstabilan asumsi - jika pola harga intraday berubah secara substansial untuk saham, ekspektasi profitabilitas strategi akan terpengaruh.
Selain itu, frekuensi perdagangan yang tinggi menimbulkan risiko dalam hal biaya transaksi. Tanpa volume perdagangan yang cukup, akumulasi biaya dapat mengikis hasil akhir.
Pertimbangkan untuk memperkenalkan model pembelajaran mesin untuk memungkinkan penyesuaian parameter secara dinamis - misalnya model LSTM untuk memprediksi harga periode berikutnya dan menyesuaikan pengaturan panjang/pendek sesuai.
Sebagai alternatif, menggabungkan fundamental saham untuk mengukur kemungkinan perubahan pola, untuk menentukan waktu optimal untuk aktivasi strategi.
Strategi Timeframe Power Trading menghasilkan alpha dengan mengidentifikasi operasi intraday optimal selama periode yang berbeda saat menganalisis pola harga yang berulang. Dengan penyesuaian parameter yang fleksibel dan kontrol risiko, ini adalah strategi perdagangan algo yang efisien.
/*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)))