炒股票的小伙伴们一般都有一个神奇的愿景,总认为按照自己的方法选择股票的买卖点,就一定能赚钱,今天我用程序模拟了一把买卖点和收益的实测,结果显示,无论我使用什么买卖点判断方法,总是有些股票赚钱,有些股票赔钱。比如按20日线的价格作为买卖点、10日线、5日线,以及3日线,交易量递增法、交易量递减法,等等。

如下为一种买卖点的判断示例,以及验证在某时间段内使用该方法的收益,有兴趣的小伙伴可以参考,欢迎大家有好的算法找我一起研究!

# Author Zhanhaiimport tushare as ts
import datetime as dt
import json
import os
import timeclass StockAnylize():def __init__(self, stock_code):self.stock_code = stock_codedef _get_today(self):today = dt.datetime.today()return str(today.strftime("%Y-%m-%d"))def get_start_from_end(self, endday, day_duration):edate  = dt.datetime.strptime(endday, '%Y-%m-%d')delta = dt.timedelta(days = day_duration)sdate  = edate - deltareturn str(sdate.strftime("%Y-%m-%d"))def get_suggests(self, date_day):return "keep"def down_load_data(self, date_day_start, date_day_end):date_day_start = self.get_start_from_end(date_day_start, 20)stock_data = ts.get_hist_data(self.stock_code, start = date_day_start, end = date_day_end)if not stock_data is None:stock_data.to_json("d:\\stock/single_data/" + self.stock_code + ".json", orient = "index", force_ascii = False)def get_date_day_start(self, date_day_start, stock_info):if date_day_start in stock_info:return date_day_startelse:for i in range(1, 8):early_day = self.get_start_from_end(date_day_start, - i)if early_day in stock_info:return early_dayreturn Nonedef get_days_duration_from_start_to_end(self, date_day_start, date_day_end):if date_day_start is None:return 0if date_day_end is None:return 0date1 = time.strptime(date_day_start, "%Y-%m-%d")date2 = time.strptime(date_day_end, "%Y-%m-%d")date1 = dt.datetime(date1[0],date1[1],date1[2])date2 = dt.datetime(date2[0],date2[1],date2[2])duration = date2 - date1return duration.daysdef get_early_day(self, cur_day, stock_info):for i in range(1, 20):early_day = self.get_start_from_end(cur_day, i)if early_day in stock_info:breakif not early_day in stock_info:return Nonereturn early_daydef get_next_day(self, cur_day, stock_info):for i in range(1, 20):early_day = self.get_start_from_end(cur_day, -i)if early_day in stock_info:breakif not early_day in stock_info:return Nonereturn early_daydef is_day_can_buy(self, judge_day, stock_info):if self.is_day_can_sale(judge_day, stock_info):return Falsecur_close_price = stock_info[judge_day].get("close")cur_open_price = stock_info[judge_day].get("open")ma_5_price = stock_info[judge_day].get("ma5")if cur_close_price > cur_open_price:if ((cur_close_price + cur_open_price) / 2) > ma_5_price:return Trueelse:return Falsereturn Falsedef get_price(self, day, stock_info):open_price = stock_info[day].get("open")close_price = stock_info[day].get("close")if open_price > close_price:return (close_price + open_price) / 2else:return close_pricedef is_day_can_sale(self, judge_day, stock_info):if judge_day == "2019-09-17":print(stock_info[judge_day])cur_price = self.get_price(judge_day, stock_info)ma5_price = stock_info[judge_day].get("ma20")#print("cur_price", cur_price, " ma5_price", ma5_price)if cur_price < ma5_price:return Truereturn Falsedef get_buy_date(self, date_day_start, date_day_end, stock_info):date_day_start = self.get_date_day_start(date_day_start, stock_info)duration = self.get_days_duration_from_start_to_end(date_day_start, date_day_end)if duration < 3:return Nonefor i in range(duration):# 卖了不要马上买,至少要晚3天后再买judge_day = self.get_start_from_end(date_day_start, -i - 3)if not judge_day in stock_info:continueif self.is_day_can_buy(judge_day, stock_info):return judge_dayreturn Nonedef get_sale_date(self, buy_date, date_day_end, stock_info):date_day_start = self.get_date_day_start(buy_date, stock_info)duration = self.get_days_duration_from_start_to_end(date_day_start, date_day_end)for i in range(duration):# -2的原因是买了不能马上卖,必须至少隔一天judge_day = self.get_start_from_end(date_day_start, -2 - i)if not judge_day in stock_info:continueif self.is_day_can_sale(judge_day, stock_info):return judge_dayreturn Nonedef get_duration_income(self, buy_date, sale_date, stock_info):buy_action_day = self.get_next_day(buy_date, stock_info)sale_action_day = self.get_next_day(sale_date, stock_info)if sale_action_day is None:sale_action_day = sale_datebuy_price = stock_info[buy_action_day].get("open")sale_price = stock_info[sale_action_day].get("open")print("buy_action_day:", buy_action_day, " sale_action_day:", sale_action_day, " buy_price", buy_price, " sale_price", sale_price)return sale_price - buy_pricedef get_detail_transaction_data(self, detail_transaction_data, date_day_start, date_day_end, stock_info):buy_date = self.get_buy_date(date_day_start, date_day_end, stock_info)if not buy_date is None:sale_date = self.get_sale_date(buy_date, date_day_end, stock_info)if not sale_date is None:income = self.get_duration_income(buy_date, sale_date, stock_info)detail_transaction_data[buy_date] = {"buy_date_flag":buy_date, "sale_date_flag":sale_date, "income":income}self.get_detail_transaction_data(detail_transaction_data, self.get_start_from_end(sale_date, -1), date_day_end, stock_info)def get_income(self, detail_transaction_data):total_income = 0for (k, v) in  detail_transaction_data.items():total_income = total_income + v.get("income")return total_incomedef caculate_income(self, date_day_start, date_day_end):self.down_load_data(date_day_start, date_day_end)detail_transaction_data = {}stock_file_name = stock_base_folder + "/single_data/" + self.stock_code + ".json"stock_info = json.load(open(stock_file_name))self.get_detail_transaction_data(detail_transaction_data, date_day_start, date_day_end, stock_info)income = self.get_income(detail_transaction_data)return incomeif __name__ == "__main__":stock_base_folder = "D:\\stock"stock_list_file_name = stock_base_folder + '/stock_list.json'print(StockAnylize("600249").caculate_income("2019-05-06", "2019-08-30"))

如果你喜欢这篇文章,别忘了点赞和评论哦!

Python示例代码之按指定算法判断买卖点计算股票收益相关推荐

  1. python软件代码示例-python 示例代码1

    第一章 python基础一 ​在此不再赘述为什么学习python这门编程,网上搜索一箩筐.我在此仅说一句python的好,用了你就会爱上它. 本python示例代码1000+带你由浅入深的了解pyth ...

  2. python代码示例-python 示例代码1

    第一章 python基础一 ​在此不再赘述为什么学习python这门编程,网上搜索一箩筐.我在此仅说一句python的好,用了你就会爱上它. 本python示例代码1000+带你由浅入深的了解pyth ...

  3. 百度AI开放平台人体分析_人像分割的Python示例代码

    首发于:https://www.jwldata.com/archives/48.html 人像分割有些API需要用到opencv处理返回结果. https://pypi.org/project/ope ...

  4. python不同时间周期k线_请问期货不同时间级别的k线呈现相反形态怎么判断买卖点?...

    题主的意思我用三角形态说说看. 日线级别上三角形态收敛,5分钟级别上K线是三角形态突破.这时候你就该怎么判断买卖点? 其实这个问题,就是个大小周期共振的问题. 我们一般以大周期的形态作为买卖方向的确定 ...

  5. 通通锁接口调用<Response [400]>报错及python示例代码

    通通锁官方文档:https://open.ttlock.com/document 1.获取访问令牌示例代码: import datetime as dt import http.client impo ...

  6. python股票数据接口实战:根据不同均线的关系判断买卖点

    同是5日线,但因为计算公式不一样,这两条线不可能完全重合,而我们恰好可以利用这两条均线的不同含义,来找到合适的买卖点! 这次用到的均线分别是WMA(加权移动均线),DEMA(双指数移动均线),KAMA ...

  7. python快速排序代码_Python实现快速排序算法

    原标题:Python实现快速排序算法 Python实现快速排序算法 快速排序算法是一种基于交换的高效的排序算法,由C.R.A.Hoare于1962年提出,是一种划分交换排序.它采用了一种分治的策略,通 ...

  8. 软件授权码方案(附Python示例代码)

    思路: 软件安装后,运行软件时,通过电脑机器码的唯一性实现授权码的唯一性.(机器码:由cpu序列号.硬盘序列号.mac地址.主板序列号组成的字符串截取部分字符) 方案: 1.运行软件,检测注册文件,若 ...

  9. Python示例代码之邮件发送

    定时邮件发送或告警邮件实时发送是工作中常用的功能之一,该功能需要调用发送邮件模块,如下为亲测可用的Python编写的邮件发送代码,该代码使用qq邮箱可正常发送邮件,使用163邮箱时提示554错误码邮件 ...

最新文章

  1. 手工清理C:\windows\alg.exe病毒
  2. Lasso回归的坐标下降法推导
  3. arm linux内核调试,kgdb在ARM开发板上调试kernel成功
  4. 2021-03-02 英文写作中的“但是”
  5. Base64算法的编程使用
  6. Redis签到功能设计与实现
  7. 中国程序员生存现状?
  8. 中兴高调秀Axon 10 Pro 5G版20倍变焦样张:号称媲美万元广角镜头
  9. 如何选择适合自己的相机?
  10. java 邮件内嵌图片_(二)JavaMail创建包含内嵌图片的邮件
  11. ASCII码值转化十六进制,十进制数;十六进制字符值转十进制,ASCII码值;
  12. php获取当前网址附带(http://或者https//)
  13. 2021亚洲最佳职场中国大陆区企业公布:工业富联、特斯拉等上榜;黑人牙膏将更名为好来 | 美通社头条...
  14. NetBeans的下载与安装
  15. 如何批量在图片上加文字?
  16. vue.esm.js:632 [Vue warn]: Unknown custom element: <router-link> - did you register the component co
  17. 华光昱能光知识-细说MPO光纤跳线那些事
  18. day23 三升序列
  19. clojure 开发工具_Clojure Web开发–最新技术–第2部分
  20. 系统突然变慢的处理方案

热门文章

  1. QuizCardGame
  2. 二代身份证掉了,无需登报声明
  3. 109_《Delphi4核心编程技术》
  4. 如何提高linux ssh连接速度
  5. ioctl() FIONREAD 检测socket是否有数据可读
  6. ZYS的黄金——解题报告
  7. Appium实现手机自动化测试案例
  8. c语言植入手机系统,一种手机课堂C语言编程系统的制作方法
  9. WEB前端大作业-个人资料展示响应式网页模板(HTML JS CSS)
  10. Latex编译器WinEdt取消自动换行