demo-backup.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. # -*- coding:utf-8 -*-
  2. __author__ = 'weijie'
  3. from EmQuantAPI import *
  4. from datetime import timedelta, datetime
  5. import time as _time
  6. import traceback
  7. print("开始了")
  8. def mainCallback(quantdata):
  9. """
  10. mainCallback 是主回调函数,可捕捉如下错误
  11. 在start函数第三个参数位传入,该函数只有一个为c.EmQuantData类型的参数quantdata
  12. :param quantdata:c.EmQuantData
  13. :return:
  14. """
  15. print ("mainCallback",str(quantdata))
  16. print("开始了2222")
  17. #登录掉线或者 登陆数达到上线(即登录被踢下线) 这时所有的服务都会停止
  18. if str(quantdata.ErrorCode) == "10001011" or str(quantdata.ErrorCode) == "10001009":
  19. print ("Your account is disconnect. You can force login automatically here if you need.")
  20. #行情登录验证失败(每次连接行情服务器时需要登录验证)或者行情流量验证失败时,会取消所有订阅,用户需根据具体情况处理
  21. elif str(quantdata.ErrorCode) == "10001021" or str(quantdata.ErrorCode) == "10001022":
  22. print ("Your all csq subscribe have stopped.")
  23. #行情服务器断线自动重连连续6次失败(1分钟左右)不过重连尝试还会继续进行直到成功为止,遇到这种情况需要确认两边的网络状况
  24. elif str(quantdata.ErrorCode) == "10002009":
  25. print ("Your all csq subscribe have stopped, reconnect 6 times fail.")
  26. # 行情订阅遇到一些错误(这些错误会导致重连,错误原因通过日志输出,统一转换成EQERR_QUOTE_RECONNECT在这里通知),正自动重连并重新订阅,可以做个监控
  27. elif str(quantdata.ErrorCode) == "10002012":
  28. print ("csq subscribe break on some error, reconnect and request automatically.")
  29. # 资讯服务器断线自动重连连续6次失败(1分钟左右)不过重连尝试还会继续进行直到成功为止,遇到这种情况需要确认两边的网络状况
  30. elif str(quantdata.ErrorCode) == "10002014":
  31. print ("Your all cnq subscribe have stopped, reconnect 6 times fail.")
  32. # 资讯订阅遇到一些错误(这些错误会导致重连,错误原因通过日志输出,统一转换成EQERR_INFO_RECONNECT在这里通知),正自动重连并重新订阅,可以做个监控
  33. elif str(quantdata.ErrorCode) == "10002013":
  34. print ("cnq subscribe break on some error, reconnect and request automatically.")
  35. # 资讯登录验证失败(每次连接资讯服务器时需要登录验证)或者资讯流量验证失败时,会取消所有订阅,用户需根据具体情况处理
  36. elif str(quantdata.ErrorCode) == "10001024" or str(quantdata.ErrorCode) == "10001025":
  37. print("Your all cnq subscribe have stopped.")
  38. else:
  39. pass
  40. def startCallback(message):
  41. print("[EmQuantAPI Python]", message)
  42. return 1
  43. def csqCallback(quantdata):
  44. """
  45. csqCallback 是csq订阅时提供的回调函数模板。该函数只有一个为c.EmQuantData类型的参数quantdata
  46. :param quantdata:c.EmQuantData
  47. :return:
  48. """
  49. print ("csqCallback,", str(quantdata))
  50. def cstCallBack(quantdata):
  51. '''
  52. cstCallBack 是日内跳价服务提供的回调函数模板
  53. '''
  54. for i in range(0, len(quantdata.Codes)):
  55. length = len(quantdata.Dates)
  56. for it in quantdata.Data.keys():
  57. print(it)
  58. for k in range(0, length):
  59. for j in range(0, len(quantdata.Indicators)):
  60. print(quantdata.Data[it][j * length + k], " ",end = "")
  61. print()
  62. def cnqCallback(quantdata):
  63. """
  64. csqCallback 是cnq订阅时提供的回调函数模板。该函数只有一个为c.EmQuantData类型的参数quantdata
  65. :param quantdata:c.EmQuantData
  66. :return:
  67. """
  68. # print ("cnqCallback,", str(quantdata))
  69. print("cnqCallback,")
  70. for code in quantdata.Data:
  71. total = len(quantdata.Data[code])
  72. for k in range(0, len(quantdata.Data[code])):
  73. print(quantdata.Data[code][k])
  74. try:
  75. #调用登录函数(激活后使用,不需要用户名密码)
  76. loginResult = c.start("ForceLogin=1", '', mainCallback)
  77. if(loginResult.ErrorCode != 0):
  78. print("login in fail")
  79. exit()
  80. # 资讯查询使用范例
  81. # data = c.cfn("300059.SZ,600519.SH,300024.SZ", "companynews,industrynews", eCfnMode_EndCount,
  82. # "starttime=20190501010000,endtime=20190725,count=10")
  83. # print("cfn输出结果======分隔线======")
  84. # if (not isinstance(data, c.EmQuantData)):
  85. # print (data)
  86. # else:
  87. # if (data.ErrorCode != 0):
  88. # print("request cfn Error, ", data.ErrorMsg)
  89. # else:
  90. # for code in data.Data:
  91. # total = len(data.Data[code])
  92. # for k in range(0, len(data.Data[code])):
  93. # print(data.Data[code][k])
  94. # 板块树查询使用范例
  95. # data = c.cfnquery("")
  96. # print("cfnquery输出结果======分隔线======")
  97. # if (not isinstance(data, c.EmQuantData)):
  98. # print(data)
  99. # else:
  100. # if (data.ErrorCode != 0):
  101. # print("request cfnquery Error, ", data.ErrorMsg)
  102. # else:
  103. # for code in data.Codes:
  104. # for i in range(0, len(data.Indicators)):
  105. # print(data.Data[code][i])
  106. # 资讯订阅使用范例
  107. # data = c.cnq("S888005002API", "sectornews", "", cnqCallback)
  108. # if data.ErrorCode != 0:
  109. # print("request cnq Error, ", data.ErrorMsg)
  110. # else:
  111. # print("cnq输出结果======分隔线======")
  112. # _time.sleep(60)
  113. # text = input("press any key to cancel cnq \r\n")
  114. # # 取消订阅
  115. # data = c.cnqcancel(data.SerialID)
  116. # # cmc使用范例
  117. # data = c.cmc("300059.SZ", "OPEN,CLOSE,HIGH", (datetime.today() + timedelta(-6)).strftime("%Y-%m-%d"), datetime.today().strftime("%Y-%m-%d"), "RowIndex=2,Ispandas=0")
  118. # print("cmc输出结果======分隔线======")
  119. # if(not isinstance(data, c.EmQuantData)):
  120. # print(data)
  121. # else:
  122. # if(data.ErrorCode != 0):
  123. # print("request cmc Error, ", data.ErrorMsg)
  124. # else:
  125. # for i in range(0, len(data.Indicators)):
  126. # for j in range(0, len(data.Dates)):
  127. # print("indicator=%s, value=%s" % (data.Indicators[i], str(data.Data[i][j])))
  128. # # csd使用范例
  129. # data = c.csd("300059.SZ,600425.SH", "open,close", "2016-07-01", "2016-07-06", "RowIndex=1,period=1,adjustflag=1,curtype=1,pricetype=1,year=2016,Ispandas=0")
  130. # print("csd输出结果======分隔线======")
  131. # if not isinstance(data, c.EmQuantData):
  132. # print(data)
  133. # else:
  134. # if(data.ErrorCode != 0):
  135. # print("request csd Error, ", data.ErrorMsg)
  136. # else:
  137. # for code in data.Codes:
  138. # for i in range(0, len(data.Indicators)):
  139. # for j in range(0, len(data.Dates)):
  140. # print(data.Data[code][i][j])
  141. # # css使用范例
  142. # data = c.css("300059.SZ,000002.SZ", "open,close", "TradeDate=20170308, Ispandas=0")
  143. # print("css输出结果======分隔线======")
  144. # if not isinstance(data, c.EmQuantData):
  145. # print(data)
  146. # else:
  147. # if(data.ErrorCode != 0):
  148. # print("request css Error, ", data.ErrorMsg)
  149. # else:
  150. # for code in data.Codes:
  151. # for i in range(0, len(data.Indicators)):
  152. # print(data.Data[code][i])
  153. # # sector使用范例
  154. # # 001004 全部A股板块
  155. # data = c.sector("001004", "2016-04-26")
  156. # if data.ErrorCode != 0:
  157. # print("request sector Error, ", data.ErrorMsg)
  158. # else:
  159. # print("sector输出结果======分隔线======")
  160. # for code in data.Data:
  161. # print(code)
  162. # # tradedate使用范例
  163. # data = c.tradedates("2016-07-01", "2016-07-12")
  164. # if(data.ErrorCode != 0):
  165. # print("request tradedates Error, ", data.ErrorMsg)
  166. # else:
  167. # print("tradedate输出结果======分隔线======")
  168. # for item in data.Data:
  169. # print(item)
  170. # # getdate使用范例
  171. # data = c.getdate("20160426", -3, "Market=CNSESH")
  172. # if(data.ErrorCode != 0):
  173. # print("request getdate Error, ", data.ErrorMsg)
  174. # else:
  175. # print("getdate输出结果======分隔线======")
  176. # print(data.Data)
  177. #实时行情订阅使用范例
  178. data = c.csq('600000.SH,300059.SZ', 'TIME,Now,Volume','Pushtype=2',csqCallback)
  179. if(data.ErrorCode != 0):
  180. print("request csq Error, ", data.ErrorMsg)
  181. else:
  182. print("csq输出结果======分隔线======")
  183. _time.sleep(2)
  184. text = input("press any key to cancel csq \r\n")
  185. #取消订阅
  186. data = c.csqcancel(data.SerialID)
  187. # #实时行情订阅使用范例
  188. # data = c.csq('AUDUSD.FX', 'Time,now','Pushtype=0,alltick=1',csqCallback)
  189. # if(data.ErrorCode != 0):
  190. # print("request csq Error, ", data.ErrorMsg)
  191. # else:
  192. # print("csq输出结果======分隔线======")
  193. # _time.sleep(2)
  194. # text = input("press any key to cancel csq \r\n")
  195. # #取消订阅
  196. # data = c.csqcancel(data.SerialID)
  197. # #日内跳价使用范例
  198. # data = c.cst('600000.SH,300059.SZ', 'TIME,OPEN,HIGH,LOW,NOW', '093000', '094000','',cstCallBack)
  199. # if(data.ErrorCode != 0):
  200. # print("request cst Error, ", data.ErrorMsg)
  201. # else:
  202. # print("cst输出结果======分割线======")
  203. # _time.sleep(2)
  204. # input("press any key to quit cst \r\n")
  205. # #行情快照使用范例
  206. # data = c.csqsnapshot("000005.SZ,600602.SH,600652.SH,600653.SH,600654.SH,600601.SH,600651.SH,000004.SZ,000002.SZ,000001.SZ,000009.SZ", "PRECLOSE,OPEN,HIGH,LOW,NOW,AMOUNT", "Ispandas=0")
  207. # if not isinstance(data, c.EmQuantData):
  208. # print(data)
  209. # else:
  210. # if(data.ErrorCode != 0):
  211. # print("request csqsnapshot Error, ", data.ErrorMsg)
  212. # else:
  213. # print("csqsnapshot输出结果======分割线======")
  214. # for key,value in data.Data.items():
  215. # print(key, ">>> ", end="")
  216. # for v in value:
  217. # print(v, " ", end="")
  218. # print()
  219. # #获取专题报表使用范例
  220. # data = c.ctr("INDEXCOMPOSITION", "", "IndexCode=000300.SH,EndDate=2017-01-13")
  221. # if(data.ErrorCode != 0):
  222. # print("request ctr Error, ", data.ErrorMsg)
  223. # else:
  224. # print("ctr输出结果======分割线======")
  225. # for key,value in data.Data.items():
  226. # for v in value:
  227. # print(v, " ", end="")
  228. # print()
  229. # #选股使用范例
  230. # data = c.cps("B_001004", "s0,OPEN,2017/2/27,1;s1,NAME", "[s0]>0", "orderby=rd([s0]),top=max([s0],100)")
  231. # if(data.ErrorCode != 0):
  232. # print("request cps Error, ", data.ErrorMsg)
  233. # else:
  234. # print("cps输出结果======分割线======")
  235. # for it in data.Data:
  236. # print(it)
  237. # #宏观指标服务
  238. # data = c.edb("EMM00087117","IsPublishDate=1,RowIndex=1,Ispandas=1")
  239. # if not isinstance(data, c.EmQuantData):
  240. # print(data)
  241. # else:
  242. # if(data.ErrorCode != 0):
  243. # print("request edb Error, ", data.ErrorMsg)
  244. # else:
  245. # print("edbid date ",end="")
  246. # for ind in data.Indicators:
  247. # print(ind, end=" ")
  248. # print("")
  249. # for code in data.Codes:
  250. # for j in range(0, len(data.Dates)):
  251. # print(code, " ", data.Dates[j], end=" ")
  252. # for i in range(0, len(data.Indicators)):
  253. # print(data.Data[code][i][j], end=" ")
  254. # print("")
  255. # #宏观指标id详情查询
  256. # data = c.edbquery("EMM00058124,EMM00087117,EMG00147350")
  257. # if(data.ErrorCode != 0):
  258. # print("request edbquery Error, ", data.ErrorMsg)
  259. # else:
  260. # print("edbid ",end="")
  261. # for ind in data.Indicators:
  262. # print(ind, end=" ")
  263. # print("")
  264. # for code in data.Codes:
  265. # for j in range(0, len(data.Dates)):
  266. # print(code, " ", end=" ")
  267. # for i in range(0, len(data.Indicators)):
  268. # print(data.Data[code][i][j], end=" ")
  269. # print("")
  270. # #新建组合
  271. # data = c.pcreate("quant001", "组合牛股", 100000000, "这是一个牛股的组合")
  272. # if(data.ErrorCode != 0):
  273. # print("request pcreate Error, ", data.ErrorMsg)
  274. # else:
  275. # print("create succeed")
  276. # # 组合资金调配
  277. # data = c.pctransfer("quant001", "IN", "2019-08-13", 10000, "追加资金", "TRANSFERTYPE=1")
  278. # if (data.ErrorCode != 0):
  279. # print("request pctransfer Error, ", data.ErrorMsg)
  280. # else:
  281. # print("pctransfer succeed")
  282. # # 组合下单
  283. # orderdict = {'code': ['300059.SZ', '600000.SH'],
  284. # 'volume': [1000, 200],
  285. # 'price': [13.11, 12.12],
  286. # 'date': ['2017-08-14', '2017-08-24'],
  287. # 'time': ['14:22:18', '14:22:52'],
  288. # 'optype': [eOT_buy, eOT_buy],
  289. # 'cost': [0, 3],
  290. # 'rate': [0, 2],
  291. # 'destvolume': [0, 0],
  292. # 'weight': [0.1, 0.1]}
  293. # data = c.porder("quant001", orderdict, "this is a test")
  294. # if(data.ErrorCode != 0):
  295. # print("porder Error, ", data.ErrorMsg)
  296. # else:
  297. # print("order succeed")
  298. # #组合报表查询
  299. # data = c.preport("quant001", "record", "startdate=2017/07/12,enddate=2018/01/15")
  300. # if(data.ErrorCode != 0):
  301. # print("request preport Error, ", data.ErrorMsg)
  302. # else:
  303. # for ind in data.Indicators:
  304. # print(ind, end=" ")
  305. # print("")
  306. # for k in data.Data:
  307. # for it in data.Data[k]:
  308. # print(it, end=" ")
  309. # print("")
  310. # #组合信息查询
  311. # data = c.pquery()
  312. # if(data.ErrorCode != 0):
  313. # print("request pquery Error, ", data.ErrorMsg)
  314. # else:
  315. # print("[key]:",end="")
  316. # for index in range(0, len(data.Indicators)):
  317. # print("\t", data.Indicators[index],end="")
  318. # print("")
  319. # for k,v in data.Data.items():
  320. # print(k,": ", end="")
  321. # for vv in v:
  322. # print("\t", vv, end="")
  323. # print("")
  324. # #删除组合
  325. # data = c.pdelete("quant001")
  326. # if(data.ErrorCode != 0):
  327. # print("request pdelete Error, ", data.ErrorMsg)
  328. # else:
  329. # print("delete succeed")
  330. # #获取区间日期内的交易日天数
  331. # data = c.tradedatesnum("2018-01-01", "2018-09-15")
  332. # if data.ErrorCode != 0:
  333. # print("request tradedatesnum Error, ", data.ErrorMsg)
  334. # else:
  335. # print("tradedatesnum======分割线======")
  336. # print(data.Data)
  337. #退出
  338. data = logoutResult = c.stop()
  339. except Exception as ee:
  340. print("error >>>",ee)
  341. traceback.print_exc()
  342. else:
  343. print("demo end")