Python

数据接口基本函数应用(试用版正式版试用)

简介

本脚本为数据接口常用函数在通用场景的示例。

示例代码

python
# -*- coding: utf-8 -*-

from iFinDPy import *
from datetime import datetime
import pandas as pd
import time as _time
import json
from threading import Thread,Lock,Semaphore
import requests

sem = Semaphore(5)  # 此变量用于控制最大并发数
dllock = Lock()  #此变量用来控制实时行情推送中落数据到本地的锁

# 登录函数
def thslogindemo():
    # 输入用户的帐号和密码
    thsLogin = THS_iFinDLogin("数据接口_账号","数据接口_密码")
    print(thsLogin)
    if thsLogin != 0:
        print('登录失败')
    else:
        print('登录成功')

def datepool_basicdata_demo():
    # 通过数据池的板块成分函数和基础数据函数,提取沪深300的全部股票在2020-11-16日的日不复权收盘价
    data_hs300 = THS_DP('block', '2020-11-16;001005290', 'date:Y,thscode:Y,security_name:Y')
    if data_hs300.errorcode != 0:
        print('error:{}'.format(data_hs300.errmsg))
    else:
        seccode_hs300_list = data_hs300.data['THSCODE'].tolist()
        data_result = THS_BD(seccode_hs300_list, 'ths_close_price_stock', '2020-11-16,100')
        if data_result.errorcode != 0:
            print('error:{}'.format(data_result.errmsg))
        else:
            data_df = data_result.data
            print(data_df)

def datapool_realtime_demo():
    # 通过数据池的板块成分函数和实时行情函数,提取上证50的全部股票的最新价数据,并将其导出为csv文件
    today_str = datetime.today().strftime('%Y-%m-%d')
    print('today:{}'.format(today_str))
    data_sz50 = THS_DP('block', '{};001005260'.format(today_str), 'date:Y,thscode:Y,security_name:Y')
    if data_sz50.errorcode != 0:
        print('error:{}'.format(data_sz50.errmsg))
    else:
        seccode_sz50_list = data_sz50.data['THSCODE'].tolist()
        data_result = THS_RQ(seccode_sz50_list,'latest')
        if data_result.errorcode != 0:
            print('error:{}'.format(data_result.errmsg))
        else:
            data_df = data_result.data
            print(data_df)
            data_df.to_csv('realtimedata_{}.csv'.format(today_str))

def iwencai_demo():
    # 演示如何通过不消耗流量的自然语言语句调用常用数据
    print('输出资金流向数据')
    data_wencai_zjlx = THS_WC('主力资金流向', 'stock')
    if data_wencai_zjlx.errorcode != 0:
        print('error:{}'.format(data_wencai_zjlx.errmsg))
    else:
        print(data_wencai_zjlx.data)

    print('输出股性评分数据')
    data_wencai_xny = THS_WC('股性评分', 'stock')
    if data_wencai_xny.errorcode != 0:
        print('error:{}'.format(data_wencai_xny.errmsg))
    else:
        print(data_wencai_xny.data)

def dlwork(tick_data):
    # 本函数为实时行情订阅新启线程的任务函数
    dllock.acquire()
    with open('dlwork.txt', 'a') as f:
        for stock_data in tick_data['tables']:
            if 'time' in stock_data:
                timestr = _time.strftime('%Y-%m-%d %H:%M:%S', _time.localtime(stock_data['time'][0]))
                print(timestr)
                f.write(timestr + str(stock_data) + '\n')
            else:
                pass
    dllock.release()

def work(codestr,lock,indilist):
    sem.acquire()
    stockdata = THS_HF(codestr, ';'.join(indilist),'','2020-08-11 09:15:00', '2020-08-11 15:30:00','format:json')
    if stockdata.errorcode != 0:
        print('error:{}'.format(stockdata.errmsg))
        sem.release()
    else:
        print(stockdata.data)
        lock.acquire()
        with open('test1.txt', 'a') as f:
            f.write(str(stockdata.data) + '\n')
        lock.release()
        sem.release()

def multiThread_demo():
    # 本函数为通过高频序列函数,演示如何使用多线程加速数据提取的示例,本例中通过将所有A股分100组,最大线程数量sem进行提取
    # 用户可以根据自身场景进行修改
    today_str = datetime.today().strftime('%Y-%m-%d')
    print('today:{}'.format(today_str))
    data_alla = THS_DP('block', '{};001005010'.format(today_str), 'date:Y,thscode:Y,security_name:Y')
    if data_alla.errorcode != 0:
        print('error:{}'.format(data_alla.errmsg))
    else:
        stock_list = data_alla.data['THSCODE'].tolist()

    indi_list = ['close', 'high', 'low', 'volume']
    lock = Lock()

    btime = datetime.now()
    l = []
    for eachlist in [stock_list[i:i + int(len(stock_list) / 10)] for i in
                     range(0, len(stock_list), int(len(stock_list) / 10))]:
        nowstr = ','.join(eachlist)
        p = Thread(target=work, args=(nowstr, lock, indi_list))
        l.append(p)

    for p in l:
        p.start()
    for p in l:
        p.join()
    etime = datetime.now()
    print(etime-btime)

pd.options.display.width = 320
pd.options.display.max_columns = None


def reportDownload():
    df = THS_ReportQuery('300033.SZ','beginrDate:2021-08-01;endrDate:2021-08-31;reportType:901','reportDate:Y,thscode:Y,secName:Y,ctime:Y,reportTitle:Y,pdfURL:Y,seq:Y').data
    print(df)
    for i in range(len(df)):
        pdfName = df.iloc[i,4]+str(df.iloc[i,6])+'.pdf'
        pdfURL = df.iloc[i,5]
        r = requests.get(pdfURL)
        with open(pdfName,'wb+') as f:
            f.write(r.content)


def main():
    # 本脚本为数据接口通用场景的实例,可以通过取消注释下列示例函数来观察效果

    # 登录函数
    thslogindemo()
    # 通过数据池的板块成分函数和基础数据函数,提取沪深300的全部股票在2020-11-16日的日不复权收盘价
    # datepool_basicdata_demo()
    #通过数据池的板块成分函数和实时行情函数,提取上证50的全部股票的最新价数据,并将其导出为csv文件
    # datapool_realtime_demo()
    # 演示如何通过不消耗流量的自然语言语句调用常用数据
    # iwencai_demo()
    # 本函数为通过高频序列函数,演示如何使用多线程加速数据提取的示例,本例中通过将所有A股分100组,最大线程数量sem进行提取
    # multiThread_demo()
    # 本函数演示如何使用公告函数提取满足条件的公告,并下载其pdf
    # reportDownload()

if __name__ == '__main__':
    main()

时点数据应用示例(试用版正式版适用)

简介

演示如何提取财务指标的时点数据、如何利用辅助功能更好的处理时点数据的应用场景、如何在日期序列中根据自定义日期序列提取数据。

示例代码

python
from iFinDPy import *
import pandas as pd

pd.options.display.max_columns = None
pd.set_option('display.float_format', lambda x: '%.4f' % x)


loginResult = THS_iFinDLogin('zhanghao','mima')
print(loginResult)

def historyReportDateTest():
    # 提取股票不同日期的财报数据,避免回测财务模型受未来数据干扰
    dateList = THS_DateQuery('SSE','dateType:0,period:D,dateFormat:0','2019-10-20','2019-10-30')['tables']['time']
    for date in dateList:
        result = THS_BD('300029.SZ', 'ths_np_atoopc_pit_stock', '{},20190930,1'.format(date))
        print(date,result.data)

    # 使用日期序列函数来实现同样效果
    result = THS_DS('300029.SZ', 'ths_np_atoopc_pit_stock', '20190930,1', 'Fill:Blank', '2019-10-20', '2019-10-30')
    print(result.data)

def reportChange():
    # 使用财报变更日期指标和自定义日期序列函数提取股票的财报变更记录
    result = THS_BD('000892.SZ', 'ths_report_changedate_pit_stock', '2018-12-31,2020-11-25,604,1,20171231')
    changeDateList = result.data.iloc[0]['ths_report_changedate_pit_stock']
    print(changeDateList)

    changeRecord = THS_DS('000892.SZ', 'ths_total_assets_pit_stock', '20181231,1', 'date_sequence:{}'.format(changeDateList), '', '').data
    print(changeRecord)

def calepsttm(x):
    curDate = x['time']
    reportDateNow = x['ths_history_reportdate_pit_stock']
    year = int(reportDateNow[:4])
    datestr = reportDateNow[-4:]
    reportDateLast12 = str(year-1)+'1231'
    reportDateLastEnd = str(year-1)+datestr
    if datestr == '1231':
        np_ttm = THS_BD('300029.SZ','ths_np_atoopc_pit_stock','{},{},1'.format(curDate,reportDateNow)).data.iloc[0]['ths_np_atoopc_pit_stock']
    else:
        npThisYear = THS_BD('300029.SZ','ths_np_atoopc_pit_stock','{},{},1'.format(curDate,reportDateNow)).data.iloc[0]['ths_np_atoopc_pit_stock']
        npLastYear1 = THS_BD('300029.SZ', 'ths_np_atoopc_pit_stock', '{},{},1'.format(curDate, reportDateLast12)).data.iloc[0]['ths_np_atoopc_pit_stock']
        npLastYear2 = THS_BD('300029.SZ', 'ths_np_atoopc_pit_stock', '{},{},1'.format(curDate, reportDateLastEnd)).data.iloc[0]['ths_np_atoopc_pit_stock']
        np_ttm = npThisYear + npLastYear1 - npLastYear2
    shareNum = THS_BD('300029.SZ','ths_total_shares_stock',curDate).data.iloc[0]['ths_total_shares_stock']
    epsttm = np_ttm/shareNum
    return epsttm


def epsttm():
    # 当前ttm的提取
    result_before = THS_DS('300029.SZ', 'ths_eps_ttm_stock', '101', 'Fill:Blank', '2019-10-20', '2019-10-30')
    if result_before.errorcode != 0:
        print('error {} happen'.format(result_before.errmsg))
    else:
        print(result_before.data)
    # 使用新的时点数据自行计算ttm
    result_after = THS_DS('300029.SZ','ths_history_reportdate_pit_stock','608,1,0@104,2','Fill:Blank','2019-10-20','2019-10-30')
    if result_after.errorcode != 0:
        print('error {} happen'.format(result_after.errmsg))
    else:
        result_df = result_after.data
        result_df['epsttm'] = result_df.apply(calepsttm,axis=1)
        print(result_df)

def exceed100test():
    dateList = THS_DateQuery('SSE', 'dateType:0,period:D,dateFormat:0', '2018-10-20', '2019-10-30')['tables']['time']
    changeRecord = THS_DS('000892.SZ', 'ths_np_atoopc_pit_stock', '20171231,1',
                          'date_sequence:{}'.format(','.join(dateList)), '', '')
    print(changeRecord)

def duplicatedatetest():
    # 自定义序列函数支持不同的日期格式
    changeRecord = THS_DS('000892.SZ', 'ths_np_atoopc_pit_stock', '20171231,1',
                          'date_sequence:2018-05-01,20200601,2020-08-01', '', '')
    print(changeRecord)

def main():
    historyReportDateTest()
    # reportChange()
    # epsttm()
    # exceed100test()
    # duplicatedatetest()

if __name__ == '__main__':
    main()

大跌后指数表现情况案例

简介

分析股市大跌5%之后一个月,一个季度和一年后的数据表现。

示例代码

python
import pandas as pd
from datetime import datetime
from iFinDPy import *


thsLogin = THS_iFinDLogin("iFind账号","iFind账号密码")

index_list = ['000001.SH','399001.SZ','399006.SZ']
result = pd.DataFrame()
today =datetime.today().strftime('%Y-%m-%d')

for index in index_list: 
    data_js = THS_DateSerial(index,'ths_pre_close_index;ths_open_price_index;ths_close_price_index;ths_high_price_index',';;;',\
                             'Days:Tradedays,Fill:Previous,Interval:D,block:history','2000-01-01',today,True)
    data_df = THS_Trans2DataFrame(data_js)
    data_df['close_chg'] = data_df['ths_close_price_index'] / data_df['ths_pre_close_index'] * 100 - 100
    result_pd = data_df[(data_df['close_chg'] < -5)]
    date_list = result_pd['time'].tolist()
    print('{}收盘在-5%的交易日有{}'.format(index,str(date_list)))
    for date in date_list:
        date_after_1month = THS_DateOffset('SSE','dateType:1,period:D,offset:30,dateFormat:0,output:singledate',date)['tables']['time'][0]
        date_after_3month = THS_DateOffset('SSE','dateType:1,period:D,offset:90,dateFormat:0,output:singledate',date)['tables']['time'][0]
        date_after_1year = THS_DateOffset('SSE','dateType:1,period:D,offset:365,dateFormat:0,output:singledate',date)['tables']['time'][0]
        if date > (datetime.today() + timedelta(days=-365)).strftime('%Y-%m-%d'):
            continue
        index_close_date = THS_BasicData(index,'ths_close_price_index',date)['tables'][0]['table']['ths_close_price_index'][0]
        index_close_date_after_1month = THS_BasicData(index,'ths_close_price_index',date_after_1month)['tables'][0]['table']['ths_close_price_index'][0]
        index_close_date_after_3month = THS_BasicData(index,'ths_close_price_index',date_after_3month)['tables'][0]['table']['ths_close_price_index'][0]
        index_close_date_after_1year = THS_BasicData(index,'ths_close_price_index',date_after_1year)['tables'][0]['table']['ths_close_price_index'][0]
        result = result.append(pd.DataFrame([index,date,index_close_date,index_close_date_after_1month,index_close_date_after_3month,index_close_date_after_1year]).T)
result.columns = ['指数代码','大跌日','大跌日点数','一个月后点数','三个月后点数','一年后点数']
result = result.set_index('指数代码')
result['大跌一个月后涨跌幅'] = result['一个月后点数']/result['大跌日点数'] *100 -100
result['大跌三个月后涨跌幅'] = result['三个月后点数']/result['大跌日点数'] *100 -100
result['大跌一年后涨跌幅'] = result['一年后点数']/result['大跌日点数'] *100 -100
result

HTTP接口应用案例(python环境)

简介

演示在Python环境使用HTTP接口提取各函数数据。

示例代码

python
import requests
import json
import time
import pandas as pd

# 取消panda科学计数法,保留4位有效小数位.
pd.set_option('float_format', lambda x: '%.2f' % x)
# 设置中文对齐,数值等宽对齐.
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
pd.set_option('display.max_columns', 20)
pd.set_option('display.width', 500)

# Token accessToken 及权限校验机制
getAccessTokenUrl = 'https://quantapi.51ifind.com/api/v1/get_access_token'
# 获取refresh_token需下载Windows版本接口包解压,打开超级命令-工具-refresh_token查询
refreshtoken = '此处填写refresh_token'
getAccessTokenHeader = {"Content- Type": "application/json", "refresh_token": refreshtoken}
getAccessTokenResponse = requests.post(url=getAccessTokenUrl, headers=getAccessTokenHeader)
accessToken = json.loads(getAccessTokenResponse.content)['data']['access_token']
print(accessToken)

thsHeaders = {"Content-Type": "application/json", "access_token": accessToken}


# 高频序列:获取分钟数据
def high_frequency():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/high_frequency'
    thsPara = {"codes":
                   "000001.SZ",
               "indicators":
                   "open,high,low,close,volume,amount,changeRatio",
               "starttime":
                   "2022-07-05 09:15:00",
               "endtime":
                   "2022-07-05 15:15:00"}
    thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
    print(thsResponse.content)


# 实时行情:循环获取最新行情数据
def real_time():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/real_time_quotation'
    thsPara = {"codes": "300033.SZ", "indicators": "latest"}
    while True:
        thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
        data = json.loads(thsResponse.content)
        result = pd.json_normalize(data['tables'])
        result = result.drop(columns=['pricetype'])
        result = result.apply(lambda x: x.explode().astype(str).groupby(level=0).agg(", ".join))
        print(result)
        # do your thing here
        time.sleep(3)
        pass


# 历史行情:获取历史的日频行情数据
def history_quotes():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/cmd_history_quotation'
    thsPara = {"codes":
                   "000001.SZ,600000.SH",
               "indicators":
                   "open,high,low,close",
               "startdate":
                   "2021-07-05",
               "enddate":
                   "2022-07-05",
               "functionpara":
                   {"Fill": "Blank"}
               }
    thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
    print(thsResponse.content)


# 基础数据:获取证券基本信息、财务指标、盈利预测、日频行情等数据
def basic_data():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/basic_data_service'
    thsPara = {"codes":
                   "300033.SZ,600000.SH",
               "indipara":
                   [
                       {
                           "indicator":
                               "ths_regular_report_actual_dd_stock",
                           "indiparams":
                               ["104"]
                       },
                       {
                           "indicator":
                               "ths_total_shares_stock",
                           "indiparams":
                               ["20220705"]
                       }
                   ]
               }
    thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
    print(thsResponse.content)


# 日期序列:与基础数据指标相同,可以同时获取多日数据
def date_serial():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/date_sequence'
    thsPara = {"codes":
                   "000001.SZ,600000.SH",
               "startdate":
                   "20220605",
               "enddate":
                   "20220705",
               "functionpara":
                   {"Fill": "Blank"},
               "indipara":
                   [
                       {
                           "indicator":
                               "ths_close_price_stock",
                           "indiparams":
                               ["", "100", ""]
                       },
                       {"indicator":
                            "ths_total_shares_stock",
                        "indiparams":
                            [""]
                        }
                   ]
               }
    thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
    data = json.loads(thsResponse.content)
    result = Trans2df(data)
    print(result)


# json结构体转dataframe
def Trans2df(data):
    df = pd.json_normalize(data['tables'])
    df2 = df.set_index(['thscode'])

    unnested_lst = []
    for col in df2.columns:
        unnested_lst.append(df2[col].apply(pd.Series).stack())

    result = pd.concat(unnested_lst, axis=1, keys=df2.columns)
    # result = result.reset_index(drop=True)
    # 设置二级索引
    result = result.reset_index()
    result = result.set_index(['thscode', 'time'])
    # 格式化,行转列
    result = result.drop(columns=['level_1'])
    result = result.reset_index()
    return (result)


# 专题报表,示例提取全部A股代码,更多报表数据使用超级命令工具查看
def data_pool():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/data_pool'
    thsPara = {
        "reportname": "p03425",
        "functionpara": {
            "date": "20220706",
            "blockname": "001005010",
            "iv_type": "allcontract"
        },
        "outputpara": "p03291_f001,p03291_f002,p03291_f003,p03291_f004"
    }
    thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
    print(thsResponse.content)


# 经济数据库
def edb():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/edb_service'
    thsPara = {"indicators":
                   "G009035746",
               "startdate":
                   "2022-04-01",
               "enddate":
                   "2022-05-01"}
    thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
    print(thsResponse.content)


# 日内快照:tick数据
def snap_shot():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/snap_shot'
    thsPara = {
        "codes": "000001.SZ",
        "indicators": "open,high,low,latest,bid1,ask1,bidSize1,askSize1",
        "starttime": "2022-07-06 09:15:00",
        "endtime": "2022-07-06 15:15:00"
    }
    thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
    print(thsResponse.content)


# 公告函数
def report_query():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/report_query'
    thsPara = {
        "codes": "000001.SZ,600000.SH",
        "functionpara": {
            "reportType": "901"
        },
        "beginrDate": "2021-01-01",
        "endrDate": "2022-07-06",
        "outputpara": "reportDate:Y,thscode:Y,secName:Y,ctime:Y,reportTitle:Y,pdfURL:Y,seq:Y"
    }
    thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
    print(thsResponse.content)


# 智能选股
def WCQuery():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/smart_stock_picking'
    thsPara = {
        "searchstring": "涨跌幅",
        "searchtype": "stock"
    }
    thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
    print(thsResponse.content)


# 日期查询函数、日期偏移函数:根据交易所查询交易日
def date_offset():
    thsUrl = 'https://quantapi.51ifind.com/api/v1/get_trade_dates'
    thsPara = {"marketcode": "212001",
               "functionpara":
                   {"dateType": "0",
                    "period": "D",
                    "offset": "-10",
                    "dateFormat": "0",
                    "output": "sequencedate"},
               "startdate":
                   "2022-07-05"}
    thsResponse = requests.post(url=thsUrl, json=thsPara, headers=thsHeaders)
    print(thsResponse.content)


def main():
    # 实时行情
    real_time()
    # 基础数据
    # basic_data()
    # 日期序列
    # date_serial()
    # 专题报表
    # data_pool()
    # 历史行情
    # history_quotes()
    # 高频序列
    # high_frequency()
    # 经济数据库
    # edb()
    # 日内快照
    # snap_shot()
    # 公告函数
    # report_query()
    # 智能选股
    # WCQuery()
    # 日期查询函数
    # date_query()
    # 日期偏移函数
    # date_offset()


if __name__ == '__main__':
    main()

Matlab

Matlab接口函数使用案例

简介

演示Matlab各接口函数的使用,以及JSON格式转换为table格式的使用方法。

示例代码

matlab
%%
%Create on Fri Jan 13
%Authorized by @THS
%This is a sample which shows how to operate the commonds.
%%,
%用户在使用时请修改成自己的账号和密码
thsLogin = THS_iFinDLogin('账号','密码');
if(thsLogin == 0 || thsLogin == -201)
    %高频序列函数格式为THS_HighFrequenceSequence('thsCodes','indicators','params','startTime','endTime')
    %thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
    %indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
    %params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'Interval:5'
    %startDate的日期输入格式为YYYY-MM-DD HH:MM:SS
    %endDate的日期输入格式为YYYY-MM-DD HH:MM:SS
    %THS_HighFrequenceSequence('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startTime','endTime')
    thsDataHighFrequenceSequence = THS_HighFrequenceSequence('300033.SZ','open;high;low;close;volume;amt','CPS:0,MaxPoints:50000,Fill:Previous,Interval:1','2016-12-12 09:30:00','2016-12-12 15:00:00');
    highFrequenceSequence = THS_Trans2Table(thsDataHighFrequenceSequence)
	
    %实时行情函数的格式为THS_RealtimeQuotes('thsCodes','indicators','params')
    %thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
    %indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
    %params不可以为空
    %THS_RealtimeQuotes('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3')
    thsDataRealtimeQuotes = THS_RealtimeQuotes('600000.SH,300033.SZ','open;high;low;new','pricetype:1');
    realtimeQuotes = THS_Trans2Table(thsDataRealtimeQuotes)
	
    %历史行情函数格式为THS_HistoryQuotes('thsCodes','indicators','params','startDate','endDate')
    %thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
    %indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
    %params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'period:W'
    %startDate的日期输入格式为YYYY-MM-DD
    %endDate的日期输入格式为YYYY-MM-DD
    %THS_HistoryQuotes('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startDate','endDate')
    thsDataHistoryQuotes  = THS_HistoryQuotes('300033.SZ','open;high;low;close','period:D,pricetype:1,rptcategory:0,fqdate:1900-01-01,hb:YSHB','2016-03-01','2016-04-01');
    historyQuotes = THS_Trans2Table(thsDataHistoryQuotes)
	
    %基础数据THS_BasicData('thsCodes','function','params');支持多证券单指标输入
    %thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
    %function不可以为空,且当前只支持单个function,目前函数名称可以在【iFinD终端-工具-数据接口-指标函数查询工具】查看
    %params可以为空,也可以有多个,当有多个params时则用英文半角逗号分隔,如param1,param2,param3
    %THS_BasicData('thsCode1,thsCode2,thsCode3','function','param1,param2,param3')
    thsDataBasicData = THS_BasicData('300033.SZ', 'ths_sfssrq_stock', '')
	basicData = THS_Trans2Table(thsDataBasicData)
    
    %日期系列函数格式为THS_DateSerial('thsCodes','indicators','params','startDate','endDate')
    %thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
    %indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
    %params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'Interval:M'
    %startDate的日期输入格式为YYYY-MM-DD
    %endDate的日期输入格式为YYYY-MM-DD
    %日期序列函数格式为THS_DateSerial('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startDate','endDate')    
    thsDataDateSerial = THS_DateSerial('300033.SZ','gz_pe','CPS:0,Days:Tradedays,Fill:Previous,Interval:D,Currency:ORIGINAL','2016-12-13','2017-01-13');
    dateSerial = THS_Trans2Table(thsDataDateSerial)
	
	%日内快照函数格式为THS_Snapshot('thsCodes','indicators','params','startTime','endTime')
    %thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
    %indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
    %params不可以为空,且当前只有一个参数,即dataType:Original
    %startDate的日期输入格式为YYYY-MM-DD HH:MM:SS
    %endDate的日期输入格式为YYYY-MM-DD HH:MM:SS
    %THS_HighFrequenceSequence('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startTime','endTime')
	thsDataSnapShot = THS_Snapshot('300033.SZ,600000.SH','tradeDate;tradeTime;preClose;open;high;low;latest','dataType:Original','2018-06-13 09:30:00','2018-06-13 09:45:00')
	snapShot = THS_Trans2Table(thsDataSnapShot)
	
    %数据池函数格式为THS_DataPool('modelName','inputParams','outputParams')
    %modelName不可以为空,且一次只能输入一个
    %inputParams用英文半角分号隔开,如inputParam1;inputParam2;inputParam3
    %outputParams用英文半角冒号赋值,用英文半角逗号分隔,Y表示该字段输出,N表示该字段不输出,如果不写则默认为Y,如outputParam1:Y,outputParam2:Y,outputParam3:N
    %THS_DataPool('modelName','inputParam1;inputParam2;inputParam3','outputParam1,outputParam2,outputParams3')
    %【001005260】是板块ID,目前板块ID可以在【iFinD终端-工具-数据接口-板块ID查询工具】查看
    thsDataDataPool = THS_DataPool('block','2016-12-19;001005260','date:Y,security_name:Y,thscode:Y');
    dataPool = THS_Trans2Table(thsDataDataPool)
	
    %EDB数据请求函数格式为THS_EDBQuery('indicatorIDs','startDate','endDate')
    %indicatorIDs不可以为空,支持多个ID输入。指标ID可以在【iFinD终端-工具-数据接口】中的指标ID查询工具查看
    %startDate的日期输入格式为YYYY-MM-DD
    %endDate的日期输入格式为YYYY-MM-DD
    %thsEDBDataQuery = THS_EDBDataQuery("M001620326", "2000-01-01", "2016-01-01");
    
    %数据使用量查询函数,用于用户查询自身账号的数据使用量,其中行情数据是15000万条/周,基础数据是500万条/周,EDB数据是500条/周。通过高频序列函数、历史行情函数和实时行情函数获取的数据
    %统称为行情数据;通过基础数据函数、日期序列函数和数据池函数获取的数据统称为基础数据;通过EDB数据请求函数获取的数据统称为EDB数据。
    thsDataStatistics = THS_DataStatistics();
    
    %错误信息查询函数,对于函数执行后的errorcode进行查询,了解错误信息
    %value的值不可以为空,并且value的值必须是枚举出的错误值
    thsGetErrorInfo = THS_GetErrorInfo(0);
    
    %交易日期/日历日期查询函数
    %日期查询函数的格式是THS_DateQuery('exchange','dateType:value,period:value,dateFormat:value','startDate','endDate')
    %exchange不可以为空
    %dateType,period,dateFormat的值也不可以为空
    %startDate的日期输入格式为YYYY-MM-DD
    %endDate的日期输入格式为YYYY-MM-DD
    thsDateQuery = THS_DateQuery('SSE', 'dateType:trade,period:D,dateFormat:0', '2016-07-21', '2016-08-21');
    
    %根据指定日期和偏移量找到相应的日期
    %日期偏移函数的格式是THS_DateQuery('exchange','dateType:value,period:value,dateFormat:value','date')
    %exchange不可以为空
    %dateType,period,dateFormat的值也不可以为空
    %date的日期输入格式为YYYY-MM-DD
    thsDateOffset = THS_DateOffset('SSE', 'dateType:trade,period:W,offset:-10,dateFormat:0', '2016-08-21');
    
    %统计指定时间区间和日期类型中的日期数量
    %日期查询函数的格式是THS_DateCount('exchange','dateType:value,period:value,dateFormat:value','startDate','endDate')
    %exchange不可以为空
    %dateType,period,dateFormat的值也不可以为空
    %startDate的日期输入格式为YYYY-MM-DD
    %endDate的日期输入格式为YYYY-MM-DD
    thsDateCount = THS_DateCount('SSE', 'dateType:trade,period:D,dateFormat:0', '2016-07-21', '2016-08-21');

end
%登出函数
thsLogout = THS_iFinDLogout();

Matlab历史行情函数获取数据并简单绘制K线图

简介

演示Matlab基础数据函数的使用,绘图比较主被动买入卖出特大单量。

示例代码

matlab
%% 利用同花顺历史行情数据K线图Demo简单实现
%用户在使用时请修改成自己的账号和密码
thsLogin = THS_iFinDLogin('账号','密码');
if (thsLogin == 0 || thsLogin == -201)
    %通过历史行情函数获取同花顺(300033.SZ)从2016-08-23到2016-11-23的开高低收数据
    %历史行情函数格式为THS_HistoryQuotes('thsCodes','indicators','params','startDate','endDate')
    %thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
    %indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
    %params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'period:W'
    %startDate的日期输入格式为YYYY-MM-DD
    %endDate的日期输入格式为YYYY-MM-DD
    %THS_HistoryQuotes('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startDate','endDate')
    
    thsDataHistoryQuotes = THS_HistoryQuotes('300033.SZ','open;high;low;close','period:D,pricetype:1,rptcategory:0,fqdate:1900-01-01,hb:YSHB','2016-08-23','2016-11-23');
    %使用同花顺JSON格式解析函数解析数据
    thsData = THS_DataFromJSON(thsDataHistoryQuotes);
    %获取开高低收数据,N*1
    OPEN = thsData.tables{1,1}.table.open;
    HIGH = thsData.tables{1,1}.table.high;
    LOW = thsData.tables{1,1}.table.low;
    CLOSE = thsData.tables{1,1}.table.close;
    %获取电脑分辨率
    scrsz  = get(0,'ScreenSize');
    %设置窗口大小
    figure('Position',[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);
    %绘制K线图
    candle(HIGH, LOW, CLOSE, OPEN, 'b');
    %利用同花顺历史行情数据K线图Demo简单实现
    title('利用同花顺历史行情函数获取的数据简单实现K线图绘制','FontWeight','Bold','FontSize',15);
end
%登出函数
thsLogout = THS_iFinDLogout();

Matlab数据池函数获取数据保存成数据文件

简介

演示Matlab数据池函数以及THS_DataFromJSON格式转换函数的使用并保存成数据文件。

示例代码

matlab
%% 通过MATLAB获取上证50成分股并保存到TXT中
%用户在使用时请修改成自己的账号和密码
thsLogin = THS_iFinDLogin('账号','密码');
if (thsLogin == 0 || thsLogin == -201)
   %利用数据池函数获取上证50在2016-12-19的成分股
   %数据池函数格式为THS_DataPool('modelName','inputParams','outputParams')
   %modelName不可以为空,且一次只能输入一个
   %inputParams用英文半角分号隔开,如inputParam1;inputParam2;inputParam3
   %outputParams用英文半角冒号赋值,用英文半角逗号分隔,Y表示该字段输出,N表示该字段不输出,如果不写则默认为Y,如outputParam1:Y,outputParam2:Y,outputParam3:N
   %THS_DataPool('modelName','inputParam1;inputParam2;inputParam3','outputParam1,outputParam2,outputParams3')
   
   %【001005260】是板块ID,目前板块ID可以在【iFinD终端-工具-数据接口-板块ID查询工具】查看
   thsDataDataPool = THS_DataPool('block','2016-12-19;001005260','date:Y,security_name:Y,thscode:Y');
   %使用同花顺JSON格式解析函数解析数据
   thsData  = THS_DataFromJSON(thsDataDataPool);
  %或者证券名称
   securityNames=thsData.tables{1,1}.table.SECURITY_NAME;
   thsCodes=thsData.tables{1,1}.table.THSCODE;
   [row, colume] = size(securityNames);
   %将数据保存到txt文件中
   fid = fopen('D:\test.txt', 'wt');
   for i = 1 : 1:row
       thsCode = thsCodes(i, :);
       %fprintf(fid, '%s', thsCode);
       securityName = securityNames(i, :);
       %fprintf(fid, '%s\n', securityName);
       fprintf(fid, '%s:%s\n', thsCode,securityName);
       %securityNameStr = mat2cell(securityName);
       %securityNameCell = cell2mat(nameArr(i,1));
   end
   fid = fclose(fid);
end
%登出函数
thsLogout = THS_iFinDLogout();

Matlab高频序列函数及数据平滑效果展示

简介

演示高频序列函数的使用,以及不同数据平滑方法的数据平滑效果观测。

示例代码

matlab
%% 不同数据平滑方法的数据平滑效果观测
%用户在使用时请修改成自己的账号和密码
thsLogin = THS_iFinDLogin('账号','密码');
if (thsLogin == 0 || thsLogin == -201)
   %利用高频序列函数获取数据同花顺2016-12-12的高频1分钟线数据
   %高频序列函数格式为THS_HighFrequenceSequence('thsCodes','indicators','params','startTime','endTime')
   %thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
   %indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
   %params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'Interval:5'
   %startDate的日期输入格式为YYYY-MM-DD HH:MM:SS
   %endDate的日期输入格式为YYYY-MM-DD HH:MM:SS
   %THS_HighFrequenceSequence('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startTime','endTime')
   
   thsDataHighFrequenceSequence = THS_HighFrequenceSequence('300033.SZ','open;high;low;close;volume;amt',...
   'CPS:0,MaxPoints:50000,Fill:Previous,Interval:1','2016-12-12 09:30:00','2016-12-12 15:00:00');
   %使用同花顺JSON格式解析函数解析数据
   thsData  = THS_DataFromJSON(thsDataHighFrequenceSequence);
   %获取1分钟线的收盘价数据 N*1
   close=thsData.tables{1,1}.table.close;
   %新建一个图像窗口与
   figure;
   %绘制1分钟线收盘价曲线图,黑色实线,线宽为2
   plot(close','K','LineWidth',2)
   %添加X轴Y轴标签
   xlabel('观测序号');ylabel('300033.SZ同花顺1分钟收盘价');
   title('2016-12-12同花顺(300033.SZ)原始收盘价曲线图','FontWeight','Bold','FontSize',15);
   
   %%
    %用盒子法平滑数据
    CLOSE1 = smoothts(close', 'b', 30);%窗宽为30
    CLOSE2 = smoothts(close', 'b', 100);%窗宽为100
    figure;
    %绘制收盘价散点图
    plot(close','. ');
    hold on
    plot(CLOSE1','K','LineWidth',2);%绘制平滑后曲线图,黑色实线,线宽为2
    plot(CLOSE2','K-.','LineWidth',2);%绘制平滑后曲线图,黑色点划线,线宽为2
    xlabel('观测序号');ylabel('Box Method');
    %为图像加标注框
    legend('原始散点','平滑曲线(窗宽30)','平滑曲线(窗宽100)','loacation','northwest');
    title('盒子法平滑后收盘价曲线图','FontWeight','Bold','FontSize',15);
    
    %%
     %用高斯窗方法平滑数据
     CLOSE3 = smoothts(close', 'g', 30);%窗宽为30,标准差为默认值0.65
     CLOSE4 = smoothts(close', 'g', 100, 100);%窗宽为100,标准差为100
     figure;
     %绘制收盘价散点图
     plot(close','. ');
     hold on
     plot(CLOSE3,'K','LineWidth',2);%绘制平滑后曲线图,黑色实线,线宽为2
     plot(CLOSE4,'K-.','LineWidth',2);%绘制平滑后曲线图,黑色点划线,线宽为2
     xlabel('观测序号');ylabel('Gaussian window Method');
     legend('原始散点','平滑曲线(窗宽30,标准差0.65)','平滑曲线(窗宽100,标准差100)','loacation','northwest');
     title('高斯窗方法平滑后收盘价曲线图','FontWeight','Bold','FontSize',15);
     
    %%
     %用指数法平滑数据
     CLOSE5 = smoothts(close', 'e', 30);%窗宽为30,标准差为默认值0.65
     CLOSE6 = smoothts(close', 'g', 100, 100);%窗宽为100,标准差为100
     figure;
     %绘制收盘价散点图
     plot(close','. ');
     hold on
     plot(CLOSE5,'K','LineWidth',2);%绘制平滑后曲线图,黑色实线,线宽为2
     plot(CLOSE6,'K-.','LineWidth',2);%绘制平滑后曲线图,黑色点划线,线宽为2
     xlabel('观测序号');ylabel('Exponential Method');
     legend('原始散点','平滑曲线(窗宽30)','平滑曲线(窗宽100)','loacation','northwest');
     title('指数法平滑后收盘价曲线图','FontWeight','Bold','FontSize',15);
     
end
%登出函数
thsLogout = THS_iFinDLogout();

MatlabTable格式转换函数演示

简介

演示历史行情函数的使用以及转换成Table格式。

示例代码

matlab
%% ***** table数据格式转换 ***** 
%% Matlab table是R2013b中引入的一个新的数据结构,虽然不像常用的基本数据类型为人熟悉,但是在编程中非常有用。它用来存放表状类型的数据结构,并且支持常见的表和表之间的运算。
%% 登录函数,其中[ifind_e001]是账号名称,[ifinde001]是密码
%[ifind_e001]和[ifinde001]是同花顺内部测试账号和内部测试密码,
%用户在使用时请修改成自己的账号和密码
thsLogin = THS_iFinDLogin('账号','密码');
if (thsLogin == 0 || thsLogin == -201)
    %通过历史行情函数获取同花顺(300033.SZ)从2016-08-23到2016-11-23的开高低收数据
    %历史行情函数格式为THS_HistoryQuotes('thsCodes','indicators','params','startDate','endDate')
    %thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
    %indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
    %params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'period:W'
    %startDate的日期输入格式为YYYY-MM-DD
    %endDate的日期输入格式为YYYY-MM-DD
    %THS_HistoryQuotes('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startDate','endDate')
    thsDataHistoryQuotes = THS_HistoryQuotes('300033.SZ','open;high;low;close',''Interval:D,CPS:1,baseDate:1900-01-01,Currency:YSHB,fill:Previous','2016-08-23','2016-11-23');
    %%使用同花顺JSON格式解析函数解析数据--JSON字符串格式转换
    thsData = THS_Trans2Table(thsDataHistoryQuotes);
    %获取各个指标数据
    OPEN = thsData.open;
    HIGH = thsData.high;
    LOW = thsData.low;
    CLOSE = thsData.close;
      
end
%登出函数
thsLogout = THS_iFinDLogout();

R

R语言数据池和基础数据函数使用案例

简介

演示R接口数据池函数和基础数据函数的联合使用,直接对返回的JSON格式数据进行获取并保存。

示例代码

r
library(iFinDR)
library(RJSONIO)
ret = THS_iFinDLogin("账号","密码")
if(ret==0){
  ans  = THS_DataPool("index","2016-11-27;上证50","date:Y,security_name:Y,thscode:Y,weight:Y");
  code = ans$tables[[1]]$table$THSCODE;
  companys=c()
  begintimes=c()
  chairmans=c()
  registersaccounts=c()
  thscodes =c()
  for (i in 1:length(code)){
    ans = THS_BasicData(code[i],"ths_corp_cn_name_stock","")
    company = ans$tables[[1]]$table$ths_corp_cn_name_stock;
    companys=c(companys,company)
    ans = THS_BasicData(code[i],"ths_established_date_stock","")
    begintime= ans$tables[[1]]$table$ths_established_date_stock
    begintimes=c(begintimes,begintime)
    ans = THS_BasicData(code[i],"ths_reg_capital_stock","")
    registersaccount = ans$tables[[1]]$table$ths_reg_capital_stock;
    registersaccounts=c(registersaccounts,registersaccount)
    thscode = ans$tables[[1]]$thscode
    thscodes =c(thscodes,thscode)}
    text<-data.frame(thscodes,companys,begintimes,chairmans,registersaccounts)
    write.table(text,file = "D:/foo2.txt",row.names = F,quote = F,sep="\t")
    }
	else{
    print("登录失败")
  }

R语言数据池和高频序列函数使用案例

简介

演示R接口数据池函数和高频序列函数的联合使用,直接对返回的JSON格式数据进行获取并保存。

示例代码

r
library(iFinDR)
library(RJSONIO)
ret = THS_iFinDLogin("账号","密码")
if(ret==0){
  ans  = THS_DataPool("index","2016-11-27;上证50","date:Y,security_name:Y,thscode:Y,weight:Y");
  code = ans$tables[[1]]$table$THSCODE;
  opens=c()
  highs=c()
  lows=c()
  closes=c()
  thscodes =c()
  times    =c()
  for (i in 1:length(code)){
    ans = THS_HighFrequenceSequence(code[i],"open;high;low;close","CPS:0,MaxPoints:50000,Fill:Previous,Interval:1","2016-11-23 09:35:00","2016-11-23 09:35:00")
    open= ans$tables[[1]]$table$open[1]
    high= ans$tables[[1]]$table$high[1]
    low= ans$tables[[1]]$table$low[1]
    close= ans$tables[[1]]$table$close[1]
    thscode = ans$tables[[1]]$thscode
    time    = ans$tables[[1]]$time
    opens=c(opens,open)
    highs=c(highs,high)
    lows=c(lows,low)
    closes=c(closes,close)
    thscodes =c(thscodes,thscode)
    times    =c(times,time)}
    text<-data.frame(thscodes,times,opens,highs,lows,closes)
    write.table(text,file = "D:/foo1.txt",row.names = F,quote = F,sep="\t")
    }else{
  print("登录失败")}

R语言历史行情函数使用案例

简介

演示R接口历史行情函数获取数据,直接对返回的JSON格式数据进行获取并保存。

示例代码

r
library(iFinDR)
library(RJSONIO)
ret <- THS_iFinDLogin("账号","密码")
if(ret == 0 || ret == -201){
  ans  = THS_HistoryQuotes('600000.SH','open,high,low,close','Interval:D,CPS:1,baseDate:1900-01-01,Currency:YSHB,fill:Previous','2018-12-06','2019-12-06')
  data = THS_Trans2DataFrame(ans)
  print(data)}else{
  print("登录失败")
}

R语言实时行情函数使用案例

简介

演示R接口实时行情函数获取数据,直接对返回的JSON格式数据进行获取并保存。

示例代码

r
library(iFinDR)
library(RJSONIO)
ret = THS_iFinDLogin("账号","密码")
if(ret==0){
  ans  = THS_RealtimeQuotes("300033.SZ","open;high;low;new","pricetype:1")
  code = ans$tables[[1]]$thscode;
  open=ans$tables[[1]]$table$open
  new=ans$tables[[1]]$table$new
  low=ans$tables[[1]]$table$low
  high=ans$tables[[1]]$table$high
  time    =ans$tables[[1]]$time
  text<-data.frame(code ,time,open,new,low,high)
    write.table(text,file = "D:/foo3.txt",row.names = F,quote = F,sep="\t")
    }else{
  print("登录失败")}

时间序列相关性

简介

R语言时间序列,acf相关性分析。

示例代码

r
library(iFinDR)
library(RJSONIO)
library(zoo)
library(xts)
ret <- THS_iFinDLogin('账号','密码')
if(ret==0 || ret== -201){
  hq_data  = THS_DateSerial('300033.SZ','ths_open_price_stock;ths_high_price_stock;ths_low_stock;ths_close_price_stock','100;100;100;100','','2020-09-10','2020-10-10',TRUE)
  result =  THS_Trans2DataFrame(hq_data)
  names(result)[3] = 'Open'
  names(result)[4] = 'High'
  names(result)[5] = 'Low'
  names(result)[6] = 'Close'
  result = result[,-2]
  HQ <- xts(result[,-1],order.by = as.Date(result$time))
  print(HQ)
  acf(HQ)
}

C#

C#接口函数使用案例

简介

演示C#各接口函数的使用,包括底层动态库的封装调用方法,直接对返回的JSON格式数据进行获取并保存。

示例代码

csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
//using Newtonsoft.Json;
using System.Text.RegularExpressions;
using System.Threading;

namespace SampleCSharp
{
    public unsafe delegate int FT_RTCallBack(void* pUser, //函数调用时,调用者传入的参数指针
                       int iQueryID, //函数调用时,返回给调用者,用于指明本次请求的ID
                       char* pResultsBuff,//数据查询返回的结果,JSON格式
                       int iBuffLength, //结果缓存区的长度
                       int ErrorCode,//错误代码
                       int Reserved//预留
                       );
    class Program
    {
        /*
         * E:\\THSDataInterface_Windows\\bin\\x86\\:该目录是用户本地的数据接口安装目录且修复的位数是32位,如果是64位则目录为E:\\THSDataInterface_Windows\\bin\\x64\\
         * FTDataInterface.dll为接口文件,该文件是32位的,如果是64位,则文件名称为FTDataInterface_x64.dll
         */

        public const int REG_OPER_UPDATE = 0x01;
        public const int REG_OPER_ADD = 0x02;
        public const int REG_OPER_DEL = 0x03;


        //修改下面路径为本地数据接口安装包路径;如果是64位则目录为E:\\THSDataInterface_Windows\\bin\\x64\\,文件名称为FTDataInterface_x64.dll
        const string strPath = @"E:\\THSDataInterface_Windows\\bin\\x86\\";
        const string strDllFileName = "FTDataInterface.dll";        
        const string strDllFile = strPath + strDllFileName;

        static void Main(string[] args)
        {
            /*登录函数,填写账号、密码
             */
            string strUserName = "账号";
            string strPassWord = "密码";
            int nRet = THS_iFinDLogin(strUserName, strPassWord);
            string strOut = "Login result:" + nRet;
            Console.WriteLine(strOut);
            Thread.Sleep(3000);

            _event = new AutoResetEvent(false);
            ThreadStart threadStart = new ThreadStart(testSample);
            Thread thread = new Thread(threadStart);
            thread.Start();
            _event.WaitOne();

            //登出函数
            //nRet = THS_iFinDLogout();
            //strOut = "Logout result:" + nRet;
            //Console.WriteLine(strOut);

            Console.ReadLine();
        }

        private static AutoResetEvent _event;
        public static void testSample()
        {
            //高频序列函数
            //HighFrequenceSequenceSample();

            //实时行情函数
            //RealtimeQuotesSample();

            //历史行情函数
            //HistoryQuotesSample();

            //基础数据函数
            //BasicDataSample();

            //日期序列函数
            //DateSequenceSample();

            //数据池函数
            //DataPoolSample();
			
			//专题报表函数
            DataReport();

            //EDB数据请求函数
            //EDBQuerySample();

            //日内快照
            //Snapshot();

            //数据使用量统计函数
            //DataStatisticsSample();

            //错误信息查询函数
            //GetErrorInfoSample();

            //新日期查询函数
            //DateQuerySample();

            //新日期偏移函数
            //DateOffsetSample();

            //日期统计函数
            //DateCountSample();

            //Thread.Sleep(6000);
            //_event.Set();

        }

        static void HighFrequenceSequenceSample()
        {
            string strOut;
            //请求高频数据  传递5个字符串参数,返回数据
            /*高频序列函数格式为THS_HighFrequenceSequence('thsCodes','indicators','params','startTime','endTime')
             * thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
             * indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
             * params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'Interval:5'
             * startDate的日期输入格式为YYYY-MM-DD HH:MM:SS
             * endDate的日期输入格式为YYYY-MM-DD HH:MM:SS
             * 老版本:THS_HighFrequenceSequence('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startTime','endTime')
             */
            strOut = THS_HighFrequenceSequence("301279.SZ,600000.SH", "open;high;low;close;avgPrice;volume;amount;change;changeRatio;turnoverRatio;sellVolume;buyVolume", "Fill:Original", "2021-12-31 09:15:00", "2021-12-31 15:15:00");
            Console.WriteLine(strOut);
        }

        static void Snapshot()
        {
            string strOut;
            //日内快照
            strOut = THS_Snapshot("300033.SZ", "open;high;low", "", "2022-06-13 09:15:00", "2022-06-13 15:15:00");
            Console.WriteLine(strOut);
        }

        static void RealtimeQuotesSample()
        {
            string strOut;
            //请求实时数据
            /*实时行情函数的格式为THS_RealtimeQuotes('thsCodes','indicators','params')
             * thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
             * indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
             * params不可以为空
             * 老版本:THS_RealtimeQuotes('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3')
             * 第三个参数‘pricetype:1’为债券报价方式参数,超级命令生成其他证券类型的命令没有这个参数,但请不要填空,按照下面命令填写‘pricetype:1’
             */
            strOut = THS_RealtimeQuotes("300033.SZ,600000.SH", "open;high;low;latest;latestAmount;latestVolume", "pricetype:1");
            Console.WriteLine(strOut);
        }

        static void HistoryQuotesSample()
        {
            string strout;
            //请求历史行情
            /*
             *通过历史行情函数获取同花顺(300033.SZ)从2016-08-23到2016-11-23的开高低收数据
             *历史行情函数格式为THS_HistoryQuotes('thsCodes','indicators','params','startDate','endDate')
             *thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
             *indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
             *params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'period:W'
             *startDate的日期输入格式为YYYY-MM-DD
             *endDate的日期输入格式为YYYY-MM-DD
             *老版本:THS_HistoryQuotes('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startDate','endDate')
             */
            strout = THS_HistoryQuotes("300033.SZ,600000.SH", "open,high,low,close", "fill:Blank", "2021-11-09", "2021-12-08");
            Console.WriteLine(strout);
        }

        static void BasicDataSample()
        {
            string strOut;
            //请求基础数据
            /*基础数据THS_BasicData('thsCodes','function','params');支持多证券单指标输入
             * thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
             * function不可以为空,且当前只支持单个function,目前函数名称可以在【iFinD终端-工具-数据接口-指标函数查询工具】查看
             * params可以为空,也可以有多个,当有多个params时则用英文半角逗号分隔,如param1,param2,param3
             * THS_BasicData('thsCode1,thsCode2,thsCode3','function','param1,param2,param3')
             */
            strOut = THS_BasicData("300033.SZ,600000.SH", "ths_total_shares_stock;ths_float_ashare_stock", "2022-01-08;2022-01-08");
            Console.WriteLine(strOut);
        }

        static void DateSequenceSample()
        {
            string strOut;
            //请求日期序列
            /*日期系列函数格式为THS_DateSequence('thsCodes','indicators','params','startDate','endDate')
             * thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
             * indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
             * params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'Interval:M'
             * startDate的日期输入格式为YYYY-MM-DD
             * endDate的日期输入格式为YYYY-MM-DD
             * 老版本:THS_DateSequence('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startDate','endDate')
             */
            strOut = THS_DateSerial("000001.SH", "ths_pe_index;ths_pb_index;ths_ps_index", "100,100;100,100;100,100", "Fill:Blank,block:history", "2021-03-23", "2021-04-23");
            Console.WriteLine(strOut);
        }

        static void DataPoolSample()
        {
            string strOut;
            //请求数据池
            /*
             * 数据池函数格式为THS_DataPool('modelName','inputParams','outputParams')
             * modelName不可以为空,且一次只能输入一个
             * inputParams用英文半角分号隔开,如inputParam1;inputParam2;inputParam3
             * outputParams用英文半角冒号赋值,用英文半角逗号分隔,Y表示该字段输出,N表示该字段不输出,如果不写则默认为Y,如outputParam1:Y,outputParam2:Y,outputParam3:N
             * THS_DataPool('modelName','inputParam1;inputParam2;inputParam3','outputParam1,outputParam2,outputParams3')
             * 【001005010】是板块ID,目前板块ID可以在【iFinD终端-工具-数据接口-板块ID查询工具】查看
             */
            strOut = THS_DataPool("block", "最新;001005010", "date:Y,thscode:Y,security_name:Y,security_name_in_time:Y");
            Console.WriteLine(strOut);

        }
		
		 static void DataReport()
        {
            string strOut;
            strOut = THS_DR("p00001", "sclx=沪深两市", "p00001_f001:Y,p00001_f002:Y,p00001_f005:Y,p00001_f007:Y");
            Console.WriteLine(strOut);

        }

        static void EDBQuerySample()
        {
            string strout;
            //请求EDB宏观经济数据
            /*EDB数据请求函数格式为THS_EDBQuery('indicatorIDs','startDate','endDate')
             * indicatorIDs不可以为空,支持多个ID输入。指标ID可以在【iFinD终端-工具-数据接口】中的指标ID查询工具查看
             * startDate的日期输入格式为YYYY-MM-DD
             * endDate的日期输入格式为YYYY-MM-DD
             */
            strout = THS_EDBQuery("M001620247", "2020-01-01", "2020-12-31");
            Console.WriteLine(strout);
        }

        static void DataStatisticsSample()
        {
            string strout;
            //用户数据使用量查询函数
            /*
             * 数据使用量查询函数,用于用户查询自身账号的数据使用量,其中行情数据是15000万条/周,基础数据是500万条/周,EDB数据是500条/周;
             * 通过高频序列函数、历史行情函数和实时行情函数获取的数据统称为行情数据;
             * 通过基础数据函数、日期序列函数和数据池函数获取的数据统称为基础数据;
             * 通过EDB数据请求函数获取的数据统称为EDB数据。
             */
            strout = THS_DataStatistics();
            Console.WriteLine(strout);
        }

        static void GetErrorInfoSample()
        {
            string strout;
            //错误代码信息查询
            /*错误信息查询函数,对于函数执行后的errorcode进行查询,了解错误信息
             * value的值不可以为空,并且value的值必须是枚举出的错误值
             */
            strout = THS_GetErrorInfo(-1);
            Console.WriteLine(strout);
        }

        static void DateQuerySample()
        {
            string strout;
            //方便用户在其自定义的时间区间内查询交易所的交易日历
            /*
             * 交易日期/日历日期查询函数
             * 日期查询函数的格式是THS_DateQuery('exchange','dateType:value,period:value,dateFormat:value','startDate','endDate')
             * exchange不可以为空
             * dateType,period,dateFormat的值也不可以为空
             * startDate的日期输入格式为YYYY-MM-DD
             * endDate的日期输入格式为YYYY-MM-DD
             */
            strout = THS_Date_Query("212001", "mode:1,dateType:0,period:D,dateFormat:0", "2022-05-19", "2022-05-19");
            Console.WriteLine(strout);
        }

        static void DateOffsetSample()
        {
            string strout;
            //根据用户指定一个日期和偏移量查询到相应的交易日期
            /*
             * 根据指定日期和偏移量找到相应的日期
             * 日期偏移函数的格式是THS_DateQuery('exchange','dateType:value,period:value,dateFormat:value','date')
             * exchange不可以为空
             * dateType,period,dateFormat的值也不可以为空
             * date的日期输入格式为YYYY-MM-DD
             */
            strout = THS_Date_Offset("212001", "dateType:0,period:D,offset:0,dateFormat:0,output:singledate", "2022-05-19");
            Console.WriteLine(strout);
        }

        static void DateCountSample()
        {
            string strout;
            //方便用户统一在其自定义的时间区间内查询交易日期的总数
            /*
             * 统计指定时间区间和日期类型中的日期数量
             * 日期查询函数的格式是THS_DateCount('exchange','dateType:value,period:value,dateFormat:value','startDate','endDate')
             * exchange不可以为空
             * dateType,period,dateFormat的值也不可以为空
             * startDate的日期输入格式为YYYY-MM-DD
             * endDate的日期输入格式为YYYY-MM-DD
             */
            strout = THS_DateCount("SSE", "dateType:trade,period:D,dateFormat:0", "2016-07-21", "2017-08-21");
            Console.WriteLine(strout);
        }


/********************************************************************************************************************************************************************/

        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        public static extern int FT_ifinDLogin(string strUserName, string strPassWord, int nType);

        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        public static extern int FT_ifinDLogout();

        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
        unsafe public static extern IntPtr FTQueryTHS_SynDateCountC(string ExchangeCode, //交易所
                                                     string Param, //参数
                                                     string startDate, //函数需要的参数
                                                     string endDate,
                                                     out  char* pret
                                                     );


        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
        unsafe public static extern IntPtr FTQueryTHS_SynDateOffsetC(string ExchangeCode, //交易所
                                                     string Param, //参数
                                                     string endDate,
                                                     out  char* pret
                                                     );


        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        unsafe public static extern IntPtr FTQueryTHS_SynDate_OffsetC(string ExchangeCode, //交易所
                                                     string Param, //参数
                                                     string endDate,
                                                     out  char* pret
                                                     );


        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
        unsafe public static extern IntPtr FTQueryTHS_SynDateQueryC(string ExchangeCode, //交易所
                                                     string Param, //参数
                                                     string startDate, //函数需要的参数
                                                     string endDate,
                                                     out  char* pret
                                                     );



        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        unsafe public static extern IntPtr FTQueryTHS_SynDate_QueryC(string ExchangeCode, //交易所
                                                     string Param, //参数
                                                     string startDate, //函数需要的参数
                                                     string endDate,
                                                     out  char* pret
                                                     );



        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        unsafe public static extern int FTQueryTHS_SynDataPoolC(string DataPoolName, //数据池
                                                     string jsonIndicator, //
                                                     string jsonParam, //函数需要的参数
                                                     out  char* pret
                                                     );



        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
		unsafe public static extern int FTQueryTHS_SynDRC(string DataReportID, //专题报表ID
                                                    string jsonIndicator, //报表参数
                                                    string jsonParam, //报表列名称
                                                    out  char* pret
                                                    );



        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        unsafe public static extern int FTQueryTHS_SynDateSeriesC(string THSCodes, //同花顺代码
                                                     string jsonIndicator, //指标及指标需要的参数
                                                     string jsonParam, //函数需要的参数
                                                     string begintime,
                                                     string endtime,
                                                     out  char* pret
                                                     );

		[DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
        unsafe public static extern int FTQueryTHS_SynDateSerialC(string THSCodes, //同花顺代码
                                                     string jsonIndicator, //指标
                                                     string jsonParam, //函数需要的参数
													 string globalParam,
                                                     string begintime,
                                                     string endtime,
                                                     out  char* pret
                                                     );


        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
        unsafe public static extern int FTQueryTHS_SynBasicDataC(string THSCodes, //同花顺代码
                                                     string jsonIndicator, //指标
                                                     string jsonParam, //函数需要的参数
                                                     out  char* pret
                                                     );



        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
        unsafe public static extern int FTQueryTHS_SynHisQuoteC(string THSCodes, //同花顺代码
                                                     string jsonIndicator, //指标及指标需要的参数
                                                     string jsonParam, //函数需要的参数
                                                     string begintime,
                                                     string endtime,
                                                     out  char* pret
                                                     );

        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
        unsafe public static extern int FTQueryTHS_SynRTByJsonC(string THSCodes, //同花顺代码
                                                     string jsonIndicator, //指标及指标需要的参数
                                                     string jsonParam, //函数需要的参数
                                                     out  char* pret
                                                     );

        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        unsafe public static extern int FTQueryTHS_SynHFQByJsonC(string THSCodes,
                                                      string jsonIndicator,
                                                      string jsonParam,
                                                      string begintime,
                                                      string endtime,
                                                      out  char* pret);

        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        unsafe public static extern int FTQueryTHS_SynEDBQueryC(string jsonIndicator,                                                    
                                                      string begintime,
                                                      string endtime,
                                                      out  char* pret);

        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        unsafe public static extern int FTQueryTHS_SynSnapshotQueryC(string THSCodes,
                                                      string jsonIndicator,
                                                      string jsonParam,
                                                      string begintime,
                                                      string endtime,
                                                      out  char* pret);

        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        unsafe public static extern int FTQueryTHS_SynGetErrorInfoC(int errorcode,
                                                      out  char* pret);

        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        unsafe public static extern IntPtr FTQuery_SynDataStasticsC(out int errorcode, void* reserve1, void* reserve2, void* reserve3);



        [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        unsafe public static extern void DeleteBuffer(char* pret);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//封装的函数命令  直接按照以下封装接口调用即可

        static int THS_iFinDLogin(string UserAcount, string Password)
        {
            int nRet = FT_ifinDLogin(UserAcount, Password, 0);
            return nRet;
        }

        static int THS_iFinDLogout()
        {
            int nRet = FT_ifinDLogout();
            return nRet;
        }

        unsafe static string THS_HighFrequenceSequence(string THSCodes,
                                                      string jsonIndicator,
                                                      string jsonParam,
                                                      string begintime,
                                                      string endtime)//高频序列新版接口
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynHFQByJsonC(THSCodes, jsonIndicator, jsonParam, begintime, endtime, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        unsafe static string THS_Snapshot(string THSCodes,
                                                      string jsonIndicator,
                                                      string jsonParam,
                                                      string begintime,
                                                      string endtime)//日内快照
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynSnapshotQueryC(THSCodes, jsonIndicator, jsonParam, begintime, endtime, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        unsafe static string THS_RealtimeQuotes(string THSCodes, //同花顺代码
                                                     string jsonIndicator, //指标及指标需要的参数
                                                     string jsonParam //函数需要的参数
                                                       )//实时行情新版接口
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynRTByJsonC(THSCodes, jsonIndicator, jsonParam, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        unsafe static string THS_HistoryQuotes(string THSCodes, //同花顺代码
                                                     string jsonIndicator, //指标及指标需要的参数
                                                     string jsonParam, //函数需要的参数
                                                     string begintime,
                                                     string endtime
                                                     )//历史行情新版接口
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynHisQuoteC(THSCodes, jsonIndicator, jsonParam, begintime, endtime, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        unsafe static string THS_BasicData(string THSCodes, //同花顺代码
                                                     string jsonIndicator, //指标
                                                     string jsonParam //函数需要的参数
                                                     )//基础数据新版接口
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynBasicDataC(THSCodes, jsonIndicator, jsonParam, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        // unsafe static string THS_DS(string THSCodes, //同花顺代码
                                                     // string jsonIndicator, //指标及指标需要的参数
                                                     // string jsonParam, //函数需要的参数
                                                     // string begintime,
                                                     // string endtime)//日期序列新版接口
        // {
            // string strOut;
            // char* Pret;
            // FTQueryTHS_SynDateSeriesC(THSCodes, jsonIndicator, jsonParam, begintime, endtime, out  Pret);
            // IntPtr data = new IntPtr(Pret);
            // strOut = Marshal.PtrToStringUni(data);
            // DeleteBuffer(Pret);
            // return strOut;
        // }

        unsafe static string THS_DateSerial(string THSCodes, //同花顺代码
                                                     string jsonIndicator, //指标
                                                     string jsonParam, //函数需要的参数
													 string globalParam,
                                                     string begintime,
                                                     string endtime)//日期序列新版接口
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynDateSerialC(THSCodes, jsonIndicator, jsonParam, globalParam, begintime, endtime, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        unsafe static string THS_DataPool(string DataPoolName, //数据池
                                                     string jsonIndicator, //
                                                     string jsonParam //函数需要的参数
                                                     )//数据池新版接口
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynDataPoolC(DataPoolName, jsonIndicator, jsonParam, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }
		
		unsafe static string THS_DR(string DataReportID, //专题报表ID
                                             string jsonIndicator, //报表参数
                                             string jsonParam //报表列
                                             )//专题报表接口
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynDRC(DataReportID, jsonIndicator, jsonParam, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        unsafe static string THS_Date_Query(string ExchangeCode, //交易所
                                                     string Param, //参数
                                                     string startDate, //函数需要的参数
                                                     string endDate)//日期查询新版接口
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynDate_QueryC(ExchangeCode, Param, startDate, endDate, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        unsafe static string THS_Date_Offset(string ExchangeCode, //交易所
                                                     string Param, //参数
                                                     string endDate)//日期便宜新版接口
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynDate_OffsetC(ExchangeCode, Param, endDate, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        unsafe static string THS_DateCount(string ExchangeCode, //交易所
                                                     string Param, //参数
                                                     string startDate, //函数需要的参数
                                                     string endDate)//日期数量新版接口
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynDateCountC(ExchangeCode, Param, startDate, endDate,  out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        unsafe static string THS_EDBQuery(string jsonIndicator,
                                                      string begintime,
                                                      string endtime
                                                      )
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynEDBQueryC(jsonIndicator, begintime, endtime, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }

        unsafe static string THS_DataStatistics()
        {
            string strOut;
            int code;
            strOut = Marshal.PtrToStringUni(FTQuery_SynDataStasticsC(out code, null, null, null));
            return strOut;
        }

        unsafe static string THS_GetErrorInfo(int code)
        {
            string strOut;
            char* Pret;
            FTQueryTHS_SynGetErrorInfoC(code, out  Pret);
            IntPtr data = new IntPtr(Pret);
            strOut = Marshal.PtrToStringUni(data);
            DeleteBuffer(Pret);
            return strOut;
        }
/**********************************************************************************************************************************************/

    }
}

Java

java接口函数使用案例

简介

演示java接口函数的简单使用。

示例代码

java
import java.util.Scanner;

import java.lang.Thread;

import Ths.JDIBridge;

public class test  {

public static void main(String[] args) {

		System.out.println(System.getProperty("java.library.path"));
		System.load("E://bin//x64//iFinDJava_x64.dll");
		int ret = -1;
		if (args.length > 0) {
			System.out.println("login with cn account");
		}
		 else {
				System.out.println("login with en account");
			}
	
		int a = 0;
		if (ret != 1) {
			while(true)
			{
			System.out.print(++a);
			ret = JDIBridge.THS_iFinDLogin("账号", "密码");
			System.out.println("THS_iFinDLogin ==> ");	
			
			
				
			String strResultDataSerious = JDIBridge.THS_DateSerial("002233.SZ","ths_open_price_stock;ths_high_price_stock;ths_low_stock;ths_close_price_stock;ths_avg_price_stock;ths_vol_stock;ths_trans_num_stock;ths_amt_stock;ths_macd_stock;ths_kdj_stock;ths_vstd_stock;ths_boll_stock;ths_rsi_stock;ths_ma_stock;ths_sar_stock;ths_wr_stock;ths_cci_stock;ths_obv_stock;ths_vol_w_stock;ths_vol_m_stock","100;100;100;100;100;100;;;26,12,9,100,100,100;9,3,3,100,100,100;10,100;26,2,100,100,100;6,100,100;10,100,100;4,100,100;14,100,100;14,100,100;100,100,100;;","Days:Tradedays,Fill:Previous,Interval:D","2018-05-31","2018-06-15");
			System.out.println("THS_iFinDhis ==> " + strResultDataSerious );
			
		  
			JDIBridge.THS_iFinDLogout();
			System.out.println("THS_iFinDLogout ==> ");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}			
			}
		}
		else {
			System.out.println("Login failed == > " + ret);
		}
	}

}