全部
文章&策略
学习干货
问答
官方
用户头像mx_*644mi1
2024-03-27 发布
程序编写 自动化交易,可留言沟通
浏览110
评论1
收藏0
用户头像mx_*644mi1
2024-04-08 发布
欢迎来咨询: 1.可做量化产品: 股票/期货/基金/期货/期权/数字货币/外汇/美股 2.量化策略定制 择时策略,选股策略,事件策略,套利策略,事件策略 E.g.双低可转债策略,强势ETF轮动策略,Hurst择时策略 一路向北择时策略,三维中性策略 3.量化回测/实盘系统搭建 量化框架搭建/实盘/回测/远程指导安装 4.量化的课程学习/交易视图 9大指标总和 5.与量化有关一切都可以找我,价格由于是定制需视您策略的复杂程度,条件的多少来定价的,也可以还价。
浏览147
评论1
收藏1
用户头像mx_*644mi1
2024-03-27 发布
帮助个人实现量化交易 是码农也是交易员,更懂你
浏览188
评论4
收藏0
用户头像我是韭1646858
2023-04-12 发布
研究了两年,终于研究出来一个无敌策略,不惧牛熊,各种行情都是稳定盈利!! 有感兴趣的朋友欢迎留言,短周期策略。持仓数量十只
浏览6465
评论160
收藏50
用户头像mx_***0176tk
2024-04-26 发布
大佬们,首先感谢回答。我附上了代码分享学习,为啥分钟级别的模拟交易,我约定的10:05执行策略,是不是因为平台数据的问题,在中午的时候才能输出数据结果,这样子就影响了交易,截图的日期是26号11点,当天的数据没有。25号数据是中午后才发现它更新了。十分感谢回答! import pandas as pd import numpy as np import datetime from pandas.tseries.offsets import BDay import talib 初始化函数 def init(context): context.n = 4 # 最大持股数 set_benchmark('000300.SH') run_daily(trade, time_rule='after_open', hours=0, minutes=34) def trade(context, bar_dict): tdate = get_datetime().strftime("%Y%m%d") # 现在时间ymd tdate1 = get_datetime().strftime("%Y%m%d %H:%M") # 现在时间 ymdhm minute_earlier_1 = (get_datetime() - datetime.timedelta(minutes=1)).strftime("%Y%m%d %H:%M") # 现在时间前一分钟 current_date = pd.Timestamp(tdate) previous_trading_day = current_date - BDay(1) time = get_all_trade_days() while previous_trading_day not in time: previous_trading_day -= BDay(1) last_date = previous_trading_day.strftime("%Y%m%d") # 上一个交易日时间 today_datetime = datetime.datetime.strptime(tdate, "%Y%m%d") 时间设定 stock_list = get_all_securities("stock", last_date) # 获取全部股票 stock_list = stock_list[(today_datetime - stock_list.start_date) > datetime.timedelta(250)].index.values # 上市日期大于250日 stock_list = list(set(stock_list)) stock_list = fun_remove_st(stock_list, tdate) # 去掉ST stock_list = fun_shizhisx(stock_list, last_date, 6000000000, 800000000000) # 市值条件 stock_list = fun_remove_periodic_industry(stock_list, last_date) # 去除房地产行业 stock_list = fun_volume(stock_list, tdate) # 成交量前三分之一 a = 100 b = 0.005 stock_list = fun_dde_100(stock_list, tdate, last_date, a, b) # 大单净量降序前a,且dde除以流通市值大于b print('大单净量降序前{0},且dde除以流通市值大于{1}:'.format(a ,b),stock_list) stock_list = fun_jiangdiefu(stock_list, tdate, last_date) print('符合全部条件:',stock_list) context.stock_list = stock_list 去掉ST def fun_remove_st(stock_list, tdate): 获取股票的is_paused信息 end_date = datetime.datetime.strptime(tdate + ' 09:31', '%Y%m%d %H:%M').strftime('%Y%m%d %H:%M') stocks_data = get_price(stock_list, start_date=None, end_date=end_date, fre_step='1m', fields=['is_paused'],skip_paused=False, fq='pre', bar_count=1, is_panel=0) non_paused_stocks = [stock for stock, data in stocks_data.items() if data['is_paused'].iloc[-1] == 0.0] return non_paused_stocks 市值条件 def fun_shizhisx(stock_list, last_date, xiaxian, shangxian): q = query(valuation.symbol, asharevalue.float_mv ).filter(asharevalue.float_mv >= xiaxian, asharevalue.float_mv <= shangxian , valuation.symbol.in_(stock_list)) value = get_fundamentals(q, date=last_date) return list(value['valuation_symbol'].values) 去除房地产行业 def fun_remove_periodic_industry(stock_list, last_date): periodic_industry = ['T1801'] for industry in periodic_industry: stocks = get_industry_stocks(industry, last_date) stock_list = list(set(stock_list).difference(set(stocks))) return stock_list 成交量前三分之一 def fun_volume(stock_list, tdate): end_time = datetime.datetime.strptime(tdate + ' 10:00', '%Y%m%d %H:%M').strftime('%Y%m%d %H:%M') start_time = datetime.datetime.strptime(tdate + ' 09:30', '%Y%m%d %H:%M').strftime('%Y%m%d %H:%M') 假设 get_price 返回的是一个字典 values = get_price(stock_list, start_date=start_time, end_date=end_time, fre_step='30m', fields=['volume'], skip_paused=False, fq='pre', bar_count=0, is_panel=False) 初始化一个空的 DataFrame 用于存储所有股票的成交量总和 volume_sum_df = pd.DataFrame(columns=['symbol', 'volume_sum']) 遍历字典,计算每个股票的成交量总和,并添加到 volume_sum_df for symbol, data in values.items(): volume_sum = data['volume'].sum() volume_sum_df = volume_sum_df.append({'symbol': symbol, 'volume_sum': volume_sum}, ignore_index=True) 对股票按成交量进行排序 sorted_stocks = volume_sum_df.sort_values(by='volume_sum', ascending=False) 选出成交量最高的前1/3的股票代码 top_third = int(len(sorted_stocks) / 3) selected_stocks = sorted_stocks.head(top_third)['symbol'].tolist() return selected_stocks 大单净量降序前n,且dde除以流通市值大于1% def fun_dde_100(stock_list, tdate, last_date, shuliang, baifenbi): end_time = datetime.datetime.strptime(tdate + ' 10:00', '%Y%m%d %H:%M').strftime('%Y%m%d %H:%M') start_time = datetime.datetime.strptime(tdate + ' 09:30', '%Y%m%d %H:%M').strftime('%Y%m%d %H:%M') 获取资金流向信息 money_flow_data = get_money_flow_step(stock_list, start_date=start_time, end_date=end_time, fre_step='30m', fields=['l_net_value'], count=None, is_panel=False) 创建一个DataFrame来存储资金流向总和 money_flow_sum_df = pd.DataFrame(columns=['symbol', 'money_flow']) for symbol, data in money_flow_data.items(): money_flow_sum = data['l_net_value'].sum() money_flow_sum_df = money_flow_sum_df.append({'symbol': symbol, 'money_flow': money_flow_sum}, ignore_index=True) 对股票按资金流向进行排序,并选取前N名 sorted_stocks = money_flow_sum_df.sort_values(by='money_flow', ascending=False) top_100_stocks = sorted_stocks.head(shuliang) 获取市值信息 valuation_data = pd.DataFrame() for stock_code in top_100_stocks['symbol']: q = query(valuation.symbol, asharevalue.float_mv).filter(valuation.symbol == stock_code) stock_valuation_data = get_fundamentals(q, date=last_date) valuation_data = pd.concat([valuation_data, stock_valuation_data]) 合并资金流向和市值信息 merged_data = pd.merge(top_100_stocks, valuation_data, left_on='symbol', right_on='valuation_symbol') 计算 l_net_value 和 float_mv 的比例 merged_data['money_flow_ratio'] = merged_data['money_flow'] *100000000/ merged_data['asharevalue_float_mv'] 筛选出比例大于N%的股票 selected_stocks = merged_data[merged_data['money_flow_ratio'] > baifenbi] 返回筛选后的股票代码列表 return selected_stocks['symbol'].tolist() def fun_jiangdiefu(stock_list, tdate, last_date): minute_earlier_1 = (get_datetime() - datetime.timedelta(minutes=1)).strftime("%Y%m%d %H:%M") # 现在时间前一分钟 start_time = datetime.datetime.strptime(tdate + ' 09:30', '%Y%m%d %H:%M').strftime('%Y%m%d %H:%M') df = {'securities': [], 'last_date': [], 'date': [], 'change%': []} for stock in stock_list: price_data_last_date = get_price(stock, None, end_date=last_date, fre_step='1d', fields=['close'],skip_paused=False, fq='pre', bar_count=1, is_panel=0) # 昨日收盘价 price_data_tdate1 = get_price(stock, None, end_date=minute_earlier_1, fre_step='1m', fields=['close'], skip_paused=False,fq='pre', bar_count=1, is_panel=0) # 上一分钟收盘价 price_data_tdate2 = get_price(stock, start_date=start_time, end_date=minute_earlier_1, fre_step='1m', fields=['close','turnover','volume'], skip_paused=False,fq='pre', bar_count=0, is_panel=0) # 前3个半小时每分钟收盘 close_last_date = price_data_last_date['close'].iloc[-1] # 昨日收盘价 close_tdate1 = price_data_tdate1['close'].iloc[-1] # 上一分钟收盘价 close_tdate2 = price_data_tdate2['close'].max() # 当天最高 close_tdate3 = price_data_tdate2['close'].min() # 当天最低 close_tdate4 = price_data_tdate2['turnover'].sum() close_tdate5 = price_data_tdate2['volume'].sum() close_tdate6 = close_tdate4 / close_tdate5 # 当天均价 计算价格变化百分比 change_percent = (close_tdate2 / close_last_date) - 1 # 最高价涨幅 change_percent2 = (close_tdate2 / close_tdate1) - 1 # 最高价回撤 change_percent3 = abs((close_tdate6 / close_tdate1) - 1) # 均价和现价 if change_percent >= 0.01 and change_percent <= 0.06 and change_percent2 <= 0.015 and close_tdate3 >= close_last_date and change_percent3 <=0.015: df['securities'].append(stock) df['last_date'].append(close_last_date) df['date'].append(close_tdate1) df['change%'].append(change_percent) stock_list = df['securities'] return stock_list
浏览45
评论0
收藏0

研究环境无法正确识别'\n'

用户头像zxystar
2023-10-25 发布
回测OK的策略在研究环境中报错,发现是换行符无法识别,请问如何解决?
浏览73
评论4
收藏0
用户头像牛牛量化
2023-09-28 发布
为了集中解决大家的问题,建议大家在此贴下面留言,本人如果有时间乐意免费为大家进行解答。牛牛1985159637
浏览1192
评论38
收藏2

123455566666内含策略代码

用户头像mx_****489vpy
2024-04-25 发布
1
浏览31
评论0
收藏0
策略回测收益图

77777内含策略代码

用户头像mx_****489vpy
2024-04-25 发布
77
浏览25
评论0
收藏0
策略回测收益图

精华 长期有效,公开征集意见反馈。

用户头像量化官方小助理
2023-03-09 发布
请大家不要客气,任何意见建议可以在这里评论提出。 被采纳后我们将奖励1G研究环境内存 3个月。
浏览12363
评论87
收藏4