genTid.mjs

import join from 'lodash-es/join.js'
import cont from './cont.mjs'


/**
 * 產生策略種類識別碼tid
 *
 * 以cont.dlmSeps串接mode與各key為識別字串,再進行縮寫替換以縮短長度
 * 縮寫替換依序為: 剔除`${coin}_`、剔除`${interval}_`、'price_'轉'p_'、'index_'轉'i_'、'Ohlc_'轉'o_'、'Close_'轉'c_'、'Volumn_'轉'v_'
 * 因替換係以`${coin}_`與`${interval}_`為樣式,故coin與interval須給予有效字串,否則將剔除全部底線
 * tid僅由mode與keys決定,未含各key之門檻條件,故同組keys之各門檻組合皆對應同一tid
 *
 * Unit Test: {@link https://github.com/yuda-lyu/w-trade-solve/blob/master/test/unit-genTid.test.mjs Github}
 * @function
 * @param {String} coin 輸入幣種名稱字串,例如'btc'
 * @param {String} interval 輸入K線週期字串,例如'4hr'
 * @param {String} mode 輸入交易方向字串,可選'long'或'short'
 * @param {Array} keys 輸入指標key字串陣列
 * @returns {String} 回傳策略種類識別碼tid字串
 * @example
 *
 * let tid = genTid('btc', '4hr', 'long', ['btc_price_4hr_ma_1day', 'btc_index_rsi_4hr'])
 * console.log(tid)
 * // => 'long ║ p_ma_1day ║ i_rsi_4hr'
 *
 */
let genTid = (coin, interval, mode, keys) => {
    let tid = join([mode, ...keys], cont.dlmSeps)
    tid = tid.replaceAll(`${coin}_`, '')
    tid = tid.replaceAll(`${interval}_`, '')
    tid = tid.replaceAll(`price_`, 'p_')
    tid = tid.replaceAll(`index_`, 'i_')
    tid = tid.replaceAll(`Ohlc_`, 'o_')
    tid = tid.replaceAll(`Close_`, 'c_')
    tid = tid.replaceAll(`Volumn_`, 'v_')
    // console.log('tid', tid)
    return tid
}


export default genTid