用chatgpt写网格交易策略 VNPY单品种期货的网格交易策略的实现是怎样的

默认分类1年前 (2023)发布 admin
4,525 0
ChatGPT国内版

这篇文章给大家介绍VNPY单品种期货网格交易策略的实现是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

这里做了单品种期货网格交易策略实现。

当bar.close在通道中时候,下个bar打到上轨开多单,打到下轨空单。

这里采用了均量交易法,就是每笔下单手数都是一样,并非金字塔式下单。

有多单时候,突破上线加多单,突破下线情况清空所有多单,当多单到达定义的最大手数不再下单

为防止在一个线上下波动,造成重复开平仓情况,如果突破平仓,比如平多单,后面n个bar不能再开多单,只能开空单;反之平空单后,

现在这个策略很粗糙,只做实现逻辑分析,可以回测,考虑涉及仓位控制,别实盘。

点击(此处)折叠或打开

# : UTF-8

from

from vnpy.. *

from math isnan

numpy as np

as pd

from vnpy..app.. (, ,

,

)

class ():

= ''

= u''

# 策略参数

= 200 # 历史数据大小,用来确定网格基准线

= 20 # 初始化数据所用的天数,随着历史数据大小要改变

= 10 # 网格线数量,单边数量

= 10 # 最大持仓数量

order = 1 # 每次下单手数

= 30 #bar的时间

= 1 #平仓后,个bar不再开反向单

= 30 # ATR窗口数

= 5.0 # 计算止损距离的乘数

# 基本变量

= 0 #当前上线

= 0 #当前下线

= 0 #当前是否冻结开反向单

= 0

= 0

= 0

# 参数列表,保存了参数的名称

= ['name',

'',

'',

'',

''

'',

'',

'',

'order',

'',

'',

''

# 变量列表,保存了变量的名称

= ['',

'',

'pos',

'',

'',

''

'']

# 同步列表,保存了需要保存到数据库的变量名称

= ['pos',

'']

# ———————————————————————-

def (self, , ):

“”””””

super(, self).(, )

用chatgpt写网格交易策略 VNPY单品种期货的网格交易策略的实现是怎样的

self.bg = (self.onBar, self., self.) # 创建K线合成器对象

self.am = (self. + 50)

# ———————————————————————-

def (self):

“””初始化策略(必须由用户继承实现)”””

self.(u'%s策略初始化' % self.name)

# 载入历史数据,并采用回放计算的方式初始化策略数值

= self.(self.)

for bar in :

self.onBar(bar)

self.()

def (self):

“””启动策略(必须由用户继承实现)”””

self.(u'%s策略启动' % self.name)

self.()

def (self):

“””停止策略(必须由用户继承实现)”””

self.(u'%s策略停止' % self.name)

self.()

# ———————————————————————–

def (self, bar):

“””收到X分钟K线”””

# 全撤之前发出的委托

self.()

# 保存K线数据

am = self.am

am.(bar)

if not am.:

# 这里采用了均量交易法,就是每笔。

# 空仓时候,每次突破上线是开多单,突破下线是开空单;

# 有多单时候,突破上线加多单,突破下线情况清空所有多单,

# 有空单时候,突破下线加空单,突破上线清空所有空单,

# 为防止在一个线上下波动,造成重复开平仓情况,如果突破平仓,比如平多单,后面n个bar不能再开多单,只能开空单;反之平空单后,

# 后面n个bar只能开多单。

# 计算网格,返回通道队列, 再算出当前点位所在通道,0为最下通道,2*self. – 1为最上通道

= self.am.sma(self.)

# 过去300的标准差,按照顶一个取整做出一个队列

= + np.array([n * 1.00 / self. for n in range(-1 * self., self. + 1)]) * self.am.std(self.)

= pd.cut([bar.close], , =[nx for nx in range(0,2*self.)])[0]

# 如果返回为nan,说明现在bar.close在标准差范围以外,如果没有仓位,先不处理;如果有,按照ATR波动移动止盈

if isnan():

# 持有多头仓位

if self.pos > 0:

self. = max(self., bar.high)

self. = bar.low

self. = self. – self. * self.

self.sell(self., abs(self.pos), True)

# 持有空头仓位

elif self.pos < 0:

self. = bar.high

self. = min(self., bar.low)

self. = self. + self. * self.

self.cover(self., abs(self.pos), True)

#返回上下线:

self. = [ + 1]

self. = []

# 空仓时候,每次突破上线是开多单,突破下线是开空单;

# 如果此时在最下一个通道,此时只挂往上的多单, 如果在最上面通道,此时只挂往下空单;如果在中间的,则同时开上下单

if self.pos == 0:

if ==0:

self.buy(self., self.order, True)

elif == 2*self. – 1:

用chatgpt写网格交易策略 VNPY单品种期货的网格交易策略的实现是怎样的

self.short(self.,self.order,True)

else:

#此时如果 为0, 直接开上下单:

if self. == 0:

self.buy(self., self.order, True)

self.short(self., self.order, True)

#此时如果大于0,只能开空单,如果小于0,只能开多单

elif self. > 0:

self. = self. -1

self.short(self., self.order, True)

elif self. < 0:

self. = self. + 1

self.buy(self., self.order, True)

#如果持有多仓时候,如果在中间通道,同时开上下单;如果最高点位不再开单,突破最大标准差高点,

elif self.pos > 0:

# 在最下通道不可能有多单,只用考量在中间段,pos 小于可以增多仓,否则只能向下平仓;和最高段情况,最高段设置往下平仓,

if == 2*self. – 1:

self. = bar.high

self.sell(self., abs(self.pos), True)

else:

if abs(self.pos) < self.:

self.buy(self., self.order, True)

self.sell(self., abs(self.pos), True)

else:

self.sell(self., abs(self.pos), True)

elif self.pos < 0:

# 最上通道通道不可能有空单,只用考虑中间段,和最低档情况

if == 0:

self. = bar.low

self.cover(self.,abs(self.pos),True)

else:

if abs(self.pos) < self.:

self.cover(self., abs(self.pos),True)

self.sell(self., self.order, True)

else:

self.cover(self., abs(self.pos), True)

# ———————————————————————-

def (self, tick):

“””收到行情TICK推送(必须由用户继承实现)”””

self.bg.(tick)

# ———————————————————————-

def onBar(self, bar):

“””收到Bar推送(必须由用户继承实现)”””

self.bg.(bar)

# ———————————————————————-

def (self, order):

“””收到委托推送”””

pass

# ———————————————————————-

def (self, trade):

# 发出状态更新事件

# 如果收到成交,清空所有挂单

self.()

# 如果交易多头方向,且现在仓位为0,则应该是空头平仓,不再开空单

if trade. == and self.pos == 0:

self. = -1* self.

# 如果交易空头方向,且现在仓位为0,则应该是多平仓,不再开多单

elif trade. == and self.pos == 0:

self. = self.

self.()

# ———————————————————————-

def (self, so):

“””停止单推送”””

pass

关于VNPY单品种期货的网格交易策略的实现是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

© 版权声明
广告也精彩

相关文章

暂无评论

暂无评论...