Cathon / NetTrade

ETF拯救世界提到过的闲钱网格策略探索

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NetTrade

网格交易策略辅助记录脚本 本脚本只是本人个人针对 ETF拯救世界 在以下地方提到过的闲钱网格的探索测试以及记录,完全是本人的个人行为

策略来源:

数据来源:

计算方法:

注意

  • 你可以理解成 E大 提出了算法,本人用自己的理解把算法实现了一遍,同样的算法不同的实现,可能存在不同的边界判定,运行效率,甚至出现逻辑错误,本人尽最大努力追求易用性和 bug-free
  • 测试时用每日收盘净值净值测试,数据源来自上面的集思录分享,假设最多每日只能操作一次
  • 网格策略只适合波动市,单边下跌或者单边上涨不适用,如下第一网时不留足安全边际,很可能非常长一段时间收不回网(下的位置不够低,导致几年都回不到这个位置)
  • 本项目还在开发中,具体进度视本人时间安排而定

功能

  • 自定义网格策略
  • 用历史数据进行策略收益计算
  • 对自定义网格策略下一次入网,出网价格,当前收益率等值计算,程序自动保存至 excel,可也手动编辑 excel 修改记录后程序读入

策略概述

  • 条件A: 低于历史估值均值 20% (每个人计算估值的方法应该是不太一样的,作为小韭菜也没有获取数据的来源,你可以对接自己的数据来源, 这里作为测试先写死一个净值开始)
  • 条件B: 还没想好

策略A

  1. 第一网: 达到条件(A或B或者其他,自己定), 入 1 网
  2. 幅度
    • a: 3%
    • b: 5%
  3. 下跌: 每达到最近次交易价格的幅度, 每网金额增加 20%,入一网
  4. 上涨: 每达到最近次交易价格的幅度, 每网金额减小 20%, 出网
    • 5a: 将低于当前价格买入的份额全部出掉
    • 5b: 买入份额/买入次数 得到一个平均每次买入份数,出掉低于当前价格的买入次数 * 平均每次买入份数

策略B

n = 入网次数-出网次数 (n = 0)

  1. 第一网: 达到条件, 入 1 网 (n = 1)
  2. 幅度
    • a: 3%
    • b: 5%
  3. 下跌: 每达到最近次交易价格的幅度, 买入 money 金额,money = max((floor(n / 3) + 1) * 每网钱数, 你能接受的一网的最大买入的钱数), 总买入次数 += floor(money / 每网初始价格)
  4. 上涨: 每达到最近次交易价格的幅度, 出网
    • 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% 

About

ETF拯救世界提到过的闲钱网格策略探索

License:MIT License


Languages

Language:Python 100.0%