金融
什么是金融?
金融:就是对现有资源进行重新整合之后,实现价值和利润的等效流通。
通俗来说,金融就是你有钱,但对创业没有想法,将钱融给需要做大做强的公司,等到上市,市值翻倍,从中获利。
金融工具:在金融市场中可交易的金融资产(股票、期货、黄金、外汇、基金等),就是将钱融给别人的方式。
- 期货相当于现货,两人对货物的未来价格趋势的一种约定。
- 黄金稳定,当需要保值的时候一种投资。
- 外汇:跟汇率有关,波动太小,一般大公司操作
- 基金:基金经理,个人将钱交给基金经理,基金公司会吸纳各个散户的钱,基金公司通过各种投资,赚钱后分给投资者,风险小,收益不如股票
- 股票: 股份公司发给出资人的一种凭证,股票的持有者就是股份公司的股东。股票的作用是出资证明、证明股东身份、对公司经营发表意见。通过公司分红以及交易(卖掉一部分股份套现)获利。
上市/IPO:企业通过证券交易所公开向社会增发股票以募集资金。公司去证监会申请上市,证监会审核以规避所有风险,在证券交易所公开。
股票的分类:
- 股票按业绩分类:
蓝筹股:资本雄厚、信誉优良的公司的股票
绩优股:业绩优良的公司的股票
ST股:特别处理股票,连续两年亏损或者每股净资产低于股票面值 - 股票按上市地区分类:
A股:中国大陆上市(上海或者深圳证券交易所),人民币认购买卖(T+1,涨跌幅10%),股票波动不能大于10%,为了保护股民,有涨停跌停之说;T就代表交割日,今天买出去,明天才可以卖出去
B股:中国大陆上市,外币认购买卖(T+1,T+3),T+3交收日,三天之后到账。
H股:中国香港上市(T+0,涨跌幅不设限制)
N股:美国纽约上市
S股:新加坡上市
股票市场的构成
- 上市公司
- 投资者
- 证监会(决定能否上市)
- 证券业协会
- 交易所:处理各种各样的信息
- 证券中介机构:不向小股民小散户发售股票,证券交易所需要有席位,证券中介机构帮小股民代买股票,赚取席位费
- 交易所:
上海证券交易所:只有一个主板(沪指)
指数反映了大盘整体的趋势,整个市场假如有一万亿,七八千亿都在涨,通过趋势分析,大盘总体在涨。
深圳证券交易所:
主板:大型成熟企业(深成指)
中小板:经营规模较小
创业板:尚处于成长期的创业企业
影响股价的因素:公司自身因素、行业因素(最近人工智能发展的不错,很多公司会涨)、市场因素(是影响股价的最根本的因素)、心理因素、经济因素(国家的政策,利率 )、政治因素
股票买卖(A股)
委托买卖股票:个人不能直接买卖,需要在券商开户,进行委托购买
股票交易日:周一到周五(非法定节假日)
交易时间:
- 9:00-9:15 开门但不做竞价
- 9:15-9:25 开盘集合竞价,让成交量最大
- 9:30-11:30 前市,连续竞价时间
- 13:00-15:00 后市,连续竞价
- 14:58-15:00 深交所收盘集合竞价时间
金融分析:
- 基本面分析
宏观经济面分析:国家的财政政策、货币政策
行业分析
公司分析:财务数据、业绩报告等 - 技术面分析:各项技术指标
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日收盘价标准差)
如果涨到压力线,会跌,卖出
如果跌到支撑线,会涨,买入