Explorar el Código

添加指标支持周期、日期类型、复权方式

cldu hace 1 mes
padre
commit
02db97e1a9

+ 125 - 7
src/views/dataEDB/AddBaseEDB.vue

@@ -5,7 +5,7 @@ import { showToast } from 'vant'
 import EditBaseEDB from './components/EditBaseEDB.vue'
 import AddDateSequenceEdb from './components/AddDateSequenceEdb.vue'
 import { useRouter } from 'vue-router'
-import {windCommonIndexCodeArr,THSCommonIndexStockCodeArr,THSCommonIndexFuturesCodeArr} from './util/config'
+import {windCommonIndexCodeArr,THSCommonIndexStockCodeArr,THSCommonIndexFuturesCodeArr,windAddCycle,thsAddCycle,windAddDateType,thsAddDateType,windAddRestorationMethod} from './util/config'
 
 const router=useRouter()
 
@@ -57,6 +57,10 @@ const databaseVal=ref('0')
 const onConfirmDatabase=(e)=>{
     databaseText.value=e.selectedOptions[0].label
     databaseVal.value=e.selectedOptions[0].value
+    ExtraPars.value = '';
+    cycleValue.value='D';
+    dateTypeValue.value= dataSourceText.value =='wind' ? 'Trading' : 'Tradedays';
+    restorationMethodValue.value='No';
     showSelectDatabase.value=false
 }
 
@@ -99,6 +103,7 @@ const repeatEdbs=ref([])
 
 
 // 数据来源
+const ExtraPars = ref('');
 const showSelectDataSource=ref(false)
 const edbSourceOpts=ref([])
 const dataSourceText=ref('')
@@ -113,7 +118,6 @@ async function getEDBSourceOpts(){
 }
 getEDBSourceOpts()
 function onConfirmDataSource(e){
-    console.log(e);
     dataSourceText.value=e.selectedOptions[0].SourceName
     dataSourceVal.value=e.selectedOptions[0].EdbSourceId
     showSelectDataSource.value=false
@@ -126,6 +130,10 @@ function onConfirmDataSource(e){
     EdbCodeCommonChecked.value=[]
     codeTypeText.value='期货常用指标'
     codeTypeVal.value=1
+    ExtraPars.value = '';
+    cycleValue.value='D';
+    dateTypeValue.value= dataSourceText.value =='wind' ? 'Trading' : 'Tradedays';
+    restorationMethodValue.value='No';
 }
 
 
@@ -209,7 +217,11 @@ const indexExsitCheck=()=>{
                 Source:dataSourceVal.value,
                 SubSource:databaseVal.value,
                 EdbCode:Array.from(new Set([...EdbCodeArr.value,...EdbCodeCommonChecked.value])).join(','),
-                StockCode:StockCode.value
+                StockCode:StockCode.value,
+                ExtraPars:ExtraPars.value,
+                Period: cycleValue.value || 'D',
+                Days: dateTypeValue.value,
+                PriceAdj:dataSourceVal.value == 2 ? (restorationMethodValue.value == 'No' ? '' : restorationMethodValue.value) : '',
             }
             apiDataEDB.existEDBCheck(params).then(res=>{
                 if(res.Ret == 200){
@@ -235,17 +247,33 @@ const indexExsitCheck=()=>{
                                 // return 
                                 let stockList = res.Data.SearchItem.StockList || []
                                 edbIndexDatas.value=[]
+                                let nameSuffix = '';
+								let frequency = '日度';
+
+                                let circleItem = addTargetCycle.value.find(_=>_.value == cycleValue.value);
+								if(circleItem && circleItem.name) nameSuffix += circleItem.name;
+								if(circleItem && circleItem.frequency) frequency = circleItem.frequency;
+                                let dataTypeItem = addTargetDateType.value.find(_=>_.value == dateTypeValue.value);
+								if(dataTypeItem && dataTypeItem.name) nameSuffix += dataTypeItem.name;
+                                if(dataSourceVal.value == 2){
+                                    let restorationMethodItem = windAddRestorationMethod.find(_=>_.value == restorationMethodValue.value);
+                                    if(restorationMethodItem && restorationMethodItem.name) nameSuffix += restorationMethodItem.name;
+                                }
                                 stockList.map((item,index) =>{
                                     let isCommon = EdbCodeCommonArr.value.find(it => it.value == item.EdbCode)
                                     let params={
                                         Source:dataSourceVal.value,
                                         ClassifyId:0,
                                         Unit:'',
-                                        Frequency:'日度',
-                                        EdbName:isCommon?`${item.StockCode}${isCommon.label}`:`${item.StockCode}${item.EdbCode}`,
+                                        Frequency:frequency,
+                                        EdbName:isCommon?`${item.StockCode}${isCommon.label}${nameSuffix}`:`${item.StockCode}${item.EdbCode}${nameSuffix}`,
                                         EdbCode:item.EdbCode,
                                         StockCode:item.StockCode,
-                                        DataList:item.DataList
+                                        DataList:item.DataList,
+                                        ApiExtraPars:ExtraPars.value,
+                                        Period: item.Period || 'D',
+                                        Days: item.Days,
+                                        PriceAdj:item.PriceAdj || '',
                                     }
                                     edbIndexDatas.value.push(params)
                                 })
@@ -269,7 +297,44 @@ const edbNavigator=({id})=>{
 // 日期序列指标 下一步
 const edbIndexDatas=ref([])
 const showAddDateSequence=ref(false)
+const addTargetCycle = computed(() => {
+    return dataSourceVal.value == 2 ? windAddCycle : thsAddCycle
+})
+const addTargetDateType = computed(() => {
+    return dataSourceVal.value == 2 ? windAddDateType : thsAddDateType
+})
+//周期
+const showCircleDia=ref(false);
+const cycleValue = ref('D');
+const cycleText = computed(() => {
+    return addTargetCycle.value.find(item => item.value == cycleValue.value)?.label || ''
+})
+const onConfirmCircleDia=(e)=>{
+    cycleValue.value=e.selectedOptions[0].value
+    showCircleDia.value=false
+}
+
+//日期类型
+const showDateTypeDia=ref(false);
+const dateTypeValue = ref('Tradedays');
+const dateTypeText = computed(() => {
+    return addTargetDateType.value.find(item => item.value == dateTypeValue.value)?.label || ''
+})
+const onConfirmDateTypeDia=(e)=>{
+    dateTypeValue.value=e.selectedOptions[0].value
+    showDateTypeDia.value=false
+}
 
+//复权方式
+const showRestorationMethodDia=ref(false);
+const restorationMethodValue = ref('No');
+const restorationMethodText = computed(() => {
+    return windAddRestorationMethod.find(item => item.value == restorationMethodValue.value)?.label || ''
+})
+const onConfirmRestorationMethodDia=(e)=>{
+    restorationMethodValue.value=e.selectedOptions[0].value
+    showRestorationMethodDia.value=false
+}
 
 </script>
 
@@ -374,6 +439,17 @@ const showAddDateSequence=ref(false)
                     <img name="cross" class="edb-code-item-icon" src="@/assets/imgs/dataEDB/close_outline_black.png" @click="delEdbCode(index)"/>
                 </div>
             </div>
+            <van-field 
+                v-if="dataSourceVal == 1"
+                v-model="ExtraPars" 
+                label="参数(可选)" 
+                placeholder="请输入参数"
+                input-align="right">
+            </van-field>
+            <van-cell title="周期" is-link :value="cycleText" @click="showCircleDia=true"/>
+            <van-cell title="日期类型" is-link :value="dateTypeText" @click="showDateTypeDia=true"/>
+            <van-cell v-if="dataSourceVal == 2" title="复权方式" is-link :value="restorationMethodText" @click="showRestorationMethodDia=true"/>
+            <div v-if="dataSourceVal == 2" class="edb-code-hint">*适用股票基金</div>
         </template>
 
         <div class="btns-wrap">
@@ -412,6 +488,48 @@ const showAddDateSequence=ref(false)
             @cancel="showSelectDatabase=false"
         />
     </van-popup>
+    <!-- 选择周期 -->
+    <van-popup 
+        v-model:show="showCircleDia"
+        round
+        position="bottom"
+    >
+        <van-picker
+            title="数据库"
+            :columns="addTargetCycle"
+            :columns-field-names="{text:'label',value:'value'}"
+            @confirm="onConfirmCircleDia"
+            @cancel="showCircleDia=false"
+        />
+    </van-popup>
+    <!-- 选择日期类型 -->
+    <van-popup 
+        v-model:show="showDateTypeDia"
+        round
+        position="bottom"
+    >
+        <van-picker
+            title="数据库"
+            :columns="addTargetDateType"
+            :columns-field-names="{text:'label',value:'value'}"
+            @confirm="onConfirmDateTypeDia"
+            @cancel="showDateTypeDia=false"
+        />
+    </van-popup>
+    <!-- 选择复权方式-->
+    <van-popup 
+        v-model:show="showRestorationMethodDia"
+        round
+        position="bottom"
+    >
+        <van-picker
+            title="数据库"
+            :columns="windAddRestorationMethod"
+            :columns-field-names="{text:'label',value:'value'}"
+            @confirm="onConfirmRestorationMethodDia"
+            @cancel="showRestorationMethodDia=false"
+        />
+    </van-popup>
     <!-- 选择常用指标类型 -->
     <van-popup 
         v-model:show="showSelectCodeType"
@@ -551,7 +669,7 @@ const showAddDateSequence=ref(false)
 }
 
 .edb-code-hint{
-    padding:0 16PX;
+    padding:0 16px;
     color: #B1B1B1;
     font-size: 24px;
     margin: 20px 0 0 0;

+ 6 - 2
src/views/dataEDB/components/AddDateSequenceEdb.vue

@@ -33,10 +33,14 @@ watch(
           Source:edb.Source,
           ClassifyId:0,
           Unit:'',
-          Frequency:'日度',
+          Frequency:edb.Frequency || '日度',
           EdbName:edb.EdbName,
           EdbCode:edb.EdbCode,
-          StockCode:edb.StockCode
+          StockCode:edb.StockCode,
+          ApiExtraPars:edb.ApiExtraPars,
+          Period:edb.Period,
+          Days:edb.Days,
+          PriceAdj:edb.PriceAdj,
         })
       })
       getEdbClassifyList()

+ 40 - 0
src/views/dataEDB/util/config.js

@@ -399,4 +399,44 @@ export const THSCommonIndexFuturesCodeArr=[
 	{value:'ths_chg_ratio_future',label:"涨跌幅"},
 	{value:'ths_swing_d_future',label:"日振幅"},
 	{value:'ths_open_interest_future',label:"持仓量"},
+]
+
+//添加指标 日期序列周期 wind
+export const windAddCycle = [
+	{label:'日',value:'D',frequency:'日度'}, //日
+	{label:'周',value:'W',name:'/周',frequency:'周度'}, //周
+	{label:'月',value:'M',name:'/月',frequency:'月度'}, //月
+	{label:'季',value:'Q',name:'/季',frequency:'季度'}, //季
+	{label:'年',value:'Y',name:'/年',frequency:'年度'}, //年
+]
+
+//添加指标 日期序列周期 同花顺
+export const thsAddCycle = [
+	{label:'日',value:'D',frequency:'日度'}, //日
+	{label:'周',value:'W',name:'/周',frequency:'周度'}, //周
+	{label:'月',value:'M',name:'/月',frequency:'月度'}, //月
+	{label:'季',value:'Q',name:'/季',frequency:'季度'}, //季
+	{label:'半年',value:'S',name:'/半年',frequency:'半年度'}, //半年
+	{label:'年',value:'Y',name:'/年',frequency:'年度'}, //年
+]
+
+//添加指标 日期类型  wind
+export const windAddDateType = [
+	{label:'交易日',value:'Trading'}, //交易日
+	{label:'日历日',value:'Alldays',name:'/日历日',}, //日历日
+	{label:'工作日',value:'Weekdays',name:'/工作日',}, //工作日
+]
+
+//添加指标 日期类型 同花顺
+export const thsAddDateType = [
+	{label:'交易日',value:'Tradedays'}, //交易日
+	{label:'日历日',value:'Alldays',name:'/日历日',}, //日历日
+]
+
+//添加指标 复权方式
+export const windAddRestorationMethod = [
+	{label:'不复权',value:'No'}, //不复权
+	{label:'前复权',value:'F',name:'/前复权',}, //前复权
+	{label:'后复权',value:'B',name:'/后复权',}, //后复权
+	{label:'定点复权(仅用于支持定点复权的指标)',value:'T',name:'/定点复权',}, //定点复权
 ]