w-trade-solve 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +9 -0
- package/.eslintignore +3 -0
- package/.eslintrc.js +55 -0
- package/.jsdoc +25 -0
- package/README.md +132 -0
- package/SECURITY.md +5 -0
- package/babel.config.js +16 -0
- package/dist/w-trade-solve.umd.js +19 -0
- package/dist/w-trade-solve.umd.js.map +1 -0
- package/docs/calcFitness.mjs.html +205 -0
- package/docs/calcLevelNumTrade.mjs.html +164 -0
- package/docs/cont.mjs.html +94 -0
- package/docs/estimComps.mjs.html +190 -0
- package/docs/estimFinder.mjs.html +197 -0
- package/docs/estimKeys.mjs.html +571 -0
- package/docs/estimPicks.mjs.html +200 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/genSid.mjs.html +125 -0
- package/docs/genStrategyFileName.mjs.html +131 -0
- package/docs/genTid.mjs.html +113 -0
- package/docs/global.html +4932 -0
- package/docs/index.html +84 -0
- package/docs/ott.mjs.html +137 -0
- package/docs/p2r.mjs.html +111 -0
- package/docs/readStrategies.mjs.html +203 -0
- package/docs/scripts/collapse.js +39 -0
- package/docs/scripts/commonNav.js +28 -0
- package/docs/scripts/linenumber.js +25 -0
- package/docs/scripts/nav.js +12 -0
- package/docs/scripts/polyfill.js +4 -0
- package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/scripts/prettify/lang-css.js +2 -0
- package/docs/scripts/prettify/prettify.js +28 -0
- package/docs/scripts/search.js +99 -0
- package/docs/styles/jsdoc.css +776 -0
- package/docs/styles/prettify.css +80 -0
- package/g.mjs +110 -0
- package/package.json +31 -0
- package/script.txt +19 -0
- package/src/WTradeSolve.mjs +29 -0
- package/src/calcFitness.mjs +133 -0
- package/src/calcLevelNumTrade.mjs +92 -0
- package/src/cont.mjs +22 -0
- package/src/estimComps.mjs +118 -0
- package/src/estimFinder.mjs +125 -0
- package/src/estimKeys.mjs +499 -0
- package/src/estimPicks.mjs +128 -0
- package/src/genSid.mjs +53 -0
- package/src/genStrategyFileName.mjs +59 -0
- package/src/genTid.mjs +41 -0
- package/src/ott.mjs +65 -0
- package/src/p2r.mjs +39 -0
- package/src/readStrategies.mjs +131 -0
- package/test/unit-WTradeSolve.test.mjs +83 -0
- package/test/unit-calcFitness.test.mjs +121 -0
- package/test/unit-calcLevelNumTrade.test.mjs +80 -0
- package/test/unit-estimComps.test.mjs +193 -0
- package/test/unit-estimFinder.test.mjs +184 -0
- package/test/unit-estimKeys.test.mjs +260 -0
- package/test/unit-estimPicks.test.mjs +241 -0
- package/test/unit-genSid.test.mjs +75 -0
- package/test/unit-genStrategyFileName.test.mjs +85 -0
- package/test/unit-genTid.test.mjs +72 -0
- package/test/unit-p2r.test.mjs +51 -0
- package/test/unit-readStrategies.test.mjs +258 -0
- package/test/unit-setup.mjs +119 -0
- package/toolg/addVersion.mjs +4 -0
- package/toolg/cleanFolder.mjs +5 -0
- package/toolg/gDistRollup.mjs +37 -0
- package/toolg/gDocsExams.mjs +48 -0
- package/toolg/modifyReadme.mjs +4 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<title>estimFinder.mjs - Documentation</title>
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
<script src="scripts/prettify/prettify.js"></script>
|
|
10
|
+
<script src="scripts/prettify/lang-css.js"></script>
|
|
11
|
+
<!--[if lt IE 9]>
|
|
12
|
+
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
13
|
+
<![endif]-->
|
|
14
|
+
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
|
|
15
|
+
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
|
|
16
|
+
<script src="scripts/nav.js" defer></script>
|
|
17
|
+
|
|
18
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
|
|
22
|
+
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
|
|
23
|
+
<label for="nav-trigger" class="navicon-button x">
|
|
24
|
+
<div class="navicon"></div>
|
|
25
|
+
</label>
|
|
26
|
+
|
|
27
|
+
<label for="nav-trigger" class="overlay"></label>
|
|
28
|
+
|
|
29
|
+
<nav >
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#calcFitness">calcFitness</a></li><li><a href="global.html#calcLevelNumTrade">calcLevelNumTrade</a></li><li><a href="global.html#cont">cont</a></li><li><a href="global.html#estimComps">estimComps</a></li><li><a href="global.html#estimFinder">estimFinder</a></li><li><a href="global.html#estimKeys">estimKeys</a></li><li><a href="global.html#estimPicks">estimPicks</a></li><li><a href="global.html#genSid">genSid</a></li><li><a href="global.html#genStrategyFileName">genStrategyFileName</a></li><li><a href="global.html#genTid">genTid</a></li><li><a href="global.html#nowTpeStr">nowTpeStr</a></li><li><a href="global.html#nowTpeStrp">nowTpeStrp</a></li><li><a href="global.html#ott">ott</a></li><li><a href="global.html#p2r">p2r</a></li><li><a href="global.html#readStrategies">readStrategies</a></li></ul>
|
|
33
|
+
|
|
34
|
+
</nav>
|
|
35
|
+
|
|
36
|
+
<div id="main">
|
|
37
|
+
|
|
38
|
+
<h1 class="page-title">estimFinder.mjs</h1>
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<section>
|
|
47
|
+
<article>
|
|
48
|
+
<pre class="prettyprint source linenums"><code>import get from 'lodash-es/get.js'
|
|
49
|
+
import sample from 'lodash-es/sample.js'
|
|
50
|
+
import isestr from 'wsemi/src/isestr.mjs'
|
|
51
|
+
import estimComps from './estimComps.mjs'
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* 以隨機之交易方向與指標組成求解最佳策略
|
|
56
|
+
*
|
|
57
|
+
* 供批次探索用之進入點,未指定時mode由'long'與'short'隨機取一,comps由18種預設組成隨機取一,故重複呼叫即可隨機探索各種策略
|
|
58
|
+
* 未指定時timeStart預設為'2022-07-01T00:00:00',timeEnd則依mode給予不同值: 做多為'2025-04-08T00:00:00'(須涵蓋暴跌數據),做空為'2025-10-06T00:00:00'(須涵蓋暴漲數據),藉此提高率定難度
|
|
59
|
+
* fdOhlc、fdParam與fdData無效時throw
|
|
60
|
+
*
|
|
61
|
+
* Unit Test: {@link https://github.com/yuda-lyu/w-trade-solve/blob/master/test/unit-estimFinder.test.mjs Github}
|
|
62
|
+
* @function
|
|
63
|
+
* @param {Function} ott 輸入時區時間函數,傳入時間字串回傳dayjs時間物件,可用src/ott.mjs
|
|
64
|
+
* @param {Object} st 輸入設定物件,需可由opt.keySettings取得name、symbol與interval欄位
|
|
65
|
+
* @param {String} fdOhlc 輸入儲存K線(ohlc)序列資料夾字串
|
|
66
|
+
* @param {String} fdParam 輸入儲存指標參數序列資料夾字串
|
|
67
|
+
* @param {String} fdData 輸入儲存策略資料夾字串,不存在時自動建立
|
|
68
|
+
* @param {Object} [opt={}] 輸入設定物件,預設{},全部欄位皆傳遞至estimComps
|
|
69
|
+
* @param {String} [opt.mode=''] 輸入交易方向字串,可選'long'或'short',未給予時隨機取一,預設''
|
|
70
|
+
* @param {String} [opt.timeStart='2022-07-01T00:00:00'] 輸入回測起始時間字串,預設'2022-07-01T00:00:00'
|
|
71
|
+
* @param {String} [opt.timeEnd=''] 輸入回測結束時間字串,未給予時做多為'2025-04-08T00:00:00'、做空為'2025-10-06T00:00:00',預設''
|
|
72
|
+
* @param {String} [opt.comps=''] 輸入指標組成字串,例如'2,1,0',未給予時由18種預設組成隨機取一,預設''
|
|
73
|
+
* @returns {Promise} 回傳Promise,resolve為undefined
|
|
74
|
+
* @example
|
|
75
|
+
*
|
|
76
|
+
* import ott from './src/ott.mjs'
|
|
77
|
+
*
|
|
78
|
+
* let st = {
|
|
79
|
+
* btc4hr: { name: 'btc', symbol: 'BTCUSDT', interval: '4hr' },
|
|
80
|
+
* }
|
|
81
|
+
*
|
|
82
|
+
* //mode與comps皆隨機, 適合以迴圈重複呼叫批次探索
|
|
83
|
+
* await estimFinder(ott, st, './data/ohlc', './data/param', './data/strategy', {
|
|
84
|
+
* keySettings: 'btc4hr',
|
|
85
|
+
* })
|
|
86
|
+
*
|
|
87
|
+
*/
|
|
88
|
+
let estimFinder = async (ott, st, fdOhlc, fdParam, fdData, opt = {}) => {
|
|
89
|
+
|
|
90
|
+
if (!isestr(fdOhlc)) {
|
|
91
|
+
throw new Error(`invalid fdOhlc[${fdOhlc}]`)
|
|
92
|
+
}
|
|
93
|
+
if (!isestr(fdParam)) {
|
|
94
|
+
throw new Error(`invalid fdParam[${fdParam}]`)
|
|
95
|
+
}
|
|
96
|
+
if (!isestr(fdData)) {
|
|
97
|
+
throw new Error(`invalid fdData[${fdData}]`)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
let useMode = get(opt, 'mode', null)
|
|
101
|
+
let useTimeStart = get(opt, 'timeStart', null)
|
|
102
|
+
let useTimeEnd = get(opt, 'timeEnd', null)
|
|
103
|
+
let uesComps = get(opt, 'comps', null)
|
|
104
|
+
|
|
105
|
+
//mode
|
|
106
|
+
let mode = ''
|
|
107
|
+
if (isestr(useMode)) {
|
|
108
|
+
mode = useMode
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
mode = Math.random() < 0.5 ? `long` : `short`
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
//timeStart
|
|
115
|
+
let timeStart = '2022-07-01T00:00:00'
|
|
116
|
+
if (isestr(useTimeStart)) {
|
|
117
|
+
timeStart = useTimeStart
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
//timeEnd
|
|
121
|
+
let timeEnd = ''
|
|
122
|
+
if (isestr(useTimeEnd)) {
|
|
123
|
+
timeEnd = useTimeEnd
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
if (mode === 'long') {
|
|
127
|
+
timeEnd = '2025-04-08T00:00:00' //做多策略須使用至4/8暴跌數據, 提高難度 [tag:提高率定難度]
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
timeEnd = '2025-10-06T00:00:00' //做空策略須使用至10/6暴漲數據, 增加難度 [tag:提高率定難度]
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
//comps
|
|
135
|
+
let compsAll = [
|
|
136
|
+
|
|
137
|
+
'2,0,0',
|
|
138
|
+
'3,0,0',
|
|
139
|
+
'4,0,0',
|
|
140
|
+
'2,1,0',
|
|
141
|
+
'3,1,0',
|
|
142
|
+
'4,1,0',
|
|
143
|
+
'2,2,0',
|
|
144
|
+
'3,2,0',
|
|
145
|
+
'4,2,0',
|
|
146
|
+
|
|
147
|
+
'2,0,1',
|
|
148
|
+
'3,0,1',
|
|
149
|
+
'4,0,1',
|
|
150
|
+
'2,1,1',
|
|
151
|
+
'3,1,1',
|
|
152
|
+
'4,1,1',
|
|
153
|
+
'2,2,1',
|
|
154
|
+
'3,2,1',
|
|
155
|
+
'4,2,1',
|
|
156
|
+
|
|
157
|
+
]
|
|
158
|
+
let comps = ''
|
|
159
|
+
if (isestr(uesComps)) {
|
|
160
|
+
comps = uesComps
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
comps = sample(compsAll) //例如comps='2,1,0', 此為挑2種norm, 1種index, 0種volumn
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
//estimComps
|
|
167
|
+
await estimComps(ott, st, fdOhlc, fdParam, timeStart, timeEnd, mode, comps, fdData, opt)
|
|
168
|
+
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
export default estimFinder
|
|
173
|
+
</code></pre>
|
|
174
|
+
</article>
|
|
175
|
+
</section>
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
<br class="clear">
|
|
185
|
+
|
|
186
|
+
<footer>
|
|
187
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Aug 04 2026 23:21:49 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
188
|
+
</footer>
|
|
189
|
+
|
|
190
|
+
<script>prettyPrint();</script>
|
|
191
|
+
<script src="scripts/polyfill.js"></script>
|
|
192
|
+
<script src="scripts/linenumber.js"></script>
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
</body>
|
|
197
|
+
</html>
|