当前位置: 首页 > news >正文

非标准化套利

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

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

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

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

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

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

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

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

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

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

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

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

import talib
import talib as ta
import numpy as np
#code1  =  "SPD|s|M|2311|2405"
#code1 = 'M2309-M2407'
spd = 'SPD|s|AU|2312|2402'#获取合约数据
code1='SHFE|F|AU|2312'#实际下单合约
code2 = 'SHFE|F|AU|2402'#实际下单合约g_params['n'] = 20 #滚动周期极值
g_params['m'] = 20 #ATR参数
#g_params['p'] = 20 #std周期
g_params['w'] = 'M'
g_params['T'] = 15
g_params['p3'] = 1 #止损线距离
g_params['p1'] = 20
g_params['adx'] = 20
g_params['m2'] =5
# 策略参数,全局变量,各个k线都可以调用
up1 = []
down1 = []
up2 = []
down2 = []
up3 = []
down3 = []
up4 = []
down4 = []
std = []
up_limit1 = []
down_limit1 = []
up_limit2 = []
down_limit2 = []
up_limit3 = []
down_limit3 = []
up_limit4 = []
down_limit4 = []
ran = []BKDFLG = 0
SKDFLG = 0
BPDFLG = 0
SPDFLG = 0
BKDFLG2 = 0
SKDFLG2 = 0
BPDFLG2 = 0
SPDFLG2 = 0#开仓委托
BKID = 0
SKID = 0
#平仓委托
BPID = 0
SPID = 0
#开仓标志
BKFLG = 0
SKFLG = 0
#平仓标志 
BPFLG = 0
SPFLG = 0
#开仓撤单标志
BKDEL = 0
SKDEL = 0
#平仓撤单标志
BPDEL = 0
SPDEL = 0
#开仓委托手数
BKM = 0
SKM = 0
#平仓委托手数
BPM = 0
SPM = 0
#开仓委托价格
BKP = 0
SKP = 0
#平仓委托价格
BPP = 0
SPP = 0
#开仓委托时间
BKT = 0
SKT = 0
#平仓委托时间
BPT = 0
SPT = 0#开仓委托
BKID2 = 0
SKID2 = 0
#平仓委托
BPID2 = 0
SPID2 = 0
#开仓标志
BKFLG2 = 0
SKFLG2 = 0
#平仓标志 
BPFLG2 = 0
SPFLG2 = 0
#开仓撤单标志
BKDEL2 = 0
SKDEL2 = 0
#平仓撤单标志
BPDEL2 = 0
SPDEL2 = 0
#开仓委托手数
BKM2 = 0
SKM2 = 0
#平仓委托手数
BPM2 = 0
SPM2 = 0
#开仓委托价格
BKP2 = 0
SKP2 = 0
#平仓委托价格
BPP2 = 0
SPP2 = 0
#开仓委托时间
BKT2 = 0
SKT2 = 0
#平仓委托时间
BPT2 = 0
SPT2 = 0def minprice(price1,price2):if price1>price2:return price2else:return price1
def maxprice(price1,price2):if price1>price2:return price1else:return price2
# 价格矫正为最小变动价整数倍
def PriceCorrect(src,tick):if tick:return (int((src+0.5*tick)/tick))*tickelse:src
# 策略开始运行时执行该函数一次
def initialize(context):SetBarInterval(spd, g_params['w'], g_params['T'],500)SetBarInterval(code1, g_params['w'], g_params['T'],500)SetBarInterval(code2, g_params['w'], g_params['T'],500)SetTriggerType(1)SetOrderWay(1)SetActual()SetAFunUseForHis()SetUserNo('Q1010422846')  # 设置交易账号# 策略触发事件每次触发时都会执行该函数
def handle_data(context):#当前k线判断,内部函数#出现开平仓信号# BKDFLG = 0# SKDFLG = 0# BPDFLG = 0# SPDFLG = 0# BKFLG =0# SKFLG =0# BPFLG =0 # SPFLG =0 #全局运作,超出k线#全局变量,不受时间约束global up1global down1global up2global down2global up3global down3global up4global down4global stdglobal up_limit1 global down_limit1global up_limit2 global down_limit2global up_limit3 global down_limit3global up_limit4 global down_limit4global ranglobal BKDFLG global SKDFLG global BPDFLG global SPDFLG global BKDFLG2 global SKDFLG2 global BPDFLG2 global SPDFLG2 global BKIDglobal SKIDglobal BPIDglobal SPIDglobal BKFLGglobal SKFLGglobal BPFLGglobal SPFLGglobal BKDELglobal SKDELglobal BPDELglobal SPDELglobal BKMglobal SKMglobal BPMglobal SPMglobal BKPglobal SKPglobal BPPglobal SPPglobal BKTglobal SKTglobal BPTglobal SPTglobal BKID2global SKID2global BPID2global SPID2global BKFLG2global SKFLG2global BPFLG2global SPFLG2global BKDEL2global SKDEL2global BPDEL2global SPDEL2global BKM2global SKM2global BPM2global SPM2global BKP2global SKP2global BPP2global SPP2global BKT2global SKT2global BPT2global SPT2#确定前面有足够的数据if (CurrentBar() >= len(up1)):if (len(up1)) < 20:up1.append(0)down1.append(0)up2.append(0)down2.append(0)up3.append(0)down3.append(0)up4.append(0)down4.append(0)std.append(0)up_limit1.append(0)down_limit1.append(0)up_limit2.append(0)down_limit2.append(0)up_limit3.append(0)down_limit3.append(0)up_limit4.append(0)down_limit4.append(0)ran.append(0)# preEntryPrice.append(0)else:up1.append(up1[-1])down1.append(down1[-1])up2.append(up2[-1])down2.append(down2[-1])up3.append(up3[-1])down3.append(down3[-1])up4.append(up4[-1])down4.append(down4[-1])std.append(std[-1])up_limit1.append(up_limit1[-1])down_limit1.append(down_limit1[-1])up_limit2.append(up_limit2[-1])down_limit2.append(down_limit2[-1])up_limit3.append(up_limit3[-1])down_limit3.append(down_limit3[-1])up_limit4.append(up_limit4[-1])down_limit4.append(down_limit4[-1])ran.append(ran[-1])#从第N根k线开始进行程序运行if len(Close()) < g_params['p1']:returnm = g_params['m']m2 = g_params['m2']x = spdran[-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)[-1] // PriceTick(x) * PriceTick(x)  # 一个周期前ran# if ran[-1]>=0:#     ran[-1]=0.12adx = 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)# if abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-1]) >= 0 and \# abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-1]) < 0.3:#     up1[-1] = up1[-2] # elif abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-1])>0.3:#     up1[-1] = High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max() # if abs(Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()-down1[-1])>=0 and \# abs(Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()-down1[-1])<0.3:#     down1[-1] = down1[-2]# elif abs(Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()-down1[-1])>0.3:#     down1[-1] = Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()PlotNumeric('ran', abs(Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()-down1[-1]),RGB_Yellow(),False)up1[-1] =  Close(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max() # if abs(up1[-2]-up1[-1])==0 or abs(up1[-2]-up1[-1])>0.2:#     up1[-1] = up1[-2]down1[-1] = Close(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()# if abs(down1[-2]-down1[-1])==0 or abs(down1[-2]-down1[-1])>0.2:#     down1[-1] = down1[-2]# if abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-2])<=1:#     up1[-1] = High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max() # else:#     up1[-1] = up1[-2]# if abs(down1[-2]-Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min())<=1:#     down1[-1] = Low(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()# else:#     down1[-1] = down1[-2]#up1[-1] =  Close(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()up_limit2[-1] = up1[-1] - ran[-1]*g_params['p3']// PriceTick(x) * PriceTick(x)#down1[-1] = Close(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].min()down_limit2[-1] = down1[-1] + ran[-1]*g_params['p3']// PriceTick(x) * PriceTick(x)#LogInfo(abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-1]))PlotNumeric('up1',up1[-1],RGB_Red(),True)PlotNumeric('up_limit2',up_limit2[-1],RGB_Blue(),True)PlotNumeric('down1',down1[-1],RGB_Green(),True)PlotNumeric('down_limit2',down_limit2[-1],RGB_Yellow(),True)#PlotNumeric('ran',abs(High(x,str(g_params['w'] ), g_params['T'])[-g_params['n']:-1].max()-up1[-2]),RGB_Yellow(),False)BKDFLG = 0SKDFLG = 0BPDFLG = 0SPDFLG = 0BKDFLG2 = 0SKDFLG2 = 0BPDFLG2 = 0SPDFLG2 = 0LogInfo(A_BuyPosition(code1,'Q1010422846'), A_SellPosition(code1,'Q1010422846'),A_BuyPosition(code2,'Q1010422846'), A_SellPosition(code2,'Q1010422846'))# LogInfo(BuyPosition(code1), SellPosition(code1),BuyPosition(code2), SellPosition(code2))# LogInfo('状态',Q_Close(spd),\# A_BuyPosition(code1),A_SellPosition(code1),\# A_BuyPosition(spd),A_SellPosition(spd), \# BKDFLG ,SKDFLG,BPDFLG,SPDFLG )if Q_Close(spd)>up1[-1]+PriceTick(spd) and \A_BuyPosition(code1,'Q1010422846')==0 and A_SellPosition(code1,'Q1010422846')==0 \and A_BuyPosition(code2,'Q1010422846')==0 and A_SellPosition(code2,'Q1010422846')==0 :if SKDFLG ==0:SKDFLG = 1if BKDFLG2 == 0:BKDFLG2 = 1elif  Q_Close(spd)<up_limit2[-1]-PriceTick(spd) and \A_BuyPosition(code1,'Q1010422846')==0 and A_SellPosition(code1,'Q1010422846')>0 \and  A_BuyPosition(code2,'Q1010422846')>0 and A_SellPosition(code2,'Q1010422846')==0:if BPDFLG ==0:BPDFLG = 1  # 发出止损信号if SPDFLG2 == 0:SPDFLG2 = 1  # 止损信号出现 elif  (Q_Close(spd)<down1[-1]-PriceTick(spd)) and \A_BuyPosition(code1,'Q1010422846')==0 and A_SellPosition(code1,'Q1010422846')==0 \and A_BuyPosition(code2,'Q1010422846')==0 and A_SellPosition(code2,'Q1010422846')==0:if BKDFLG == 0:BKDFLG = 1if SKDFLG2 == 0:SKDFLG2 = 1elif  (Q_Close(spd)>down_limit2[-1]+PriceTick(spd)) and \A_BuyPosition(code1,'Q1010422846')>0 and A_SellPosition(code1,'Q1010422846')==0 \and A_BuyPosition(code2,'Q1010422846')==0 and A_SellPosition(code2,'Q1010422846')>0:if SPDFLG == 0:SPDFLG = 1  # 止损信号出现 if BPDFLG2 ==0:BPDFLG2 = 1  # 发出止损信号ss = int(A_Assets()*0.005/(Q_Close(code1)*0.1*10))ss = 1LogInfo('状态',Q_Close(spd),\A_BuyPosition(code1,'Q1010422846'),A_SellPosition(code1,'Q1010422846'),\A_BuyPosition(spd,'Q1010422846'),A_SellPosition(spd,'Q1010422846'), \BKDFLG ,SKDFLG,BPDFLG,SPDFLG )#//------------------------历史发单------------------------//# if context.strategyStatus() != 'C':#     if (Close(spd, g_params['w'], g_params['T'])[-1]<=down1[-1]) and \# BuyPosition(code1)==0 and SellPosition(code1)==0 \# and BuyPosition(code2)==0 and SellPosition(code2)==0 :#         Buy(ss, Close(code1, g_params['w'], g_params['T'])[-1],code1, needCover=False) #         SellShort(ss, Close(code2, g_params['w'], g_params['T'])[-1],code2, needCover=False)#     elif Close(spd, g_params['w'], g_params['T'])[-1]>=up1[-1] and \# BuyPosition(code1)==0 and SellPosition(code1)==0 \# and BuyPosition(code2)==0 and SellPosition(code2)==0:#         SellShort(ss,Close(code1, g_params['w'], g_params['T'])[-1], code1,needCover=False)#         Buy(ss, Close(code2, g_params['w'], g_params['T'])[-1],code2, needCover=False)#     elif (Close(spd, g_params['w'], g_params['T'])[-1]>=down_limit2[-1]) and \# BuyPosition(code1)==0 and SellPosition(code1)>0 \# and BuyPosition(code2)>0 and SellPosition(code2)==0:#         Sell(ss, Close(code1, g_params['w'], g_params['T'])[-1],code1)#         BuyToCover(ss, Close(code2, g_params['w'], g_params['T'])[-1],code2)#     elif Close(spd, g_params['w'], g_params['T'])[-1]<=up_limit2[-1] and \# BuyPosition(code1)>0 and SellPosition(code1)==0 \# and  BuyPosition(code2)==0 and SellPosition(code2)>0:#         BuyToCover(ss,Close(code1, g_params['w'], g_params['T'])[-1], code1)#         Sell(ss, Close(code2, g_params['w'], g_params['T'])[-1],code2)#     return#//------------------------实时处理------------------------//# if ExchangeStatus(ExchangeName()) != '3':#     return#//------------------------变量赋值------------------------//#N = int(A_Assets()*0.0005/(Q_Close()*0.1*10))#N = 10N = 1 LogInfo('N',N)#N = 1 #下单手数T = 5 #时间间隔NOW = CurrentTime() #当前时间#code1BIDP = 0 if Q_BidPrice(code1) is None else Q_BidPrice(code1) #买一价ASKP = 0 if Q_AskPrice(code1) is None else Q_AskPrice(code1) #卖一价BRP = A_BuyPositionCanCover(code1) #多头可用持仓SRP = A_SellPositionCanCover(code1) #空头可用持仓LogInfo('价格',BIDP,ASKP,BRP,SRP)#code2BIDP2 = 0 if Q_BidPrice(code2) is None else Q_BidPrice(code2) #买一价ASKP2 = 0 if Q_AskPrice(code2) is None else Q_AskPrice(code2) #卖一价BRP2 = A_BuyPositionCanCover(code2) #多头可用持仓SRP2 = A_SellPositionCanCover(code2) #空头可用持仓# if ExchangeName() == 'SHFE': #如果是上期所合约#     SH = Enum_ExitToday() #平仓参数# else: #如果非上期所合约#     SH = Enum_Exit() #平仓参数SH = Enum_ExitToday()#//------------------------成交判断code1------------------------//if BKFLG == 1:if A_OrderStatus(BKID) == Enum_Filled():LogInfo("BK信号:买开委托成交!")BKFLG = 0 #买开标志归0BKDEL = 0 #买开撤单标志归0elif A_OrderStatus(BKID) == Enum_Canceled():LogInfo("BK信号:买开委托已撤!")if A_OrderFilledLot(BKID) > 0: #如果买开委托部分成交BKM = BKM - A_OrderFilledLot(BKID) #买开委托手数if BKM > 0: #如果买开委托手数大于0BKP = ASKP #买开委托价格LogInfo("BK信号:买开委托追价!")retCode, BKID = A_SendOrder(Enum_Buy(),Enum_Entry(),BKM,BKP,code1) #发出买开委托BKT = NOW #买开委托时间BKDEL = 0 #买开撤单标志归0elif A_OrderStatus(BKID) == Enum_Suspended() or A_OrderStatus(BKID) == Enum_FillPart():if BKDEL == 0: #如果未撤单if TimeDiff(BKT, NOW) >= T: #如果时间间隔T秒LogInfo("BK信号:买开委托撤单!")A_DeleteOrder(BKID) #撤掉买开委托挂单BKDEL = 1 #已发出撤掉买开委托挂单if SPFLG == 1:if A_OrderStatus(SPID) == Enum_Filled():LogInfo("SP信号:卖平委托成交!")SPFLG = 0 #卖平标志归0SPDEL = 0 #卖平撤单标志归0elif A_OrderStatus(SPID) == Enum_Canceled():LogInfo("SP信号:卖平委托已撤!")if A_OrderFilledLot(SPID) > 0: #如果卖平委托部分成交SPM = SPM - A_OrderFilledLot(SPID) #卖平委托手数if BRP > 0 and SPM > 0 and SPM <= BRP: #如果卖平委托手数不超过多头可用持仓SPP = BIDP #卖平委托价格LogInfo("SP信号:卖平委托追价!")retCode, SPID = A_SendOrder(Enum_Sell(),SH,SPM,SPP,code1) #发出卖平委托SPT = NOW #卖平委托时间SPDEL = 0 #卖平撤单标志归0elif A_OrderStatus(SPID) == Enum_Suspended() or A_OrderStatus(SPID) == Enum_FillPart():if SPDEL == 0: #如果未撤单if TimeDiff(SPT, NOW) >= T: #如果时间间隔T秒LogInfo("SP信号:卖平委托撤单!")A_DeleteOrder(SPID) #撤掉卖平委托挂单SPDEL = 1 #已发出撤掉卖平委托挂单if SKFLG == 1:if A_OrderStatus(SKID) == Enum_Filled():LogInfo("SK信号:卖开委托成交!")SKFLG = 0 #卖开标志归0SKDEL = 0 #卖开撤单标志归0elif A_OrderStatus(SKID) == Enum_Canceled():LogInfo("SK信号:卖开委托已撤!")if A_OrderFilledLot(SKID) > 0: #如果卖开委托部分成交SKM = SKM - A_OrderFilledLot(SKID) #卖开委托手数if SKM > 0: #如果卖开委托手数大于0SKP = BIDP #卖开委托价格LogInfo("SK信号:卖开委托追价!")retCode, SKID = A_SendOrder(Enum_Sell(), Enum_Entry(), SKM, SKP,code1) #发出卖开委托SKT = NOW #卖开委托时间SKDEL = 0 #卖开撤单标志归0elif A_OrderStatus(SKID) == Enum_Suspended() or A_OrderStatus(SKID) == Enum_FillPart():if SKDEL == 0: #如果未撤单if TimeDiff(SKT, NOW) >= T: #如果时间间隔T秒LogInfo("SK信号:卖开委托撤单!")A_DeleteOrder(SKID) #撤掉卖开委托挂单SKDEL = 1 #已发出撤掉卖开委托挂单if BPFLG == 1:if A_OrderStatus(BPID) == Enum_Filled():LogInfo("BP信号:买平委托成交!")BPFLG = 0 #买平标志归0BPDEL = 0 #买平撤单标志归0elif A_OrderStatus(BPID) == Enum_Canceled():LogInfo("BP信号:买平委托已撤!")if A_OrderFilledLot(BPID) > 0:  #如果买平委托部分成交BPM = BPM - A_OrderFilledLot(BPID) #买平委托手数if SRP > 0 and BPM > 0 and BPM <= SRP: #如果买平委托手数不超过空头可用持仓BPP = ASKP #买平委托价格LogInfo("BP信号:买平委托追价!")retCode, BPID = A_SendOrder(Enum_Buy(),SH,BPM,BPP,code1) #发出买平委托BPT = NOW #买平委托时间BPDEL = 0 #买平撤单标志归0elif A_OrderStatus(BPID) == Enum_Suspended() or A_OrderStatus(BPID) == Enum_FillPart():if BPDEL == 0: #如果未撤单if TimeDiff(BPT, NOW) >= T: #如果时间间隔T秒LogInfo("BP信号:买平委托撤单!")A_DeleteOrder(BPID) #撤掉买平委托挂单BPDEL = 1 #已发出撤掉买平委托挂单#//------------------------成交判断code2------------------------//if BKFLG2 == 1:if A_OrderStatus(BKID2) == Enum_Filled():LogInfo("BK信号:买开委托成交!")BKFLG2 = 0 #买开标志归0BKDEL2 = 0 #买开撤单标志归0elif A_OrderStatus(BKID2) == Enum_Canceled():LogInfo("BK信号:买开委托已撤!")if A_OrderFilledLot(BKID2) > 0: #如果买开委托部分成交BKM2 = BKM2 - A_OrderFilledLot(BKID2) #买开委托手数if BKM2 > 0: #如果买开委托手数大于0BKP2 = ASKP2 #买开委托价格LogInfo("BK信号:买开委托追价!")retCode2, BKID2 = A_SendOrder(Enum_Buy(),Enum_Entry(),BKM2,BKP2,code2) #发出买开委托BKT2 = NOW #买开委托时间BKDEL2 = 0 #买开撤单标志归0elif A_OrderStatus(BKID2) == Enum_Suspended() or A_OrderStatus(BKID2) == Enum_FillPart():if BKDEL2 == 0: #如果未撤单if TimeDiff(BKT2, NOW) >= T: #如果时间间隔T秒LogInfo("BK信号:买开委托撤单!")A_DeleteOrder(BKID2) #撤掉买开委托挂单BKDEL2 = 1 #已发出撤掉买开委托挂单if SPFLG2 == 1:if A_OrderStatus(SPID2) == Enum_Filled():LogInfo("SP信号:卖平委托成交!")SPFLG2 = 0 #卖平标志归0SPDEL2 = 0 #卖平撤单标志归0elif A_OrderStatus(SPID2) == Enum_Canceled():LogInfo("SP信号:卖平委托已撤!")if A_OrderFilledLot(SPID2) > 0: #如果卖平委托部分成交SPM2 = SPM2 - A_OrderFilledLot(SPID2) #卖平委托手数if BRP2 > 0 and SPM2 > 0 and SPM2 <= BRP2: #如果卖平委托手数不超过多头可用持仓SPP2 = BIDP2 #卖平委托价格LogInfo("SP信号:卖平委托追价!")retCode2, SPID2 = A_SendOrder(Enum_Sell(),SH,SPM2,SPP2,code2) #发出卖平委托SPT2 = NOW #卖平委托时间SPDEL2 = 0 #卖平撤单标志归0elif A_OrderStatus(SPID2) == Enum_Suspended() or A_OrderStatus(SPID2) == Enum_FillPart():if SPDEL2 == 0: #如果未撤单if TimeDiff(SPT2, NOW) >= T: #如果时间间隔T秒LogInfo("SP信号:卖平委托撤单!")A_DeleteOrder(SPID2) #撤掉卖平委托挂单SPDEL2 = 1 #已发出撤掉卖平委托挂单if SKFLG2 == 1:if A_OrderStatus(SKID2) == Enum_Filled():LogInfo("SK信号:卖开委托成交!")SKFLG2 = 0 #卖开标志归0SKDEL2 = 0 #卖开撤单标志归0elif A_OrderStatus(SKID2) == Enum_Canceled():LogInfo("SK信号:卖开委托已撤!")if A_OrderFilledLot(SKID2) > 0: #如果卖开委托部分成交SKM2 = SKM2 - A_OrderFilledLot(SKID2) #卖开委托手数if SKM2 > 0: #如果卖开委托手数大于0SKP2 = BIDP2 #卖开委托价格LogInfo("SK信号:卖开委托追价!")retCode2, SKID2 = A_SendOrder(Enum_Sell(), Enum_Entry(), SKM2, SKP2,code2) #发出卖开委托SKT2 = NOW #卖开委托时间SKDEL2 = 0 #卖开撤单标志归0elif A_OrderStatus(SKID2) == Enum_Suspended() or A_OrderStatus(SKID2) == Enum_FillPart():if SKDEL2 == 0: #如果未撤单if TimeDiff(SKT2, NOW) >= T: #如果时间间隔T秒LogInfo("SK信号:卖开委托撤单!")A_DeleteOrder(SKID2) #撤掉卖开委托挂单SKDEL2 = 1 #已发出撤掉卖开委托挂单if BPFLG2 == 1:if A_OrderStatus(BPID2) == Enum_Filled():LogInfo("BP信号:买平委托成交!")BPFLG2 = 0 #买平标志归0BPDEL2 = 0 #买平撤单标志归0elif A_OrderStatus(BPID2) == Enum_Canceled():LogInfo("BP信号:买平委托已撤!")if A_OrderFilledLot(BPID2) > 0:  #如果买平委托部分成交BPM2 = BPM2 - A_OrderFilledLot(BPID2) #买平委托手数if SRP2 > 0 and BPM2 > 0 and BPM2 <= SRP2: #如果买平委托手数不超过空头可用持仓BPP2 = ASKP2 #买平委托价格LogInfo("BP信号:买平委托追价!")retCode2, BPID2 = A_SendOrder(Enum_Buy(),SH,BPM2,BPP2,code2) #发出买平委托BPT2 = NOW #买平委托时间BPDEL2 = 0 #买平撤单标志归0elif A_OrderStatus(BPID2) == Enum_Suspended() or A_OrderStatus(BPID2) == Enum_FillPart():if BPDEL2 == 0: #如果未撤单if TimeDiff(BPT2, NOW) >= T: #如果时间间隔T秒LogInfo("BP信号:买平委托撤单!")A_DeleteOrder(BPID2) #撤掉买平委托挂单BPDEL2 = 1 #已发出撤掉买平委托挂单#//------------------------委托处理code1------------------------//if BKDFLG == 1:if BKFLG == 0: #如果没有买开委托BKM = N #买开委托手数BKP = ASKP #买开委托价格LogInfo("BK信号:买开委托发出")retCode, BKID = A_SendOrder(Enum_Buy(),Enum_Entry(),BKM,BKP,code1) #发出买开委托BKT = NOW #买开委托时间BKFLG = 1 #已发出买开委托BKDFLG= 0if SPDFLG == 1:if SPFLG == 0: #如果没有卖平委托if BRP > 0: #如果有多头可用持仓SPM = BRP #卖平委托手数SPP = BIDP #卖平委托价格LogInfo("SP信号:卖平委托发出!")retCode, SPID = A_SendOrder(Enum_Sell(),SH,SPM,SPP,code1) #发出卖平委托SPT = NOW #卖平委托时间SPFLG = 1 #已发出卖平委托SPDFLG = 0if SKDFLG == 1:if SKFLG == 0: #如果没有卖开委托SKM = N #卖开委托手数SKP = BIDP #卖开委托价格LogInfo("SK信号:卖开委托发出!")retCode, SKID = A_SendOrder(Enum_Sell(),Enum_Entry(),SKM,SKP,code1) #发出卖开委托SKT = NOW #卖开委托时间SKFLG = 1 #已发出卖开委托SKDFLG = 0if BPDFLG == 1:if BPFLG == 0: #如果没有买平委托if SRP > 0: #如果有空头可用持仓BPM = SRP #买平委托手数BPP = ASKP #买平委托价格LogInfo("BP信号:买平委托发出!")retCode, BPID = A_SendOrder(Enum_Buy(),SH,BPM,BPP,code1) #发出买平委托BPT = NOW #买平委托时间BPFLG = 1 #已发出买平委托BPDFLG =0#//------------------------委托处理code2------------------------//if BKDFLG2 == 1:if BKFLG2 == 0: #如果没有买开委托BKM2 = N #买开委托手数BKP2 = ASKP2 #买开委托价格LogInfo("BK信号:买开委托发出")retCode2, BKID2 = A_SendOrder(Enum_Buy(),Enum_Entry(),BKM2,BKP2,code2) #发出买开委托BKT2 = NOW #买开委托时间BKFLG2 = 1 #已发出买开委托BKDFLG2 = 0if SPDFLG2 == 1:if SPFLG2 == 0: #如果没有卖平委托if BRP2 > 0: #如果有多头可用持仓SPM2 = BRP2 #卖平委托手数SPP2 = BIDP2 #卖平委托价格LogInfo("SP信号:卖平委托发出!")retCode2, SPID2 = A_SendOrder(Enum_Sell(),SH,SPM2,SPP2,code2) #发出卖平委托SPT2 = NOW #卖平委托时间SPFLG2 = 1 #已发出卖平委托SPDFLG2 = 0if SKDFLG2 == 1:if SKFLG2 == 0: #如果没有卖开委托SKM2 = N #卖开委托手数SKP2 = BIDP2 #卖开委托价格LogInfo("SK信号:卖开委托发出!")retCode2, SKID2 = A_SendOrder(Enum_Sell(),Enum_Entry(),SKM2,SKP2,code2) #发出卖开委托SKT2 = NOW #卖开委托时间SKFLG2 = 1 #已发出卖开委托SKDFLG2 = 0if BPDFLG2 == 1:if BPFLG2 == 0: #如果没有买平委托if SRP2 > 0: #如果有空头可用持仓BPM2 = SRP2 #买平委托手数BPP2 = ASKP2 #买平委托价格LogInfo("BP信号:买平委托发出!")retCode2, BPID2 = A_SendOrder(Enum_Buy(),SH,BPM2,BPP2,code2) #发出买平委托BPT2 = NOW #买平委托时间BPFLG2 = 1 #已发出买平委托BPDFLG2 =0

相关文章:

非标准化套利

交易对象&#xff1a;目前使用非标准化组合进行交易。&#xff08;即黄金远近月&#xff0c;焦煤焦炭等等&#xff09; 交易平台&#xff1a;易盛极星极星产品网 手续费研究:白糖期货手续费和保证金2023年09月更新 - 九期网 本人使用的期货交易公司&#xff1a;中信期货&…...

从CNN(卷积神经网络),又名CAM获取热图

一、说明 卷积神经网络&#xff08;CNN&#xff09;令人难以置信。如果你想知道它如何看待世界&#xff08;图像&#xff09;&#xff0c;有一种方法是可视化它。 这个想法是&#xff0c;我们从最后的密集层中得到权重&#xff0c;然后乘以最终的CNN层。这需要全局平均…...

kafka消费者多线程开发

目录 前言 kafka consumer 设计原理 多线程的方案 参考资料 前言 目前&#xff0c;计算机的硬件条件已经大大改善&#xff0c;即使是在普通的笔记本电脑上&#xff0c;多核都已经是标配了&#xff0c;更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单…...

布局设计和实现:计算器UI【TableLayout、GridLayout】

一、使用TableLayout实现计算器UI 1.新建一个空白项目布局 根据自己的需求输入其他信息 填写完成后&#xff0c;点击Finish即可 2. 设计UI界面 在res/layout文件夹中的XML文件中创建UI界面。在这个XML文件中&#xff0c;您可以使用TableLayout来设计计算器界面。 2.1 创建l…...

stack与queue的简单封装

前言&#xff1a; stack与queue即栈和队列&#xff0c;先进后出/先进先出的特性我们早已了然于心&#xff0c; 在学习数据结构时&#xff0c;我们利用c语言实现栈与队列&#xff0c;从结构体写起&#xff0c;利用数组或指针表示他们的数据成员&#xff0c;之后再一个个实现他们…...

ChatGPT使用技巧整理

目录 1. 让ChatGPT扮演专家角色2. 告诉ChatGPT你的身份3. 限制ChatGPT的回答长度4. 让ChatGPT一步步思考5. 明确你的要求和目的6. 提供充分的背景信息7. 始终结构化思考你的prompt1. 让ChatGPT扮演专家角色 当你们讨论的是市场营销问题时,你可以要求ChatGPT扮演一个具有20年从…...

机器学习笔记 - 维度诅咒的数学表达

1、点之间的距离 kNN分类器假设相似的点也可能有相同的标签。但是,在高维空间中,从概率分布中得出的点往往不会始终靠近在一起。 我们可以用一个简单的例子来说明这一点。 我们将在单位立方体内均匀地随机绘制点(如图所示),并研究该立方体内测试点的 k 个最近邻将占用多少…...

组合计数训练题解

CF40E 题目链接 点击打开链接 题目解法 首先&#xff0c;如果 n , m n,m n,m 一奇一偶&#xff0c;那么答案为 0 0 0 原因是从行和列的角度分析&#xff0c; − 1 -1 −1 个数的奇偶性不同 可以发现 k < max ⁡ { n , m } k<\max\{n,m\} k<max{n,m} 的性质很微…...

P1095 [NOIP2007 普及组] 守望者的逃离

[NOIP2007 普及组] 守望者的逃离 - 洛谷 首先DP的套路就是先找状态 这题也找不出其他的状态了&#xff0c;只有时间一个 所以用f[i]表示时刻i能走多远 而仔细一想实际上决策只有跑、闪现、停三种决策 然而闪现的耗蓝要和跑步一同计算十分麻烦 于是把它们分开算&#xff1…...

Python函数绘图与高等代数互融实例(八):箱线图|误差棒图|堆积图

Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数 Python函数绘图与高等代数互融实例(二):闪点函数 Python函数绘图与高等代数互融实例(三):设置X|Y轴|网格线 Python函数绘图与高等代数互融实例(四):设置X|Y轴参考线|参考区域 Python函数绘图与高等代数互融实例(五…...

联想y7000 y7000p 2018/2019 不插电源 不插充电器, 直接关机 ,电量一直89%/87%/86%,V0005如何解决?

这种问题&#xff0c;没有外力破坏的话&#xff0c;电池不可能突然出事。这种一般是联想的固件问题&#xff0c;有可能发生在系统更新&#xff0c;或者突然的不正常关机或长时间电池过热&#xff0c;原因我不是很清楚。 既然发生了&#xff0c;根据我收集的解决方法&#xff0c…...

stm32与esp8266通信

esp8266 #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h>// 测试HTTP请求用的URL // #define URL "http://162.14.107.118:8086/PC/modifyFoodPrice/0/6"// 测试HTTP请求用的URL // 设置wifi接入信息(请根据您的WiFi信息进行修改) const char…...

组合数 2.1 2.2

O(nlogn)预处理&#xff0c; O(1)查询 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long long ll; typedef long double ld;const int N 1000…...

【数组的中心位置】python实现-附ChatGPT解析

1.题目 数组的中心位置 题目 给你一个整数数组 nums,请计算数组的中心位置。 数组中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相乘的积。 数组第一个元素的左侧积为 1,最后一个元素的右侧积为 1。 如果数组有多个中心位置,应该返回最靠近左边的那一个…...

黑马JVM总结(二十三)

&#xff08;1&#xff09;字节码指令-init 方法体内有一些字节&#xff0c;对应着将来要由java虚拟机执行方法内的代码&#xff0c;构造方法里5个字节代码&#xff0c;main方法里有9个字节的代码 java虚拟机呢内部有一个解释器&#xff0c;这个解释器呢可以识别平台无关的字…...

AI人体行为分析:玩手机/打电话/摔倒/攀爬/扭打检测及TSINGSEE场景解决方案

一、AI人体行为分析技术概述及场景 人体姿态分析/行为分析/动作识别AI算法&#xff0c;是一种利用人工智能技术对人体行为进行检测、跟踪和分析的方法。通过计算机视觉、深度学习和模式识别等技术&#xff0c;可以实现对人体姿态、动作和行为的自动化识别与分析。 在场景应用…...

HI_NAS linux 记录

dev/root 100% 占用解决记录 通过下面的命令查看各文件夹 大小 sudo du --max-depth1 -h # 统计当前文件夹下各个文件夹的大小显示为M 最终发现Var/log 占用很大空间 发现下面两个 log 占用空间很大&#xff0c;直接 rm-rf 即可 HI NAS python3 记录 # 安装pip3 sudo apt u…...

计算机图形学中的几何光学

文章目录 前言一、图形学中的光学二、光照模型1、经验型&#xff08;简单&#xff09;2、物理型&#xff08;复杂&#xff09; 前言 在学习Shader光照之前了解一下计算机图形学 一、图形学中的光学 镜面反射的效果例子&#xff1a;物体表面高光 慢反射的效果的例子&#xff1a…...

「UG/NX」BlockUI 选择小平面区域 Select Facet Region

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「UG/NX」BlockUI集合&#x1f4da;全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「DSA」数据结构与算法「File」数据文件格式 目录 控件说…...

【完全二叉树魔法:顺序结构实现堆的奇象】

本章重点 二叉树的顺序结构堆的概念及结构堆的实现堆的调整算法堆的创建堆排序TOP-K问题 1.二叉树的顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...