• 非标准化套利


    交易对象:目前使用非标准化组合进行交易。(即黄金远近月,焦煤焦炭等等)

    交易平台:易盛极星极星产品网

    手续费研究:白糖期货手续费和保证金2023年09月更新 - 九期网

    本人使用的期货交易公司:中信期货(幸亏资金量大,返还高,不然就是给期货公司打工。套利的间接成本很高,滑点,手续费。)

    特点:1.非标准合约,双边收手续费,双边保证金。

    2.底层逻辑来自基本面上,本月的黄金,10年后,他还是黄金。

    3.但是,很多品种不是,比如农产品,会因为交通,运输,上下游波动等导致价差会变化。

    4.难以入门,使得其成为很多高玩的选择,因为要考虑一边成交,另一边未成交等单边敞口问题

    5.统计学套利和基本面套利,是套利的两大主流方向,如有其他的,欢迎补充。

    统计套利,就是根据k线图,选择做多,做空价差

    基本面套利,则是更具当前期货价格,现货价格,预测价差是拉大还是缩小。

    我上传一段简单的黄金非标准套利代码,直接使用即可。
     

    1. import talib
    2. import talib as ta
    3. import numpy as np
    4. #code1 = "SPD|s|M|2311|2405"
    5. #code1 = 'M2309-M2407'
    6. spd = 'SPD|s|AU|2312|2402'#获取合约数据
    7. code1='SHFE|F|AU|2312'#实际下单合约
    8. code2 = 'SHFE|F|AU|2402'#实际下单合约
    9. g_params['n'] = 20 #滚动周期极值
    10. g_params['m'] = 20 #ATR参数
    11. #g_params['p'] = 20 #std周期
    12. g_params['w'] = 'M'
    13. g_params['T'] = 15
    14. g_params['p3'] = 1 #止损线距离
    15. g_params['p1'] = 20
    16. g_params['adx'] = 20
    17. g_params['m2'] =5
    18. # 策略参数,全局变量,各个k线都可以调用
    19. up1 = []
    20. down1 = []
    21. up2 = []
    22. down2 = []
    23. up3 = []
    24. down3 = []
    25. up4 = []
    26. down4 = []
    27. std = []
    28. up_limit1 = []
    29. down_limit1 = []
    30. up_limit2 = []
    31. down_limit2 = []
    32. up_limit3 = []
    33. down_limit3 = []
    34. up_limit4 = []
    35. down_limit4 = []
    36. ran = []
    37. BKDFLG = 0
    38. SKDFLG = 0
    39. BPDFLG = 0
    40. SPDFLG = 0
    41. BKDFLG2 = 0
    42. SKDFLG2 = 0
    43. BPDFLG2 = 0
    44. SPDFLG2 = 0
    45. #开仓委托
    46. BKID = 0
    47. SKID = 0
    48. #平仓委托
    49. BPID = 0
    50. SPID = 0
    51. #开仓标志
    52. BKFLG = 0
    53. SKFLG = 0
    54. #平仓标志
    55. BPFLG = 0
    56. SPFLG = 0
    57. #开仓撤单标志
    58. BKDEL = 0
    59. SKDEL = 0
    60. #平仓撤单标志
    61. BPDEL = 0
    62. SPDEL = 0
    63. #开仓委托手数
    64. BKM = 0
    65. SKM = 0
    66. #平仓委托手数
    67. BPM = 0
    68. SPM = 0
    69. #开仓委托价格
    70. BKP = 0
    71. SKP = 0
    72. #平仓委托价格
    73. BPP = 0
    74. SPP = 0
    75. #开仓委托时间
    76. BKT = 0
    77. SKT = 0
    78. #平仓委托时间
    79. BPT = 0
    80. SPT = 0
    81. #开仓委托
    82. BKID2 = 0
    83. SKID2 = 0
    84. #平仓委托
    85. BPID2 = 0
    86. SPID2 = 0
    87. #开仓标志
    88. BKFLG2 = 0
    89. SKFLG2 = 0
    90. #平仓标志
    91. BPFLG2 = 0
    92. SPFLG2 = 0
    93. #开仓撤单标志
    94. BKDEL2 = 0
    95. SKDEL2 = 0
    96. #平仓撤单标志
    97. BPDEL2 = 0
    98. SPDEL2 = 0
    99. #开仓委托手数
    100. BKM2 = 0
    101. SKM2 = 0
    102. #平仓委托手数
    103. BPM2 = 0
    104. SPM2 = 0
    105. #开仓委托价格
    106. BKP2 = 0
    107. SKP2 = 0
    108. #平仓委托价格
    109. BPP2 = 0
    110. SPP2 = 0
    111. #开仓委托时间
    112. BKT2 = 0
    113. SKT2 = 0
    114. #平仓委托时间
    115. BPT2 = 0
    116. SPT2 = 0
    117. def minprice(price1,price2):
    118. if price1>price2:
    119. return price2
    120. else:
    121. return price1
    122. def maxprice(price1,price2):
    123. if price1>price2:
    124. return price1
    125. else:
    126. return price2
    127. # 价格矫正为最小变动价整数倍
    128. def PriceCorrect(src,tick):
    129. if tick:
    130. return (int((src+0.5*tick)/tick))*tick
    131. else:
    132. src
    133. # 策略开始运行时执行该函数一次
    134. def initialize(context):
    135. SetBarInterval(spd, g_params['w'], g_params['T'],500)
    136. SetBarInterval(code1, g_params['w'], g_params['T'],500)
    137. SetBarInterval(code2, g_params['w'], g_params['T'],500)
    138. SetTriggerType(1)
    139. SetOrderWay(1)
    140. SetActual()
    141. SetAFunUseForHis()
    142. SetUserNo('Q1010422846') # 设置交易账号
    143. # 策略触发事件每次触发时都会执行该函数
    144. def handle_data(context):
    145. #当前k线判断,内部函数
    146. #出现开平仓信号
    147. # BKDFLG = 0
    148. # SKDFLG = 0
    149. # BPDFLG = 0
    150. # SPDFLG = 0
    151. # BKFLG =0
    152. # SKFLG =0
    153. # BPFLG =0
    154. # SPFLG =0
    155. #全局运作,超出k线
    156. #全局变量,不受时间约束
    157. global up1
    158. global down1
    159. global up2
    160. global down2
    161. global up3
    162. global down3
    163. global up4
    164. global down4
    165. global std
    166. global up_limit1
    167. global down_limit1
    168. global up_limit2
    169. global down_limit2
    170. global up_limit3
    171. global down_limit3
    172. global up_limit4
    173. global down_limit4
    174. global ran
    175. global BKDFLG
    176. global SKDFLG
    177. global BPDFLG
    178. global SPDFLG
    179. global BKDFLG2
    180. global SKDFLG2
    181. global BPDFLG2
    182. global SPDFLG2
    183. global BKID
    184. global SKID
    185. global BPID
    186. global SPID
    187. global BKFLG
    188. global SKFLG
    189. global BPFLG
    190. global SPFLG
    191. global BKDEL
    192. global SKDEL
    193. global BPDEL
    194. global SPDEL
    195. global BKM
    196. global SKM
    197. global BPM
    198. global SPM
    199. global BKP
    200. global SKP
    201. global BPP
    202. global SPP
    203. global BKT
    204. global SKT
    205. global BPT
    206. global SPT
    207. global BKID2
    208. global SKID2
    209. global BPID2
    210. global SPID2
    211. global BKFLG2
    212. global SKFLG2
    213. global BPFLG2
    214. global SPFLG2
    215. global BKDEL2
    216. global SKDEL2
    217. global BPDEL2
    218. global SPDEL2
    219. global BKM2
    220. global SKM2
    221. global BPM2
    222. global SPM2
    223. global BKP2
    224. global SKP2
    225. global BPP2
    226. global SPP2
    227. global BKT2
    228. global SKT2
    229. global BPT2
    230. global SPT2
    231. #确定前面有足够的数据
    232. if (CurrentBar() >= len(up1)):
    233. if (len(up1)) < 20:
    234. up1.append(0)
    235. down1.append(0)
    236. up2.append(0)
    237. down2.append(0)
    238. up3.append(0)
    239. down3.append(0)
    240. up4.append(0)
    241. down4.append(0)
    242. std.append(0)
    243. up_limit1.append(0)
    244. down_limit1.append(0)
    245. up_limit2.append(0)
    246. down_limit2.append(0)
    247. up_limit3.append(0)
    248. down_limit3.append(0)
    249. up_limit4.append(0)
    250. down_limit4.append(0)
    251. ran.append(0)
    252. # preEntryPrice.append(0)
    253. else:
    254. up1.append(up1[-1])
    255. down1.append(down1[-1])
    256. up2.append(up2[-1])
    257. down2.append(down2[-1])
    258. up3.append(up3[-1])
    259. down3.append(down3[-1])
    260. up4.append(up4[-1])
    261. down4.append(down4[-1])
    262. std.append(std[-1])
    263. up_limit1.append(up_limit1[-1])
    264. down_limit1.append(down_limit1[-1])
    265. up_limit2.append(up_limit2[-1])
    266. down_limit2.append(down_limit2[-1])
    267. up_limit3.append(up_limit3[-1])
    268. down_limit3.append(down_limit3[-1])
    269. up_limit4.append(up_limit4[-1])
    270. down_limit4.append(down_limit4[-1])
    271. ran.append(ran[-1])
    272. #从第N根k线开始进行程序运行
    273. if len(Close()) < g_params['p1']:
    274. return
    275. m = g_params['m']
    276. m2 = g_params['m2']
    277. x = spd
    278. ran[-1] = ta.ATR(High(x, str(g_params['w'] ), g_params['T'])[:-1], Low(x, str(g_params['w'] ), g_params['T'])[:-1], Close(x, str(g_params['w'] ), g_params['T'])[:-1], m)[
    279. -1] // PriceTick(x) * PriceTick(x) # 一个周期前ran
    280. # if ran[-1]>=0:
    281. # ran[-1]=0.12
    282. adx = ta.ADX(High(x, str(g_params['w'] ), g_params['T'])[:-1], Low(x, str(g_params['w'] ), g_params['T'])[:-1], Close(x, str(g_params['w'] ), g_params['T'])[:-1], m2)
    283. # if abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-1]) >= 0 and \
    284. # abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-1]) < 0.3:
    285. # up1[-1] = up1[-2]
    286. # elif abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-1])>0.3:
    287. # up1[-1] = High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()
    288. # if abs(Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()-down1[-1])>=0 and \
    289. # abs(Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()-down1[-1])<0.3:
    290. # down1[-1] = down1[-2]
    291. # elif abs(Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()-down1[-1])>0.3:
    292. # down1[-1] = Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()
    293. PlotNumeric('ran', abs(Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()-down1[-1]),RGB_Yellow(),False)
    294. up1[-1] = Close(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()
    295. # if abs(up1[-2]-up1[-1])==0 or abs(up1[-2]-up1[-1])>0.2:
    296. # up1[-1] = up1[-2]
    297. down1[-1] = Close(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()
    298. # if abs(down1[-2]-down1[-1])==0 or abs(down1[-2]-down1[-1])>0.2:
    299. # down1[-1] = down1[-2]
    300. # if abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-2])<=1:
    301. # up1[-1] = High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()
    302. # else:
    303. # up1[-1] = up1[-2]
    304. # if abs(down1[-2]-Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min())<=1:
    305. # down1[-1] = Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()
    306. # else:
    307. # down1[-1] = down1[-2]
    308. #up1[-1] = Close(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()
    309. up_limit2[-1] = up1[-1] - ran[-1]*g_params['p3']// PriceTick(x) * PriceTick(x)
    310. #down1[-1] = Close(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()
    311. down_limit2[-1] = down1[-1] + ran[-1]*g_params['p3']// PriceTick(x) * PriceTick(x)
    312. #LogInfo(abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-1]))
    313. PlotNumeric('up1',up1[-1],RGB_Red(),True)
    314. PlotNumeric('up_limit2',up_limit2[-1],RGB_Blue(),True)
    315. PlotNumeric('down1',down1[-1],RGB_Green(),True)
    316. PlotNumeric('down_limit2',down_limit2[-1],RGB_Yellow(),True)
    317. #PlotNumeric('ran',abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-2]),RGB_Yellow(),False)
    318. BKDFLG = 0
    319. SKDFLG = 0
    320. BPDFLG = 0
    321. SPDFLG = 0
    322. BKDFLG2 = 0
    323. SKDFLG2 = 0
    324. BPDFLG2 = 0
    325. SPDFLG2 = 0
    326. LogInfo(A_BuyPosition(code1,'Q1010422846'), A_SellPosition(code1,'Q1010422846'),A_BuyPosition(code2,'Q1010422846'), A_SellPosition(code2,'Q1010422846'))
    327. # LogInfo(BuyPosition(code1), SellPosition(code1),BuyPosition(code2), SellPosition(code2))
    328. # LogInfo('状态',Q_Close(spd),\
    329. # A_BuyPosition(code1),A_SellPosition(code1),\
    330. # A_BuyPosition(spd),A_SellPosition(spd), \
    331. # BKDFLG ,SKDFLG,BPDFLG,SPDFLG )
    332. if Q_Close(spd)>up1[-1]+PriceTick(spd) and \
    333. A_BuyPosition(code1,'Q1010422846')==0 and A_SellPosition(code1,'Q1010422846')==0 \
    334. and A_BuyPosition(code2,'Q1010422846')==0 and A_SellPosition(code2,'Q1010422846')==0 :
    335. if SKDFLG ==0:
    336. SKDFLG = 1
    337. if BKDFLG2 == 0:
    338. BKDFLG2 = 1
    339. elif Q_Close(spd)1]-PriceTick(spd) and \
    340. A_BuyPosition(code1,'Q1010422846')==0 and A_SellPosition(code1,'Q1010422846')>0 \
    341. and A_BuyPosition(code2,'Q1010422846')>0 and A_SellPosition(code2,'Q1010422846')==0:
    342. if BPDFLG ==0:
    343. BPDFLG = 1 # 发出止损信号
    344. if SPDFLG2 == 0:
    345. SPDFLG2 = 1 # 止损信号出现
    346. elif (Q_Close(spd)1]-PriceTick(spd)) and \
    347. A_BuyPosition(code1,'Q1010422846')==0 and A_SellPosition(code1,'Q1010422846')==0 \
    348. and A_BuyPosition(code2,'Q1010422846')==0 and A_SellPosition(code2,'Q1010422846')==0:
    349. if BKDFLG == 0:
    350. BKDFLG = 1
    351. if SKDFLG2 == 0:
    352. SKDFLG2 = 1
    353. elif (Q_Close(spd)>down_limit2[-1]+PriceTick(spd)) and \
    354. A_BuyPosition(code1,'Q1010422846')>0 and A_SellPosition(code1,'Q1010422846')==0 \
    355. and A_BuyPosition(code2,'Q1010422846')==0 and A_SellPosition(code2,'Q1010422846')>0:
    356. if SPDFLG == 0:
    357. SPDFLG = 1 # 止损信号出现
    358. if BPDFLG2 ==0:
    359. BPDFLG2 = 1 # 发出止损信号
    360. ss = int(A_Assets()*0.005/(Q_Close(code1)*0.1*10))
    361. ss = 1
    362. LogInfo('状态',Q_Close(spd),\
    363. A_BuyPosition(code1,'Q1010422846'),A_SellPosition(code1,'Q1010422846'),\
    364. A_BuyPosition(spd,'Q1010422846'),A_SellPosition(spd,'Q1010422846'), \
    365. BKDFLG ,SKDFLG,BPDFLG,SPDFLG )
    366. #//------------------------历史发单------------------------//
    367. # if context.strategyStatus() != 'C':
    368. # if (Close(spd, g_params['w'], g_params['T'])[-1]<=down1[-1]) and \
    369. # BuyPosition(code1)==0 and SellPosition(code1)==0 \
    370. # and BuyPosition(code2)==0 and SellPosition(code2)==0 :
    371. # Buy(ss, Close(code1, g_params['w'], g_params['T'])[-1],code1, needCover=False)
    372. # SellShort(ss, Close(code2, g_params['w'], g_params['T'])[-1],code2, needCover=False)
    373. # elif Close(spd, g_params['w'], g_params['T'])[-1]>=up1[-1] and \
    374. # BuyPosition(code1)==0 and SellPosition(code1)==0 \
    375. # and BuyPosition(code2)==0 and SellPosition(code2)==0:
    376. # SellShort(ss,Close(code1, g_params['w'], g_params['T'])[-1], code1,needCover=False)
    377. # Buy(ss, Close(code2, g_params['w'], g_params['T'])[-1],code2, needCover=False)
    378. # elif (Close(spd, g_params['w'], g_params['T'])[-1]>=down_limit2[-1]) and \
    379. # BuyPosition(code1)==0 and SellPosition(code1)>0 \
    380. # and BuyPosition(code2)>0 and SellPosition(code2)==0:
    381. # Sell(ss, Close(code1, g_params['w'], g_params['T'])[-1],code1)
    382. # BuyToCover(ss, Close(code2, g_params['w'], g_params['T'])[-1],code2)
    383. # elif Close(spd, g_params['w'], g_params['T'])[-1]<=up_limit2[-1] and \
    384. # BuyPosition(code1)>0 and SellPosition(code1)==0 \
    385. # and BuyPosition(code2)==0 and SellPosition(code2)>0:
    386. # BuyToCover(ss,Close(code1, g_params['w'], g_params['T'])[-1], code1)
    387. # Sell(ss, Close(code2, g_params['w'], g_params['T'])[-1],code2)
    388. # return
    389. #//------------------------实时处理------------------------//
    390. # if ExchangeStatus(ExchangeName()) != '3':
    391. # return
    392. #//------------------------变量赋值------------------------//
    393. #N = int(A_Assets()*0.0005/(Q_Close()*0.1*10))
    394. #N = 10
    395. N = 1
    396. LogInfo('N',N)
    397. #N = 1 #下单手数
    398. T = 5 #时间间隔
    399. NOW = CurrentTime() #当前时间
    400. #code1
    401. BIDP = 0 if Q_BidPrice(code1) is None else Q_BidPrice(code1) #买一价
    402. ASKP = 0 if Q_AskPrice(code1) is None else Q_AskPrice(code1) #卖一价
    403. BRP = A_BuyPositionCanCover(code1) #多头可用持仓
    404. SRP = A_SellPositionCanCover(code1) #空头可用持仓
    405. LogInfo('价格',BIDP,ASKP,BRP,SRP)
    406. #code2
    407. BIDP2 = 0 if Q_BidPrice(code2) is None else Q_BidPrice(code2) #买一价
    408. ASKP2 = 0 if Q_AskPrice(code2) is None else Q_AskPrice(code2) #卖一价
    409. BRP2 = A_BuyPositionCanCover(code2) #多头可用持仓
    410. SRP2 = A_SellPositionCanCover(code2) #空头可用持仓
    411. # if ExchangeName() == 'SHFE': #如果是上期所合约
    412. # SH = Enum_ExitToday() #平仓参数
    413. # else: #如果非上期所合约
    414. # SH = Enum_Exit() #平仓参数
    415. SH = Enum_ExitToday()
    416. #//------------------------成交判断code1------------------------//
    417. if BKFLG == 1:
    418. if A_OrderStatus(BKID) == Enum_Filled():
    419. LogInfo("BK信号:买开委托成交!")
    420. BKFLG = 0 #买开标志归0
    421. BKDEL = 0 #买开撤单标志归0
    422. elif A_OrderStatus(BKID) == Enum_Canceled():
    423. LogInfo("BK信号:买开委托已撤!")
    424. if A_OrderFilledLot(BKID) > 0: #如果买开委托部分成交
    425. BKM = BKM - A_OrderFilledLot(BKID) #买开委托手数
    426. if BKM > 0: #如果买开委托手数大于0
    427. BKP = ASKP #买开委托价格
    428. LogInfo("BK信号:买开委托追价!")
    429. retCode, BKID = A_SendOrder(Enum_Buy(),Enum_Entry(),BKM,BKP,code1) #发出买开委托
    430. BKT = NOW #买开委托时间
    431. BKDEL = 0 #买开撤单标志归0
    432. elif A_OrderStatus(BKID) == Enum_Suspended() or A_OrderStatus(BKID) == Enum_FillPart():
    433. if BKDEL == 0: #如果未撤单
    434. if TimeDiff(BKT, NOW) >= T: #如果时间间隔T秒
    435. LogInfo("BK信号:买开委托撤单!")
    436. A_DeleteOrder(BKID) #撤掉买开委托挂单
    437. BKDEL = 1 #已发出撤掉买开委托挂单
    438. if SPFLG == 1:
    439. if A_OrderStatus(SPID) == Enum_Filled():
    440. LogInfo("SP信号:卖平委托成交!")
    441. SPFLG = 0 #卖平标志归0
    442. SPDEL = 0 #卖平撤单标志归0
    443. elif A_OrderStatus(SPID) == Enum_Canceled():
    444. LogInfo("SP信号:卖平委托已撤!")
    445. if A_OrderFilledLot(SPID) > 0: #如果卖平委托部分成交
    446. SPM = SPM - A_OrderFilledLot(SPID) #卖平委托手数
    447. if BRP > 0 and SPM > 0 and SPM <= BRP: #如果卖平委托手数不超过多头可用持仓
    448. SPP = BIDP #卖平委托价格
    449. LogInfo("SP信号:卖平委托追价!")
    450. retCode, SPID = A_SendOrder(Enum_Sell(),SH,SPM,SPP,code1) #发出卖平委托
    451. SPT = NOW #卖平委托时间
    452. SPDEL = 0 #卖平撤单标志归0
    453. elif A_OrderStatus(SPID) == Enum_Suspended() or A_OrderStatus(SPID) == Enum_FillPart():
    454. if SPDEL == 0: #如果未撤单
    455. if TimeDiff(SPT, NOW) >= T: #如果时间间隔T秒
    456. LogInfo("SP信号:卖平委托撤单!")
    457. A_DeleteOrder(SPID) #撤掉卖平委托挂单
    458. SPDEL = 1 #已发出撤掉卖平委托挂单
    459. if SKFLG == 1:
    460. if A_OrderStatus(SKID) == Enum_Filled():
    461. LogInfo("SK信号:卖开委托成交!")
    462. SKFLG = 0 #卖开标志归0
    463. SKDEL = 0 #卖开撤单标志归0
    464. elif A_OrderStatus(SKID) == Enum_Canceled():
    465. LogInfo("SK信号:卖开委托已撤!")
    466. if A_OrderFilledLot(SKID) > 0: #如果卖开委托部分成交
    467. SKM = SKM - A_OrderFilledLot(SKID) #卖开委托手数
    468. if SKM > 0: #如果卖开委托手数大于0
    469. SKP = BIDP #卖开委托价格
    470. LogInfo("SK信号:卖开委托追价!")
    471. retCode, SKID = A_SendOrder(Enum_Sell(), Enum_Entry(), SKM, SKP,code1) #发出卖开委托
    472. SKT = NOW #卖开委托时间
    473. SKDEL = 0 #卖开撤单标志归0
    474. elif A_OrderStatus(SKID) == Enum_Suspended() or A_OrderStatus(SKID) == Enum_FillPart():
    475. if SKDEL == 0: #如果未撤单
    476. if TimeDiff(SKT, NOW) >= T: #如果时间间隔T秒
    477. LogInfo("SK信号:卖开委托撤单!")
    478. A_DeleteOrder(SKID) #撤掉卖开委托挂单
    479. SKDEL = 1 #已发出撤掉卖开委托挂单
    480. if BPFLG == 1:
    481. if A_OrderStatus(BPID) == Enum_Filled():
    482. LogInfo("BP信号:买平委托成交!")
    483. BPFLG = 0 #买平标志归0
    484. BPDEL = 0 #买平撤单标志归0
    485. elif A_OrderStatus(BPID) == Enum_Canceled():
    486. LogInfo("BP信号:买平委托已撤!")
    487. if A_OrderFilledLot(BPID) > 0: #如果买平委托部分成交
    488. BPM = BPM - A_OrderFilledLot(BPID) #买平委托手数
    489. if SRP > 0 and BPM > 0 and BPM <= SRP: #如果买平委托手数不超过空头可用持仓
    490. BPP = ASKP #买平委托价格
    491. LogInfo("BP信号:买平委托追价!")
    492. retCode, BPID = A_SendOrder(Enum_Buy(),SH,BPM,BPP,code1) #发出买平委托
    493. BPT = NOW #买平委托时间
    494. BPDEL = 0 #买平撤单标志归0
    495. elif A_OrderStatus(BPID) == Enum_Suspended() or A_OrderStatus(BPID) == Enum_FillPart():
    496. if BPDEL == 0: #如果未撤单
    497. if TimeDiff(BPT, NOW) >= T: #如果时间间隔T秒
    498. LogInfo("BP信号:买平委托撤单!")
    499. A_DeleteOrder(BPID) #撤掉买平委托挂单
    500. BPDEL = 1 #已发出撤掉买平委托挂单
    501. #//------------------------成交判断code2------------------------//
    502. if BKFLG2 == 1:
    503. if A_OrderStatus(BKID2) == Enum_Filled():
    504. LogInfo("BK信号:买开委托成交!")
    505. BKFLG2 = 0 #买开标志归0
    506. BKDEL2 = 0 #买开撤单标志归0
    507. elif A_OrderStatus(BKID2) == Enum_Canceled():
    508. LogInfo("BK信号:买开委托已撤!")
    509. if A_OrderFilledLot(BKID2) > 0: #如果买开委托部分成交
    510. BKM2 = BKM2 - A_OrderFilledLot(BKID2) #买开委托手数
    511. if BKM2 > 0: #如果买开委托手数大于0
    512. BKP2 = ASKP2 #买开委托价格
    513. LogInfo("BK信号:买开委托追价!")
    514. retCode2, BKID2 = A_SendOrder(Enum_Buy(),Enum_Entry(),BKM2,BKP2,code2) #发出买开委托
    515. BKT2 = NOW #买开委托时间
    516. BKDEL2 = 0 #买开撤单标志归0
    517. elif A_OrderStatus(BKID2) == Enum_Suspended() or A_OrderStatus(BKID2) == Enum_FillPart():
    518. if BKDEL2 == 0: #如果未撤单
    519. if TimeDiff(BKT2, NOW) >= T: #如果时间间隔T秒
    520. LogInfo("BK信号:买开委托撤单!")
    521. A_DeleteOrder(BKID2) #撤掉买开委托挂单
    522. BKDEL2 = 1 #已发出撤掉买开委托挂单
    523. if SPFLG2 == 1:
    524. if A_OrderStatus(SPID2) == Enum_Filled():
    525. LogInfo("SP信号:卖平委托成交!")
    526. SPFLG2 = 0 #卖平标志归0
    527. SPDEL2 = 0 #卖平撤单标志归0
    528. elif A_OrderStatus(SPID2) == Enum_Canceled():
    529. LogInfo("SP信号:卖平委托已撤!")
    530. if A_OrderFilledLot(SPID2) > 0: #如果卖平委托部分成交
    531. SPM2 = SPM2 - A_OrderFilledLot(SPID2) #卖平委托手数
    532. if BRP2 > 0 and SPM2 > 0 and SPM2 <= BRP2: #如果卖平委托手数不超过多头可用持仓
    533. SPP2 = BIDP2 #卖平委托价格
    534. LogInfo("SP信号:卖平委托追价!")
    535. retCode2, SPID2 = A_SendOrder(Enum_Sell(),SH,SPM2,SPP2,code2) #发出卖平委托
    536. SPT2 = NOW #卖平委托时间
    537. SPDEL2 = 0 #卖平撤单标志归0
    538. elif A_OrderStatus(SPID2) == Enum_Suspended() or A_OrderStatus(SPID2) == Enum_FillPart():
    539. if SPDEL2 == 0: #如果未撤单
    540. if TimeDiff(SPT2, NOW) >= T: #如果时间间隔T秒
    541. LogInfo("SP信号:卖平委托撤单!")
    542. A_DeleteOrder(SPID2) #撤掉卖平委托挂单
    543. SPDEL2 = 1 #已发出撤掉卖平委托挂单
    544. if SKFLG2 == 1:
    545. if A_OrderStatus(SKID2) == Enum_Filled():
    546. LogInfo("SK信号:卖开委托成交!")
    547. SKFLG2 = 0 #卖开标志归0
    548. SKDEL2 = 0 #卖开撤单标志归0
    549. elif A_OrderStatus(SKID2) == Enum_Canceled():
    550. LogInfo("SK信号:卖开委托已撤!")
    551. if A_OrderFilledLot(SKID2) > 0: #如果卖开委托部分成交
    552. SKM2 = SKM2 - A_OrderFilledLot(SKID2) #卖开委托手数
    553. if SKM2 > 0: #如果卖开委托手数大于0
    554. SKP2 = BIDP2 #卖开委托价格
    555. LogInfo("SK信号:卖开委托追价!")
    556. retCode2, SKID2 = A_SendOrder(Enum_Sell(), Enum_Entry(), SKM2, SKP2,code2) #发出卖开委托
    557. SKT2 = NOW #卖开委托时间
    558. SKDEL2 = 0 #卖开撤单标志归0
    559. elif A_OrderStatus(SKID2) == Enum_Suspended() or A_OrderStatus(SKID2) == Enum_FillPart():
    560. if SKDEL2 == 0: #如果未撤单
    561. if TimeDiff(SKT2, NOW) >= T: #如果时间间隔T秒
    562. LogInfo("SK信号:卖开委托撤单!")
    563. A_DeleteOrder(SKID2) #撤掉卖开委托挂单
    564. SKDEL2 = 1 #已发出撤掉卖开委托挂单
    565. if BPFLG2 == 1:
    566. if A_OrderStatus(BPID2) == Enum_Filled():
    567. LogInfo("BP信号:买平委托成交!")
    568. BPFLG2 = 0 #买平标志归0
    569. BPDEL2 = 0 #买平撤单标志归0
    570. elif A_OrderStatus(BPID2) == Enum_Canceled():
    571. LogInfo("BP信号:买平委托已撤!")
    572. if A_OrderFilledLot(BPID2) > 0: #如果买平委托部分成交
    573. BPM2 = BPM2 - A_OrderFilledLot(BPID2) #买平委托手数
    574. if SRP2 > 0 and BPM2 > 0 and BPM2 <= SRP2: #如果买平委托手数不超过空头可用持仓
    575. BPP2 = ASKP2 #买平委托价格
    576. LogInfo("BP信号:买平委托追价!")
    577. retCode2, BPID2 = A_SendOrder(Enum_Buy(),SH,BPM2,BPP2,code2) #发出买平委托
    578. BPT2 = NOW #买平委托时间
    579. BPDEL2 = 0 #买平撤单标志归0
    580. elif A_OrderStatus(BPID2) == Enum_Suspended() or A_OrderStatus(BPID2) == Enum_FillPart():
    581. if BPDEL2 == 0: #如果未撤单
    582. if TimeDiff(BPT2, NOW) >= T: #如果时间间隔T秒
    583. LogInfo("BP信号:买平委托撤单!")
    584. A_DeleteOrder(BPID2) #撤掉买平委托挂单
    585. BPDEL2 = 1 #已发出撤掉买平委托挂单
    586. #//------------------------委托处理code1------------------------//
    587. if BKDFLG == 1:
    588. if BKFLG == 0: #如果没有买开委托
    589. BKM = N #买开委托手数
    590. BKP = ASKP #买开委托价格
    591. LogInfo("BK信号:买开委托发出")
    592. retCode, BKID = A_SendOrder(Enum_Buy(),Enum_Entry(),BKM,BKP,code1) #发出买开委托
    593. BKT = NOW #买开委托时间
    594. BKFLG = 1 #已发出买开委托
    595. BKDFLG= 0
    596. if SPDFLG == 1:
    597. if SPFLG == 0: #如果没有卖平委托
    598. if BRP > 0: #如果有多头可用持仓
    599. SPM = BRP #卖平委托手数
    600. SPP = BIDP #卖平委托价格
    601. LogInfo("SP信号:卖平委托发出!")
    602. retCode, SPID = A_SendOrder(Enum_Sell(),SH,SPM,SPP,code1) #发出卖平委托
    603. SPT = NOW #卖平委托时间
    604. SPFLG = 1 #已发出卖平委托
    605. SPDFLG = 0
    606. if SKDFLG == 1:
    607. if SKFLG == 0: #如果没有卖开委托
    608. SKM = N #卖开委托手数
    609. SKP = BIDP #卖开委托价格
    610. LogInfo("SK信号:卖开委托发出!")
    611. retCode, SKID = A_SendOrder(Enum_Sell(),Enum_Entry(),SKM,SKP,code1) #发出卖开委托
    612. SKT = NOW #卖开委托时间
    613. SKFLG = 1 #已发出卖开委托
    614. SKDFLG = 0
    615. if BPDFLG == 1:
    616. if BPFLG == 0: #如果没有买平委托
    617. if SRP > 0: #如果有空头可用持仓
    618. BPM = SRP #买平委托手数
    619. BPP = ASKP #买平委托价格
    620. LogInfo("BP信号:买平委托发出!")
    621. retCode, BPID = A_SendOrder(Enum_Buy(),SH,BPM,BPP,code1) #发出买平委托
    622. BPT = NOW #买平委托时间
    623. BPFLG = 1 #已发出买平委托
    624. BPDFLG =0
    625. #//------------------------委托处理code2------------------------//
    626. if BKDFLG2 == 1:
    627. if BKFLG2 == 0: #如果没有买开委托
    628. BKM2 = N #买开委托手数
    629. BKP2 = ASKP2 #买开委托价格
    630. LogInfo("BK信号:买开委托发出")
    631. retCode2, BKID2 = A_SendOrder(Enum_Buy(),Enum_Entry(),BKM2,BKP2,code2) #发出买开委托
    632. BKT2 = NOW #买开委托时间
    633. BKFLG2 = 1 #已发出买开委托
    634. BKDFLG2 = 0
    635. if SPDFLG2 == 1:
    636. if SPFLG2 == 0: #如果没有卖平委托
    637. if BRP2 > 0: #如果有多头可用持仓
    638. SPM2 = BRP2 #卖平委托手数
    639. SPP2 = BIDP2 #卖平委托价格
    640. LogInfo("SP信号:卖平委托发出!")
    641. retCode2, SPID2 = A_SendOrder(Enum_Sell(),SH,SPM2,SPP2,code2) #发出卖平委托
    642. SPT2 = NOW #卖平委托时间
    643. SPFLG2 = 1 #已发出卖平委托
    644. SPDFLG2 = 0
    645. if SKDFLG2 == 1:
    646. if SKFLG2 == 0: #如果没有卖开委托
    647. SKM2 = N #卖开委托手数
    648. SKP2 = BIDP2 #卖开委托价格
    649. LogInfo("SK信号:卖开委托发出!")
    650. retCode2, SKID2 = A_SendOrder(Enum_Sell(),Enum_Entry(),SKM2,SKP2,code2) #发出卖开委托
    651. SKT2 = NOW #卖开委托时间
    652. SKFLG2 = 1 #已发出卖开委托
    653. SKDFLG2 = 0
    654. if BPDFLG2 == 1:
    655. if BPFLG2 == 0: #如果没有买平委托
    656. if SRP2 > 0: #如果有空头可用持仓
    657. BPM2 = SRP2 #买平委托手数
    658. BPP2 = ASKP2 #买平委托价格
    659. LogInfo("BP信号:买平委托发出!")
    660. retCode2, BPID2 = A_SendOrder(Enum_Buy(),SH,BPM2,BPP2,code2) #发出买平委托
    661. BPT2 = NOW #买平委托时间
    662. BPFLG2 = 1 #已发出买平委托
    663. BPDFLG2 =0

  • 相关阅读:
    MySQL第二讲·表的创建与修改
    外贸找客户软件:Email Extractor Pro 7.2.X
    MTK cts测试注意事项
    R/d2及S/C4估计总体标准差,比较其CPK及规格限概率的差异
    价值年薪70W的JAVA进阶学习路线!终于让我从阿里P8手里抠出来了
    11.数据公式中使用2个 $$ a =b $$,是什么意思?
    Spring Boot通过lombok提供的Slf4j省略日志的创建操作
    【车间调度】基于改进帝国企鹅算法求解车间调度问题附matlab代码
    【用户画像】ClickHouse中的数据类型、表引擎介绍及使用、项目几个问题的解决办法
    UI设计师的主要工作内容优漫动游
  • 原文地址:https://blog.csdn.net/qq_26742269/article/details/133218232