from __future__ import annotations

from xfintech.data.common.paginate import Paginate
from xfintech.fabric.column.info import ColumnInfo
from xfintech.fabric.column.kind import ColumnKind
from xfintech.fabric.table.info import TableInfo

PROVIDER = "tushare"
SOURCE_NAME = "stk_factor_pro"
URL = "https://tushare.pro/document/2?doc_id=328"
ARGS = {
    "ts_code": {
        "type": ColumnKind.STRING,
        "required": "N",
        "desc": "股票代码(支持多个股票同时提取, 逗号分隔)",
    },
    "trade_date": {
        "type": ColumnKind.STRING,
        "required": "N",
        "desc": "交易日期(YYYYMMDD)",
    },
    "start_date": {
        "type": ColumnKind.STRING,
        "required": "N",
        "desc": "开始日期(YYYYMMDD)",
    },
    "end_date": {
        "type": ColumnKind.STRING,
        "required": "N",
        "desc": "结束日期(YYYYMMDD)",
    },
}
_IN_QFQ_COLS = [
    ColumnInfo(name="high_qfq", kind=ColumnKind.FLOAT, desc="最高价(前复权)"),
    ColumnInfo(name="open_qfq", kind=ColumnKind.FLOAT, desc="开盘价(前复权)"),
    ColumnInfo(name="low_qfq", kind=ColumnKind.FLOAT, desc="最低价(前复权)"),
    ColumnInfo(name="close_qfq", kind=ColumnKind.FLOAT, desc="收盘价(前复权)"),
    ColumnInfo(name="asi_qfq", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="asit_qfq", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="atr_qfq", kind=ColumnKind.FLOAT, desc="真实波动N日平均值-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="bbi_qfq", kind=ColumnKind.FLOAT, desc="BBI多空指标-CLOSE,M1=3,M2=6,M3=12,M4=22"),
    ColumnInfo(name="bias1_qfq", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="bias2_qfq", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="bias3_qfq", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="boll_lower_qfq", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="boll_mid_qfq", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="boll_upper_qfq", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="brar_ar_qfq", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="brar_br_qfq", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="cci_qfq", kind=ColumnKind.FLOAT, desc="顺势指标又叫CCI指标-CLOSE,HIGH,LOW,N=14"),
    ColumnInfo(name="cr_qfq", kind=ColumnKind.FLOAT, desc="CR价格动量指标-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="dfma_dif_qfq", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="dfma_difma_qfq", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="dmi_adx_qfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_adxr_qfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_mdi_qfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_pdi_qfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dpo_qfq", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="madpo_qfq", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="ema_qfq_10", kind=ColumnKind.FLOAT, desc="指数移动平均-N=10"),
    ColumnInfo(name="ema_qfq_20", kind=ColumnKind.FLOAT, desc="指数移动平均-N=20"),
    ColumnInfo(name="ema_qfq_250", kind=ColumnKind.FLOAT, desc="指数移动平均-N=250"),
    ColumnInfo(name="ema_qfq_30", kind=ColumnKind.FLOAT, desc="指数移动平均-N=30"),
    ColumnInfo(name="ema_qfq_5", kind=ColumnKind.FLOAT, desc="指数移动平均-N=5"),
    ColumnInfo(name="ema_qfq_60", kind=ColumnKind.FLOAT, desc="指数移动平均-N=60"),
    ColumnInfo(name="ema_qfq_90", kind=ColumnKind.FLOAT, desc="指数移动平均-N=90"),
    ColumnInfo(name="emv_qfq", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="maemv_qfq", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="expma_12_qfq", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="expma_50_qfq", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="kdj_qfq", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="kdj_d_qfq", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="kdj_k_qfq", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="ktn_down_qfq", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ktn_mid_qfq", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ktn_upper_qfq", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ma_qfq_10", kind=ColumnKind.FLOAT, desc="简单移动平均-N=10"),
    ColumnInfo(name="ma_qfq_20", kind=ColumnKind.FLOAT, desc="简单移动平均-N=20"),
    ColumnInfo(name="ma_qfq_250", kind=ColumnKind.FLOAT, desc="简单移动平均-N=250"),
    ColumnInfo(name="ma_qfq_30", kind=ColumnKind.FLOAT, desc="简单移动平均-N=30"),
    ColumnInfo(name="ma_qfq_5", kind=ColumnKind.FLOAT, desc="简单移动平均-N=5"),
    ColumnInfo(name="ma_qfq_60", kind=ColumnKind.FLOAT, desc="简单移动平均-N=60"),
    ColumnInfo(name="ma_qfq_90", kind=ColumnKind.FLOAT, desc="简单移动平均-N=90"),
    ColumnInfo(name="macd_qfq", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="macd_dea_qfq", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="macd_dif_qfq", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="mass_qfq", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="ma_mass_qfq", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="mfi_qfq", kind=ColumnKind.FLOAT, desc="MFI指标是成交量的RSI指标-CLOSE,HIGH,LOW,VOL,N=14"),
    ColumnInfo(name="mtm_qfq", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="mtmma_qfq", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="obv_qfq", kind=ColumnKind.FLOAT, desc="能量潮指标-CLOSE,VOL"),
    ColumnInfo(name="psy_qfq", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="psyma_qfq", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="roc_qfq", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="maroc_qfq", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="rsi_qfq_12", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=12"),
    ColumnInfo(name="rsi_qfq_24", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=24"),
    ColumnInfo(name="rsi_qfq_6", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=6"),
    ColumnInfo(name="taq_down_qfq", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="taq_mid_qfq", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="taq_up_qfq", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="trix_qfq", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="trma_qfq", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="vr_qfq", kind=ColumnKind.FLOAT, desc="VR容量比率-CLOSE,VOL,M1=26"),
    ColumnInfo(name="wr_qfq", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="wr1_qfq", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="xsii_td1_qfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td2_qfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td3_qfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td4_qfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
]
_IN_HFQ_COLS = [
    ColumnInfo(name="high_hfq", kind=ColumnKind.FLOAT, desc="最高价(后复权)"),
    ColumnInfo(name="open_hfq", kind=ColumnKind.FLOAT, desc="开盘价(后复权)"),
    ColumnInfo(name="low_hfq", kind=ColumnKind.FLOAT, desc="最低价(后复权)"),
    ColumnInfo(name="close_hfq", kind=ColumnKind.FLOAT, desc="收盘价(后复权)"),
    ColumnInfo(name="asi_hfq", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="asit_hfq", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="atr_hfq", kind=ColumnKind.FLOAT, desc="真实波动N日平均值-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="bbi_hfq", kind=ColumnKind.FLOAT, desc="BBI多空指标-CLOSE,M1=3,M2=6,M3=12,M4=21"),
    ColumnInfo(name="bias1_hfq", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="bias2_hfq", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="bias3_hfq", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="boll_lower_hfq", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="boll_mid_hfq", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="boll_upper_hfq", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="brar_ar_hfq", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="brar_br_hfq", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="cci_hfq", kind=ColumnKind.FLOAT, desc="顺势指标又叫CCI指标-CLOSE,HIGH,LOW,N=14"),
    ColumnInfo(name="cr_hfq", kind=ColumnKind.FLOAT, desc="CR价格动量指标-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="dfma_dif_hfq", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="dfma_difma_hfq", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="dmi_adx_hfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_adxr_hfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_mdi_hfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_pdi_hfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dpo_hfq", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="madpo_hfq", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="ema_hfq_10", kind=ColumnKind.FLOAT, desc="指数移动平均-N=10"),
    ColumnInfo(name="ema_hfq_20", kind=ColumnKind.FLOAT, desc="指数移动平均-N=20"),
    ColumnInfo(name="ema_hfq_250", kind=ColumnKind.FLOAT, desc="指数移动平均-N=250"),
    ColumnInfo(name="ema_hfq_30", kind=ColumnKind.FLOAT, desc="指数移动平均-N=30"),
    ColumnInfo(name="ema_hfq_5", kind=ColumnKind.FLOAT, desc="指数移动平均-N=5"),
    ColumnInfo(name="ema_hfq_60", kind=ColumnKind.FLOAT, desc="指数移动平均-N=60"),
    ColumnInfo(name="ema_hfq_90", kind=ColumnKind.FLOAT, desc="指数移动平均-N=90"),
    ColumnInfo(name="emv_hfq", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="maemv_hfq", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="expma_12_hfq", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="expma_50_hfq", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="kdj_hfq", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="kdj_d_hfq", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="kdj_k_hfq", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="ktn_down_hfq", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ktn_mid_hfq", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ktn_upper_hfq", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ma_hfq_10", kind=ColumnKind.FLOAT, desc="简单移动平均-N=10"),
    ColumnInfo(name="ma_hfq_20", kind=ColumnKind.FLOAT, desc="简单移动平均-N=20"),
    ColumnInfo(name="ma_hfq_250", kind=ColumnKind.FLOAT, desc="简单移动平均-N=250"),
    ColumnInfo(name="ma_hfq_30", kind=ColumnKind.FLOAT, desc="简单移动平均-N=30"),
    ColumnInfo(name="ma_hfq_5", kind=ColumnKind.FLOAT, desc="简单移动平均-N=5"),
    ColumnInfo(name="ma_hfq_60", kind=ColumnKind.FLOAT, desc="简单移动平均-N=60"),
    ColumnInfo(name="ma_hfq_90", kind=ColumnKind.FLOAT, desc="简单移动平均-N=90"),
    ColumnInfo(name="macd_hfq", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="macd_dea_hfq", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="macd_dif_hfq", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="mass_hfq", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="ma_mass_hfq", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="mfi_hfq", kind=ColumnKind.FLOAT, desc="MFI指标是成交量的RSI指标-CLOSE,HIGH,LOW,VOL,N=14"),
    ColumnInfo(name="mtm_hfq", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="mtmma_hfq", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="obv_hfq", kind=ColumnKind.FLOAT, desc="能量潮指标-CLOSE,VOL"),
    ColumnInfo(name="psy_hfq", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="psyma_hfq", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="roc_hfq", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="maroc_hfq", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="rsi_hfq_12", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=12"),
    ColumnInfo(name="rsi_hfq_24", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=24"),
    ColumnInfo(name="rsi_hfq_6", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=6"),
    ColumnInfo(name="taq_down_hfq", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="taq_mid_hfq", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="taq_up_hfq", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="trix_hfq", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="trma_hfq", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="vr_hfq", kind=ColumnKind.FLOAT, desc="VR容量比率-CLOSE,VOL,M1=26"),
    ColumnInfo(name="wr_hfq", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="wr1_hfq", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="xsii_td1_hfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td2_hfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td3_hfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td4_hfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
]
_IN_BFQ_COLS = [
    ColumnInfo(name="open", kind=ColumnKind.FLOAT, desc="开盘价"),
    ColumnInfo(name="high", kind=ColumnKind.FLOAT, desc="最高价"),
    ColumnInfo(name="low", kind=ColumnKind.FLOAT, desc="最低价"),
    ColumnInfo(name="close", kind=ColumnKind.FLOAT, desc="收盘价"),
    ColumnInfo(name="asi_bfq", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="asit_bfq", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="atr_bfq", kind=ColumnKind.FLOAT, desc="真实波动N日平均值-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="bbi_bfq", kind=ColumnKind.FLOAT, desc="BBI多空指标-CLOSE,M1=3,M2=6,M3=12,M4=20"),
    ColumnInfo(name="bias1_bfq", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="bias2_bfq", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="bias3_bfq", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="boll_lower_bfq", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="boll_mid_bfq", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="boll_upper_bfq", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="brar_ar_bfq", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="brar_br_bfq", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="cci_bfq", kind=ColumnKind.FLOAT, desc="顺势指标又叫CCI指标-CLOSE,HIGH,LOW,N=14"),
    ColumnInfo(name="cr_bfq", kind=ColumnKind.FLOAT, desc="CR价格动量指标-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="dfma_dif_bfq", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="dfma_difma_bfq", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="dmi_adx_bfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_adxr_bfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_mdi_bfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_pdi_bfq", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dpo_bfq", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="madpo_bfq", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="ema_bfq_10", kind=ColumnKind.FLOAT, desc="指数移动平均-N=10"),
    ColumnInfo(name="ema_bfq_20", kind=ColumnKind.FLOAT, desc="指数移动平均-N=20"),
    ColumnInfo(name="ema_bfq_250", kind=ColumnKind.FLOAT, desc="指数移动平均-N=250"),
    ColumnInfo(name="ema_bfq_30", kind=ColumnKind.FLOAT, desc="指数移动平均-N=30"),
    ColumnInfo(name="ema_bfq_5", kind=ColumnKind.FLOAT, desc="指数移动平均-N=5"),
    ColumnInfo(name="ema_bfq_60", kind=ColumnKind.FLOAT, desc="指数移动平均-N=60"),
    ColumnInfo(name="ema_bfq_90", kind=ColumnKind.FLOAT, desc="指数移动平均-N=90"),
    ColumnInfo(name="emv_bfq", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="maemv_bfq", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="expma_12_bfq", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="expma_50_bfq", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="kdj_bfq", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="kdj_d_bfq", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="kdj_k_bfq", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="ktn_down_bfq", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ktn_mid_bfq", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ktn_upper_bfq", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ma_bfq_10", kind=ColumnKind.FLOAT, desc="简单移动平均-N=10"),
    ColumnInfo(name="ma_bfq_20", kind=ColumnKind.FLOAT, desc="简单移动平均-N=20"),
    ColumnInfo(name="ma_bfq_250", kind=ColumnKind.FLOAT, desc="简单移动平均-N=250"),
    ColumnInfo(name="ma_bfq_30", kind=ColumnKind.FLOAT, desc="简单移动平均-N=30"),
    ColumnInfo(name="ma_bfq_5", kind=ColumnKind.FLOAT, desc="简单移动平均-N=5"),
    ColumnInfo(name="ma_bfq_60", kind=ColumnKind.FLOAT, desc="简单移动平均-N=60"),
    ColumnInfo(name="ma_bfq_90", kind=ColumnKind.FLOAT, desc="简单移动平均-N=90"),
    ColumnInfo(name="macd_bfq", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="macd_dea_bfq", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="macd_dif_bfq", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="mass_bfq", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="ma_mass_bfq", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="mfi_bfq", kind=ColumnKind.FLOAT, desc="MFI指标是成交量的RSI指标-CLOSE,HIGH,LOW,VOL,N=14"),
    ColumnInfo(name="mtm_bfq", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="mtmma_bfq", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="obv_bfq", kind=ColumnKind.FLOAT, desc="能量潮指标-CLOSE,VOL"),
    ColumnInfo(name="psy_bfq", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="psyma_bfq", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="roc_bfq", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="maroc_bfq", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="rsi_bfq_12", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=12"),
    ColumnInfo(name="rsi_bfq_24", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=24"),
    ColumnInfo(name="rsi_bfq_6", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=6"),
    ColumnInfo(name="taq_down_bfq", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="taq_mid_bfq", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="taq_up_bfq", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="trix_bfq", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="trma_bfq", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="vr_bfq", kind=ColumnKind.FLOAT, desc="VR容量比率-CLOSE,VOL,M1=26"),
    ColumnInfo(name="wr_bfq", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="wr1_bfq", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="xsii_td1_bfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td2_bfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td3_bfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td4_bfq", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
]
_IN_MAIN_COLS = [
    ColumnInfo(name="ts_code", kind=ColumnKind.STRING, desc="股票代码"),
    ColumnInfo(name="trade_date", kind=ColumnKind.STRING, desc="交易日期"),
    ColumnInfo(name="change", kind=ColumnKind.FLOAT, desc="涨跌额"),
    ColumnInfo(name="pct_chg", kind=ColumnKind.FLOAT, desc="涨跌幅(未复权,如果是复权请用 通用行情接口)"),
    ColumnInfo(name="vol", kind=ColumnKind.FLOAT, desc="成交量(手)"),
    ColumnInfo(name="amount", kind=ColumnKind.FLOAT, desc="成交额(千元)"),
    ColumnInfo(name="turnover_rate", kind=ColumnKind.FLOAT, desc="换手率(%)"),
    ColumnInfo(name="turnover_rate_f", kind=ColumnKind.FLOAT, desc="换手率(自由流通股)"),
    ColumnInfo(name="volume_ratio", kind=ColumnKind.FLOAT, desc="量比"),
    ColumnInfo(name="pe", kind=ColumnKind.FLOAT, desc="市盈率(总市值/净利润,亏损的PE为空)"),
    ColumnInfo(name="pe_ttm", kind=ColumnKind.FLOAT, desc="市盈率(TTM,亏损的PE为空)"),
    ColumnInfo(name="pb", kind=ColumnKind.FLOAT, desc="市净率(总市值/净资产)"),
    ColumnInfo(name="ps", kind=ColumnKind.FLOAT, desc="市销率"),
    ColumnInfo(name="ps_ttm", kind=ColumnKind.FLOAT, desc="市销率(TTM)"),
    ColumnInfo(name="dv_ratio", kind=ColumnKind.FLOAT, desc="股息率(%)"),
    ColumnInfo(name="dv_ttm", kind=ColumnKind.FLOAT, desc="股息率(TTM)(%)"),
    ColumnInfo(name="total_share", kind=ColumnKind.FLOAT, desc="总股本(万股)"),
    ColumnInfo(name="float_share", kind=ColumnKind.FLOAT, desc="流通股本(万股)"),
    ColumnInfo(name="free_share", kind=ColumnKind.FLOAT, desc="自由流通股本(万)"),
    ColumnInfo(name="total_mv", kind=ColumnKind.FLOAT, desc="总市值(万元)"),
    ColumnInfo(name="circ_mv", kind=ColumnKind.FLOAT, desc="流通市值(万元)"),
    ColumnInfo(name="adj_factor", kind=ColumnKind.FLOAT, desc="复权因子"),
    ColumnInfo(name="downdays", kind=ColumnKind.FLOAT, desc="连跌天数"),
    ColumnInfo(name="updays", kind=ColumnKind.FLOAT, desc="连涨天数"),
    ColumnInfo(name="lowdays", kind=ColumnKind.FLOAT, desc="当前最低价是近多少周期内最低价的最小值"),
    ColumnInfo(name="topdays", kind=ColumnKind.FLOAT, desc="当前最高价是近多少周期内最高价的最大值"),
]

_OUT_FA_COLS = [
    ColumnInfo(name="fa_high", kind=ColumnKind.FLOAT, desc="最高价(前复权)"),
    ColumnInfo(name="fa_open", kind=ColumnKind.FLOAT, desc="开盘价(前复权)"),
    ColumnInfo(name="fa_low", kind=ColumnKind.FLOAT, desc="最低价(前复权)"),
    ColumnInfo(name="fa_close", kind=ColumnKind.FLOAT, desc="收盘价(前复权)"),
    ColumnInfo(name="fa_asi", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="fa_asit", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="fa_atr", kind=ColumnKind.FLOAT, desc="真实波动N日平均值-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="fa_bbi", kind=ColumnKind.FLOAT, desc="BBI多空指标-CLOSE,M1=3,M2=6,M3=12,M4=22"),
    ColumnInfo(name="fa_bias1", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="fa_bias2", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="fa_bias3", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="fa_boll_lower", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="fa_boll_mid", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="fa_boll_upper", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="fa_brar_ar", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="fa_brar_br", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="fa_cci", kind=ColumnKind.FLOAT, desc="顺势指标又叫CCI指标-CLOSE,HIGH,LOW,N=14"),
    ColumnInfo(name="fa_cr", kind=ColumnKind.FLOAT, desc="CR价格动量指标-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="fa_dfma_dif", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="fa_dfma_difma", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="fa_dmi_adx", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="fa_dmi_adxr", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="fa_dmi_mdi", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="fa_dmi_pdi", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="fa_dpo", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="fa_madpo", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="fa_ema_10", kind=ColumnKind.FLOAT, desc="指数移动平均-N=10"),
    ColumnInfo(name="fa_ema_20", kind=ColumnKind.FLOAT, desc="指数移动平均-N=20"),
    ColumnInfo(name="fa_ema_250", kind=ColumnKind.FLOAT, desc="指数移动平均-N=250"),
    ColumnInfo(name="fa_ema_30", kind=ColumnKind.FLOAT, desc="指数移动平均-N=30"),
    ColumnInfo(name="fa_ema_5", kind=ColumnKind.FLOAT, desc="指数移动平均-N=5"),
    ColumnInfo(name="fa_ema_60", kind=ColumnKind.FLOAT, desc="指数移动平均-N=60"),
    ColumnInfo(name="fa_ema_90", kind=ColumnKind.FLOAT, desc="指数移动平均-N=90"),
    ColumnInfo(name="fa_emv", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="fa_maemv", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="fa_expma_12", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="fa_expma_50", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="fa_kdj", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="fa_kdj_d", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="fa_kdj_k", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="fa_ktn_down", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="fa_ktn_mid", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="fa_ktn_upper", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="fa_ma_10", kind=ColumnKind.FLOAT, desc="简单移动平均-N=10"),
    ColumnInfo(name="fa_ma_20", kind=ColumnKind.FLOAT, desc="简单移动平均-N=20"),
    ColumnInfo(name="fa_ma_250", kind=ColumnKind.FLOAT, desc="简单移动平均-N=250"),
    ColumnInfo(name="fa_ma_30", kind=ColumnKind.FLOAT, desc="简单移动平均-N=30"),
    ColumnInfo(name="fa_ma_5", kind=ColumnKind.FLOAT, desc="简单移动平均-N=5"),
    ColumnInfo(name="fa_ma_60", kind=ColumnKind.FLOAT, desc="简单移动平均-N=60"),
    ColumnInfo(name="fa_ma_90", kind=ColumnKind.FLOAT, desc="简单移动平均-N=90"),
    ColumnInfo(name="fa_macd", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="fa_macd_dea", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="fa_macd_dif", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="fa_mass", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="fa_ma_mass", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="fa_mfi", kind=ColumnKind.FLOAT, desc="MFI指标是成交量的RSI指标-CLOSE,HIGH,LOW,VOL,N=14"),
    ColumnInfo(name="fa_mtm", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="fa_mtmma", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="fa_obv", kind=ColumnKind.FLOAT, desc="能量潮指标-CLOSE,VOL"),
    ColumnInfo(name="fa_psy", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="fa_psyma", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="fa_roc", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="fa_maroc", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="fa_rsi_12", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=12"),
    ColumnInfo(name="fa_rsi_24", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=24"),
    ColumnInfo(name="fa_rsi_6", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=6"),
    ColumnInfo(name="fa_taq_down", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="fa_taq_mid", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="fa_taq_up", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="fa_trix", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="fa_trma", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="fa_vr", kind=ColumnKind.FLOAT, desc="VR容量比率-CLOSE,VOL,M1=26"),
    ColumnInfo(name="fa_wr", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="fa_wr1", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="fa_xsii_td1", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="fa_xsii_td2", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="fa_xsii_td3", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="fa_xsii_td4", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
]
_OUT_BA_COLS = [
    ColumnInfo(name="ba_high", kind=ColumnKind.FLOAT, desc="最高价(后复权)"),
    ColumnInfo(name="ba_open", kind=ColumnKind.FLOAT, desc="开盘价(后复权)"),
    ColumnInfo(name="ba_low", kind=ColumnKind.FLOAT, desc="最低价(后复权)"),
    ColumnInfo(name="ba_close", kind=ColumnKind.FLOAT, desc="收盘价(后复权)"),
    ColumnInfo(name="ba_asi", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="ba_asit", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="ba_atr", kind=ColumnKind.FLOAT, desc="真实波动N日平均值-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="ba_bbi", kind=ColumnKind.FLOAT, desc="BBI多空指标-CLOSE,M1=3,M2=6,M3=12,M4=21"),
    ColumnInfo(name="ba_bias1", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="ba_bias2", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="ba_bias3", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="ba_boll_lower", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="ba_boll_mid", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="ba_boll_upper", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="ba_brar_ar", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="ba_brar_br", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="ba_cci", kind=ColumnKind.FLOAT, desc="顺势指标又叫CCI指标-CLOSE,HIGH,LOW,N=14"),
    ColumnInfo(name="ba_cr", kind=ColumnKind.FLOAT, desc="CR价格动量指标-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="ba_dfma_dif", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="ba_dfma_difma", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="ba_dmi_adx", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="ba_dmi_adxr", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="ba_dmi_mdi", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="ba_dmi_pdi", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="ba_dpo", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="ba_madpo", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="ba_ema_10", kind=ColumnKind.FLOAT, desc="指数移动平均-N=10"),
    ColumnInfo(name="ba_ema_20", kind=ColumnKind.FLOAT, desc="指数移动平均-N=20"),
    ColumnInfo(name="ba_ema_250", kind=ColumnKind.FLOAT, desc="指数移动平均-N=250"),
    ColumnInfo(name="ba_ema_30", kind=ColumnKind.FLOAT, desc="指数移动平均-N=30"),
    ColumnInfo(name="ba_ema_5", kind=ColumnKind.FLOAT, desc="指数移动平均-N=5"),
    ColumnInfo(name="ba_ema_60", kind=ColumnKind.FLOAT, desc="指数移动平均-N=60"),
    ColumnInfo(name="ba_ema_90", kind=ColumnKind.FLOAT, desc="指数移动平均-N=90"),
    ColumnInfo(name="ba_emv", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="ba_maemv", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="ba_expma_12", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="ba_expma_50", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="ba_kdj", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="ba_kdj_d", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="ba_kdj_k", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="ba_ktn_down", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ba_ktn_mid", kind=ColumnKind.FLOAT, desc="肯特纳通道,N=20,ATR=10-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ba_ktn_upper", kind=ColumnKind.FLOAT, desc="肯特纳通道N=20日,ATR=10日-CLOSE,HIGH,LOW,M=10"),
    ColumnInfo(name="ba_ma_10", kind=ColumnKind.FLOAT, desc="简单移动平均-N=10"),
    ColumnInfo(name="ba_ma_20", kind=ColumnKind.FLOAT, desc="简单移动平均-N=20"),
    ColumnInfo(name="ba_ma_250", kind=ColumnKind.FLOAT, desc="简单移动平均-N=250"),
    ColumnInfo(name="ba_ma_30", kind=ColumnKind.FLOAT, desc="简单移动平均-N=30"),
    ColumnInfo(name="ba_ma_5", kind=ColumnKind.FLOAT, desc="简单移动平均-N=5"),
    ColumnInfo(name="ba_ma_60", kind=ColumnKind.FLOAT, desc="简单移动平均-N=60"),
    ColumnInfo(name="ba_ma_90", kind=ColumnKind.FLOAT, desc="简单移动平均-N=90"),
    ColumnInfo(name="ba_macd", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="ba_macd_dea", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="ba_macd_dif", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="ba_mass", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="ba_ma_mass", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="ba_mfi", kind=ColumnKind.FLOAT, desc="MFI指标是成交量的RSI指标-CLOSE,HIGH,LOW,VOL,N=14"),
    ColumnInfo(name="ba_mtm", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="ba_mtmma", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="ba_obv", kind=ColumnKind.FLOAT, desc="能量潮指标-CLOSE,VOL"),
    ColumnInfo(name="ba_psy", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动的情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="ba_psyma", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动的情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="ba_roc", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="ba_maroc", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="ba_rsi_12", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=12"),
    ColumnInfo(name="ba_rsi_24", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=24"),
    ColumnInfo(name="ba_rsi_6", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=6"),
    ColumnInfo(name="ba_taq_down", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="ba_taq_mid", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="ba_taq_up", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="ba_trix", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="ba_trma", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="ba_vr", kind=ColumnKind.FLOAT, desc="VR容量比率-CLOSE,VOL,M1=26"),
    ColumnInfo(name="ba_wr", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="ba_wr1", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="ba_xsii_td1", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="ba_xsii_td2", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="ba_xsii_td3", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="ba_xsii_td4", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
]
_OUT_NA_COLS = [
    ColumnInfo(name="open", kind=ColumnKind.FLOAT, desc="开盘价"),
    ColumnInfo(name="high", kind=ColumnKind.FLOAT, desc="最高价"),
    ColumnInfo(name="low", kind=ColumnKind.FLOAT, desc="最低价"),
    ColumnInfo(name="close", kind=ColumnKind.FLOAT, desc="收盘价"),
    ColumnInfo(name="asi", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="asit", kind=ColumnKind.FLOAT, desc="振动升降指标-OPEN,CLOSE,HIGH,LOW,M1=26,M2=10"),
    ColumnInfo(name="atr", kind=ColumnKind.FLOAT, desc="真实波动N日平均值-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="bbi", kind=ColumnKind.FLOAT, desc="BBI多空指标-CLOSE,M1=3,M2=6,M3=12,M4=20"),
    ColumnInfo(name="bias1", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="bias2", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="bias3", kind=ColumnKind.FLOAT, desc="BIAS乖离率-CLOSE,L1=6,L2=12,L3=24"),
    ColumnInfo(name="boll_lower", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="boll_mid", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="boll_upper", kind=ColumnKind.FLOAT, desc="BOLL指标,布林带-CLOSE,N=20,P=2"),
    ColumnInfo(name="brar_ar", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="brar_br", kind=ColumnKind.FLOAT, desc="BRAR情绪指标-OPEN,CLOSE,HIGH,LOW,M1=26"),
    ColumnInfo(name="cci", kind=ColumnKind.FLOAT, desc="顺势指标又叫CCI指标-CLOSE,HIGH,LOW,N=14"),
    ColumnInfo(name="cr", kind=ColumnKind.FLOAT, desc="CR价格动量指标-CLOSE,HIGH,LOW,N=20"),
    ColumnInfo(name="dfma_dif", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="dfma_difma", kind=ColumnKind.FLOAT, desc="平行线差指标-CLOSE,N1=10,N2=50,M=10"),
    ColumnInfo(name="dmi_adx", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_adxr", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_mdi", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dmi_pdi", kind=ColumnKind.FLOAT, desc="动向指标-CLOSE,HIGH,LOW,M1=14,M2=6"),
    ColumnInfo(name="dpo", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="madpo", kind=ColumnKind.FLOAT, desc="区间震荡线-CLOSE,M1=20,M2=10,M3=6"),
    ColumnInfo(name="ema_10", kind=ColumnKind.FLOAT, desc="指数移动平均-N=10"),
    ColumnInfo(name="ema_20", kind=ColumnKind.FLOAT, desc="指数移动平均-N=20"),
    ColumnInfo(name="ema_250", kind=ColumnKind.FLOAT, desc="指数移动平均-N=250"),
    ColumnInfo(name="ema_30", kind=ColumnKind.FLOAT, desc="指数移动平均-N=30"),
    ColumnInfo(name="ema_5", kind=ColumnKind.FLOAT, desc="指数移动平均-N=5"),
    ColumnInfo(name="ema_60", kind=ColumnKind.FLOAT, desc="指数移动平均-N=60"),
    ColumnInfo(name="ema_90", kind=ColumnKind.FLOAT, desc="指数移动平均-N=90"),
    ColumnInfo(name="emv", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="maemv", kind=ColumnKind.FLOAT, desc="简易波动指标-HIGH,LOW,VOL,N=14,M=9"),
    ColumnInfo(name="expma_12", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="expma_50", kind=ColumnKind.FLOAT, desc="EMA指数平均数指标-CLOSE,N1=12,N2=50"),
    ColumnInfo(name="kdj", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="kdj_d", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="kdj_k", kind=ColumnKind.FLOAT, desc="KDJ指标-CLOSE,HIGH,LOW,N=9,M1=3,M2=3"),
    ColumnInfo(name="ktn_down", kind=ColumnKind.FLOAT, desc="肯特纳通道N=20日"),
    ColumnInfo(name="ktn_mid", kind=ColumnKind.FLOAT, desc="肯特纳通道N=20日"),
    ColumnInfo(name="ktn_upper", kind=ColumnKind.FLOAT, desc="肯特纳通道N=20日"),
    ColumnInfo(name="ma_10", kind=ColumnKind.FLOAT, desc="简单移动平均-N=10"),
    ColumnInfo(name="ma_20", kind=ColumnKind.FLOAT, desc="简单移动平均-N=20"),
    ColumnInfo(name="ma_250", kind=ColumnKind.FLOAT, desc="简单移动平均-N=250"),
    ColumnInfo(name="ma_30", kind=ColumnKind.FLOAT, desc="简单移动平均-N=30"),
    ColumnInfo(name="ma_5", kind=ColumnKind.FLOAT, desc="简单移动平均-N=5"),
    ColumnInfo(name="ma_60", kind=ColumnKind.FLOAT, desc="简单移动平均-N=60"),
    ColumnInfo(name="ma_90", kind=ColumnKind.FLOAT, desc="简单移动平均-N=90"),
    ColumnInfo(name="macd", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="macd_dea", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="macd_dif", kind=ColumnKind.FLOAT, desc="MACD指标-CLOSE,SHORT=12,LONG=26,M=9"),
    ColumnInfo(name="mass", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="ma_mass", kind=ColumnKind.FLOAT, desc="梅斯线-HIGH,LOW,N1=9,N2=25,M=6"),
    ColumnInfo(name="mfi", kind=ColumnKind.FLOAT, desc="MFI指标是成交量的RSI指标-CLOSE,HIGH,LOW,VOL,N=14"),
    ColumnInfo(name="mtm", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="mtmma", kind=ColumnKind.FLOAT, desc="动量指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="obv", kind=ColumnKind.FLOAT, desc="能量潮指标-CLOSE,VOL"),
    ColumnInfo(name="psy", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="psyma", kind=ColumnKind.FLOAT, desc="投资者对股市涨跌心理波动情绪指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="roc", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="maroc", kind=ColumnKind.FLOAT, desc="变动率指标-CLOSE,N=12,M=6"),
    ColumnInfo(name="rsi_12", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=12"),
    ColumnInfo(name="rsi_24", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=24"),
    ColumnInfo(name="rsi_6", kind=ColumnKind.FLOAT, desc="RSI指标-CLOSE,N=6"),
    ColumnInfo(name="taq_down", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="taq_mid", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="taq_up", kind=ColumnKind.FLOAT, desc="唐安奇通道(海龟)交易指标-HIGH,LOW,20"),
    ColumnInfo(name="trix", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="trma", kind=ColumnKind.FLOAT, desc="三重指数平滑平均线-CLOSE,M1=12,M2=20"),
    ColumnInfo(name="vr", kind=ColumnKind.FLOAT, desc="VR容量比率-CLOSE,VOL,M1=26"),
    ColumnInfo(name="wr", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="wr1", kind=ColumnKind.FLOAT, desc="W&R 威廉指标-CLOSE,HIGH,LOW,N=10,N1=6"),
    ColumnInfo(name="xsii_td1", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td2", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td3", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
    ColumnInfo(name="xsii_td4", kind=ColumnKind.FLOAT, desc="薛斯通道II-CLOSE,HIGH,LOW,N=102,M=7"),
]
_OUT_MAIN_COLS = [
    ColumnInfo(name="code", kind=ColumnKind.STRING, desc="股票代码"),
    ColumnInfo(name="date", kind=ColumnKind.STRING, desc="交易日期"),
    ColumnInfo(name="datecode", kind=ColumnKind.STRING, desc="交易日期代码(YYYYMMDD)"),
    ColumnInfo(name="change", kind=ColumnKind.FLOAT, desc="涨跌额"),
    ColumnInfo(name="percent_change", kind=ColumnKind.FLOAT, desc="涨跌幅(未复权,如果是复权请用 通用行情接口)"),
    ColumnInfo(name="volume", kind=ColumnKind.FLOAT, desc="成交量(手)"),
    ColumnInfo(name="amount", kind=ColumnKind.FLOAT, desc="成交额(千元)"),
    ColumnInfo(name="turnover_rate", kind=ColumnKind.FLOAT, desc="换手率(%)"),
    ColumnInfo(name="turnover_rate_f", kind=ColumnKind.FLOAT, desc="换手率(自由流通股)"),
    ColumnInfo(name="volume_ratio", kind=ColumnKind.FLOAT, desc="量比"),
    ColumnInfo(name="pe", kind=ColumnKind.FLOAT, desc="市盈率(总市值/净利润,亏损的PE为空)"),
    ColumnInfo(name="pe_ttm", kind=ColumnKind.FLOAT, desc="市盈率(TTM,亏损的PE为空)"),
    ColumnInfo(name="pb", kind=ColumnKind.FLOAT, desc="市净率(总市值/净资产)"),
    ColumnInfo(name="ps", kind=ColumnKind.FLOAT, desc="市销率"),
    ColumnInfo(name="ps_ttm", kind=ColumnKind.FLOAT, desc="市销率(TTM)"),
    ColumnInfo(name="dv_ratio", kind=ColumnKind.FLOAT, desc="股息率(%)"),
    ColumnInfo(name="dv_ttm", kind=ColumnKind.FLOAT, desc="股息率(TTM)(%)"),
    ColumnInfo(name="total_share", kind=ColumnKind.FLOAT, desc="总股本(万股)"),
    ColumnInfo(name="float_share", kind=ColumnKind.FLOAT, desc="流通股本(万股)"),
    ColumnInfo(name="free_share", kind=ColumnKind.FLOAT, desc="自由流通股本(万)"),
    ColumnInfo(name="total_mv", kind=ColumnKind.FLOAT, desc="总市值(万元)"),
    ColumnInfo(name="circle_mv", kind=ColumnKind.FLOAT, desc="流通市值(万元)"),
    ColumnInfo(name="adj_factor", kind=ColumnKind.FLOAT, desc="复权因子"),
    ColumnInfo(name="downdays", kind=ColumnKind.FLOAT, desc="连跌天数"),
    ColumnInfo(name="updays", kind=ColumnKind.FLOAT, desc="连涨天数"),
    ColumnInfo(name="lowdays", kind=ColumnKind.FLOAT, desc="表示当前最低价是近多少周期内最低价的最小值"),
    ColumnInfo(name="topdays", kind=ColumnKind.FLOAT, desc="表示当前最高价是近多少周期内最高价的最大值"),
]

# Exported constants
NAME = "techindex"
KEY = "/tushare/techindex"
PAGINATE = Paginate(
    pagesize=10000,
    pagelimit=1000,
)
SOURCE = TableInfo(
    desc="A股股票技术面因子数据（Tushare格式）",
    meta={
        "provider": PROVIDER,
        "source": SOURCE_NAME,
        "url": URL,
        "args": ARGS,
        "type": "partitioned",
        "scale": "crosssection",
    },
    columns=(_IN_MAIN_COLS + _IN_BFQ_COLS + _IN_HFQ_COLS + _IN_QFQ_COLS),
)
TARGET = TableInfo(
    desc="A股股票技术面因子数据（xfintech格式）",
    meta={
        "key": KEY,
        "name": NAME,
        "type": "partitioned",
        "scale": "crosssection",
    },
    columns=(_OUT_MAIN_COLS + _OUT_NA_COLS + _OUT_BA_COLS + _OUT_FA_COLS),
)
