『Python 金融应用』技术分析入门 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
LittleUqeer
V2EX    Python

『Python 金融应用』技术分析入门

  •  
  •   LittleUqeer 2016-12-23 12:25:59 +08:00 4005 次点击
    这是一个创建于 3221 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文将演示如何通过程序去实现常见的技术指标。


    技术分析是指以市场行为为研究对象,以判断市场趋势并跟随趋势的周期性变化来进行股票及其他金融衍生物交易决策的方法的总和。技术分析认为市场行为包容消化一切信息、价格以趋势方式波动、历史会重演,常用的有 MACD 、 BOLL 、 RSI 等。


    下面举个简单的栗子,双均线。技术分析中通常会用一条近期的移动平均线和远期移动平均线的相对价格趋势来体现股票近期的价格趋势。

    例如当近期均线由下向上突破远期均线时(金叉),通常代表股票近期较为强势可以作为买入信号。

    相反当近期均线由上向下击穿远期均线时(死叉),通常代表股票近期较为疲软作为卖出信号。

    接下来在看如何通过程序去实现这个简单的逻辑(选用 5 个交易日的平均价作为近日均线、选用 60 个交易日的平均价作为远期均线)


    首先确定一下策略的回测时间(想看策略在哪一阶段的表现)
    start = '2012-05-28' #回测开始时间
    end = '2016-08-08' # 回测结束时间

    然后确定策略选股的股票池及标的(策略适用于哪些股票,想看策略相对谁的表现情况)
    secID = '601318.XSHG' #中国平安
    benchmark = secID # 策略对标标的(这里选取的是中国平安)
    universe = [secID] # 股票池,支持股票和基金 (选取的是中国平安)

    其他需要的信息(策略的起始资金、按天进行判断还在用分钟线进行判断、策略调仓频率)
    capital_base = 100000 #起始资金
    freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
    refresh_rate = 1 # 调仓频率,表示执行 handle_data 的时间间隔,若 freq = 'd'时间间隔的单位为交易日,若 freq = 'm'时间间隔为分钟
    max_history_window = 100 #设定调取历史价格区间最大为 100 个交易日
    def initialize(account): # 初始化虚拟账户状态,类似于去券商开户
    pass

    策略逻辑部分


    局部变量定义:
    def handle_data(account): # 每个交易日的买入卖出指令
    hist1 = account.get_attribute_history('closePrice', 5) #获取过去 5 个交易日的收盘价
    hist2 = account.get_attribute_history('closePrice', 60) #获取过去 60 个交易日的收盘价
    for s in account.universe: #所有股票池中的股票
    MA5 = hist1[s].mean()
    MA60 = hist2[s].mean() #计算过去 5 个交易日及过去 60 个交易日的均价, mean ()是 python 自带的计算平均值的函数

    买入判断:
    if MA5 > MA60 and s not in account.security_position: #“金叉”而且当前持仓中没有持有要买入的股票时买入
    amount = int(account.cash / account.referencePrice[s] / 100) * 100
    order(s, amount) #为了让买入的数量是整数(现金 /要买入上一个交易日的价格)

    卖出判断:
    elif MA5 < MA60 and s in account.security_position: #“死叉”时而且所卖证券在持仓中时卖出
    order_to(s, 0)

    接着就可以看到策略在历史区间的表现

    年化收益率 16.4% 基准年化收益率 13.7% 阿尔法 7% 贝塔 0.59 夏普比率 0.49 收益波动率 26.7% 信息比率 -0.01 最大回撤 18.9% 换手率 14.43

    不管收益如何,但看胜率的话比抛硬币强~~~

    7 条回复    2016-12-23 15:36:58 +08:00
    mushroom8201
        1
    mushroom8201  
       2016-12-23 12:56:53 +08:00
    这个是 python 几?
    LittleUqeer
        2
    LitleUqeer  
    OP
       2016-12-23 13:03:36 +08:00
    @mushroom8201 应该是 python 2.7 ,我在一个叫优矿的量化平台上做的 https://uqer.io/community/list
    mushroom8201
        3
    mushroom8201  
       2016-12-23 13:11:46 +08:00
    不错不错,看明白啥是技术分析了。感谢支持,自己对金融这块感兴趣,业余学习下
    lixuda
        4
    lixuda  
       2016-12-23 13:24:00 +08:00
    天天软文
    LittleUqeer
        5
    LittleUqeer  
    OP
       2016-12-23 13:36:47 +08:00
    @lixuda 爬数据的 tushare ,做交易的 vn.py 都是 python 写的,跟大家分享下使用心得。
    lixuda
        6
    lixuda  
       2016-12-23 14:30:42 +08:00
    @LittleUqeer 文章里面哪里是用了你说的那 2 个
    LittleUqeer
        7
    LittleUqeer  
    OP
       2016-12-23 15:36:58 +08:00
    @lixuda 我也没说文章中用了,贴了我自己用过的 python 工具。您有想法,咱们可以多交流。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1413 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is pwered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:53 PVG 00:53 LAX 09:53 JFK 12:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86