chatGPT:趋势跟踪策略的量化交易程序可能会因语言和框架而异,下面是一个简单的Python代码示例,用于演示如何通过量化编程来实现趋势跟踪策略。
这段代码是一个简单的策略实现,它读取股票数据并计算移动平均线,然后遍历每天的数据并根据短期移动平均线上穿长期移动平均线进行买入,短期移动平均线下穿长期移动平均线进行卖出。
ma20_ma60.py
# coding: utf-8
import os, sys
import pandas as pd
import numpy as np
import math
# 写一个趋势跟踪策略 量化交易程序
if len(sys.argv) ==2:
code = sys.argv[1]
else:
print('usage: python ma20_ma60.py stockcode ')
sys.exit(1)
if len(code) !=6:
print('stock code length: 6')
sys.exit(2)
# 读取股票数据
df = pd.read_csv(f'{code}.csv')
# 计算移动平均线
df['ma20'] = df['close'].rolling(window=20).mean()
df['ma60'] = df['close'].rolling(window=60).mean()
df = df[ df['date'] > '2020-01-01']
# 初始化持仓和资金
cost = 100000
cash = cost
stock = 0
# 假设每一次交易费为万分之五
fee = 0.0005
# 遍历每天的数据
for index, row in df.iterrows():
# 如果短期移动平均线上穿长期移动平均线,则买入
if row['ma20'] > row['ma60'] and stock == 0:
date = row['date']
price = row['close']
stock = math.floor(cash*(1-fee)/price/100)*100
cash = cash - stock*price*(1+fee)
print(f'{date}: cash= {cash:.2f} , stock= {stock} x {price:.2f}')
# 如果短期移动平均线下穿长期移动平均线,则卖出
elif row['ma20'] < row['ma60'] and stock > 0:
date = row['date']
price = row['close']
cash = cash + stock*price*(1-fee)
stock = 0
print(f'{date}: cash= {cash:.2f} , stock= {stock} x {price:.2f}')
# 计算最终收益
price = df.iloc[-1]['close']
profit = cash + stock*price - cost
print(f'profit= {profit:.2f} , stock= {stock} x {price:.2f}')
运行 python ma20_ma60.py 000776
获取股票价格信息 stock1.py
# coding: utf-8
import os, sys
import time
#import matplotlib.pyplot as plt
import pandas as pd
import tushare as ts
if len(sys.argv) ==2:
code = sys.argv[1]
else:
print('usage: python stock1.py stockcode ')
sys.exit(1)
if len(code) !=6:
print('stock code length: 6')
sys.exit(2)
# help(ts.get_k_data) 了解参数
df = ts.get_k_data(code, start='2018-01-01')
if len(df) <10:
print(" len(df) <10 ")
sys.exit(2)
df.to_csv(code+'.csv')
# 数据基本统计量
df['close'].describe().to_csv(code+'.tsv', sep='\t')