量化投资学习

金融

什么是金融?
金融:就是对现有资源进行重新整合之后,实现价值和利润的等效流通。
通俗来说,金融就是你有钱,但对创业没有想法,将钱融给需要做大做强的公司,等到上市,市值翻倍,从中获利。
金融工具:在金融市场中可交易的金融资产(股票、期货、黄金、外汇、基金等),就是将钱融给别人的方式。

  • 期货相当于现货,两人对货物的未来价格趋势的一种约定。
  • 黄金稳定,当需要保值的时候一种投资。
  • 外汇:跟汇率有关,波动太小,一般大公司操作
  • 基金:基金经理,个人将钱交给基金经理,基金公司会吸纳各个散户的钱,基金公司通过各种投资,赚钱后分给投资者,风险小,收益不如股票
  • 股票: 股份公司发给出资人的一种凭证,股票的持有者就是股份公司的股东。股票的作用是出资证明、证明股东身份、对公司经营发表意见。通过公司分红以及交易(卖掉一部分股份套现)获利。

上市/IPO:企业通过证券交易所公开向社会增发股票以募集资金。公司去证监会申请上市,证监会审核以规避所有风险,在证券交易所公开。
股票的分类:

  • 股票按业绩分类:
    蓝筹股:资本雄厚、信誉优良的公司的股票
    绩优股:业绩优良的公司的股票
    ST股:特别处理股票,连续两年亏损或者每股净资产低于股票面值
  • 股票按上市地区分类:
    A股:中国大陆上市(上海或者深圳证券交易所),人民币认购买卖(T+1,涨跌幅10%),股票波动不能大于10%,为了保护股民,有涨停跌停之说;T就代表交割日,今天买出去,明天才可以卖出去
    B股:中国大陆上市,外币认购买卖(T+1,T+3),T+3交收日,三天之后到账。
    H股:中国香港上市(T+0,涨跌幅不设限制)
    N股:美国纽约上市
    S股:新加坡上市

股票市场的构成

  • 上市公司
  • 投资者
  • 证监会(决定能否上市)
  • 证券业协会
  • 交易所:处理各种各样的信息
  • 证券中介机构:不向小股民小散户发售股票,证券交易所需要有席位,证券中介机构帮小股民代买股票,赚取席位费
  • 交易所:
    上海证券交易所:只有一个主板(沪指)
    指数反映了大盘整体的趋势,整个市场假如有一万亿,七八千亿都在涨,通过趋势分析,大盘总体在涨。
    深圳证券交易所:
    主板:大型成熟企业(深成指)
    中小板:经营规模较小
    创业板:尚处于成长期的创业企业

影响股价的因素:公司自身因素、行业因素(最近人工智能发展的不错,很多公司会涨)、市场因素(是影响股价的最根本的因素)、心理因素、经济因素(国家的政策,利率 )、政治因素

股票买卖(A股)
委托买卖股票:个人不能直接买卖,需要在券商开户,进行委托购买
股票交易日:周一到周五(非法定节假日)
交易时间:

  1. 9:00-9:15 开门但不做竞价
  2. 9:15-9:25 开盘集合竞价,让成交量最大
  3. 9:30-11:30 前市,连续竞价时间
  4. 13:00-15:00 后市,连续竞价
  5. 14:58-15:00 深交所收盘集合竞价时间

金融分析:

  1. 基本面分析
    宏观经济面分析:国家的财政政策、货币政策
    行业分析
    公司分析:财务数据、业绩报告等
  2. 技术面分析:各项技术指标
    K线:
    在这里插入图片描述
    阳线:代表股票在今天一天内是涨的,低开高走
    阴线:代表股票在今天一天内是跌的,高开低走
    MA(均线):前若干天收盘的平均值
    KDJ(随机指标)
    MACD(指数平滑移动平均线)

金融量化投资

量化投资:利用计算机技术并且采用一定的数学模型去实践投资理念,实现投资策略的过程。
量化投资的优势

  • 避免主观情绪、人性弱点和认知偏差
  • 选择更加客观 能同时包括多角度的观察和多层次的模型
  • 即使跟踪市场变化,不断发现新的统计模型,寻找交易机会
  • 在决定投资策略后,能通过回测验证其效果

量化策略
量化策略:通过一套固定的逻辑来分析、判断和决策,自动化地进行股票交易。
在这里插入图片描述
策略的周期:

  • 产生想法、学习知识
  • 实现策略:Python
  • 检验策略:回测/模拟交易
  • 实盘交易
  • 优化策略/放弃策略

量化投资的方式:
自己编写:Numpy+pandas+Matplotlib
在线平台:聚宽、优矿、米筐、Quantopian
开源框架:RQAlpha、QUANTAXIS

简单策略编写

1、双均线策略

 from jqdata import *  def initialize(context):  set_benchmark('000300.XSHG') set_option('use_real_price',True)   set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, close_today_commission=0, min_commission=5), type='stock') g.security = ['601318.XSHG'] g.p1 = 5 g.p2 = 30 def handle_data(context, data): for stock in g.security:   df = attribute_history(stock, g.p2) ma10 = df['close'].mean() ma5 = df['close'][-5].mean() if ma10 > ma5 and stock in context.portfolio.positions :  order_target(stock,0) if ma10 < ma5 and stock not in context.portfolio.positions:  order(stock,context.portfolio.available_cash * 0.8) 

2、小市值策略

 from jqdata import *  def initialize(context):  set_benchmark('000002.XSHG')  set_option('use_real_price', True)    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock') g.security = get_index_stocks('000002.XSHG') g.q = query(valuation,indicator).filter(valuation.code.in_(g.security)) g.N = 20 run_monthly(handle, 1) def handle(context): df = get_fundamentals(g.q)[['code','market_cap','roe']]   df['market_cap'] = (df['market_cap'] - df['market_cap'].min()) / (df['market_cap'].max() - df['market_cap'].min()) df['roe'] = (df['market_cap'] - df['market_cap'].min()) / (df['market_cap'].max() - df['market_cap'].min()) df['score'] = df['roe'] - df['market_cap'] df = df.sort_values('score').iloc[-g.N:,:] to_hold = list(df['code']) to_hold = filter_paused_stock(to_hold)  for stock in context.portfolio.positions: if stock not in to_hold: order_target(stock,0) tobuy = [stock for stock in to_hold if stock not in context.portfolio.positions] if len(tobuy) > 0 : cash_per_stock = context.portfolio.available_cash / len(tobuy) for stock in tobuy : order_value(stock,cash_per_stock)  def filter_paused_stock(stock_list): current_data = get_current_data() return [stock for stock in stock_list if not current_data[stock].paused] 

3、均线回归策略

 from jqdata import *  def initialize(context):  set_benchmark('000300.XSHG')  set_option('use_real_price', True)   set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock') g.security = get_index_stocks('000300.XSHG') g.ma_days = 30  g.stock_num = 10  g.stock_num_t = 20   run_monthly(handle,1)  def handle(context): sr = pd.Series(index = g.security) for stock in sr.index : ma = attribute_history(stock,g.ma_days)['close'].mean() p = get_current_data()[stock].day_open ratio = (ma - p) / ma  sr[stock] = ratio  to_hold = sr.nlargest(g.stock_num.t).index.values to_hold = skip_paused_stock(to_hold) to_hold = to_hold[-g.stock_num:]   for stock in context.portfolio.positions: if stock not in to_hold: order(stock,0)  to_buy = [stock for stock in to_hold if stock not in context.portfolio.positions] if len(to_buy) > 0: cash = context.portfolio.available_cash cash_per_stock = cash / len(to_buy) for stock in to_buy: order_value(stock,cash_per_stock)  def skip_paused_stock(tobuy_list): current_data = get_current_data() return [stock for stock in tobuy_list if not current_data[stock].paused] 

4、布林带策略
布林线:由三条轨道线组成,其中上下两条线为价格的压力线、支撑线,在两条线之间为均线
计算公式:
中间线=20日均线
up线=20日均线+N×SD(20日收盘价标准差)
down线=20日均线-N×SD(20日收盘价标准差)
如果涨到压力线,会跌,卖出
如果跌到支撑线,会涨,买入

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注