Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
homework1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
20201219012
homework1
Commits
1ffdc001
Commit
1ffdc001
authored
Feb 26, 2021
by
20201219012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
2981f371
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
165 additions
and
0 deletions
+165
-0
策略5:融合技术指标的QP策略.ipynb
+165
-0
No files found.
策略5:融合技术指标的QP策略.ipynb
0 → 100644
View file @
1ffdc001
{
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import cvxopt as opt\n",
"from cvxopt import blas, solvers\n",
"import pandas as pd\n",
"from cvxopt import solvers, matrix\n",
"\n",
"df=pd.read_csv('stocks.csv')\n",
"\n",
"stock_list=[row['stock'] for index,row in df.iterrows()]\n",
"\n",
"#选股池\n",
"instruments=stock_list\n",
"\n",
"#回测时间\n",
"start_date='2019-01-03'\n",
"end_date='2021-01-22'\n",
"\n",
"\n",
"def initialize(context):\n",
" \n",
" context.set_commission(PerOrder(buy_cost=0.0003,sell_cost=0.0003,min_cost=5))\n",
"\n",
"\n",
" \n",
"\n",
"##每天执行一次\n",
"def handle_data(context,data):\n",
" \n",
" ##技术指标所需要的最大天数\n",
" \n",
" if context.trading_day_index<100:\n",
" return\n",
" \n",
" if (context.trading_day_index)%20!=0:\n",
" return \n",
" \n",
" print(context.trading_day_index)\n",
" \n",
" price_df=pd.DataFrame()\n",
" \n",
" stock_num=120\n",
" count=0\n",
" \n",
" for stock in instruments:\n",
" count+=1\n",
" sid=context.symbol(stock)\n",
" prices = data.history(sid,'price',5,'1d')\n",
" price_df=pd.concat([price_df,prices],axis=1)\n",
" price_df.fillna(0,inplace=True)\n",
" if(count==stock_num):\n",
" break\n",
" \n",
" ## 120,5\n",
" price_np=price_df.to_numpy().T\n",
" \n",
" \n",
" ##cov\n",
" ##(120,120)\n",
" cov_df= pd.DataFrame(np.cov(price_np))\n",
" P=matrix(cov_df.to_numpy())\n",
" \n",
" q=-matrix(np.mean(price_np,axis=1),(stock_num,1))\n",
" \n",
" \n",
" ##Ax=b\n",
" A=matrix(1.,(1,stock_num))\n",
" b=matrix(1.)\n",
" \n",
" \n",
" ##GX<=h\n",
" temp_df1= pd.DataFrame(-np.eye(stock_num))\n",
" temp_df2= pd.DataFrame(np.eye(stock_num))\n",
" G_df=pd.concat([temp_df1,temp_df2],axis=0)\n",
" G = matrix(G_df.to_numpy()) \n",
" \n",
" ##xi<=0.2\n",
" temp_list=[]\n",
" for i in range(stock_num):\n",
" temp_list.append([0.0])\n",
" \n",
" ##每只权重不超过0.2\n",
" for i in range(stock_num):\n",
" temp_list.append([0.2])\n",
" h = opt.matrix(np.array(temp_list))\n",
" \n",
" \n",
" ##solver:\n",
" solvers.options['show_progress'] = False\n",
" sol = solvers.qp(P,q,G,h,A,b)\n",
" weight=list(sol['x'])\n",
"\n",
" stock_selected_list=[]\n",
" sum_weight=0.0\n",
" cur=0\n",
" for stock in stock_list: \n",
" sid=context.symbol(stock)\n",
" if data.can_trade(sid):\n",
" stock_selected_list.append(stock)\n",
" sid=context.symbol(stock)\n",
" \n",
" ##融入技术指标,如果满足条件,,权重加倍\n",
" ma_3=data.history(sid,'price',3,'1d').mean()\n",
" ma_5=data.history(sid,'price',5,'1d').mean()\n",
" ma_10=data.history(sid,'price',10,'1d').mean()\n",
" ma_15=data.history(sid,'price',15,'1d').mean()\n",
" sum_weight+=weight[cur]\n",
" if ma_3>ma_5 and ma_5>ma_10 and ma_10>ma_15:\n",
" sum_weight+=weight[cur]*2\n",
" weight[cur]*=2\n",
" else:\n",
" weight[cur]=0\n",
" cur+=1\n",
" \n",
" cur=0\n",
" for stock in stock_list:\n",
" if weight[cur]!=0:\n",
" sid=context.symbol(stock)\n",
" price=data.current(sid,'price')\n",
" context.order_target_percent(sid,weight[cur]/sum_weight)\n",
" cur+=1\n",
"\n",
"m=M.trade.v2(\n",
" instruments=instruments,\n",
" start_date=start_date,\n",
" end_date=end_date,\n",
" initialize=initialize,\n",
" handle_data=handle_data,\n",
" order_price_field_buy='open',\n",
" order_price_field_sell='open',\n",
" capital_base=1000000\n",
")\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"is_mlstudio": "false",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"name": ""
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment