国盛证券的Ptrade数据无论是回测还是实盘很有问题,前复权不正确,数据断崖

Ptrade李魔佛 发表了文章 • 0 个评论 • 31 次浏览 • 2024-04-18 00:19 • 来自相关话题

连基本的历史数据都无法保证数据正确。
 
举个例子,比如 煤炭ETF 515220,





 
在4月12日进行的除权,1股变2股,因此,所以4月12日之后的价格会是原来的1/2,如果做前复权,那么前面的价格也都是要根据当前的价格做复权处理。
 
结果国盛的ptrade的历史数据,取的是前复权数据,前复权数据,(重点强调),在4月12日的的时候就出现了断崖。也就是没有做复权的处理。





 
测试代码很简单:
def initialize(context):
run_daily(context, event, '09:38')


def handle_data(context, data):
pass


def event(context):
his60 = get_history(60, '1d', ['close'], ['515220.SS'], fq='pre', include=False)
print(his60)运行时间改成任意的就行。
 
获取历史数据用
get_history,取过去60天的前复权的数据。 然后就是断崖的数据。 已经确定是国盛的ptrade数据问题。因为我用上面的代码,在东莞证券,国金证券,湘财证券的ptrade上运行,均能得到正确的数据。
 
然后更为搞笑的,这么一个问题,反馈了,没有回应。无语。
 
 
  查看全部
连基本的历史数据都无法保证数据正确。
 
举个例子,比如 煤炭ETF 515220,

20240418001102.png

 
在4月12日进行的除权,1股变2股,因此,所以4月12日之后的价格会是原来的1/2,如果做前复权,那么前面的价格也都是要根据当前的价格做复权处理。
 
结果国盛的ptrade的历史数据,取的是前复权数据,前复权数据,(重点强调),在4月12日的的时候就出现了断崖。也就是没有做复权的处理。

微信图片_20240418001026.png

 
测试代码很简单:
def initialize(context):
run_daily(context, event, '09:38')


def handle_data(context, data):
pass


def event(context):
his60 = get_history(60, '1d', ['close'], ['515220.SS'], fq='pre', include=False)
print(his60)
运行时间改成任意的就行。
 
获取历史数据用
get_history,取过去60天的前复权的数据。 然后就是断崖的数据。 已经确定是国盛的ptrade数据问题。因为我用上面的代码,在东莞证券,国金证券,湘财证券的ptrade上运行,均能得到正确的数据。
 
然后更为搞笑的,这么一个问题,反馈了,没有回应。无语。
 
 
 

使用量化程序获取ETF的成分股与实时净值

QMT李魔佛 发表了文章 • 0 个评论 • 73 次浏览 • 2024-04-11 12:22 • 来自相关话题

代码只有几行:
# coding:gbk
def init(C):
pass

def handlebar(C):
iopv = get_etf_iopv("159928.SZ")
print(f'基金净值为{iopv}')
info = get_etf_info('513520.SH')
print(f'基金申购信息: {info}')
得到的数据如下:





 
需要开通低门槛量化QMT的朋友,可以扫码关注公众号开通: 查看全部
代码只有几行:
# coding:gbk
def init(C):
pass

def handlebar(C):
iopv = get_etf_iopv("159928.SZ")
print(f'基金净值为{iopv}')
info = get_etf_info('513520.SH')
print(f'基金申购信息: {info}')

得到的数据如下:

20240411122042.png

 
需要开通低门槛量化QMT的朋友,可以扫码关注公众号开通:

QMT回测会跳过当前的周六日和节假日吗

QMT李魔佛 发表了文章 • 0 个评论 • 74 次浏览 • 2024-04-09 13:13 • 来自相关话题

使用的handle_bar进行回测,它是会自动跳过周六日和节假日的。
比如回测日期选择 2024年3月28日到2024年4月2日。
其中3月30日和31日是周六日。
下面回测的数据是不执行这两天的数据。从3月30日 15:00的数据,下一个bar就是4月1日09:30了




需要低门槛开通量化QMT,Ptrade,可以扫码联系。
开通后可加入技术交流群。 查看全部
使用的handle_bar进行回测,它是会自动跳过周六日和节假日的。
比如回测日期选择 2024年3月28日到2024年4月2日。
其中3月30日和31日是周六日。
下面回测的数据是不执行这两天的数据。从3月30日 15:00的数据,下一个bar就是4月1日09:30了
20240409130951.png

需要低门槛开通量化QMT,Ptrade,可以扫码联系。
开通后可加入技术交流群。

qmt下载完数据之后,记得重启一次qmt,不然get_market_data_ex依然还是获取不到数据的

QMT李魔佛 发表了文章 • 0 个评论 • 124 次浏览 • 2024-04-01 13:38 • 来自相关话题

最近群里问这个问题的人比较多。
 
qmt下载完数据之后,get_market_data_ex依然还是获取不到数据。
 
其实主要数据没有刷新。
 
只需要你手动关闭QMT,再打开一次就好了。
 





 
反正呢,这些问题,QMT也不会告诉你,要靠自己摸索了。
 
欢迎收藏网站哦! 查看全部
最近群里问这个问题的人比较多。
 
qmt下载完数据之后,get_market_data_ex依然还是获取不到数据。
 
其实主要数据没有刷新。
 
只需要你手动关闭QMT,再打开一次就好了。
 

20240401133759.png

 
反正呢,这些问题,QMT也不会告诉你,要靠自己摸索了。
 
欢迎收藏网站哦!

QMT每次自动升级,都会把改过的配置文件给覆盖掉

QMT李魔佛 发表了文章 • 0 个评论 • 143 次浏览 • 2024-03-31 14:23 • 来自相关话题

太业余。
感觉设计模式有问题。
 
本来我配置了缩进用的4个空格,(这是pep8的标准好吧)
而qmt默认是用tab做缩进。
 
导致从vs code或者pycharm上的代码迁移迁移过来qmt的编辑器,你按tab键,是制表符,而不是4个空格。
 
运行或者回测就会报错。





 
每次升级都把我的配置给改了。
 
难道不覆盖config文件不行吗? 每次类似全量升级,一点点bug fix都在全量升级
  查看全部
太业余。
感觉设计模式有问题。
 
本来我配置了缩进用的4个空格,(这是pep8的标准好吧)
而qmt默认是用tab做缩进。
 
导致从vs code或者pycharm上的代码迁移迁移过来qmt的编辑器,你按tab键,是制表符,而不是4个空格。
 
运行或者回测就会报错。

20240331004.png

 
每次升级都把我的配置给改了。
 
难道不覆盖config文件不行吗? 每次类似全量升级,一点点bug fix都在全量升级
 

不同券商的数据质量简单对比:国金QMT vs 国信QMT(iquant)

QMT李魔佛 发表了文章 • 0 个评论 • 197 次浏览 • 2024-03-31 11:57 • 来自相关话题

同一段代码,先在国信上跑回测,先获取可转债的1分钟的分笔数据,发现一些时间段里的成交额居然是0. (数据已经先下载好了)

点击打开大图





上面的amount字段(成交额),返回的是0。

看了一下对应的转债,没有停牌,是有正常数据交易的。

然后用国金的QMT记性交叉验证。同样的代码
点击打开大图




 
国金的是正常的。只是成交量的小数浮点位是不是有点多了? 可能用的numy的默认9位,没有做处理而已。

【在写这个文章的时候发现国信的qmt的volume成交量是有数据的,那么其实可以用价格x成交量=成交额,间接获取成交额,大坑】

点击打开大图




 
附测试源码:
 # coding:gbk
# 公众号:可转债量化分析
DEBUG = True
import time
def get_datetime(ContextInfo):
# 获取当前时间
index = ContextInfo.barpos
realtime = ContextInfo.get_bar_timetag(index)
date = timetag_to_datetime(realtime, "%Y-%m-%d %H:%M:%S")
if DEBUG:
print('当前日期 ', date)
return date

def init(ContextInfo):
print("==============start==========")
ContextInfo.start = '2024-03-27 10:00:00'
ContextInfo.end = '2024-03-29 10:00:00'
#
#ContextInfo.end = '2023-01-05'
#ContextInfo.start = '2023-01-16'
print('init')

def handlebar(ContextInfo):
# 回测的时候不需要
#if not ContextInfo.is_last_bar():
# print('return')
# return
get_datetime(ContextInfo)
print('handlebar')
data = ContextInfo.get_market_data(['quoter'], stock_code = ['123167.SZ'], skip_paused = True, period = 'tick', dividend_type = 'front')

#data = ContextInfo.get_market_data(['close'], stock_code = ['113567.SH'], skip_paused = True, period = '1d', dividend_type = 'front')
#print(type(data))
print(data)

def stop(ContextInfo):
print( 'strategy is stop !') 查看全部
同一段代码,先在国信上跑回测,先获取可转债的1分钟的分笔数据,发现一些时间段里的成交额居然是0. (数据已经先下载好了)

点击打开大图
20240331002.png


上面的amount字段(成交额),返回的是0。

看了一下对应的转债,没有停牌,是有正常数据交易的。

然后用国金的QMT记性交叉验证。同样的代码
点击打开大图
20240331001.png

 
国金的是正常的。只是成交量的小数浮点位是不是有点多了? 可能用的numy的默认9位,没有做处理而已。

【在写这个文章的时候发现国信的qmt的volume成交量是有数据的,那么其实可以用价格x成交量=成交额,间接获取成交额,大坑】

点击打开大图
20240331003.png

 
附测试源码:
 
# coding:gbk
# 公众号:可转债量化分析
DEBUG = True
import time
def get_datetime(ContextInfo):
# 获取当前时间
index = ContextInfo.barpos
realtime = ContextInfo.get_bar_timetag(index)
date = timetag_to_datetime(realtime, "%Y-%m-%d %H:%M:%S")
if DEBUG:
print('当前日期 ', date)
return date

def init(ContextInfo):
print("==============start==========")
ContextInfo.start = '2024-03-27 10:00:00'
ContextInfo.end = '2024-03-29 10:00:00'
#
#ContextInfo.end = '2023-01-05'
#ContextInfo.start = '2023-01-16'
print('init')

def handlebar(ContextInfo):
# 回测的时候不需要
#if not ContextInfo.is_last_bar():
# print('return')
# return
get_datetime(ContextInfo)
print('handlebar')
data = ContextInfo.get_market_data(['quoter'], stock_code = ['123167.SZ'], skip_paused = True, period = 'tick', dividend_type = 'front')

#data = ContextInfo.get_market_data(['close'], stock_code = ['113567.SH'], skip_paused = True, period = '1d', dividend_type = 'front')
#print(type(data))
print(data)

def stop(ContextInfo):
print( 'strategy is stop !')

国金证券的融券数量多吗?什么是专项券源?

股票李魔佛 发表了文章 • 0 个评论 • 140 次浏览 • 2024-03-30 17:13 • 来自相关话题

因为国金的两融开通太方便了,不用跑柜台。app就可以开通,而且融资利率低,5%。
 
那么融券呢?
 
今天特意问了下经理,他发了一个融券的表格给我。
 





 
目前国金里面一般开通了融资融券的投资者,可用的券源有290个左右,随借随还的。说实话,这个数量不算太多。
 
而且里面的个股,部分也只能融100股,几百股的。所以即使被你融到券,实际下来的绝对收益也不会太高。
 
不过它也有一个专项券源。
它有资金要求,前20个交易日日均资产不低于300万元,才能够申请。
 
发现里面的券,主要是深圳交易所的为主,占了90%以上。





 
而且专项券源里面的可融券数量也比普通券源的要多很多,几千股,上万股的。
 
公共券源 :
实时可借 ,随时可融券卖出, 随借随还,融券卖出开仓后最快下一交易日方可归还融券负债 信用账户融券费率 按使用天数计息,算头不算尾
 
操作步骤: 融券卖出(所有客户端)
 
 
专项券源:
 实时可借 ,审批划拨成功后当日专项融券卖出, 固定期限(一般28天以内),不可提前归还 ;
专项融券头寸占用费率 : 按专项头寸合约期限计息,不论合约期限内客户是否使用券源,均需支付专项头寸合约占用利息,算头算尾 
 
操作步骤:
第1步:专项融券头寸申请(佣金宝APP/国金太阳至强版)

第2步:专项融券卖出(佣金宝APP/国金太阳至强版)
 





  查看全部
因为国金的两融开通太方便了,不用跑柜台。app就可以开通,而且融资利率低,5%。
 
那么融券呢?
 
今天特意问了下经理,他发了一个融券的表格给我。
 

20240330170633.png

 
目前国金里面一般开通了融资融券的投资者,可用的券源有290个左右,随借随还的。说实话,这个数量不算太多。
 
而且里面的个股,部分也只能融100股,几百股的。所以即使被你融到券,实际下来的绝对收益也不会太高。
 
不过它也有一个专项券源。
它有资金要求,前20个交易日日均资产不低于300万元,才能够申请。
 
发现里面的券,主要是深圳交易所的为主,占了90%以上。

20240330171053.png

 
而且专项券源里面的可融券数量也比普通券源的要多很多,几千股,上万股的。
 
公共券源 :
实时可借 ,随时可融券卖出, 随借随还,融券卖出开仓后最快下一交易日方可归还融券负债 信用账户融券费率 按使用天数计息,算头不算尾
 
操作步骤: 融券卖出(所有客户端)
 
 
专项券源:
 实时可借 ,审批划拨成功后当日专项融券卖出, 固定期限(一般28天以内),不可提前归还 ;
专项融券头寸占用费率 : 按专项头寸合约期限计息,不论合约期限内客户是否使用券源,均需支付专项头寸合约占用利息,算头算尾 
 
操作步骤:
第1步:专项融券头寸申请(佣金宝APP/国金太阳至强版)

第2步:专项融券卖出(佣金宝APP/国金太阳至强版)
 

20240330171336.png

 

Ptrade|QMT|银行股息率轮动 实盘自动化交易

李魔佛 发表了文章 • 0 个评论 • 383 次浏览 • 2024-03-05 09:33 • 来自相关话题

看有没有人需要,前排占坑 -- Task -- 
看有没有人需要,前排占坑 -- Task -- 

miniQMT安装包路径 | 下载地址

QMT李魔佛 发表了文章 • 0 个评论 • 415 次浏览 • 2024-02-29 20:09 • 来自相关话题

安装好QMT之后,在QMT的设置里面选择安装python。
 
等待几分钟,python文件下载好了之后。
 
找到qmt的安装目录,
 
进去这里面
 
\bin.x64\Lib\site-packages\xtquant
 
把这个目录复制到你的python路径的site-package 下面, 就可以在你的python环境下运行miniQMT了。
 
当然首先还是要启动你的QMT客户端,勾选极速模式。 (不开的话连不到券商服务器,这以为这无法再linux上单独跑,wine额外另说)
 
比如下面的获取行情的示例代码,还有直接下单代码
 # 用前须知

## xtdata提供和MiniQmt的交互接口,本质是和MiniQmt建立连接,由MiniQmt处理行情数据请求,再把结果回传返回到python层。使用的行情服务器以及能获取到的行情数据和MiniQmt是一致的,要检查数据或者切换连接时直接操作MiniQmt即可。

## 对于数据获取接口,使用时需要先确保MiniQmt已有所需要的数据,如果不足可以通过补充数据接口补充,再调用数据获取接口获取。

## 对于订阅接口,直接设置数据回调,数据到来时会由回调返回。订阅接收到的数据一般会保存下来,同种数据不需要再单独补充。

# 代码讲解

# 从本地python导入xtquant库,如果出现报错则说明安装失败
from xtquant import xtdata
import time

# 设定一个标的列表
code_list = ["000001.SZ"]
# 设定获取数据的周期
period = "1d"

# 下载标的行情数据
if 1:
## 为了方便用户进行数据管理,xtquant的大部分历史数据都是以压缩形式存储在本地的
## 比如行情数据,需要通过download_history_data下载,财务数据需要通过
## 所以在取历史数据之前,我们需要调用数据下载接口,将数据下载到本地
for i in code_list:
xtdata.download_history_data(i,period=period,incrementally=True) # 增量下载行情数据(开高低收,等等)到本地

xtdata.download_financial_data(code_list) # 下载财务数据到本地
xtdata.download_sector_data() # 下载板块数据到本地
# 更多数据的下载方式可以通过数据字典查询

# 读取本地历史行情数据
history_data = xtdata.get_market_data_ex(,code_list,period=period,count=-1)
print(history_data)
print("=" * 20)

# 如果需要盘中的实时行情,需要向服务器进行订阅后才能获取
# 订阅后,get_market_data函数于get_market_data_ex函数将会自动拼接本地历史行情与服务器实时行情

# 向服务器订阅数据
for i in code_list:
xtdata.subscribe_quote(i,period=period,count=-1) # 设置count = -1来取到当天所有实时行情

# 等待订阅完成
time.sleep(1)

# 获取订阅后的行情
kline_data = xtdata.get_market_data_ex(,code_list,period=period)
print(kline_data)

# 获取订阅后的行情,并以固定间隔进行刷新,预期会循环打印10次
for i in range(10):
# 这边做演示,就用for来循环了,实际使用中可以用while True
kline_data = xtdata.get_market_data_ex(,code_list,period=period)
print(kline_data)
time.sleep(3) # 三秒后再次获取行情

# 如果不想用固定间隔触发,可以以用订阅后的回调来执行
# 这种模式下当订阅的callback回调函数将会异步的执行,每当订阅的标的tick发生变化更新,callback回调函数就会被调用一次
# 本地已有的数据不会触发callback

# 定义的回测函数
## 回调函数中,data是本次触发回调的数据,只有一条
def f(data):
# print(data)

code_list = list(data.keys()) # 获取到本次触发的标的代码

kline_in_callabck = xtdata.get_market_data_ex(,code_list,period = period) # 在回调中获取klines数据
print(kline_in_callabck)

for i in code_list:
xtdata.subscribe_quote(i,period=period,count=-1,callback=f) # 订阅时设定回调函数

# 使用回调时,必须要同时使用xtdata.run()来阻塞程序,否则程序运行到最后一行就直接结束退出了。
xtdata.run()





 
异步下单#coding:utf-8
import time, datetime, traceback, sys
from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
from xtquant import xtconstant

#定义一个类 创建类的实例 作为状态的容器
class _a():
pass
A = _a()
A.bought_list =
A.hsa = xtdata.get_stock_list_in_sector('沪深A股')

def interact():
"""执行后进入repl模式"""
import code
code.InteractiveConsole(locals=globals()).interact()
xtdata.download_sector_data()

def f(data):
now = datetime.datetime.now()
for stock in data:
if stock not in A.hsa:
continue
cuurent_price = data[stock]['lastPrice']
pre_price = data[stock]['lastClose']
ratio = cuurent_price / pre_price - 1 if pre_price > 0 else 0
if ratio > 0.09 and stock not in A.bought_list:
print(f"{now} 最新价 买入 {stock} 200股")
async_seq = xt_trader.order_stock_async(acc, stock, xtconstant.STOCK_BUY, 200, xtconstant.LATEST_PRICE, -1, 'strategy_name', stock)
A.bought_list.append(stock)

class MyXtQuantTraderCallback(XtQuantTraderCallback):
def on_disconnected(self):
"""
连接断开
:return:
"""
print(datetime.datetime.now(),'连接断开回调')

def on_stock_order(self, order):
"""
委托回报推送
:param order: XtOrder对象
:return:
"""
print(datetime.datetime.now(), '委托回调', order.order_remark)


def on_stock_trade(self, trade):
"""
成交变动推送
:param trade: XtTrade对象
:return:
"""
print(datetime.datetime.now(), '成交回调', trade.order_remark)


def on_order_error(self, order_error):
"""
委托失败推送
:param order_error:XtOrderError 对象
:return:
"""
# print("on order_error callback")
# print(order_error.order_id, order_error.error_id, order_error.error_msg)
print(f"委托报错回调 {order_error.order_remark} {order_error.error_msg}")

def on_cancel_error(self, cancel_error):
"""
撤单失败推送
:param cancel_error: XtCancelError 对象
:return:
"""
print(datetime.datetime.now(), sys._getframe().f_code.co_name)

def on_order_stock_async_response(self, response):
"""
异步下单回报推送
:param response: XtOrderResponse 对象
:return:
"""
print(f"异步委托回调 {response.order_remark}")

def on_cancel_order_stock_async_response(self, response):
"""
:param response: XtCancelOrderResponse 对象
:return:
"""
print(datetime.datetime.now(), sys._getframe().f_code.co_name)

def on_account_status(self, status):
"""
:param response: XtAccountStatus 对象
:return:
"""
print(datetime.datetime.now(), sys._getframe().f_code.co_name)


if __name__ == '__main__':
print("start")
#指定客户端所在路径
path = r'D:\qmt\sp3\迅投极速交易终端 睿智融科版\userdata_mini'
# 生成session id 整数类型 同时运行的策略不能重复
session_id = int(time.time())
xt_trader = XtQuantTrader(path, session_id)
# 开启主动请求接口的专用线程 开启后在on_stock_xxx回调函数里调用XtQuantTrader.query_xxx函数不会卡住回调线程,但是查询和推送的数据在时序上会变得不确定
# 详见: http://docs.thinktrader.net/vip/pages/ee0e9b/#开启主动请求接口的专用线程
# xt_trader.set_relaxed_response_order_enabled(True)

# 创建资金账号为 800068 的证券账号对象
acc = StockAccount('800068', 'STOCK')
# 创建交易回调类对象,并声明接收回调
callback = MyXtQuantTraderCallback()
xt_trader.register_callback(callback)
# 启动交易线程
xt_trader.start()
# 建立交易连接,返回0表示连接成功
connect_result = xt_trader.connect()
print('建立交易连接,返回0表示连接成功', connect_result)
# 对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功
subscribe_result = xt_trader.subscribe(acc)
print('对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功', subscribe_result)

#这一行是注册全推回调函数 包括下单判断 安全起见处于注释状态 确认理解效果后再放开
# xtdata.subscribe_whole_quote(["SH", "SZ"], callback=f)
# 阻塞主线程退出
xt_trader.run_forever()
# 如果使用vscode pycharm等本地编辑器 可以进入交互模式 方便调试 (把上一行的run_forever注释掉 否则不会执行到这里)
interact()


需要开通miniQMT(低门槛,低费率)的朋友,
可以扫码联系:或者添加 技术公众号:

 
公众号:
 

 
  查看全部
安装好QMT之后,在QMT的设置里面选择安装python。
 
等待几分钟,python文件下载好了之后。
 
找到qmt的安装目录,
 
进去这里面
 
\bin.x64\Lib\site-packages\xtquant
 
把这个目录复制到你的python路径的site-package 下面, 就可以在你的python环境下运行miniQMT了。
 
当然首先还是要启动你的QMT客户端,勾选极速模式。 (不开的话连不到券商服务器,这以为这无法再linux上单独跑,wine额外另说)
 
比如下面的获取行情的示例代码,还有直接下单代码
 
# 用前须知

## xtdata提供和MiniQmt的交互接口,本质是和MiniQmt建立连接,由MiniQmt处理行情数据请求,再把结果回传返回到python层。使用的行情服务器以及能获取到的行情数据和MiniQmt是一致的,要检查数据或者切换连接时直接操作MiniQmt即可。

## 对于数据获取接口,使用时需要先确保MiniQmt已有所需要的数据,如果不足可以通过补充数据接口补充,再调用数据获取接口获取。

## 对于订阅接口,直接设置数据回调,数据到来时会由回调返回。订阅接收到的数据一般会保存下来,同种数据不需要再单独补充。

# 代码讲解

# 从本地python导入xtquant库,如果出现报错则说明安装失败
from xtquant import xtdata
import time

# 设定一个标的列表
code_list = ["000001.SZ"]
# 设定获取数据的周期
period = "1d"

# 下载标的行情数据
if 1:
## 为了方便用户进行数据管理,xtquant的大部分历史数据都是以压缩形式存储在本地的
## 比如行情数据,需要通过download_history_data下载,财务数据需要通过
## 所以在取历史数据之前,我们需要调用数据下载接口,将数据下载到本地
for i in code_list:
xtdata.download_history_data(i,period=period,incrementally=True) # 增量下载行情数据(开高低收,等等)到本地

xtdata.download_financial_data(code_list) # 下载财务数据到本地
xtdata.download_sector_data() # 下载板块数据到本地
# 更多数据的下载方式可以通过数据字典查询

# 读取本地历史行情数据
history_data = xtdata.get_market_data_ex(,code_list,period=period,count=-1)
print(history_data)
print("=" * 20)

# 如果需要盘中的实时行情,需要向服务器进行订阅后才能获取
# 订阅后,get_market_data函数于get_market_data_ex函数将会自动拼接本地历史行情与服务器实时行情

# 向服务器订阅数据
for i in code_list:
xtdata.subscribe_quote(i,period=period,count=-1) # 设置count = -1来取到当天所有实时行情

# 等待订阅完成
time.sleep(1)

# 获取订阅后的行情
kline_data = xtdata.get_market_data_ex(,code_list,period=period)
print(kline_data)

# 获取订阅后的行情,并以固定间隔进行刷新,预期会循环打印10次
for i in range(10):
# 这边做演示,就用for来循环了,实际使用中可以用while True
kline_data = xtdata.get_market_data_ex(,code_list,period=period)
print(kline_data)
time.sleep(3) # 三秒后再次获取行情

# 如果不想用固定间隔触发,可以以用订阅后的回调来执行
# 这种模式下当订阅的callback回调函数将会异步的执行,每当订阅的标的tick发生变化更新,callback回调函数就会被调用一次
# 本地已有的数据不会触发callback

# 定义的回测函数
## 回调函数中,data是本次触发回调的数据,只有一条
def f(data):
# print(data)

code_list = list(data.keys()) # 获取到本次触发的标的代码

kline_in_callabck = xtdata.get_market_data_ex(,code_list,period = period) # 在回调中获取klines数据
print(kline_in_callabck)

for i in code_list:
xtdata.subscribe_quote(i,period=period,count=-1,callback=f) # 订阅时设定回调函数

# 使用回调时,必须要同时使用xtdata.run()来阻塞程序,否则程序运行到最后一行就直接结束退出了。
xtdata.run()





 
异步下单
#coding:utf-8
import time, datetime, traceback, sys
from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
from xtquant import xtconstant

#定义一个类 创建类的实例 作为状态的容器
class _a():
pass
A = _a()
A.bought_list =
A.hsa = xtdata.get_stock_list_in_sector('沪深A股')

def interact():
"""执行后进入repl模式"""
import code
code.InteractiveConsole(locals=globals()).interact()
xtdata.download_sector_data()

def f(data):
now = datetime.datetime.now()
for stock in data:
if stock not in A.hsa:
continue
cuurent_price = data[stock]['lastPrice']
pre_price = data[stock]['lastClose']
ratio = cuurent_price / pre_price - 1 if pre_price > 0 else 0
if ratio > 0.09 and stock not in A.bought_list:
print(f"{now} 最新价 买入 {stock} 200股")
async_seq = xt_trader.order_stock_async(acc, stock, xtconstant.STOCK_BUY, 200, xtconstant.LATEST_PRICE, -1, 'strategy_name', stock)
A.bought_list.append(stock)

class MyXtQuantTraderCallback(XtQuantTraderCallback):
def on_disconnected(self):
"""
连接断开
:return:
"""
print(datetime.datetime.now(),'连接断开回调')

def on_stock_order(self, order):
"""
委托回报推送
:param order: XtOrder对象
:return:
"""
print(datetime.datetime.now(), '委托回调', order.order_remark)


def on_stock_trade(self, trade):
"""
成交变动推送
:param trade: XtTrade对象
:return:
"""
print(datetime.datetime.now(), '成交回调', trade.order_remark)


def on_order_error(self, order_error):
"""
委托失败推送
:param order_error:XtOrderError 对象
:return:
"""
# print("on order_error callback")
# print(order_error.order_id, order_error.error_id, order_error.error_msg)
print(f"委托报错回调 {order_error.order_remark} {order_error.error_msg}")

def on_cancel_error(self, cancel_error):
"""
撤单失败推送
:param cancel_error: XtCancelError 对象
:return:
"""
print(datetime.datetime.now(), sys._getframe().f_code.co_name)

def on_order_stock_async_response(self, response):
"""
异步下单回报推送
:param response: XtOrderResponse 对象
:return:
"""
print(f"异步委托回调 {response.order_remark}")

def on_cancel_order_stock_async_response(self, response):
"""
:param response: XtCancelOrderResponse 对象
:return:
"""
print(datetime.datetime.now(), sys._getframe().f_code.co_name)

def on_account_status(self, status):
"""
:param response: XtAccountStatus 对象
:return:
"""
print(datetime.datetime.now(), sys._getframe().f_code.co_name)


if __name__ == '__main__':
print("start")
#指定客户端所在路径
path = r'D:\qmt\sp3\迅投极速交易终端 睿智融科版\userdata_mini'
# 生成session id 整数类型 同时运行的策略不能重复
session_id = int(time.time())
xt_trader = XtQuantTrader(path, session_id)
# 开启主动请求接口的专用线程 开启后在on_stock_xxx回调函数里调用XtQuantTrader.query_xxx函数不会卡住回调线程,但是查询和推送的数据在时序上会变得不确定
# 详见: http://docs.thinktrader.net/vip/pages/ee0e9b/#开启主动请求接口的专用线程
# xt_trader.set_relaxed_response_order_enabled(True)

# 创建资金账号为 800068 的证券账号对象
acc = StockAccount('800068', 'STOCK')
# 创建交易回调类对象,并声明接收回调
callback = MyXtQuantTraderCallback()
xt_trader.register_callback(callback)
# 启动交易线程
xt_trader.start()
# 建立交易连接,返回0表示连接成功
connect_result = xt_trader.connect()
print('建立交易连接,返回0表示连接成功', connect_result)
# 对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功
subscribe_result = xt_trader.subscribe(acc)
print('对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功', subscribe_result)

#这一行是注册全推回调函数 包括下单判断 安全起见处于注释状态 确认理解效果后再放开
# xtdata.subscribe_whole_quote(["SH", "SZ"], callback=f)
# 阻塞主线程退出
xt_trader.run_forever()
# 如果使用vscode pycharm等本地编辑器 可以进入交互模式 方便调试 (把上一行的run_forever注释掉 否则不会执行到这里)
interact()


需要开通miniQMT(低门槛,低费率)的朋友,
可以扫码联系:或者添加 技术公众号:

 
公众号:
 

 
 

银河证券1拖7

股票李魔佛 发表了文章 • 0 个评论 • 544 次浏览 • 2024-02-23 15:16 • 来自相关话题

最近大家套利印度基金LOF如火如荼。
 
基本大家都用的银河证券或者华宝证券的1拖6,也就是一个证券账户,加挂 3个 深A,3个场内基金,6个账号可以同时申购 100元的印度基金。因为印度基金目前是限购状态,限购100元。
 
所以1拖6就可以申购600元。
 
目前每天稳定的溢价率为6-7%,一次的收益率为 6-7%,也就是30-40元一个账户一天。一周下来就有150-200元





 
 
这个看起来是个蚊子肉。
 
但如果你的证券账户足够多,比如你有10个证券账户(你女友,家人,亲戚,同事,朋友)
 
一周就有2000元。
 
所以限购套利的核心是 拖拉机+多账号
 
而很少人知道,其实可以1拖7,再多一个申购途径,就是场外申购。
 
比如支付宝,天天基金等渠道申购。不过要转入场内比较麻烦,而银河证券,华宝证券,内置了场外基金,可以很方便在券商app里面的场外基金买入(申购)。
 
步骤也很简单,





 
申购完成之后:





 
然后绑定场内和场外关系
 





 
然后要等T+2 之后,再在银河证券app里面 把印度基金从场外转到场内:





 
然后T+2之后,你的基金要继续等T+2之后才能到达你的证券账户。然后才能够在场内卖出。
 
所以通过场外转场内进行套利,要比场内支持申购,要晚2天到账的哦。
 
目前银河证券 低费率多多, 万0.854 免五,0.1元起,申购LOF基金1折,LOF卖出费率为万0.5,0.1元起。
逆回购1折。各个费率基本在同样档位里面是最低的了。
 
需要的朋友可以扫码联系开通: 查看全部
最近大家套利印度基金LOF如火如荼。
 
基本大家都用的银河证券或者华宝证券的1拖6,也就是一个证券账户,加挂 3个 深A,3个场内基金,6个账号可以同时申购 100元的印度基金。因为印度基金目前是限购状态,限购100元。
 
所以1拖6就可以申购600元。
 
目前每天稳定的溢价率为6-7%,一次的收益率为 6-7%,也就是30-40元一个账户一天。一周下来就有150-200元

微信图片_20240221114516.jpg

 
 
这个看起来是个蚊子肉。
 
但如果你的证券账户足够多,比如你有10个证券账户(你女友,家人,亲戚,同事,朋友)
 
一周就有2000元。
 
所以限购套利的核心是 拖拉机+多账号
 
而很少人知道,其实可以1拖7,再多一个申购途径,就是场外申购。
 
比如支付宝,天天基金等渠道申购。不过要转入场内比较麻烦,而银河证券,华宝证券,内置了场外基金,可以很方便在券商app里面的场外基金买入(申购)。
 
步骤也很简单,

微信图片_20240222124738.jpg

 
申购完成之后:

微信图片_20240222125035.jpg

 
然后绑定场内和场外关系
 

v2-6f50d47051bfa9b36e93b46319e3e002_1440w_副本_副本_副本.png

 
然后要等T+2 之后,再在银河证券app里面 把印度基金从场外转到场内:

微信图片_20240222124738_副本_副本.jpg

 
然后T+2之后,你的基金要继续等T+2之后才能到达你的证券账户。然后才能够在场内卖出。
 
所以通过场外转场内进行套利,要比场内支持申购,要晚2天到账的哦。
 
目前银河证券 低费率多多, 万0.854 免五,0.1元起,申购LOF基金1折,LOF卖出费率为万0.5,0.1元起。
逆回购1折。各个费率基本在同样档位里面是最低的了。
 
需要的朋友可以扫码联系开通:

QMT获取全市场股票,排除ST退市风险股票

QMT李魔佛 发表了文章 • 0 个评论 • 450 次浏览 • 2024-02-07 22:25 • 来自相关话题

因为QMT不能获取北交所的股票历史数据,所以也把北交所的股票也排除了。
 
def get_all_market_code(ContextInfo):

all_market_codes = [item for item in ContextInfo.get_stock_list_in_sector('沪深A股') if not item.endswith('BJ')]
return filter_ST_stock(ContextInfo, all_market_codes)


def filter_ST_stock(ContextInfo, code_list):
result = []
for code in code_list:
if re.search('(st)|(ST)|(\*st)|(\*ST)|(退)',ContextInfo.get_stock_name(code)):
print('排除 : ',ContextInfo.get_stock_name(code),code)
continue
result.append(code)
return result

global_dict = {}

def init(ContextInfo):
now = time.ctime()
print('策略初始化{}'.format(now))
need_download = 1
global_dict['start_date'] = '20231201'
global_dict['end_date'] = ''
global_dict['code_list'] = get_all_market_code(ContextInfo)

 有问题可以咨询公众号或者知识星球
提供策略代写服务
  查看全部
因为QMT不能获取北交所的股票历史数据,所以也把北交所的股票也排除了。
 
def get_all_market_code(ContextInfo):

all_market_codes = [item for item in ContextInfo.get_stock_list_in_sector('沪深A股') if not item.endswith('BJ')]
return filter_ST_stock(ContextInfo, all_market_codes)


def filter_ST_stock(ContextInfo, code_list):
result = []
for code in code_list:
if re.search('(st)|(ST)|(\*st)|(\*ST)|(退)',ContextInfo.get_stock_name(code)):
print('排除 : ',ContextInfo.get_stock_name(code),code)
continue
result.append(code)
return result

global_dict = {}

def init(ContextInfo):
now = time.ctime()
print('策略初始化{}'.format(now))
need_download = 1
global_dict['start_date'] = '20231201'
global_dict['end_date'] = ''
global_dict['code_list'] = get_all_market_code(ContextInfo)

 有问题可以咨询公众号或者知识星球
提供策略代写服务
 

QMT实时获取涨停股,筛选流通盘大于X的股票

QMT李魔佛 发表了文章 • 0 个评论 • 447 次浏览 • 2024-02-07 18:28 • 来自相关话题

基于官方例子修复了一下bug,比如移除了北交所的股票,因为目前qmt获取不了北交所的股票历史数据。
 
直接上代码:# coding:gbk
import time


class G():
pass


g = G()


def init(ContextInfo):
g.hsa = [item for item in ContextInfo.get_stock_list_in_sector('沪深A股') if not item.endswith('BJ')]
g.vol_dict = {}
for stock in g.hsa:
g.vol_dict[stock] = ContextInfo.get_last_volume(stock)
ContextInfo.run_time("execution", "1nSecond", "2019-10-14 13:20:00")


def execution(ContextInfo):
t0 = time.time()
full_tick = ContextInfo.get_full_tick(g.hsa)
total_market_value = 0
total_ratio = 0
count = 0
for stock in g.hsa:
if full_tick[stock]['lastClose'] == 0:
continue
ratio = full_tick[stock]['lastPrice'] / full_tick[stock]['lastClose'] - 1
rise_price = round(full_tick[stock]['lastClose'] * 1.2, 2) if stock[0] == '3' or stock[:3] == '688' else round(
full_tick[stock]['lastClose'] * 1.1, 2)
# 如果要打印涨停品种
if abs(full_tick[stock]['lastPrice'] - rise_price) <0.01:
print(f"涨停股票 {stock} {ContextInfo.get_stock_name(stock)}")

market_value = full_tick[stock]['lastPrice'] * g.vol_dict[stock]
total_ratio += ratio * market_value
total_market_value += market_value
count += 1
# print(count)
total_ratio /= total_market_value
total_ratio *= 100
print(f'A股加权涨幅 {round(total_ratio, 2)}% 函数运行耗时{round(time.time() - t0, 5)}秒')






 
欢迎关注公众号:
可转债量化分析 查看全部
基于官方例子修复了一下bug,比如移除了北交所的股票,因为目前qmt获取不了北交所的股票历史数据。
 
直接上代码:
# coding:gbk
import time


class G():
pass


g = G()


def init(ContextInfo):
g.hsa = [item for item in ContextInfo.get_stock_list_in_sector('沪深A股') if not item.endswith('BJ')]
g.vol_dict = {}
for stock in g.hsa:
g.vol_dict[stock] = ContextInfo.get_last_volume(stock)
ContextInfo.run_time("execution", "1nSecond", "2019-10-14 13:20:00")


def execution(ContextInfo):
t0 = time.time()
full_tick = ContextInfo.get_full_tick(g.hsa)
total_market_value = 0
total_ratio = 0
count = 0
for stock in g.hsa:
if full_tick[stock]['lastClose'] == 0:
continue
ratio = full_tick[stock]['lastPrice'] / full_tick[stock]['lastClose'] - 1
rise_price = round(full_tick[stock]['lastClose'] * 1.2, 2) if stock[0] == '3' or stock[:3] == '688' else round(
full_tick[stock]['lastClose'] * 1.1, 2)
# 如果要打印涨停品种
if abs(full_tick[stock]['lastPrice'] - rise_price) <0.01:
print(f"涨停股票 {stock} {ContextInfo.get_stock_name(stock)}")

market_value = full_tick[stock]['lastPrice'] * g.vol_dict[stock]
total_ratio += ratio * market_value
total_market_value += market_value
count += 1
# print(count)
total_ratio /= total_market_value
total_ratio *= 100
print(f'A股加权涨幅 {round(total_ratio, 2)}% 函数运行耗时{round(time.time() - t0, 5)}秒')


20240207182920.png

 
欢迎关注公众号:
可转债量化分析

迅投QMT投研版 有必要开吗?

QMT李魔佛 发表了文章 • 0 个评论 • 508 次浏览 • 2024-02-06 15:03 • 来自相关话题

没必要。
处处透出一股割韭菜的味道。
 
到处拉人进群,然后群里问问题,他们会让你私聊,加你,说服你开通投研版。
 
投研版无非多一些数据,你用tushare或者自己爬虫就可以获取,他们非要放到投研版里面,付费使用。
 
价格是一年8,9千,感觉没有一点性价比。
 
qmt,minniqmt有交易功能,有数据获取功能,也可以自己接入外部数据。没必要花那些冤枉钱去按年付费买一个不实用的数据。
真的没有数据,或者没有能力获取,付费找人写个api接口,爬虫数据,也不贵。 可以终身使用。 不好过按年付费???
 
关键那群qmt的人水平也不咋地,看他们的文档就知道,变量用A,B,C,D,人品也不咋地,星球上还抄袭我的星球文章,足以说明水平和人品。





 
群里问点问题,就让你开个投研版咨询哈。 还不如来我的qmt ptrade技术群的,free且有求必应哈。
  查看全部
没必要。
处处透出一股割韭菜的味道。
 
到处拉人进群,然后群里问问题,他们会让你私聊,加你,说服你开通投研版。
 
投研版无非多一些数据,你用tushare或者自己爬虫就可以获取,他们非要放到投研版里面,付费使用。
 
价格是一年8,9千,感觉没有一点性价比。
 
qmt,minniqmt有交易功能,有数据获取功能,也可以自己接入外部数据。没必要花那些冤枉钱去按年付费买一个不实用的数据。
真的没有数据,或者没有能力获取,付费找人写个api接口,爬虫数据,也不贵。 可以终身使用。 不好过按年付费???
 
关键那群qmt的人水平也不咋地,看他们的文档就知道,变量用A,B,C,D,人品也不咋地,星球上还抄袭我的星球文章,足以说明水平和人品。

Screenshot_2024_0206_150138.jpg

 
群里问点问题,就让你开个投研版咨询哈。 还不如来我的qmt ptrade技术群的,free且有求必应哈。
 

qmt获取北交所实时行情数据

QMT李魔佛 发表了文章 • 0 个评论 • 465 次浏览 • 2024-01-24 13:39 • 来自相关话题

之前没有试过用qmt交易北交所的股票,后面闻了一下券商,他们说是qmt支持北交所股票交易。
 
首先试试获取实时的行情:
我获取的是这个北交所股票的数据:






获取北交所行情数据如下:
 
#-*-coding:gbk-*-
import datetime
code = '838402.BJ'
def init(ContextInfo):
now = datetime.datetime.now()
print(now)

def handlebar(ContextInfo):
index = ContextInfo.barpos
realtime = ContextInfo.get_bar_timetag(index)
date = timetag_to_datetime(realtime, "%Y-%m-%d %H:%M:%S")
info = ContextInfo.get_full_tick(stock_code=["838402.BJ"])
print(info)
返回下面的数据:





 
对了下时间戳,是正确的。
 
然后试了下获取北交所的历史数据行情:
#-*-coding:gbk-*-
import datetime

code = '838402.BJ'
def init(ContextInfo):
now = datetime.datetime.now()
print(now)
download_history_data(code,"1d","20240105","")

def handlebar(ContextInfo):
index = ContextInfo.barpos
realtime = ContextInfo.get_bar_timetag(index)
date = timetag_to_datetime(realtime, "%Y-%m-%d %H:%M:%S")
print(date)
hist = ContextInfo.get_market_data_ex(['close'],[code], period = "1d",count = 1)
print(hist)

代码里面我想用 download_history_data(code,"1d","20240105","") 下载历史数据。
在数据目录里面也能够获取到这个股票的历史数据文件。
 
可是在qmt里面却输出的是个空的dataframe。






数据目录下面是有数据的。。




感觉是qmt里面的功能还没有完善对北交所股票的支持。
  查看全部
之前没有试过用qmt交易北交所的股票,后面闻了一下券商,他们说是qmt支持北交所股票交易。
 
首先试试获取实时的行情:
我获取的是这个北交所股票的数据:

20240124132926.png


获取北交所行情数据如下:
 
#-*-coding:gbk-*-
import datetime
code = '838402.BJ'
def init(ContextInfo):
now = datetime.datetime.now()
print(now)

def handlebar(ContextInfo):
index = ContextInfo.barpos
realtime = ContextInfo.get_bar_timetag(index)
date = timetag_to_datetime(realtime, "%Y-%m-%d %H:%M:%S")
info = ContextInfo.get_full_tick(stock_code=["838402.BJ"])
print(info)

返回下面的数据:

20240124132856.png

 
对了下时间戳,是正确的。
 
然后试了下获取北交所的历史数据行情:
#-*-coding:gbk-*-
import datetime

code = '838402.BJ'
def init(ContextInfo):
now = datetime.datetime.now()
print(now)
download_history_data(code,"1d","20240105","")

def handlebar(ContextInfo):
index = ContextInfo.barpos
realtime = ContextInfo.get_bar_timetag(index)
date = timetag_to_datetime(realtime, "%Y-%m-%d %H:%M:%S")
print(date)
hist = ContextInfo.get_market_data_ex(['close'],[code], period = "1d",count = 1)
print(hist)

代码里面我想用 download_history_data(code,"1d","20240105","") 下载历史数据。
在数据目录里面也能够获取到这个股票的历史数据文件。
 
可是在qmt里面却输出的是个空的dataframe。

20240124133450.png


数据目录下面是有数据的。。
20240124133533.png

感觉是qmt里面的功能还没有完善对北交所股票的支持。
 

华泰matic能在虚拟机运行吗?

李魔佛 发表了文章 • 0 个评论 • 428 次浏览 • 2024-01-05 09:36 • 来自相关话题

答:vmware上不行。登录的时候会直接提示说,matic禁止在虚拟机运行。
 
但matic却可以在hyper X虚拟机上运行。笔者在win11家庭版的hyper x测试过的。
 





 
 
答:vmware上不行。登录的时候会直接提示说,matic禁止在虚拟机运行。
 
但matic却可以在hyper X虚拟机上运行。笔者在win11家庭版的hyper x测试过的。
 

20240105093504.png

 
 

ptrade调试经验分享(坑) 委托成交回调函数

Ptrade李魔佛 发表了文章 • 0 个评论 • 538 次浏览 • 2023-12-22 10:30 • 来自相关话题

特么的在里面的报错了是不会有任何显示!!!!!!
 





 
之前的代码里面,由于少了一个if,导致如果code不在
g.start_buy_sell_queue 
这个集合里面的话,就会报错。(但正常情况下都会有值,但问题就出现在一些特殊情况下)
 
不然你试试在 
on_trade_response
里面直接raise一个Exception出来,日志里也不会有任何显示。
 
切近!! 
on_trade_response 里面做好安全防护!! 最好是有些业务逻辑完成了在里面print一下,以确保是执行到后面的。 查看全部
特么的在里面的报错了是不会有任何显示!!!!!!
 

20231222102356.png

 
之前的代码里面,由于少了一个if,导致如果code不在
g.start_buy_sell_queue 
这个集合里面的话,就会报错。(但正常情况下都会有值,但问题就出现在一些特殊情况下)
 
不然你试试在 
on_trade_response
里面直接raise一个Exception出来,日志里也不会有任何显示。
 
切近!! 
on_trade_response 里面做好安全防护!! 最好是有些业务逻辑完成了在里面print一下,以确保是执行到后面的。

ptrade精确参与集合竞价交易 时间设置问题

Ptrade李魔佛 发表了文章 • 0 个评论 • 862 次浏览 • 2023-11-16 10:10 • 来自相关话题

最近几次的集合竞价都没有卖出成功。
 
查了下日志。run_daily 设置的9:25运行,下单委托的时间在9:25:01 这个时间就被推到9:30开盘去成交了。
所以实际没有参与到9:25的集合竞价。
 
所以要参与集合竞价,需要设定在9:24分开始,然后不断在一个循环里面,用更小的时间颗粒,比如100ms去监听。
 
等到9:24:59的时间,才去下单。





 





 
具体代码可以参照我的知识星球

 
 
  查看全部
最近几次的集合竞价都没有卖出成功。
 
查了下日志。run_daily 设置的9:25运行,下单委托的时间在9:25:01 这个时间就被推到9:30开盘去成交了。
所以实际没有参与到9:25的集合竞价。
 
所以要参与集合竞价,需要设定在9:24分开始,然后不断在一个循环里面,用更小的时间颗粒,比如100ms去监听。
 
等到9:24:59的时间,才去下单。

20231116100349-v1.png

 

20231116100758-v1.png

 
具体代码可以参照我的知识星球

 
 
 

迅投官网的示例代码真的无眼看。。。

QMT李魔佛 发表了文章 • 0 个评论 • 766 次浏览 • 2023-11-10 01:17 • 来自相关话题

如果拿去做code review,估计会被喷的体无完肤。
 
变量名,类名用A ,B,C 噗, 没有一点含义,做什么鬼
 class a():
pass
A = a()而且也不符合python风格。。。python类名推荐的大写字母开头,实例化对象用小写字母。
所以退一万步讲,上面的代码正常点的程序员写也应该是这样的。
 class A():
pass
a = A()
  
其实正确的应该class GlobalCls():
pass

g = GlobalCls()
其他地方也是有这个毛病。
把代码喂给GPT,让它来分析一下:
得到如下结果:文件编码声明: #coding:gbk 是指定源文件的编码格式为GBK。在Python 3中,通常使用UTF-8作为文件编码格式,因此可以将该行删除或更改为#coding:utf-8。

类名和函数名: 根据PEP 8命名约定,类名应该使用大写字母开头的驼峰命名法(例如A改为A)。同样,函数名应该使用小写字母开头的小写命名法(例如init改为init,f改为f)。

类和实例: 在代码中定义了一个空类a,但没有给它任何属性或方法。如果不需要这个类,可以将其删除。

缩进和代码格式: Python非常依赖于正确的缩进,以指示代码块的层次结构。请确保代码的缩进是一致的,并使用适当的缩进级别(通常是4个空格)。

代码注释: 代码中有一些注释,但是大部分是被注释掉的。良好的注释可以增加代码的可读性和可维护性,建议在关键部分添加更多有用的注释。

异常处理: 代码中没有包含任何异常处理机制。在实际应用中,建议对可能引发异常的操作进行适当的异常处理,以提高代码的健壮性。
 
然后里面计算涨停是这样的: rise_price = round(full_tick[stock]['lastClose'] *1.2,2) if stock[0] == '3' or stock[:3] == '688' else round(full_tick[stock]['lastClose'] *1.1,2)


用昨收价* 1.2和1.1判断当前是否涨跌停。 首先,没有考虑到ST股,部分ST是5%涨停的。 
其次,是直接用的昨收价,如果当天是分红除权日,昨收价没有做除权处理,得到的涨跌幅也是不准的。
 
当然这个文档最大的问题是,很多示例代码运行是直接报错的!!
 

  查看全部
20231110001.jpg

如果拿去做code review,估计会被喷的体无完肤。
 
变量名,类名用A ,B,C 噗, 没有一点含义,做什么鬼
 
class a():
pass
A = a()
而且也不符合python风格。。。python类名推荐的大写字母开头,实例化对象用小写字母。
所以退一万步讲,上面的代码正常点的程序员写也应该是这样的。
 
class A():
pass
a = A()

  
其实正确的应该
class GlobalCls():
pass

g = GlobalCls()

其他地方也是有这个毛病。
把代码喂给GPT,让它来分析一下:
得到如下结果:
文件编码声明: #coding:gbk 是指定源文件的编码格式为GBK。在Python 3中,通常使用UTF-8作为文件编码格式,因此可以将该行删除或更改为#coding:utf-8。

类名和函数名: 根据PEP 8命名约定,类名应该使用大写字母开头的驼峰命名法(例如A改为A)。同样,函数名应该使用小写字母开头的小写命名法(例如init改为init,f改为f)。

类和实例: 在代码中定义了一个空类a,但没有给它任何属性或方法。如果不需要这个类,可以将其删除。

缩进和代码格式: Python非常依赖于正确的缩进,以指示代码块的层次结构。请确保代码的缩进是一致的,并使用适当的缩进级别(通常是4个空格)。

代码注释: 代码中有一些注释,但是大部分是被注释掉的。良好的注释可以增加代码的可读性和可维护性,建议在关键部分添加更多有用的注释。

异常处理: 代码中没有包含任何异常处理机制。在实际应用中,建议对可能引发异常的操作进行适当的异常处理,以提高代码的健壮性。

 
然后里面计算涨停是这样的:
		rise_price = round(full_tick[stock]['lastClose'] *1.2,2) if stock[0] == '3' or stock[:3] == '688' else round(full_tick[stock]['lastClose'] *1.1,2)


用昨收价* 1.2和1.1判断当前是否涨跌停。 首先,没有考虑到ST股,部分ST是5%涨停的。 
其次,是直接用的昨收价,如果当天是分红除权日,昨收价没有做除权处理,得到的涨跌幅也是不准的。
 
当然这个文档最大的问题是,很多示例代码运行是直接报错的!!
 

 

QMT | Ptrade 量化策略代写服务

李魔佛 发表了文章 • 0 个评论 • 1181 次浏览 • 2023-11-01 10:43 • 来自相关话题

 迅投的QMT和恒生电子的Ptrade, 还有掘金, 量化策略编程, 实盘和回测都行。只要你的需求明确,白纸黑字描述清楚,都可以做。股票,ETF,可转债都行。
 
多年交易经验,量化交易与开发经验。所以很多策略,其实用户大体描述,就知道要注意哪些地方,会提出一些建议,用户要注意,需不需要添加一些判读条件等等。(当然,策略的具体参数都是设置可以调节的,你不需要把实际的参数告诉我,代码给你后,你自己运行策略的时候把你策略的真正参数填上去就好了。)
 
有偿,收费,价格美丽。根据策略实际的复杂程度与预估的工时,收费。(不根据代码数量,因为我写代码很精简)
 
我也帮你们咨询过了迅投的客服。 因为他们官网也有提供策略代写服务。他们是不问你策略,直接是5000起步哦。然后根据策略,在5000的基础上不断加。
 









咨询完,我都感觉我自己以前的报价太低了,呜。
 
PS: 之前还有迅投的前员工私底下接单写策略,然后到我的星球里面白嫖我的代码,调用我接口数据,被我发现后举报到星球的。后面那个客户发现代码里面藏有我的公众号信息哈,找到我让我修改接口数据哈。
 
需要的代写策略的盆友,可以关注公众号,在菜单栏那里的“代写量化程序”或者 后台回复:策略代写,获取联系方式哦
 
扫码关注公众号:

  查看全部

Ptrade-QMT_副本.png


 迅投的QMT和恒生电子的Ptrade, 还有掘金, 量化策略编程, 实盘和回测都行。只要你的需求明确,白纸黑字描述清楚,都可以做。股票,ETF,可转债都行。
 
多年交易经验,量化交易与开发经验。所以很多策略,其实用户大体描述,就知道要注意哪些地方,会提出一些建议,用户要注意,需不需要添加一些判读条件等等。(当然,策略的具体参数都是设置可以调节的,你不需要把实际的参数告诉我,代码给你后,你自己运行策略的时候把你策略的真正参数填上去就好了。)
 
有偿,收费,价格美丽。根据策略实际的复杂程度与预估的工时,收费。(不根据代码数量,因为我写代码很精简)
 
我也帮你们咨询过了迅投的客服。 因为他们官网也有提供策略代写服务。他们是不问你策略,直接是5000起步哦。然后根据策略,在5000的基础上不断加。
 
Screenshot_2023_1101_102306_副本.jpg


Screenshot_2023_1101_102257_副本.jpg

咨询完,我都感觉我自己以前的报价太低了,呜。
 
PS: 之前还有迅投的前员工私底下接单写策略,然后到我的星球里面白嫖我的代码,调用我接口数据,被我发现后举报到星球的。后面那个客户发现代码里面藏有我的公众号信息哈,找到我让我修改接口数据哈。
 
需要的代写策略的盆友,可以关注公众号,在菜单栏那里的“代写量化程序”或者 后台回复:策略代写,获取联系方式哦
 
扫码关注公众号:

 

QMT获取A股全市场股票代码

QMT李魔佛 发表了文章 • 0 个评论 • 913 次浏览 • 2023-10-25 15:23 • 来自相关话题

QMT可以通过板块获取A股的全市场股票代码.
 
"沪深A股"
 
完整代码:#-*-coding:gbk-*-
import time
start = False
ACCOUNT = ''

def init(ContextInfo):
now = time.ctime()
print(now)
ContextInfo.run_time("execution","30nSecond","2023-04-14 13:20:00")


def execution(ContextInfo):
data = ContextInfo.get_stock_list_in_sector('沪深A股')
print(len(data))

def handlebar(ContextInfo):
pass
当前共有5047只股票【2023-10-25 15:18:45.533】 start trading mode
【2023-10-25 15:18:45.533】 Wed Oct 25 15:18:45 2023

【2023-10-25 15:18:45.533】 5074
['000001.SZ', '000002.SZ', '000004.SZ', '000005.SZ', '000006.SZ', '000007.SZ', '000008.SZ', '000009.SZ', '000010.SZ', '000011.SZ', '000012.SZ', '000014.SZ', '000016.SZ', '000017.SZ', '000019.SZ', '000020.SZ', '000021.SZ', '000023.SZ', '000025.SZ', '000026.SZ', '000027.SZ', '000028.SZ', '000029.SZ', '000030.SZ', '000031.SZ', '000032.SZ', '000034.SZ', '000035.SZ', '000036.SZ', '000037.SZ', '000039.SZ', '000040.SZ', '000042.SZ', '000045.SZ', '000046.SZ', '000048.SZ', '000049.SZ', '000050.SZ', '000055.SZ', '000056.SZ', '000058.SZ', '000059.SZ', '000060.SZ', '000061.SZ', '000062.SZ', '000063.SZ', '000065.SZ', '000066.SZ', '000068.SZ', '000069.SZ', '000070.SZ', '000078.SZ', '000088.SZ', '000089.SZ', '000090.SZ', '000096.SZ', '000099.SZ', '000100.SZ', '000151.SZ', '000153.SZ', '000155.SZ', '000156.SZ', '000157.SZ', '000158.SZ', '000159.SZ', '000166.SZ', '000301.SZ', '000333.SZ', '000338.SZ', '000400.SZ', '000401.SZ', '000402.SZ', '000403.SZ', '000404.SZ', '000407.SZ', '000408.SZ', '000409.SZ', '000410.SZ', '000411.SZ', '000413.SZ', '000415.SZ', '000416.SZ', '000417.SZ', '000419.SZ', '000420.SZ', '000421.SZ', '000422.SZ', '000423.SZ', '000425.SZ', '000426.SZ',省略若干...
 
点击查看大图




 
是否遇到QMT或Ptrade的问题, 无从入手? 或者咨询无门 ?
来加入 知识星球 , 获取专业的技术解答, 量化实盘代码, 技术交流群

  查看全部
QMT可以通过板块获取A股的全市场股票代码.
 
"沪深A股"
 
完整代码:
#-*-coding:gbk-*-
import time
start = False
ACCOUNT = ''

def init(ContextInfo):
now = time.ctime()
print(now)
ContextInfo.run_time("execution","30nSecond","2023-04-14 13:20:00")


def execution(ContextInfo):
data = ContextInfo.get_stock_list_in_sector('沪深A股')
print(len(data))

def handlebar(ContextInfo):
pass

当前共有5047只股票
【2023-10-25 15:18:45.533】  start trading mode
【2023-10-25 15:18:45.533】 Wed Oct 25 15:18:45 2023

【2023-10-25 15:18:45.533】 5074
['000001.SZ', '000002.SZ', '000004.SZ', '000005.SZ', '000006.SZ', '000007.SZ', '000008.SZ', '000009.SZ', '000010.SZ', '000011.SZ', '000012.SZ', '000014.SZ', '000016.SZ', '000017.SZ', '000019.SZ', '000020.SZ', '000021.SZ', '000023.SZ', '000025.SZ', '000026.SZ', '000027.SZ', '000028.SZ', '000029.SZ', '000030.SZ', '000031.SZ', '000032.SZ', '000034.SZ', '000035.SZ', '000036.SZ', '000037.SZ', '000039.SZ', '000040.SZ', '000042.SZ', '000045.SZ', '000046.SZ', '000048.SZ', '000049.SZ', '000050.SZ', '000055.SZ', '000056.SZ', '000058.SZ', '000059.SZ', '000060.SZ', '000061.SZ', '000062.SZ', '000063.SZ', '000065.SZ', '000066.SZ', '000068.SZ', '000069.SZ', '000070.SZ', '000078.SZ', '000088.SZ', '000089.SZ', '000090.SZ', '000096.SZ', '000099.SZ', '000100.SZ', '000151.SZ', '000153.SZ', '000155.SZ', '000156.SZ', '000157.SZ', '000158.SZ', '000159.SZ', '000166.SZ', '000301.SZ', '000333.SZ', '000338.SZ', '000400.SZ', '000401.SZ', '000402.SZ', '000403.SZ', '000404.SZ', '000407.SZ', '000408.SZ', '000409.SZ', '000410.SZ', '000411.SZ', '000413.SZ', '000415.SZ', '000416.SZ', '000417.SZ', '000419.SZ', '000420.SZ', '000421.SZ', '000422.SZ', '000423.SZ', '000425.SZ', '000426.SZ',
省略若干...
 
点击查看大图
20231025152005.png

 
是否遇到QMT或Ptrade的问题, 无从入手? 或者咨询无门 ?
来加入 知识星球 , 获取专业的技术解答, 量化实盘代码, 技术交流群

 

国金证券 国盛证券 QMT仿真客户端 PTrade仿真客户端 QMT测试版 Ptrade测试版

李魔佛 发表了文章 • 0 个评论 • 1495 次浏览 • 2023-10-22 12:54 • 来自相关话题

 下面是国金证券提供的试用账户:

国金证券 - QMT测试账号信息: 登录账号:*********** 登录密码:**********

QMT交易测试客户端下载链接 链接:
 
https://download.gjzq.com.cn/temp/organ/gjzqqmt_ceshi.rar

 
国金证券 - ptrade测试账号信息: 登录账号:*********  登录密码:********

ptrade交易测试客户端下载链接 链接:
 
https://download.gjzq.com.cn/temp/organ/gjzqptrade_ceshi.rar
 
测试时间10:00--17:00 如有什么问题,请和我们联系。谢谢!
 

 
下面是国盛证券提供的试用账户:

国盛证券 - 国盛智投软件下载(测试版)Ptrade

https://download.gszq.com/ptrade/PTrade1.0-Client-V201906-00-000.zip

仿真账户:******* / ********
量化回测:支持1分钟、日线回测。
量化交易:支持LEVEL1 tick股票交易。
量化研究:提供云Ipython Notebook研究环境、行情数据2005年至今、可使用全市场金融数据。
 
国盛证券-迅投QMT软件下载(测试版) 
 
https://download.gszq.com/xt/XtItClient_x64_QMT_test_1.0.0.22650.exe

仿真账户:*******/********
支持VBA、Python开发策略 可以安装第三方库 软件帮助有文档,测试版历史数据不是很准确,以熟悉界面为主。

如果需要测试账号, 需要开通券商账号后找券商经理获取.
可以扫码联系开通

  查看全部
20231022131835-v1.png

 下面是国金证券提供的试用账户:

国金证券 - QMT测试账号信息: 登录账号:*********** 登录密码:**********

QMT交易测试客户端下载链接 链接:
 
https://download.gjzq.com.cn/temp/organ/gjzqqmt_ceshi.rar

 
国金证券 - ptrade测试账号信息: 登录账号:*********  登录密码:********

ptrade交易测试客户端下载链接 链接:
 
https://download.gjzq.com.cn/temp/organ/gjzqptrade_ceshi.rar
 
测试时间10:00--17:00 如有什么问题,请和我们联系。谢谢!
 

 
下面是国盛证券提供的试用账户:

国盛证券 - 国盛智投软件下载(测试版)Ptrade

https://download.gszq.com/ptrade/PTrade1.0-Client-V201906-00-000.zip

仿真账户:******* / ********
量化回测:支持1分钟、日线回测。
量化交易:支持LEVEL1 tick股票交易。
量化研究:提供云Ipython Notebook研究环境、行情数据2005年至今、可使用全市场金融数据。
 
国盛证券-迅投QMT软件下载(测试版) 
 
https://download.gszq.com/xt/XtItClient_x64_QMT_test_1.0.0.22650.exe

仿真账户:*******/********
支持VBA、Python开发策略 可以安装第三方库 软件帮助有文档,测试版历史数据不是很准确,以熟悉界面为主。

如果需要测试账号, 需要开通券商账号后找券商经理获取.
可以扫码联系开通

 

ptrade 全局对象g持久化对象保存失败

Ptrade李魔佛 发表了文章 • 0 个评论 • 573 次浏览 • 2023-10-18 09:36 • 来自相关话题

 2023-10-18 09:25:12 - ERROR - 全局对象g持久化对象保存失败,对象名:TARGET_STOCK_CODE,错误原因:Traceback (most recent call last):
  File "./fly_docker/IQEngine/utils/global_variable.py", line 50, in save
_pickle.PicklingError: Can't pickle <class 'IQEngine.user_module.PositionManager'>: attribute lookup PositionManager on IQEngine.user_module failed

 
原因是全局变量g 不能被持久化, 需要前面加__, 比如g.Name 要改成 g.__Name
 
全局变量g中不能被序列化的变量将不会被保存。您可在initialize中初始化该变量时名字以'__'开头;
涉及到IO(打开的文件,实例化的类对象等)的对象是不能被序列化的;
全局变量g中以'__'开头的变量为私有变量,持久化时将不会被保存;
 






 
具体可以参加 API文档:
https://ptradeapi.com 查看全部


 2023-10-18 09:25:12 - ERROR - 全局对象g持久化对象保存失败,对象名:TARGET_STOCK_CODE,错误原因:Traceback (most recent call last):
  File "./fly_docker/IQEngine/utils/global_variable.py", line 50, in save
_pickle.PicklingError: Can't pickle <class 'IQEngine.user_module.PositionManager'>: attribute lookup PositionManager on IQEngine.user_module failed


 
原因是全局变量g 不能被持久化, 需要前面加__, 比如g.Name 要改成 g.__Name
 
全局变量g中不能被序列化的变量将不会被保存。您可在initialize中初始化该变量时名字以'__'开头;
涉及到IO(打开的文件,实例化的类对象等)的对象是不能被序列化的;
全局变量g中以'__'开头的变量为私有变量,持久化时将不会被保存;
 

20231018095102.png


 
具体可以参加 API文档:
https://ptradeapi.com

ptrade/qmt 判断股票是否涨停

Ptrade李魔佛 发表了文章 • 0 个评论 • 982 次浏览 • 2023-10-09 11:03 • 来自相关话题

 1. 可以直接用代码实现:
以ptrade为例:
 
先通过 get_snapshot - 取行情快照
 
其中里面有2个字段:
up_px:涨停价格(str:float);
down_px:跌停价格(str:float);用当前的最新价格和涨停跌停价格比较:
 
last_px:最新成交价(str:float);
 
if last_px>=up_px 就是达到涨停价, 
 
还有判断此时的卖一上是否有挂单. 如果还有卖单, 说明此时的涨停板并没有封住, 被人砸开了.
 
跌停板的判断也是如此.
 
 
2. 使用现有的API函数, 更加简单方便, 这个方法只适用于ptrade, qmt没有类似的函数.
 
check_limit - 代码涨跌停状态判断
 
使用场景
该函数仅在交易模块可用。

接口说明
该接口用于标识当日股票的涨跌停情况。

注意事项:



参数
security:单只股票代码或者多只股票代码组成的列表,必填字段(list[str]/str);

返回
正常返回一个dict类型数据,包含每只股票代码的涨停状态。多只股票代码查询时其中部分股票代码查询异常则该代码返回既不涨停也不跌停状态0。(dict[str:int])

涨跌停状态说明:

2:触板涨停(已经是涨停价格,但还有卖盘);
1:涨停;
0:既不涨停也不跌停;
-1:跌停;
-2:触板跌停(已经是跌停价格,但还有买盘);
示例代码:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)

def handle_data(context, data):
# 代码涨跌停状态
stock_flag = check_limit(g.security)
log.info(stock_flag)
公众号: 可转债量化分析

 
  查看全部
 1. 可以直接用代码实现:
以ptrade为例:
 
先通过 get_snapshot - 取行情快照
 
其中里面有2个字段:
up_px:涨停价格(str:float);
down_px:跌停价格(str:float);
用当前的最新价格和涨停跌停价格比较:
 
last_px:最新成交价(str:float);
 
if last_px>=up_px 就是达到涨停价, 
 
还有判断此时的卖一上是否有挂单. 如果还有卖单, 说明此时的涨停板并没有封住, 被人砸开了.
 
跌停板的判断也是如此.
 
 
2. 使用现有的API函数, 更加简单方便, 这个方法只适用于ptrade, qmt没有类似的函数.
 
check_limit - 代码涨跌停状态判断
 
使用场景
该函数仅在交易模块可用。

接口说明
该接口用于标识当日股票的涨跌停情况。

注意事项:



参数
security:单只股票代码或者多只股票代码组成的列表,必填字段(list[str]/str);

返回
正常返回一个dict类型数据,包含每只股票代码的涨停状态。多只股票代码查询时其中部分股票代码查询异常则该代码返回既不涨停也不跌停状态0。(dict[str:int])

涨跌停状态说明:

2:触板涨停(已经是涨停价格,但还有卖盘);
1:涨停;
0:既不涨停也不跌停;
-1:跌停;
-2:触板跌停(已经是跌停价格,但还有买盘);

示例代码:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)

def handle_data(context, data):
# 代码涨跌停状态
stock_flag = check_limit(g.security)
log.info(stock_flag)

公众号: 可转债量化分析

 
 

小市值轮动-量化交易-程序化交易-Ptrade实盘

Ptrade李魔佛 发表了文章 • 0 个评论 • 1163 次浏览 • 2023-10-07 14:14 • 来自相关话题

运行了一段时间的实盘策略。中途不断加条件,避免买入暴雷的品种;遇到一字板涨停的不要急于轮动卖出。等破板再卖出。
 
当前策略持有30只。




点击查看大图




点击查看大图

基于股票的策略不敢多买,属于试验阶段,后期仍然会不断根据市场调仓; 主仓依然在可转债。
 
公众号:可转债量化分析

如果需要策略代写,(ptrade、qmt,其他量化平台)
可以公众号后台回复:
策略代写

  查看全部
运行了一段时间的实盘策略。中途不断加条件,避免买入暴雷的品种;遇到一字板涨停的不要急于轮动卖出。等破板再卖出。
 
当前策略持有30只。

20231007002.jpg
点击查看大图

20231007003.jpg
点击查看大图

基于股票的策略不敢多买,属于试验阶段,后期仍然会不断根据市场调仓; 主仓依然在可转债。
 
公众号:可转债量化分析

如果需要策略代写,(ptrade、qmt,其他量化平台)
可以公众号后台回复:
策略代写

 

一个因为蓝盾退债引起的报错【Ptrade/QMT】

李魔佛 发表了文章 • 0 个评论 • 597 次浏览 • 2023-09-25 02:49 • 来自相关话题

最近发现Ptrade上运行的策略停止了。
 
上去一看。
每一个tick都在报错:





 
好家伙? 怎么会有个 404001.SS的可转债代码的?
 
于是顺着代码去调试。 这个代码是从我的接口传过去的。
 
于是我看了下数据库。
 





 
赫然发现了一个蓝盾退债的玩意, 代码正是 404001, 无语中。 怎么这个代码不按常理来的呢。 虽说是三板的股票,可是转债代码改成4字头, 也是奇葩。
 
刚好也碰巧我的拼接后缀代码:
def modify_code(self, x):
return x + '.SZ' if x.startswith('12') else x + '.SS'
401开头,于是拼接了个.SS 后缀,导致ptrade无法正确识别这个代码行情。
 
可能用401001.SZ 可以拿到行情呢。
  查看全部
最近发现Ptrade上运行的策略停止了。
 
上去一看。
每一个tick都在报错:

20230925001.jpg

 
好家伙? 怎么会有个 404001.SS的可转债代码的?
 
于是顺着代码去调试。 这个代码是从我的接口传过去的。
 
于是我看了下数据库。
 

20230925024354.png

 
赫然发现了一个蓝盾退债的玩意, 代码正是 404001, 无语中。 怎么这个代码不按常理来的呢。 虽说是三板的股票,可是转债代码改成4字头, 也是奇葩。
 
刚好也碰巧我的拼接后缀代码:
    def modify_code(self, x):
return x + '.SZ' if x.startswith('12') else x + '.SS'

401开头,于是拼接了个.SS 后缀,导致ptrade无法正确识别这个代码行情。
 
可能用401001.SZ 可以拿到行情呢。
 

ptrade最多支持同时运行多少个策略?

Ptrade李魔佛 发表了文章 • 0 个评论 • 775 次浏览 • 2023-09-21 17:16 • 来自相关话题

Ptrade上支持写无限个策略。





 
但同时运行的策略只有5个。





 
如果不需要的策略,可以把它暂停了,记住,不要随意暂停。 因为暂停了,重启后你的日志就会随之被清空。
平时也应该做好日志备份的习惯。 部分券商可以连接mysql,可以把数据导出,也可以顺便把日志也导出。





 
需要开通Ptrade或者代写的朋友可以咨询:

  查看全部
Ptrade上支持写无限个策略。

20230921170144-v1.png

 
但同时运行的策略只有5个。

20230921170529-v2.png

 
如果不需要的策略,可以把它暂停了,记住,不要随意暂停。 因为暂停了,重启后你的日志就会随之被清空。
平时也应该做好日志备份的习惯。 部分券商可以连接mysql,可以把数据导出,也可以顺便把日志也导出。

20230921171333-v1.png

 
需要开通Ptrade或者代写的朋友可以咨询:

 

Ptrade跟踪雪球组合自动调仓

Ptrade李魔佛 发表了文章 • 0 个评论 • 846 次浏览 • 2023-09-19 20:25 • 来自相关话题

Task: 
根据指定的雪球组合, 自动跟踪组合的调仓与比例.





 
图随便截取的,具体跟踪的组合,客户自己可以直接配置.
 
目前是每10分钟刷新一次 组合数据,如果有更新就马上根据调仓.
 
盘前和收盘前2分钟, 会定期扫码, 以免到了收盘来不及成交,  留够足够的时间下单与撤单.
 

PS:图片与策略无关
 
耗时地方仍然是调试. 
  查看全部
Task: 
根据指定的雪球组合, 自动跟踪组合的调仓与比例.

20230919201907.png

 
图随便截取的,具体跟踪的组合,客户自己可以直接配置.
 
目前是每10分钟刷新一次 组合数据,如果有更新就马上根据调仓.
 
盘前和收盘前2分钟, 会定期扫码, 以免到了收盘来不及成交,  留够足够的时间下单与撤单.
 

PS:图片与策略无关
 
耗时地方仍然是调试. 
 

ptrade量化策略:低位首板启动板-首板+低吸+单阳不破

Ptrade李魔佛 发表了文章 • 0 个评论 • 909 次浏览 • 2023-09-05 22:44 • 来自相关话题

低位的首板通常是启动板,首板+低吸+单阳不破,胜率还过得去。毛估估大于55%
 
Ptrade实现实盘自动交易代码。
 
(图片截图非本策略,随意贴的)

 
里面细节比较多。
 
得慢慢调。 查看全部
低位的首板通常是启动板,首板+低吸+单阳不破,胜率还过得去。毛估估大于55%
 
Ptrade实现实盘自动交易代码。
 
(图片截图非本策略,随意贴的)

 
里面细节比较多。
 
得慢慢调。

国金QMT测试版|模拟盘 安装程序 下载

QMT李魔佛 发表了文章 • 0 个评论 • 2167 次浏览 • 2023-09-02 12:16 • 来自相关话题

国金证券QMT测试账号信息: 
登录账号:******* 登录密码:*********

QMT交易测试客户端下载链接 链接:https://download.gjzq.com.cn/temp/organ/gjzqqmt_ceshi.rar
 

 
 
在线接口文档:
https://qmt.ptradeapi.com
 
需要开通QMT的视频的朋友可以扫码咨询开通,目前国金开通门槛是入金2W就可以了。费率万一,可半年后免五。
开户后可提供技术相关解答。
  查看全部

20230902004.jpg


国金证券QMT测试账号信息: 
登录账号:******* 登录密码:*********

QMT交易测试客户端下载链接 链接:https://download.gjzq.com.cn/temp/organ/gjzqqmt_ceshi.rar
 

 
 
在线接口文档:
https://qmt.ptradeapi.com
 
需要开通QMT的视频的朋友可以扫码咨询开通,目前国金开通门槛是入金2W就可以了。费率万一,可半年后免五。
开户后可提供技术相关解答。
 

国盛证券Ptrade测试版下载 Ptrade模拟客户端 模拟账号

Ptrade李魔佛 发表了文章 • 0 个评论 • 1226 次浏览 • 2023-09-01 22:53 • 来自相关话题

国盛证券Ptrade有实盘正式版 和 测试版, 测试版提供的是模拟账户,里面的资金是模拟的,默认有500万,随意你操作,亏完拉倒重新设置就好了。
国盛证券Ptrade测试版下载 Ptrade模拟客户端 模拟账号
仿真客户端








国盛Ptrade测试版 模拟账户下载:
https://download.gszq.com/ptrade/PTrade1.0-Client-V201906-00-000.zip
仿真账户: ***** / ****** 量化回测:支持1分钟、日线回测。 量化交易:支持LEVEL1 tick股票交易。 量化研究:提供云Ipython Notebook研究环境、行情数据2005年至今、可使用全市场金融数据。





虽然ptrade有测试版本,但是个人还是非常不推荐使用测试版本。 以前在上面写过回测或者模拟盘,发现问题非常多,一个是数据缺了,数据错乱。以前被它坑过,后面基本都就不敢用了。 群里的兄弟大部分也被坑过,进群公告就是告诫他们,远离测试版。。。哈
 
实盘版本的需要开通才能申请,不同券商的门槛不一样。需要的朋友可以扫码咨询:
 

  查看全部
国盛证券Ptrade有实盘正式版 和 测试版, 测试版提供的是模拟账户,里面的资金是模拟的,默认有500万,随意你操作,亏完拉倒重新设置就好了。
国盛证券Ptrade测试版下载 Ptrade模拟客户端 模拟账号
仿真客户端
20230901004.jpg

20231022124203-v1.png

国盛Ptrade测试版 模拟账户下载:
https://download.gszq.com/ptrade/PTrade1.0-Client-V201906-00-000.zip
 
仿真账户: ***** / ****** 量化回测:支持1分钟、日线回测。 量化交易:支持LEVEL1 tick股票交易。 量化研究:提供云Ipython Notebook研究环境、行情数据2005年至今、可使用全市场金融数据。

20230901006.jpg


虽然ptrade有测试版本,但是个人还是非常不推荐使用测试版本。 以前在上面写过回测或者模拟盘,发现问题非常多,一个是数据缺了,数据错乱。以前被它坑过,后面基本都就不敢用了。 群里的兄弟大部分也被坑过,进群公告就是告诫他们,远离测试版。。。哈
 
实盘版本的需要开通才能申请,不同券商的门槛不一样。需要的朋友可以扫码咨询: