Strategi Perdagangan Kuasa Jangka Masa
Strategi Perdagangan Kuasa Tempoh adalah strategi yang menggunakan corak trend harga saham semasa jangka masa yang berbeza dalam sehari. Ia bertujuan untuk mengenal pasti peluang panjang atau pendek yang optimum di 48 jangka masa setengah jam dalam sehari.
Logik teras strategi ini adalah bahawa harga saham cenderung menunjukkan corak tertentu pada tempoh yang berbeza dalam sehari. Strategi menetapkan 48 bingkai masa setengah jam sepanjang hari dan menentukan sama ada untuk pergi panjang, pergi pendek atau tidak melakukan apa-apa semasa setiap bingkai masa. Apabila masa memasuki bingkai masa tertentu, jika tetapan adalah
Sebagai contoh, jika jangka masa 6:30am - 7:00am ditetapkan kepada
Kelebihan strategi ini terletak pada keupayaannya untuk memanfaatkan perubahan harga saham intraday. Risiko adalah bahawa corak tersebut boleh berubah dari masa ke masa dan menjadikan strategi tidak berkesan.
Kelebihan terbesar strategi ini adalah bahawa ia menggunakan atribut
Satu lagi kelebihan adalah fleksibiliti konfigurasi parameter. set parameter yang optimum boleh digunakan untuk stok yang berbeza untuk mengimbangi ketidakpastian.
Risiko utama berasal dari ketidakstabilan andaian - jika corak harga intraday berubah secara besar-besaran untuk saham, jangkaan keuntungan strategi akan terjejas.
Selain itu, kekerapan dagangan yang tinggi menimbulkan risiko dari segi kos transaksi. Tanpa jumlah dagangan yang mencukupi, akumulasi yuran boleh mengikis pulangan akhir.
Pertimbangkan untuk memperkenalkan model pembelajaran mesin untuk membolehkan penyesuaian dinamik parameter - contohnya model LSTM untuk meramalkan harga tempoh seterusnya dan menyesuaikan tetapan panjang / pendek dengan sewajarnya.
Sebagai alternatif, menggabungkan asas saham untuk mengukur kebarangkalian perubahan corak, untuk menentukan masa optimum untuk pengaktifan strategi.
Strategi Perdagangan Kuasa Jangka Masa menjana alpha dengan mengenal pasti operasi intraday yang optimum dalam tempoh yang berbeza semasa menganalisis corak harga berulang. Dengan penyesuaian parameter yang fleksibel dan kawalan risiko, ia adalah strategi perdagangan algo yang cekap. Jalan pengoptimuman masa depan melibatkan penggunaan ML atau combo asas untuk memperluaskan keuntungan dan meningkatkan ketahanan terhadap ketidakpastian.
/*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)))