SMA移动平均算法

主旨思想:

金叉主要指股票行情指标的短期线向上穿越长期线的交叉,反之当行情指标的短期线向下穿越长期线的交叉,称之为死叉。

实现方法

当x日的移动平均线上升并且交叉穿过Y日的移动平均线的时候买入

当x日的移动平均线下降并且交叉穿过Y日的移动平均线的时候卖出

python实现

import psycopg2
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

def query_sql(sql):
    conn = psycopg2.connect(database='quant', host='10.211.55.20', port='5432', user='kiwi',password='xx')
    conn.set_client_encoding('utf-8')
    cursor = conn.cursor()
    cursor.execute(sql)
    rows = cursor.fetchall()
    return rows

sql = """
select trade_date,sec_code,open_price,curr_price,high_price,low_price,trade_vol from sec_quotation_his where sec_code='600030'
and trade_date >= '2020-07-01'
and trade_date < '2020-11-01'
order by 1;
"""
rows = query_sql(sql)
df = pd.DataFrame(rows,columns=['trade_date','sec_code','open_price','curr_price','high_price','low_price','trade_vol'])
# 5日平均
df['SMA5'] = df['curr_price'].rolling(window=5).mean()
# 10日平均
df['SMA10'] = df['curr_price'].rolling(window=10).mean()
# 20日平均
df['SMA20'] = df['curr_price'].rolling(window=20).mean()
#设定索引为交易日
#df.set_index('trade_date',inplace=True)
# 基于索引进行查询
#df.loc['2020-10-09']
# 画图
#df[['curr_price','SMA5','SMA10','SMA20']].plot(figsize = (18,6),grid = True)

# 计算回归
df['yes_price'] = df['curr_price'].shift(1)
# 连续收益率
df['return'] = np.log((df['curr_price']/df['yes_price']).astype('float'))
# 离散收益率
df['return_dis'] = df['curr_price']/df['yes_price'] - 1
df['return_dis2'] = df['curr_price'].astype('float').pct_change()
# 删除NA数据
df = df.dropna(axis=0,how='any')

# 计算金叉
df['position'] = np.where(df['SMA5'] > df['SMA20'],1,-1)
df['position'].plot(figsize = (18,6),grid = True)
print(df[['trade_date','position']])
#df['return'].cumsum().apply(np.exp).plot(figsize = (18,6),grid = True)
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值