用 Python 实现简单量化交易策略:基于相关性的股票投资

配资网 阅读: 2024-09-01
后台-插件-广告管理-内容页头部广告(手机)

炒股看数据,说白了就是和一堆数字玩儿游戏。每日开电脑,眼睛只盯得见那些蹦跶的数字,心跳跟着它起落。行情好时,心花怒放;不行时,瞅啥都闹心。

数据处理的复杂性

处理股票数据可没那么容易,得学好多数学公式和逻辑判断!比如说,你可以用`df.iloc[i,0]`这个命令来提取某一行的数据,然后用`result[key].append(df.iloc[i,-3])`这个方法来更新结果。别看这两段代码短小精悍,真要动手做的话,每一步都能让你头大。

数据清洗的重要性

数据清洗可重要了!要是有些数据弄错了,那分析出来的结果可就没用。就像做饭前的洗菜一样,菜没洗净饭咋好吃?所以,每次做这个我都得花好多力气,挨个细查,保证没问题才行。

数据分析的技巧

用数据分析时,有几个小窍门儿能帮你快速抓到重点。比如用`max(zip(result2[i].values(),result2[i].keys()))[1]`这个公式,就能找出最大值对应的键,这样你就不用在一大堆数据里找半天了。这些小技巧看似简单,但有时候真的能派上大用场!

沪深策略_沪深策略配资平台_沪深策略配资平台诈骗

数据可视化的魅力

数据可视化就像把无聊的数字变成有趣的东西。用图表就能直接看出数据变动,可比光看数字有意思多!我最爱用折线图来看股票走势,一眼就能明白,心情也会随着图形的高低起伏。

数据分析的风险

数据分析确实让咱们更懂市场了,但同时也有些小问题。有时候数据并不能完全展示市场实情,这时候就得靠经验和感觉来判断。就像开车,光看导航可不够,还要注意路面状况。

数据分析的成就感

虽然做数据分析挺累人,也挺让人头疼,但是看到那些有用的结果出来,那感觉真的很棒!就像你种了一棵树,然后它终于结果了,那种满足感是没法用别的来形容的。

数据分析的未来

沪深策略配资平台诈骗_沪深策略配资平台_沪深策略

随着科技越来越牛,我们处理和分析数据的手段也是日益升级。以后,我们可能要用到更高级的技术来搞定这些事,这样肯定能提高效率,不过也会带来新问题。

数据分析与生活

数据分析不仅是工作,也跟咱们日常生活有关。通过研究这些数字和信息,我们能更深层次地了解这个世界,做决定时也会更有把握。比如,通过查看天气预报来选明天要穿啥,看似简单,其实挺管用的。

数据分析的乐趣

import tushare as ts
import pandas as pd
import numpy as np
import copy
pro = ts.pro_api('你的token')
#1 获取沪深300成分股日线行情数据
def hqsj_hs():
    df1 = pro.index_weight(index_code='399300.SZ', trade_date='20201231')
    df=pd.DataFrame()
    for i in range(len(df1)):
        df2 = pro.daily(ts_code=df1.iloc[i,1], start_date='20200101', end_date='20201231')
        df=pd.concat([df,df2],axis=0)
    df.to_excel('股票数据.xlsx',index=False)
hqsj_hs()
#股票数据.xlsx需要手动将excel表按股票代码和交易日期升序
#2 计算相关性
def xgx():
    df=pd.read_excel('股票数据.xlsx',engine='openpyxl')
    result={}
    for i in range(len(df)):
        key=df.iloc[i,0]
        if result.get(key,False):
            result[key].append(df.iloc[i,-3])
        else:
            result[key] = [df.iloc[i,-3]]
    result1=copy.deepcopy(result)
    for i in result:
        if len(result[i])!=243:
            del result1[i]
    for i in result1:
        result1[i].append([result1[i][1:],result1[i][:-1]])
    result2={}
    for i in result1:
        aa = {}
        now=pd.Series(result1[i][-1][0])
        for j in result1:
            pre=pd.Series(result1[j][-1][1])
            xgx=now.corr(pre)
            aa[j]=abs(xgx)
        result2[i]=aa
    #print(result2)
    result3={}
    for i in result2:
        result3[i]={max(zip(result2[i].values(), result2[i].keys()))[1]:max(zip(result2[i].values(), result2[i].keys()))[0]}
    xxx=[]
    for i in result3:
        for j in result3[i]:
            xxx.append(result3[i][j])
    b=sorted(xxx,reverse = True)[:1] #取相关性最大的
    result4={}
    for i in result3:
        for j in result3[i]:
            for x in b:
                if x==result3[i][j]:
                    result4[i]={j:x}
    print(result4)
    return result4
#3 获取21年数据
def test_data():
    result4=xgx()
    ts_code=[]
    for i in result4:
        for j in result4[i]:
            ts_code.append(j)
    df = pd.DataFrame()
    for i in ts_code:
        df1 = pro.daily(ts_code=i, start_date='20210101', end_date='20210331')
        df = pd.concat([df, df1], axis=0)
    df.to_excel('股票数据1.xlsx', index=False)
test_data()
#4 买股方案
def mgfa():
    df=pd.read_excel('股票数据1.xlsx',engine='openpyxl')
    timeseries=df['trade_date'].tolist()
    timetime=list(set(timeseries))
    timetime1=sorted(timetime)
    result4=xgx()
    ts1=[] #昨天
    ts2=[] #今天
    for i in result4:
        ts2.append(i)
        for j in result4[i]:
            ts1.append(j)
    result1={}
    for i in range(len(df)):
        time=df.iloc[i,1]
        if result1.get(time,False):
            aa.append(df.iloc[i,-3])
        else:
            aa=[]
            aa.append(df.iloc[i,-3])
        result1[time]=aa
    result2={}
    for i in result1:
        if i!=20210331:
            aaa=[]
            for j in result1[i]:
                if j >0:
                    aaa.append(ts2[result1[i].index(j)])
            result2[timetime1[timetime1.index(i)+1]]=aaa
    print(result2)
    return result2
mgfa()
#5 获取测试数据
def cssj():
    result4=xgx()
    ts_code=[]
    for i in result4:
        ts_code.append(i)
    df = pd.DataFrame()
    for i in ts_code:
        df1 = pro.daily(ts_code=i, start_date='20210101', end_date='20210331')
        df = pd.concat([df, df1], axis=0)
    df.to_excel('股票数据2.xlsx', index=False)
cssj()
#6 评估策略
def jssy():
    result2=mgfa()
    result4=xgx()
    df=pd.read_excel('股票数据2.xlsx',engine='openpyxl')
    zdf=[]
    for i in result2:
        if len(result2[i]) == 1:
            for j in result2[i]:
                for x in range(len(df)):
                    if df.iloc[x, 0] == j and df.iloc[x, 1] == i:
                        zdf.append(df.iloc[x, -3])
        else:
            zdf.append(0)
    bbb=1
    for i in zdf:
        bbb=bbb*(1+i/100)
    bb=(bbb-1)*100
    print('总收益率/%:',bb)
    print('夏普率:', np.mean(zdf)/np.std(zdf,ddof=1))
    ccc=1
    hc=1
    max_hc=[]
    for i in zdf:
        kk=ccc*(1+i/100)
        if kk

终于要说,做数据分析也挺好玩儿的!一头扎进数据堆里,你会发现每个数字都藏着好多有趣的事儿。就像玩探险游戏似的,每次分析都是新发现。

本文 融资融券杠杆炒股 原创,转载保留链接!网址:http://www.sxwdjt.cn//zmt/231.html

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索