1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Python示例代码之按指定算法判断买卖点计算股票收益

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

时间:2024-06-04 12:51:45

相关推荐

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

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

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

# Author Zhanhaiimport tushare as tsimport datetime as dtimport jsonimport osimport 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 == "-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("-05-06", "-08-30"))

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。