|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
作者:微信文章
又一款免费免费免费量化平台来了,它就是我们的HT-MATIC,它可以根据你的交易思路让AI协助编写策略代码,它依托深厚的业务积累与先进的技术平台,融合 AI技术,为客户提供集数据探索、因子研究、策略开发和信号提示于一体的量化全周期智能量化投研解决方案。
#进入量化平台
登录Matic之后在主页面点击量化菜单进入量化平台
进入量化平台可以看到菜单有:首页、编写策略、数据平台、因子研究、我的策略、量化学院和知识库
数据平台展示了目前系统中支持的数据,比如期货日线行情数据,点击后进入详情页面,可以查看表结构、表文档、 使用示例以及更新记录。
因子研究展示了目前系统中支持的因子,可以在此对因子进行绩效对比,也可创建自己的因子。
编写策略是量化平台内嵌的开发环境AIStudio,主要在此来实现策略开发。
我的策略用于管理已发布的策略,可以展示提交到模拟交易或者实盘交易的策略名称、今日收益、累计收益、运行时间、交易账号等信息
策略社区是一个用户可以提问、交流和分享量化投资策略的地方,在这里可以获取到他人分享的优质策略模型。
量化学院和知识库是知识分享平台,学院会不定期上线平台教学视频。知识库提供了平台的一些使用文档以及接口文档等知识性的文档,也可在此创建自己的私人知识库。
编写策略是量化平台内嵌的开发环境AIStudio,主要在此来实现策略开发。
下面主要给大家介绍下AI协助编写策略代码技巧
1、我们在量化首页的AI对话框里直接输入:基于螺纹钢主力合约,帮我开发一个双均线的期货趋势跟踪策略,初始资金是5万,不要使用额外参数,如图
2、AI智能助手输出代码如下
3、点击运行策略,表现如下
4、完整代码如下
from bigquant import bigtrader, dai
import pandas as pd
def initialize(context: bigtrader.IContext):
context.logger.info("开始计算信号因子...")
sql = """
SELECT
date,
instrument,
dominant,
close,
m_avg(close, 5) as sma,
m_avg(close, 20) as lma,
CASE
WHEN sma > lma THEN -1
WHEN sma < lma THEN 1
ELSE 0
END as signal
FROM cn_future_bar1d
LEFT JOIN cn_future_dominant USING (date, instrument)
WHERE instrument='rb8888.SHF'
"""
df = dai.query(sql, filters={"date": [context.add_trading_days(context.start_date, -10), context.end_date]}).df()
context.data = df
context.lots = 1 # 每次交易1手
def handle_data(context: bigtrader.IContext, data: bigtrader.IBarData):
import pandas as pd
from bigtrader.constant import Direction
from bigtrader.constant import OrderType
today = data.current_dt.strftime('%Y-%m-%d')
df_today = context.data[context.data['date'] == today]
signal = df_today['signal'].values[0]
price = df_today['close'].iloc[0]
dominant_symbol = df_today['dominant'].values[0]
# 持仓数据
positions = context.get_account_positions()
if len(positions) == 0:
position_symbol = dominant_symbol # 当天无仓位的情况下,默认设置
else:
position_symbol = list(context.get_account_positions().keys())[0]
long_position = context.get_account_position(position_symbol, direction=Direction.LONG).avail_qty #多头持仓
short_position = context.get_account_position(position_symbol, direction=Direction.SHORT).avail_qty #空头持仓
curr_position = short_position + long_position # 总持仓
# 先进行移仓换月
if dominant_symbol != position_symbol:
# 移仓换月
if short_position > 0:
context.buy_close(position_symbol, short_position, price, order_type=OrderType.MARKET)
context.sell_open(dominant_symbol, short_position , price, order_type=OrderType.MARKET)
elif long_position > 0:
context.sell_close(position_symbol, long_position, price, order_type=OrderType.MARKET)
context.buy_open(dominant_symbol, long_position, price, order_type=OrderType.MARKET)
# 信号交易
if short_position > 0:
if signal == 1: # 买入信号则先平空再开多
context.buy_close(position_symbol, short_position, price, order_type=OrderType.MARKET)
context.buy_open(dominant_symbol, context.lots, price, order_type=OrderType.MARKET)
elif long_position > 0:
if signal == -1: # 卖出信号则先平多再开空
context.sell_close(position_symbol, long_position, price, order_type=OrderType.MARKET)
context.sell_open(dominant_symbol, context.lots, price, order_type=OrderType.MARKET)
elif curr_position == 0:
if signal == 1: # 无仓位情形下,买入信号则开多
context.buy_open(dominant_symbol, context.lots, price, order_type=OrderType.MARKET)
elif signal == -1: # 无仓位情形下,买入信号则开空
context.sell_open(dominant_symbol, context.lots, price, order_type=OrderType.MARKET)
performance = bigtrader.run(
market=bigtrader.Market.CN_FUTURE,
frequency=bigtrader.Frequency.DAILY,
start_date="2021-01-01",
end_date="2024-12-31",
capital_base=50000,
initialize=initialize,
handle_data=handle_data,
order_price_field_buy='open',
order_price_field_sell='open',
)
performance.render()
后续将邀请专业老师进行系统性的培训,有兴趣的可以入群交流
|
|