2023年QMT量化交易第三课:网格交易策略
还有疑问,立即追问>

2023年QMT量化交易第三课:网格交易策略

叩富问财 浏览:1740 人 分享分享

8个有赞回答
首发回答
Hello,大家好呀,欢迎大家观看QMT量化交易教程,我会用7天时间带领大家熟悉QMT,今天我们来看下QMT量化交易教程第二课:网格交易策略。

大家想学习QMT的话可以加我联系方式,然后找我要一个QMT的测试账号。登录测试账号,照着视频里的代码自己敲一遍,这样学习效果比较好。我这里也有现成的代码,如果有需要的话也可以找我。

本次教学的内容主要分为两个部分。上半部分,我会从投资中经常碰到的三个问题出发。引出我们今天要重点讲解的交易策略,也就是网格交易策略,然后介绍网格交易策略的基本原理。下半部分,我会带大家看一下网格交易策略如何在QMT平台上实现。上个视频我们已经讲完上半部分,今天我们来讲下半部分,如何用QMT实现网格交易策略。

首先用我给的测试账号登录系统,登录进去以后,这里有一个我已经写好的网格交易策略。

第一步还是先导入numpy和pandas库。

import numpy as np
import pandas as pd



接下来看看init函数,通过ContextInfo.stockcode来获取主图代码,加上市场后,赋值给tradestock,然后通过set_universe函数来订阅股票。

def init(ContextInfo):
#设置主图股票代码为买卖标的
ContextInfo.tradestock = ContextInfo.stockcode "." ContextInfo.market
ContextInfo.set_universe([ContextInfo.tradestock])



接下来设置网格交易初始初始建仓的资金比例,根据之前的策略,初始仓位是60%,接着我们设置网格交易的步长,这里设置为基准价的0.5%。

# 设置建仓资金比例
ContextInfo.weight = 0.60
# 设置网格的步长,以基准价的百分比表示
ContextInfo.step = 0.005 #步长设置参数

接下来设置网格线,这里我们用基准价的百分比来设置。我这里用一个数组来代表网格线,另外我们用一个很小的数和一个很大的数,来代表网格的上下极限值。我们把数组打印出来看看。我们可以看到,基准是1,然后是0.997,代表基准价的0.997倍,接下来是0.994一直到0.985,代表5个网格线,最上面一个是0.182,这个用来控制持仓上下限。

然后是资金帐号,这里可以设置为我们实盘的资金帐号。

# 设置网格线的价格,以基准价的百分比表示
ContextInfo.band = pd.Series([0.2,1,1,1,1,1,1,1,1,1,1,1,10])
pd.Series([-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6])*ContextInfo.step
print(ContextInfo.band)
ContextInfo.accountid='1011328'

ContextInfo.short代表短期均线长度,设置为5,middle代表中期均线长度,设置为20,long代表长期均线长度,设置为40。这三个参数主要用于利用均线多头排列来建仓的。

ContextInfo.short=5
ContextInfo.middle=20
ContextInfo.long=40

Price变量,代表基准价。

ContextInfo.price=0

Holdings_list是一个列表,用于记录持仓数量,我们主要用到的还是第一个数,也即是开仓时的数量。

ContextInfo.holdings_list=[]

接下来是目标仓位,上一个视频讲过,在同一区间内,买入和卖出在同一个价格区间内的目标仓位是不同的,卖出的时候比买入的时候多一个网格交易的数量的股票,因此这里我们使用Buy_Lable和Sell_Lable两个列表来代表买入和卖出的目标仓位,-1代表卖出一个单位的股票,这里的一个单位,代表初始持仓的10%。

#对应区间的目标仓位,买入和卖出在同一价格区间的目标仓位不一致,需分别列出,以相对底仓的变动表示
ContextInfo.Buy_Lable=pd.Series([5,4,3,2,1,0,-1,-2,-3,-4,-5,-5])
ContextInfo.Sell_Lable=pd.Series([5,5,4,3,2,1,0,-1,-2,-3,-4,-5])

接下来两个变量number_plus和number_down代表买入的次数和卖出的次数。

ContextInfo.number_plus = 0
ContextInfo.number_down = 0

初始化变量以后,我们来看下handlebar函数。这个函数放了我们的策略逻辑,然后系统会根据回测周期重复的调用,每个时间间隔运行一次。比如默认周期设置为3分钟,则handlebar会根据这个3分钟周期频率运行一次。另外系统最低支持tick级别的回测,大家可以选择分笔线,这个就代表tick级频率。交易也可以选择tick级别的交易

然后进入到网格交易策略handlebar主函数里面,前三行,这里不是策略的主要内容,主要是用于显示目前回测运行到哪个时间点了,方便我们进行问题排查。大家可以直接把这三行代码复制到自己的策略里。

def handlebar(ContextInfo):
index = ContextInfo.barpos
timetag = ContextInfo.get_bar_timetag(index)
print(timetag_to_datetime(timetag, '%Y%m%d %H:%M:%S'))

接下来是获取持仓,调用get_holdings函数,这是一个我们自定义的函数,传入的参数是accountid和’STOCK’,我们来看下这个函数。首先定义了一个空字典,这个字典用来存储股票持仓。接下来我们继续调用get_trade_detail_data函数,这是一个获取账户信息的函数,传入资金帐号,datatype是账户的类别,这里穿的是’STOCK’,代表股票账户,然后再传一个’POSITION’,代表获取持仓。把返回结果赋值给resultlist,这是一个列表,列表里存的是POSITION持仓对象,我们可以通过文档来看这个POSITION对象,里面有很多字段,我们只需要股票代码和数量这两个最关键的字段。这里用一个for循环展开所有的POSITION对象,holdinglist这个字典的键设置为股票代码m_strInstrumentID加市场m_strExchangeID,比如000001.SZ,值设置为持仓量m_nVolume,除以100的意思是把多少股转化为多少手。最终把字典返回。把返回的结果赋值给holdings。

#获取持仓信息{code.market:手数}
def get_holdings(accountid,datatype):
holdinglist={}
resultlist=get_trade_detail_data(accountid,datatype,"POSITION")
for obj in resultlist:
holdinglist[obj.m_strInstrumentID "." obj.m_strExchangeID]=obj.m_nVolume/100
#返回{code.market:持仓手数}
return holdinglist

接下来用get_totalvalue函数获取总资产,这个函数第一课已讲过,这里我们不再赘述。这两个获取持仓和获取资金的函数,大家可以直接复制,用在后面自己的策略中,减少工作量。

#=============建仓=======================
holdings=get_holdings(ContextInfo.accountid,'STOCK')
totalvalue=get_totalvalue(ContextInfo.accountid,'STOCK')

接下来,我们去判定当前是否有持仓,if not holdings,假设没有持仓,需要进行建仓操作。这几行代码是用来计算移动均线的,首先去获取历史行情,调用get_history_data函数获取历史行情,第一个参数是K线的数量,最大40日均线,因此传41,然后我们策略是3分钟频率的策略,因此传’3m’,’m’代表分钟,’close’代表收盘价,历史收盘行情赋值给’h’。接下来用np.mean来计算5日,20日,40日均线,分别复制给ma5,ma20,ma40。当满足ma20大于ma40,ma5大于ma20,也就是均线多头排列时,调用order_target_value开仓,之前我们也讲过,开仓时用60%的资金开仓,因此第二个参数设置为

ContextInfo.weight*totalvalue,weight是0.6,totalvalue是总的资金。把开仓时的价格,也就是基准价赋值给price。然后打印出来。

if not holdings:
h=ContextInfo.get_history_data(41,'3m','close')
ma5=np.mean(h[ContextInfo.tradestock][-ContextInfo.short-1:-1])
ma20=np.mean(h[ContextInfo.tradestock][-ContextInfo.middle-1:-1])
ma40=np.mean(h[ContextInfo.tradestock][-ContextInfo.long-1:-1])
if ma20>ma40 and ma5>ma20:
order_target_value(ContextInfo.tradestock,ContextInfo.weight*totalvalue,
ContextInfo,ContextInfo.accountid)
ContextInfo.price=h[ContextInfo.tradestock][-1]

一旦我们有了底仓之后,接下来就去进行的网格交易操作,这个if holdings就是我们有底仓就开始进行网格交易操作。

首先将当前持仓保存在holdings_list这个列表里,然后去获取底仓,底仓就是我们通过均线多头排列开仓的数量。

#=============网格交易====================
if holdings:
#print(111)
ContextInfo.holdings_list.append(holdings[ContextInfo.tradestock])
#底仓为仓位记录的首位
basic_holdings= ContextInfo.holdings_list[0]

接下来计算网格线的具体价格,band是百分比,乘以基准价后,就变成具体网格线的价格。这里我们打印出来看下,第一个非常小,最后一个数非常大,用这两个数来作为持仓上下限的控制条件,因为价格一般不会突破这两个值,因此最多卖出50%的股票,最多买入50%的股票。

#网格线的具体价格
Limit_price = np.array(ContextInfo.band)*ContextInfo.price
print(Limit_price)

用get_history_data获取最近2根K线的价格,为什么是2根,因为我们要去判断价格上涨还是下跌。

Con_close= ContextInfo.get_history_data(2,'3m','close')[ContextInfo.tradestock]

然后利用pandas的cut函数,来当前价格在哪个网格区间。

#获取当前价格对应的区间
lable=pd.cut(Con_close[-1],Limit_price,labels=False)

然后计算每次固定的交易数量,这里用了int强制类型转换,目的是为了使得买卖数量为100的整数倍。

#固定的交易量
trade_volume = int(0.1*basic_holdings/100)*100

然后计算买入和卖出的目标仓位,注意买入和卖出的时候目标仓位是不同的,卖出的目标仓位要比买入的时候多一个固定交易数量。

Buy_aim_Position= basic_holdings pd.Series(ContextInfo.Buy_Lable*trade_volume)
Sell_aim_Position= basic_holdings pd.Series(ContextInfo.Sell_Lable*trade_volume)

d,获取当前索引,用于计算下面的p,p是当前净值。

d = ContextInfo.barpos #当前K线索引号
p = ContextInfo.get_net_value(d)

接下来,判断股价上涨还是下跌,当股价上涨时,需要卖出股票,这里我们要用到卖出的目标仓位Sell_aim_Position,用当前仓位减去卖出仓位,就得到了需要调仓的数量Sell_volume,当调仓数量大于0的时候,意思是股价向上突破格值,需要 卖出股票。这里我们调用order_shares函数,这个函数是按照数量下单的函数,然后卖出次数number_down加1,打印出来。

#价格上涨部分卖出
if Con_close[1]>Con_close[0]:
Sell_volume = holdings[ContextInfo.tradestock]-Sell_aim_Position[lable]
#print(Sell_volume)
#过滤掉无效的价格波动
if Sell_volume >0:
ContextInfo.draw_text(1>0,p 0.01*p,"S")
order_shares(ContextInfo.tradestock,-Sell_volume*100,'fix',Limit_price[lable],ContextInfo,ContextInfo.accountid)
ContextInfo.number_down =1
print('down',ContextInfo.number_down)

价格下跌也是相同的处理,先计算买入调仓数量Buy_volume,然后画出标记,买入股票,买入次数加1,打印。

#价格下跌部分买入
if Con_close[1]Buy_volume = Buy_aim_Position[lable]-holdings[ContextInfo.tradestock]
#过滤掉无效的价格波动
if Buy_volume>0:
ContextInfo.draw_text(1>0,p 0.01*p,"B")
order_shares(ContextInfo.tradestock,Buy_volume *100,'fix',Limit_price[lable 1],ContextInfo,ContextInfo.accountid)
ContextInfo.number_plus =1
print('plus',ContextInfo.number_plus)


编辑完策略代码以后,我们就可以点击左上角“回测”这个按钮,就能得到回测结果。

发布于2023-1-3 15:49 常州

当前我在线 直接联系我
1 更多 分享 追问
收藏 举报
咨询TA

你好亲,2023年,有需要用到QMT做量化交易的朋友, 可以右上角微信电话联系我办理开户,我司上市证券公司平台,可免费提供QMT量化交易软件,以及PTrade量化交易软件;可提前右上角微信电话沟通,谈好具体优惠合适再开户。

以上内容就是您提出问题相关回答,希望对您有所帮助!

任何问题可直接右上角电话/微信交流,竭诚以待!成本佣金,两融在线开/利率可低至5%以下(支持同花顺/通达信等,万得专业套利软件),期权1.7,QMT/PTrade量化,新客理财6.99%~

发布于2023-5-29 13:54 福州

1 更多 分享 追问
收藏 举报
咨询TA

网格交易策略是一种利用市场震荡行情获利的主动交易策略,其本质是在投资标的在一定的价格区间内反复波动时,进行低买高卖的操作,从而实现收益最大化的目的。网格交易策略有以下几个要点:


选择合适的标的:网格交易策略适用于波动性较大,但又有一定支撑和压力的品种,如指数、ETF、可转债等。这些品种相对于个股,有较低的风险和交易成本,也有较高的流动性和长期上涨的概率


设定合理的网格区间:网格区间是指投资标的的价格波动范围,一般可以根据历史走势、技术分析或者估值水平来确定。网格区间应该能够覆盖标的的正常波动幅度,避免过大或过小。过大的网格区间会导致资金利用率低,收益率降低;过小的网格区间会导致频繁触发交易信号,增加交易成本和风险


设定合适的网格大小:网格大小是指网格区间内每个子区间的价格差,也就是每次买卖的触发条件。网格大小应该能够匹配标的的波动率,一般可以根据历史数据或者经验来设定。网格大小应该能够保证在一定时间内有足够的交易机会,同时又不至于过于频繁。过大的网格大小会导致交易机会少,收益率低;过小的网格大小会导致交易机会多,但收益率也不一定高


计算合理的仓位:仓位是指每次买卖时持有或卖出标的的数量或金额,一般可以根据总资金、网格区间、网格大小等因素来计算。仓位应该能够保证在网格区间内有足够的资金和空间来进行加仓和减仓,同时又不至于过于激进或保守。过大的仓位会导致资金占用高,风险增加;过小的仓位会导致资金闲置多,收益率降低


以上是我对2023年QMT量化交易第三课:网格交易策略这个题目回答,希望有帮助到您,如果您还是有什么不懂的地方也可以右上角来添加我的微信或者点击阅读原文与我联系

发布于2023-8-16 08:44 北京

当前我在线 直接联系我
1 更多 分享 追问
收藏 举报
咨询TA

2023年QMT量化交易满足50万免费开通,少数券商佣金给到成本价没有问题,具体的佣金费率是需要结合投资者的自身情况与券商进行沟通的,可以在网上找客户经理开立低佣金账户的,线上办理证券账户十分钟就能完成,在开户前需要备好二代身份证、银行卡。


投资者买卖股票是需缴纳的手续费如下:
1、印花税是按实际的成交金额的0.1%收费。
2、一般过户费是按投资者的成交金额的0.02%来收取的。
3、券商佣金是客户在通过券商交易股票时支付给券商的交易费用,最高不超过成交金额的千分之3,单笔交易佣金不满5元按5元收取。

可以使用以下的方式来降低佣金费率,
1、协商佣金就需要您增加投资金额或者是增加您的交易次数。
2、您开户之前可以联系券商的客户经理协商佣金,开户前协商的佣金会比较的优惠,而且后期还能享受到客户经理的专属服务。

我司上市老牌证券公司,新开户无论资金量大小给您成本价全包低佣!肯定能让您满意!两融利率4.99%,期权1.7元一张!我司也支持QMT/Ptrade等量化交易软件!

发布于2023-9-14 14:03 杭州

当前我在线 直接联系我
1 更多 分享 追问
收藏 举报
咨询TA

券商支持QMT量化交易的,50万免费开通。证券的交易佣金一般在万分之3左右的,证券网上开户可以选择低佣金的正规券商,如果想要办理低佣金账户,可以提前联系好客户经理协商办理,因为客户经理相当于券商的优惠开户渠道。现在网上办理开户是需准备好自己的身份证和托管银行卡的,同时要准备可以上网的设备进行开户。

交易手续费的具体标准如下:
1、佣金,万三是股票交易手续费的标准,最低收取的费用是5元,一旦交易计算不满足5元就会按照5元来进行收取,交易佣金是双向收取,无论买入还是卖出,双方都需要交纳手续费。交易佣金还包含有证监会的证管费以及交易所的交易规费在内。
2、上海股票及深圳股票的印花税均按实际成交金额的千分之0.5支付。
3、过户费是买卖都收费,按成交的万0.1收取。

预约我开户,专业人士一对一在线指导开户!佣金行业内特惠价,两融专项利率低至4.8%哦,期权低至成本费用!百万资产免费为您办理VIP交易通道~支持网格交易、量化交易。

发布于2023-12-27 23:29 北京

当前我在线 直接联系我
1 更多 分享 追问
收藏 举报
咨询TA

您好,2023年量化交易门槛是50万免费开通,主流的是QMT或者ptrade,目前股票开户手续费默认固定在万三左右,佣金费率是可以根据券商的优惠方案进行调整的,投资者自行开户的佣金会比较高,因为这个是默认的佣金值,想要获得低佣金的账户就需要事先预约客户经理进行申请,这样才高效的办理低佣金的账户。建议您办理账户开户在网上进行,因为网上开户几分钟就能搞定,只需下载一个证券开户APP。


佣金是可以通过以下方式进行调整的:
1、选对开户渠道,券商的营业部以及证券开户APP都属于自引流渠道,开出来的佣金都是默认较高的水平。其实各家券商都是有低佣金开户渠道的,您需要在开户前联系线上的客户经理,通过他们的专属二维码进行开户,这样就可以获得低佣金啦。
2、您的交易的频繁程度越高,一天之内可以完成好几次的交易,这样的情况下券商也会愿意为您做出让利,这样开出来的佣金也会越低。
3、不同的开户渠道佣金也是不同的,您开户前需要联系线上的客户经理,跟他们去协商申请低佣金开户,这样就能免费办理到一个低佣金账户了。

优质账户找我办理绝对放心,欢迎添加微信或者电话沟通!交易费用可以给到成本价,期权低至1.7元/张,融资融券专项利率可以低到4.80%,支持同花顺、通达信的登录!极速交易通道免费送,同时支持QMT、P-trade软件!

发布于2024-1-24 14:33 深圳

当前我在线 直接联系我
1 更多 分享 追问
收藏 举报
咨询TA

2023年QMT量化交易需要资金五十万才能开通。新手炒股买入卖出的手续费大致是万2.5,对于一些高净值客户或频繁交易者,证券公司可能会提供较低的佣金费率。低佣金的开户服务可以在右上角单独预约与客户经理联系,并在达成共识后进行办理。个人满足18周岁,可以直接通过手机在线方式进行账户开通。


下面介绍几种低佣账户开设的方法:
1、增加交易金额和数量
交易金额和交易次数越高,手续费也越高,券商员工在此基础上一般会主动给你申请调低佣金。
2、直接联系线上客户经理办理开户
他们是可以为您轻松地开出一个低佣金账户的,并且没有任何的门槛限制,优惠程度也是比较大的。

想要获得低佣金开户,点击右上角加我微信,为您的投资保驾护航!直接给您全佣还是成本价,两融专项利率可以给到4.8%,期权给到1.7!ETF可转债万0.5!百万资产免费赠送快速交易通道!同时支持量化交易和网格交易哦!支持三方交易软件登录!

发布于2024-1-24 15:28 上海

当前我在线 直接联系我
1 更多 分享 追问
收藏 举报
咨询TA

量化交易也称自动化交易,是以先进的数学模型替代人为的主观判断,极大地减少了投资者情绪波动的影响。量化交易需要的条件是50万资金要求。佣金普遍在万3,手续费主要取决于投资者的交易频率、交易金额以及个人 的投资策略等因素。可以联系线上客户经理申请降低交易手续费的,开设股票交易账户并不需要支付任何费用,也没有明确的资金要求,只要你准备好身份证和银行卡即可。

为开出低佣账户,您可以采用以下几种策略:
1、对于经常交易的客户,降佣相对简单
交易频繁或资金规模庞大的客户,是有权要求证券公司降低其交易成本的。
2、低费率账户找客户经理办理
低佣金费率账户办理开户是可以通过券商在线的开户工作人员申请办理的,客户经理会根据客户的实际情况提供合适的佣金费率。

找我开户靠谱又省心,点击右上角加我微信吧~佣金直接低至行业成本价,两融专项利率低至4.5%哦,期权1.7元一张!ETF可转债万0.5!百万资产免费赠送快速交易通道!同时我司支持QMT、Ptrade量化软件!支持同花顺、通达信登陆~

发布于2024-4-13 11:57 上海

当前我在线 直接联系我
1 更多 分享 追问
收藏 举报
问题没解决?向金牌答主提问, 最快30秒获得解答! 立即提问
免责声明:本站问答内容均由入驻叩富问财的作者撰写,仅供网友交流学习,并不构成买卖建议。本站核实主体信息并允许作者发表之言论并不代表本站同意其内容,亦不代表本站对该信息内容予以核实,据此操作者,风险自担。同时提醒网友提高风险意识,请勿私下汇款给作者,避免造成金钱损失。
同城推荐 更多>
  • 咨询

    好评 1.3万+ 浏览量 1113万+

  • 咨询

    好评 8.8万+ 浏览量 18万+

  • 咨询

    好评 13万+ 浏览量 906万+

相关文章
回到顶部