金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3452|回复: 1

求职大神,帮我把这个python策略转换成金字塔的交易系统

[复制链接]

6

主题

14

帖子

14

积分

Rank: 1

等级: 新手上路

注册:
2021-7-5
曾用名:
发表于 2022-8-7 21:48 | 显示全部楼层 |阅读模式
  • # coding=utf-8
  • from __future__ import print_function, absolute_import, unicode_literals
  • from gm.api import *
  • from datetime import timedelta
  • """
  • 小市值策略
  • 本策略每个月触发一次,计算当前沪深市场上市值最小的前30只股票,并且等权重方式进行买入。
  • 对于不在前30的有持仓的股票直接平仓。
  • 回测时间为:2005-01-01 08:00:00 到 2020-10-01 16:00:00
  • """
  • def init(context):
  •     # 每月第一个交易日的09:40 定时执行algo任务(仿真和实盘时不支持该频率)
  •     schedule(schedule_func=algo, date_rule='1m', time_rule='09:40:00')
  •     # 使用多少的资金来进行开仓。
  •     context.ratio = 0.8
  •     # 定义股票池数量
  •     context.num = 30
  •     # 通过get_instruments获取所有的上市股票代码
  •     context.all_stock = get_instruments(exchanges='SHSE, SZSE', sec_types=[1], skip_suspended=False,
  •                                 skip_st=False, fields='symbol, listed_date, delisted_date',
  •                                 df=True)
  • def algo(context):
  •     # 获取筛选时间:date1表示当前日期之前的100天,date2表示当前时间
  •     date1 = (context.now - timedelta(days=100)).strftime("%Y-%m-%d %H:%M:%S")
  •     date2 = context.now.strftime("%Y-%m-%d %H:%M:%S")
  •     # 上市不足100日的新股和退市股和B股
  •     code = context.all_stock[(context.all_stock['listed_date' < date1) & (context.all_stock['delisted_date' > date2) &
  •                      (context.all_stock['symbol'].str[5 != '9') & (context.all_stock['symbol'].str[5 != '2'
  •     # 剔除停牌和st股
  •     df_code = get_history_instruments(symbols=code['symbol'].to_list(), start_date=date2, end_date=date2, df=True)
  •     df_code = df_code[(df_code['is_suspended' == 0) & (df_code['sec_level' == 1
  •     # 获取所有股票市值
  •     fundamental = get_fundamentals_n('trading_derivative_indicator', df_code['symbol'].to_list(),
  •                                      context.now, fields='TOTMKTCAP', order_by='TOTMKTCAP', count=1, df=True)
  •     # 对市值进行排序(升序),并且获取前30个。 最后将这个series 转化成为一个list即为标的池
  •     trade_symbols = fundamental.reset_index(
  •         drop=True).loc[:context.num - 1, 'symbol'].to_list()
  •     print('本次股票池有股票数目: ', len(trade_symbols))
  •     # 计算每个个股应该在持仓中的权重
  •     percent = 1.0 / len(trade_symbols) * context.ratio
  •     # 获取当前所有仓位
  •     positions = context.account().positions()
  •     # 平不在标的池的仓位
  •     for position in positions:
  •         symbol = position['symbol'
  •         if symbol not in trade_symbols:
  •             order_target_percent(symbol=symbol, percent=0, order_type=OrderType_Market,
  •                                  position_side=PositionSide_Long)
  •             print('市价单平不在标的池的', symbol)
  •     # 将标中已有持仓的和还没有持仓的都调整到计算出来的比例。
  •     for symbol in trade_symbols:
  •         order_target_percent(symbol=symbol, percent=percent, order_type=OrderType_Market,
  •                              position_side=PositionSide_Long)
  •         print(symbol, '以市价单调整至权重', percent)
  • if __name__ == '__main__':
  •     '''
  •     strategy_id策略ID,由系统生成
  •     filename文件名,请与本文件名保持一致
  •     mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST
  •     token绑定计算机的ID,可在系统设置-密钥管理中生成
  •     backtest_start_time回测开始时间
  •     backtest_end_time回测结束时间
  •     backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
  •     backtest_initial_cash回测初始资金
  •     backtest_commission_ratio回测佣金比例
  •     backtest_slippage_ratio回测滑点比例
  •     '''
  •     run(strategy_id='13a64e72-e900-11eb-b05f-309c2322ba62',
  •         filename='main.py',
  •         mode=MODE_BACKTEST,
  •         token='2b62e7651c9897d0cdd4a6cd818a7ba8488af710',
  •         backtest_start_time='2005-01-01 08:00:00',
  •         backtest_end_time='2020-10-01 16:00:00',
  •         backtest_adjust=ADJUST_PREV,
  •         backtest_initial_cash=1000000,
  •         backtest_commission_ratio=0.0001,
  •         backtest_slippage_ratio=0.0001)
回复

使用道具 举报

37

主题

9972

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2022-8-8 08:25 | 显示全部楼层
抱歉,这不再技术支持范畴之内
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-6-7 06:23 , Processed in 0.115752 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表