网格交易策略辅助记录脚本 本脚本只是本人个人针对 ETF拯救世界 在以下地方提到过的闲钱网格的探索测试以及记录,完全是本人的个人行为
策略来源:
数据来源:
计算方法:
- 你可以理解成 E大 提出了算法,本人用自己的理解把算法实现了一遍,同样的算法不同的实现,可能存在不同的边界判定,运行效率,甚至出现逻辑错误,本人尽最大努力追求易用性和 bug-free
- 测试时用每日收盘净值净值测试,数据源来自上面的集思录分享,假设最多每日只能操作一次
- 网格策略只适合波动市,单边下跌或者单边上涨不适用,如下第一网时不留足安全边际,很可能非常长一段时间收不回网(下的位置不够低,导致几年都回不到这个位置)
- 本项目还在开发中,具体进度视本人时间安排而定
- 自定义网格策略
- 用历史数据进行策略收益计算
- 对自定义网格策略下一次入网,出网价格,当前收益率等值计算,程序自动保存至 excel,可也手动编辑 excel 修改记录后程序读入
- 条件A: 低于历史估值均值 20% (每个人计算估值的方法应该是不太一样的,作为小韭菜也没有获取数据的来源,你可以对接自己的数据来源, 这里作为测试先写死一个净值开始)
- 条件B: 还没想好
- 第一网: 达到条件(A或B或者其他,自己定), 入 1 网
- 幅度
- a: 3%
- b: 5%
- 下跌: 每达到最近次交易价格的幅度, 每网金额增加 20%,入一网
- 上涨: 每达到最近次交易价格的幅度, 每网金额减小 20%, 出网
- 5a: 将低于当前价格买入的份额全部出掉
- 5b: 买入份额/买入次数 得到一个平均每次买入份数,出掉低于当前价格的买入次数 * 平均每次买入份数
n = 入网次数-出网次数 (n = 0)
- 第一网: 达到条件, 入 1 网 (n = 1)
- 幅度
- a: 3%
- b: 5%
- 下跌: 每达到最近次交易价格的幅度, 买入 money 金额,money = max((floor(n / 3) + 1) * 每网钱数, 你能接受的一网的最大买入的钱数), 总买入次数 += floor(money / 每网初始价格)
- 上涨: 每达到最近次交易价格的幅度, 出网
- 5a: 将低于当前价格买入的份额全部出掉
- 5b: 买入份额/买入次数 得到一个平均每次买入份数,出掉低于当前价格的买入次数 * 平均每次买入份数
# python >= 3.5.2
pip3 install NetTrade
from NetTrade.Notes.RealNotes import RealNotes
from NetTrade.Strategy.NetstrategyA import NetstrategyA
if __name__ == "__main__":
# 以华宝油气为例, 传入华宝油气代码,第一次调用 buy, 会在当前目录下生成同名 xlsx 文件,用于记录和下次读取计算
# 目前只实现了策略A基本版
# range_percent: 选填,网格幅度,默认 3%
# growth_rate: 选填,每下一网增加金额,默认 20%, 这里传的是 30%
r = RealNotes("sz162411", NetstrategyA, range_percent=0.03, growth_rate=0.3)
# 写入购买记录,净值为 0.505, 份额为4000份
r.buy(0.505, 4000)
r.calc_next_val() # 计算并打印下次需要购买和卖出的份额与净值
# 下次买入价格: 0.49 买入份额: 5400 买入金额: 2646.0
# 下次卖出价格: 0.521 卖出份额: 4000.0 卖出金额: 2084.0
# 写入购买记录,净值为 0.49, 份额为 5400
# r.buy(0.49, 5400)
# 写入购买记录,净值为 0.475, 份额为 7300
# r.buy(0.475, 7300)
# 写入卖出记录,净值为 0.521,份额为 4000
# r.sell(0.521, 4000)
# 计算下一网的买入和卖出的净值和份额,并打印
# r.calc_next_val()
# 计算网格操作至今各种数据
r.pr_status()
from NetTrade.HistoryNotes.HistoryNotes import HistoryNotes
from NetTrade.Strategy.NetstrategyA import NetstrategyA
if __name__ == "__main__":
# 目前只实现了策略A: NetstrategyA
# 目前只有来自集思录的数据源分享: jsl
# 测试代码华宝油气: sz162411
# 开始入第一网的净值: 0.6
# 第一网的价格为 2000 (会根据100的整数倍调整)
# 2017 表示从2017年开始(闭区间)
# 2019 表示到2019奶奶结束(闭区间)
# range_percent 下跌/上涨幅度 这里是 3%
# growth_rate 每下一网价格上涨幅度 这里是 30%
HistoryNotes(NetstrategyA, "jsl", "sz162411", 0.6, 2000, 2017, 2019, range_percent=0.03, growth_rate=0.3)
from NetTrade.Notes.RealNotes import RealNotes
from NetTrade.Strategy.NetstrategyA import NetstrategyA
def note():
r = RealNotes("sz162411", NetstrategyA, range_percent=0.03, growth_rate=0.3)
r.buy(0.505, 4000)
r.buy(0.49, 5400)
r.buy(0.475, 7300)
r.calc_curr_val(0.505)
# 当前净值涨幅过大: 需要加大卖出,价格: 0.505 卖出份额: 12700.0 卖出金额: 6413.5
r.sell(0.505, 12700)
r.calc_curr_val(0.455)
# 当前净值跌幅过大,需要加大买入, 价格: 0.455 买入份额: 11100 买入金额: 5050.5
# r.calc_next_val()
# r.pr_status()
# r.calc_curr_val(0.505)
if __name__ == "__main__":
note()
- 待开发
r.calc_next_val()
# 下次买入价格: 0.461 买入份额: 9800 买入金额: 4517.8
# 下次卖出价格: 0.49 卖出份额: 7300.0 卖出金额: 3577.0
r.pr_status()
# 操作历史:
# 净值 份额 金额 操作 日期 当前动用过本金 当前收益率
# 0.505 4000.0 2020.0 买入 2019-03-06 16:39:09 2020.0 0.00%
# 0.49 5400.0 2646.0 买入 2019-03-06 16:39:09 4666.0 -1.29%
# 0.475 7300.0 3467.5 买入 2019-03-06 16:39:09 8133.5 -2.47%
# 0.505 12700.0 6413.5 卖出 2019-03-06 16:40:33 8133.5 3.69%
#
# 当前投入的钱数 (还未卖出的钱数的和): 2020.0
# 当前持有份额: 4000.0
# 投入部分当前市值: 2020.0
# 总的使用过的本金(当前投入的本金 + 卖出的本金): 8133.5
# 总的当前的资产(投入部分当前市值 + 卖出部分获得的金额): 8433.5
# 当前总收益: 300.00
# 当前收益率: 3.69%