zoukankan      html  css  js  c++  java
  • 对股票的双均线策略

    双均线:此处采用5日均线和30日均线

    金叉:短均线上穿长均线  5日线上穿30日线,交叉处为金叉     5日线<30日线   由true--->false

    死叉:短均线下穿长均线  5日线下穿30日线,交叉处为死叉                              由false--->true

    具体实现代码:

    import tushare as ts        #金融数据接口
    
    import pandas as pd        
    
    from pandas import Series,DataFrame
    
    data=ts.get_k_data(code='002460',start='2015',end='2019-06')
    
    data.to_csv('./gfly.csv',)
    
    df=pd.read_csv('./gfly.csv',index_col='date',parse_dates=['date'])                  #将日期列作为列的索引对象
    
    df.drop(labels='Unnamed: 0',axis=1,inplace=True)                                    #清除空白列
    
    df
    
    day_5=df['close'].rolling(5).mean()                #收盘价的五日均价  rolling依次取值  mean 聚合求值
    
    day_30=df['close'].rolling(30).mean()              #30日均价
    
    df['d5']=day_5
    df['d30']=day_30
    
    
    
    s1=  df['d5']< df['d30']  # T->F  出现金叉  F->T  出现死差
    
    s2=  df['d5']> df['d30']
    
    # s1  T T F T T T F F F T F T
    # S2    F F T F F F T T T F T F     向右偏移一位
    #       T F T T T F T T T F T       此行中的F就是对应的S1发生金叉的日期
    #       F T F F F T F F F T F       取反后得到的T就是对应的金叉日期     过滤出T
    
    gold=df.loc[~(s1 | s2.shift(1))].index                     #金叉对应的时间
    
    death=df.loc[(s1 & s2.shift(1))].index                           #出现死叉日期
    
    first_money=100000    #初始可用资金
    money=first_money
    hold=0                #初始持有股票
    g1=pd.Series(1,index=gold)                   #金叉标志位 1
    d1=pd.Series(0,index=death)                  #死叉标志位 0
    gd=g1.append(d1).sort_index()
    
    for i in range(0,len(gd)):
        p=df['open'][gd.index[i]]         #金叉当天的开盘价
        if gd[i]==1:                    #金叉 会买入股票
            hand=(money//(100*p))        #最多可以买几手
            hold+=hand*100                  #持有股票数量
            money-=hand*100*p            #剩余可用资金
        else:
            money+=hold*p                #股票卖出
            hold=0                       #清零
            
    price=df['open'][-1]                 #上个交易日的开盘价 
    now_money=hold*price+money           #可用资金和持有股票价值
    print(now_money)        
  • 相关阅读:
    重启宝塔面板后提示-ModuleNotFoundError: No module named 'geventwebsocket'
    浅谈自动化
    【测试基础】App测试要点总结
    记录python上传文件的坑(2)
    使用navicat连接只开放内网ip连接的数据库
    【测试基础】数据库索引
    记录python上传文件的坑(1)
    使用docker-compose安装wordpress
    2-2 远程管理命令-网卡和IP地址的概念
    2-1. 远程管理常用命令-关机和启动
  • 原文地址:https://www.cnblogs.com/wen-kang/p/10997944.html
Copyright © 2011-2022 走看看