策略开发工具介绍-国联期货_第1页
策略开发工具介绍-国联期货_第2页
策略开发工具介绍-国联期货_第3页
策略开发工具介绍-国联期货_第4页
策略开发工具介绍-国联期货_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、淘策略版权所有淘策略策略开发工具使用说明书国联期货有限责任公司glqh co., ltd.前言41. 历史版安装42. 历史版卸载83. 策略编写93.1. 新建策略工程93.1.1. 启动策略编写ide93.1.2. 新建策略工程133.1.3. 导入已有策略工程143.2. 策略模板193.3. 策略实例(macdcross ) 193.4. 策略引擎配置243.5. 策略配置2536策略调试263.7. 策略编译273.8. 策略打包284. 策略回验294.1. 启动回验294.2. 策略绩效报告315. 策略上传32淘策略客户端是专为淘策略认证用户提供的一整套标准完善的从策略生产、验

2、证、展示、执行的流程化服务。主要功能包括:数据服务、策略运行、虚拟交易、绩效分析、策略回验在下载安装完淘策略客户端后,如果您拥有开发者资格,则需要继续安装策略开发工具 后才可编写策略,本文将介绍如何在淘策略客户端中使用策略开发工具。1历史版安装下载淘策略客户端,登录客户端,只有在网站申请了开发者资格后才可以安装策略开发工具。(1) 点击淘策略客户端右上角的"下载安装策略安装包"按钮,弹出下载界面:(2 )当下载进度达到100%时,自动弹岀安装向导界面,如下图:(3)按照向导点击”下一步“继续安装,并弹出以下组件选择界面:s qsim.mingw 20130115.15224

3、1迭择组件选择你想要安装“qsimingw 20130115j52241 "的那些功能。韋选你想要安装的组件,并解除勾选你不希望安装的组件。单击下一步00纟隹选定安装的组件:所需空间:1.1gb第三方组件h0 qsim丄叼qide远指针至i更可见至i< 上一步(t)| t一步 )>取消©该向导提示用户需要安装的组件(默认安装所有组件),用户可以将鼠标停留在相应的组 件名上以查看组件功能简述。向导提示用户安装该软件不同组件所需的空间,用户必须确保安装地址下有足够的空间。(4)组件选择界面点击下一步后,弹出安装位置选择,如下图:0 qsim.mingw 201211

4、30.133328 安装选择安装位羞选择"qsiii-iingw 20121130.133328 的安装文件夹。i a i| e甑熾翹顏勰饌誓簣安翱浮叡蠶評不同文件夹'单目标文件夹d:program fileskgtaqsijn_mingw浏览(b)所需空间:1.1gb 可用空间:92. 6gb上一步(p) 安装(i)取消(c)默认安装在c: program files下,用户如需安装在其他文件夹下,单击浏览"后选择相 应的文件夹即可。该向导提示用户需要安装的组件(默认安装所有组件),用户可以将鼠标停留在相应的组 件名上以查看组件功能简述。向导提示用户安装该软件不同

5、组件所需的空间及当前盘符下可用空间,用户必须确保可 用空间大于所需空间才能进行安装。(5 )点击安装",系统进入安装界面,如下图:仪仪权仪取仪仪权仪权 【i x - ><xmlxmjnx 【x i i 【i x - z xmlx k i x 【xi i hmj a yhk i u yhlihmj a yhk jhl yhli100%100%100%100%100%100%100%100%100%100%取消(c)<上一步(p)下一步(n) >s qsim.mingw 20121130.133328 安装正在安装“qsinjingw 20121130_13332

6、8”正在安装,请等候扌由取:s-inigbiu. ads s-geveop. adb. s-geveop. ads. s-gloloc. adb. s-gloloc. ads. s-hibaen. ads. s-htable. adb. s-htable. ads. s-imenne. adb. s-imenne. ads. s-imgbiu. adb. 安装完成后,点击完成",国联期货策略服务平台软件即安装到了本地。(6)安装结束后,自动弹出行情和基本面数据服务的地址配置界面,如下图:服务ip可以输入: ,输入完成后点击下一步完成策略开发工具的安装。您也可以跳过这一步 下次重新点击

7、"开始"> 所有程序">gta->qsim -> configure启动配置界面。2.历史版卸载请按照以下流程卸载本软件。(1)点击开始"-> 所有程序"->gta->qsim >uninstall图标z弹出确认卸载界面,如下:(2 )点击"是"确认卸载,点击:"否"放弃卸载。确认后程序开始删除相关文件,如下gj qsim_mingw 20121130_133328 卸载正在卸载"qsinijiingw 20121130_133328w 正在卸载,

8、请等候.关闭(l)取消(c)删除文件:d:program filesgtaqsim_mingwqidemingwlibgccjiingw324. 6. 2e删除文件 删除文件 删除文件 删除文件 删除文件 删除文件 删除文件1除文件 删除文件 删除文件 曲|险仕d:prograjn filesgtaqsin_mingvqidemingvlibgccniingw32. >d:prograni filesgtaqsiii_mingvqidefflingvlibgccniingw32.d:program filesgtaqsiiljhngwqidemingvlibgccningw32.d:pr

9、ograin filesgtaqsin_mingwqidemingvlibgccringw32.d:progtaift filesgtaqsiji_mingwqidemingvlibgccmingw32.d:progran filesgtaqsin_mingvqidemingvlibgcciiingw32.d:program filesgtaqsim_mingvqidemingvlibgccmingw32.d:program filesgtaqsiji_mingvqidefflingvlibgccmingw32.d:program filesgtaqsin_mingvqideming¥

10、;libgccniingw32.d:program filesgtaqsinjhngwqidemingvlibgccniingw32.卸载完成后,弹出成功移除界面,点击确定"即完成软件卸载。(卸载后,下次可以继续在淘策略客户端点击安装。)3-策略编写3.1. 新建策略工程3.1.1. 启动策略编写ide策略安装完成后,点击淘策略客户端右上方的策略编写"按钮,弹出策略编写ide的初专业的程序化策略开发工具始化界面,如下图所示:淘策略专用函数库:支持300多个金融函数和指标回验:高仿真历史数据绩效回验整合:程序化策略与电子商务平台完美整合copyright(c) 201 1-2

11、01 2 glqh. all rights reserved.同时每次启动策略软件,策略开发工具会要求用户选择一个workspace文件夹,用以存放工程文件,如下图:(注:系统默认在e盘创建一个命名为workspace的文件夹(如已创建,则直接存放在e:workspace文件夹下),如用户选择其他文件夹保存工程文件,点击browse')点击ok后”初始化界面显示登录进度并进入工程界面。注:首次使用该平台软件或者重新安装并更改工作空间时,选择workspace后会弹岀欢迎界面,如下图:该界面是eclipse的欢迎界面,用户在该界面下有两种方式进入策略工程构建页面:(1)点击页面左上角的w

12、e,come图标的关闭按钮以跳过欢迎界面,并进入strategy 工程界面,如下图: 昭困q strategy strategy developmentfile edit source refactor navigate search project run window help白 iq strategy 即(2)点击欢迎页面右上角的(3)策略编写界面介绍:a strategy it1x busdate* datefind x datevec x dayx days36o x days365 寓 daysact « eomdate x eomday 直 hourw isbusday

13、 » lbusdatc xinuj>* month菜单栏工b文件号航区策略编辑区函 标导航区工具栏tl problemsdescriptionoutput 区(1)菜单栏,菜单栏是eclipse关于显示和操作的汇总,每一个菜单项的具体使用方法 请参见helpo(2 )工具栏,工具栏摆放的是快捷使用工具,本文档会具体说明本软件将要用到的几个 工具的使用方法,其他工具使用方法请参见helpo(3 )文件导航区,构建工程时,会在此区域生成工程文件,方便用户的查找。(4)策略编辑区,在该窗口下生产策略模板,并进行策略编写。(5 )工程类切换区,该区域用于选择需要构建的工程类别,如jav

14、a、c+等,本软件构建strategy类工程,即策略工程。(6 )函数和指标导航区,该区域将策略编写将要使用的api都按类别摆放于此,用户只需双击某个api即可插入策略工程,共有4类api :行晴api、交易api、函数和 指标,每个类又分为几个小类。具体的api函数说明请参见11.策略帮助。(7 ) output区用于显示调试、编译和运行时的一些输出信息。3.1.2.新建策略工程在策略编写界面下,点击file-> new->strategy project,或者点击工具栏的乃图标,弹出新建工程信息输入界面,如下图:该界面操作如下:(1)在project name条目下输入工程名称

15、(注:要求工程名唯一,否则 无法创建)(2)选择工程文件存放地址,使用默认工程存储地址(登陆软件时选择的工作目录)或者 点击browse选择其他工程目录。(3 ) project type下默认设置选中strategy project,此处当前只有一种工程类型可选, 之后可以在项目下添加其他策略模板,用户可进行选择。toolchains当前只支持mingwgcc ,此处用户无需做任可操作。点击next'后将提示用户输入一些个人信息,如作者、版权等说明,这些信息的填写可 直接跳过,点击finish'快速完成策略工程的创建。如创建i test策略工程,点击'finish&#

16、39;后,生成test工程界面,如下图:这是一个策略模板,用户只需要在相应的回调函数下写相关的策略逻辑即可,关于策略模板的介绍详见->3.2.策略模板;关于各api使用说明详见>口.策略帮助。(注:如用户通过工具栏衫图标新建策略工程时,请在下拉菜单选择strategy project,其他操作同第一种方法)3.1.3.导入已有策略工程将一个或多个本地已存在的策略工程(需源码存在)导入到ide ,可按以下操作进行,点击file->import.,弹出以下界面:在该界面下依次选择general-exiting projects into workspace后,点击"下一

17、步",弹browse.browse.select alldeselect allrefresh国 importimport projectsselect a directory to search for existing eclipse projects.。丿 select root directory:select archive file:projects:copy projects into workspaceworking setsadd project to working setsselect.working sets:v backnext >finishcanc

18、el说明1 :单个导入策略工程,可以在该界面下选中select root directory (默认选中),在后面的输入框下输入策略工程文件夹所在目录,如e:国联项目版本macdcross ,键入回车键,或者点击browse',添加相关的工程文件夹即可,如添加一个macdcross的策略工程sj ide,界面如下:10 importimport projectsselect a directory to search for existing eclipse projects.。select root directory: e:国联项目ksxmacdcrossbrowse.select

19、 archive file:browse.projects:v| macdcross (e:国联项目版macdcross)select alldeselect allrefreshcopy projects into workspaceadd project to working setsselect.working sets:< backnext >finishcancel如上图,选择了每个策略工程文件夹后,在projects下方显示框下该策略名称和工程目录就会显示出来,并且是默认选中状态,点击finish'后,将该工程加入ide里。说明2 :批量导入多个策略工程(要求多

20、个工程保存在同一文件夹下),则选中select rootdirectory (默认选中),在后面的输入框下输入策略工程保存的目录,如输入e国联项目版本,键入回车键,界面显示如下:如上图,在projects下方显示框中显示有4个策略工程,灰色不能选中的macdcross策略工程已经被导入,勾选策略工程前的复选框表明选中导入该工程,否则不导入。点击finish完成导入操作。3.2.策略模板define lib.qstrategy.api.export"include "qse_apih"9include "config_apih"include &

21、quot;testl.h*头文件定义qstrategy.api.export void _callbind ontickquote(quotetickdata tick.quotel, / todo播收分笙行情int item count),接收分笔行情(注,分笔和分时行情api使用依实际接入的行情而定)qstrategy.apiexport void .callbind onfreqquote(kfrequency frequency,quotefreqdata freq_quote(, int item.count)/ todo捋收分时行ttiqstrategy_api_export vo

22、id .callbind onexecutlonrepoxt(executlonreport iexec.report) i/ todo成交回报qs7tu1tgy.api.export int .callbind onlnito/ todo策略初始化接收分时行情(注:分笔和分时行悄api使用依实际接入的行情而定)return 0; qsttuvregy-api.export xnt .callbind onstaxto / todo策略开始运行return 0;qstrategy.api.export int .callbind onstopo/ todo策略停止return 0;qstrat

23、cgy.api.export int .callbind ondestroyo / todo策略销尖return 0;3.3.策略实例(macdcross )以下展示一个ama的策略实例:策略开始运行策略停止运行策略销毁f*计算ama指标*当ama反转上涨时,平仓买1手,并且开仓买1手;*当aha反转下跌时,平仓卖1手,并且开仓卖1手*客*,'#dcfinc ib_qstrategy_api.exportttincludeamatest1 hincludecustom_order h"#i ncludc"quote_cache h"#i ncludc#i

24、nelude<iostream><string>#i nelude<list>using namespace qconfigapi;using namespace ns_custom_order:using namespace ns_single_index_cache:行情缓冲stat ic freqquotelndexcache* freq_cache;qstrategy_api export void callbind ontickquotecquotetickdata tick_quote, int item count) / todo接收分笔行悄)

25、qstrategy_api_export void _callbind onfreqquote(kfrequency frequency, quotefreqdata freq_quote, int item_count) /接收分时行情for (int i = 0; i < item_count: +i) if (i != 0)return;stat ic int revcount = 0;revcount+:std: :cout<</zrevcount=4z<<revcount<<sld: :endl;/刷新行情缓冲quotefreqdata&am

26、p; qimte_dnta = freq_quotei:freq cache->updatefreqquotc (frequency, quote data):/计算指标数据double data_out_array40j;int data_length = freq_cache->getindexarray(data_out_array, 40);/std: :cout<</data_length=zr<<data_length<<std:endl:double date ama40:int ama length = 40;int comput

27、e_result = ama(diita_out_array, data_length, 10, 2, 5, date_ama, &ima_lcngth);/下单操作订 (cotnpule_rcsult)int orderresult = 0;if (amaength >= 3 && date_amaamajengtht > date_amaama_length-2 && datc-amaama-lcngth-2 <= date.amaama.length-3)/下单平仓买入1手customorder custom order2(quo

28、te_data. securitytd, quote_data. securityexchange, kordtypemarket, quotc_data. closcpx,1.kpositioneffectclosc, ksidemore);/order result = custom order2. placeordcro : std: :cout « "下单平仓买入 1 手 * « std:endl: if (orderresult = 0) return; else (std:cout << "平仓失败丫 « std:end

29、l;/下单开仓买入1手customorder custom order3(quote_data. securitytd, quotc_data. securityexchange, kordtypemarket, quotc_data. closcpx,1.kpositioneffectopen, ksidemore);custom order3. placeordcro ;std: :cout « "下单开仓买入 1 手 * « std:endl:else if (ama.length >= 3 && date_amaama_length-

30、l < date_amaamaength-2 &&datc-amaama-lcngth-2 >= date.amaama.length-3)/下单平仓卖出1手customorder custom_ordcr2(quole_dala securi tyld, quote_data securi tyexchange, kordtypemarkct, quote_data closepx,1,kpositioneffeetclose, ksideshort);order_result = custom order2placeorder(); std: :cout 

31、71; "下单平仓卖出 1 手"<< sld:endl; if (order_result = 0) /return; else std:cout << "平仓失败"<< std: :endl;/下单开仓卖出1手customorder custom_order3(quote_data securi tyld, quote_data securi tyexchange, kordtypemarkct, quote_data closepx,1,kposi tioneffeetopen, ksideshorl);custo

32、m_order3.placeorder ();std: :cout « "下单开仓卖出 1 手"<< sld:endl;qstrategy_apt_export void callbtnd onexecutionreport (executionreport &exec_report) / todo成交回报qstrategy_api_export int _callbind onlnitq/策略初始化/读取配置文件strategyconfig config;getstrategyconfig(config);int quote_period =

33、 0;config getintitem(quoteperiod*, quote_periocl); if (quote_period = 1) elseifififififfreq_cache = new frcqquotelndexcache(kdataindcxcloscpx> (quote_pcriod = 5) freq_cache = new frcqquotelndexcache(kdataindcxcloscpx> (quote period = 10) freq_cache = new frcqquotelndexcache(kdataindcxcloscpx&g

34、t; (quote period = 15) freq_cache = new frcqquotelndexcache(kdataindcxcloscpx> (quote period = 30) freq_cache = new frcqquotelndexcache(kdataindcxcloscpx> (quote period = 60) freq_cache = new frcqquotelndexcache(kdataindcxcloscpx> (quote period = 270) freq_cache = new frcqquotelndexcache(kd

35、ataindcxcloscpx>10000,10000,10000,10000,10000,10000,10000,kercqucncylmin); kercqucncy5min); kercqucncylomin); kercqucncyl5min); kercqucncy30min); kercqucncylllour); kercqucncylday);return 0;)qstrategy_api_export int _c/llb1nd onstarto / todo策略开始运行return 0;)qstrategy_api export int _callbind onsto

36、po/ todo策略停止,策略监控端发停止指令后调用return 0;)qstrategy_api_export int callbtnd ondestroyo/ todo策略销毁,策略监控端发停止指令后调川return 0;3.4.策略引擎配置每一个策略都有一个策略引擎配置文件,其中的配置项基本都是系统配置,包括数据库连接 配置、规则库配置等,这些配置中除environment的部分参数用户有可能进行修改外,其 他配置在给用户部署时,这些配置会相应地配置好,用户无需自行修改。策略引擎配置文件(以macdcross策略为例)查看和修改操作流程:点开文件导航区 macdcross策略,点开exe

37、文件夹,找到qsimapplication.xml ,双击打开,配置项中关 于environment的参数主要是关于行情模式、开/收盘时间、以及佣金费率等的设置,用户可根据实际情况自行配置,如下图所示: ej environment?p b item卜回放速率全速:0倍速:124 8回 item9-开盘时间p 回 item!-炖时间回 item年化嗣睑媪率回 item2-保证金比例t> 回 itemox9比例(1)行情模式,无需修改,部署时,部署安装人员会根据实际情况给用户部署回验版本和实时版本;(2) 回放速率,无需修改,回验版本下,是以全速进行行情播放以最大化回验速度;(3) 开盘时

38、间,无需修改,这里的开盘时间是用于清算服务的;(4) 收盘时间,无需修改,这里的收盘时间是用于清算服务的;(5) 年化无风险收益率,该设置会在计算绩效时使用,用户可自行设置;(6) 保证金比率,无需设置,这里的保证金率用于清算服务;(7) 手续费率,该配置会在计算绩效时使用,用户可自行设置。3.5.策略配置 & testu 伏 binariesv 血 includes u & src> 3 debug“ & exe打开策略文件导航如u 斜 included & liblx libtest.xml对应的libtest.xml文件即为对应策略的配置文件,双击打

39、开后,可看到其所有的配置项:nodecontentversion=*1.0* encoding=*utf-8"回 gta 回 description b item® version1.0匣 item® authorgta item® createtime20120723 gj item strategynametest,叵 item® instruction用户说明信邑策略名称 item® keystrategyname® valuelibmacdcross回 securitylist!-证券代码交易所2-上師s/se,中金

40、所:cwfx,郑州期货左易所:czce 大连期货交易所:dc匕上海期肖交县所:she卜i*(£j item“回 accountaccout:下单账昌password:资金账号邑码branch no:分支昌/皀业部代码叵 item® accoutk0000001® password000001 branchnoqcs1叵 item® accoutk0000002® password000001® branchnoqcs1 i£ configurations订缄宾中分笔:0分笔:1,5,10,30,60 £ item&

41、#174; keyquote period® value1卜 (1 item9j始資全® keyinitf-und® value1000000!-订噸期叵 item® keyplaybackdate® value20120517,20120517!订浜时间叵item keyplaybacktime® valueo93ooo_113ooo,130000.150000在该配置文件里,用户根据策略需求配置相应的项(注:上图中所配项为默认配置(注在策略配置窗口下的design和source选项卡用于选择在界面或者代码里配置13.6.策略调试(

42、1)断点设置,在策略编写窗口的最左边位置双击添加断点,如下图所示:qstrategy_api_export void _callbind onfreqquote(kfrequency frequencyquotefreqdata / todo接收分些行情_std: cout << '接收分时彳亍情:"<< freq_quote0 .tradeday << m k << f req_quote0ntypedef std:map<std:string, macdlnfo > ma_map;static ma_map ma

43、_map;於g ,片std:list<order*> order_list;for (int i=0;i<item_count;+i) (2)启动调试在策略编辑界面的工具栏点击梦按钮的下拉三角,弹出下拉菜单,如下图:宫 1 testt 2 macdcrossz 3customtradedebug asdebug configurations.organize favorites.,直接选择相应工程/如macdcross ,或者点击debugconfigurations.弹出debug配置界面z如下图所示:h debug configurationso'-e c/c+

44、applicatione customtrade 叵 macdcross e teste c/c + + attach to ap| 0 c/c + + postmortemf: c/c+ remote appl =main <x>s arguments environment debugger、rv source commonc/c + + application:exe/qsimapp.exesearch project.browse.pixjject:macdcrossbrowse.name: macdcrossbuild (if required) before launc

45、hing eclipse application k java applet 玄 java application ju junitju junit plug-in test launch groupbuild configuration:use active“ select con figuration using 'c/c + + application'© enable auto build© disable auto build® use workspace settingsconfigure workspace settings osgi

46、 frameworkfilter matched 15 of 16 iterrusing gdb (dsf) create process launcher select otherapp'yrevertcreate, manage, and run configurationsclosedebug在左边的导航区c/c+application下选择需调试的工程,如macdcross ,并在右边的配 置区配置相应的参数(debug参数配置同运行参数配置),之后点击界面下方的debug按钮即可进入调试界面,调试界面如下:debug - m«cdcrom/vc/macdcrmt c

47、ppo函7* thread (14j 0 (uvpcndrd : bnmkpowm) juo -zsmcoufom««kr<nvcpp4)0x642«lm)ud rmp«ud: b*wotr»ng« mcdmo a在调试界面下,按f5进入函数,f6进行单步调试,f7跳出函数,f8跳到下一个断点。3.7.策略编译策略编写和调试完成后,在文件导航区右键单击某个工程,点击build project后,工程开 始编译”编译完成后”会在策略目录下生成一个binaries文件,里面存放着策略dll文件,弑 binaries如图:hbmacd

48、cross.dli - x86/le。建议每次编译前先执行clean project命令,确保ide上策略配置信息的修改能更新到配置本地.xml文件中去。注:右键默认编译debug版本,也可以在界面工具栏的 位置选择要编译的版本并编 译。3.8.策略打包策略编译完成后,可以将策略打包成压缩包文件,并保存在本地,操作流程为:点击界面21具栏的打包按钮a ,弹出下图:说明1 :左边框列举了该策略工程下所有文件夹,点击每个文件夹,会在右边框里显示该文 件夹下所有的文件,用户在左边框里勾选需要打包的文件即可,系统默认打包release版本, 用户可以在版本前的复选框中选择需打包的版本。说明2 :由于策

49、略上传时是将策略的可执行文件和配置文件打包上传,所以默认打包策略工 程的.dll (需要打包前手动编译)和.xml两个文件,建议用户打包时至少包含这两个文件, 其他文件是否打入压缩包依用户而定。说明3 :打包操作也可彳各整个策略工程,或者工程下某个文件夹一起打进压缩包。说明4 : to directory用于输入或选择.zip文件存放的地址,打包时系统会自动默认填写策略名.zip如macdcross.zip “点击finish后系统自动将该zip包保存在该策略工程的目录里,如e:workspacemacdcrosso如用户希望将zip包保存在其他目录下,可点击后面的browse选择相应的目录并

50、填写文件名(即zip文件名称,可直接试用策略工程名.zip ) 后,点击finish即完成打包操作。4.策略4.1.启动编译完成后,点击界面工具栏中°图标的下拉箭头(如直接运行则点击箭头即可),在下拉菜单中选择run configuration进行运行参数配置,如下图:s run configurationscreate, manage, and run configurationsname: macdcrosstype filter text c/c+ application customtradee macdcross test eclipse application0 java appletls java applicationju junitju juni

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论