| | |
| | | # import decimal |
| | | import datetime |
| | | import json |
| | | import time |
| | | |
| | | import constant |
| | | from log_module.log import logger_common |
| | | from log_module import async_log_util |
| | | from log_module.log import logger_common, logger_Overall_market_strength_score |
| | | # import time |
| | | # 引入掘金API |
| | | # from gm.api import * |
| | | from strategy import basic_methods |
| | | from strategy import basic_methods, kpl_api |
| | | from strategy import data_cache |
| | | |
| | | # import account_management |
| | | from strategy import order_methods |
| | | from strategy.all_K_line import k_line_history |
| | | from utils import tool, juejin_api |
| | | |
| | | # 获取logger实例 |
| | |
| | | logger.info(f"加属性的指数k线写完了!{tool.get_now_time_str()}") |
| | | |
| | | |
| | | # 获取实时大盘行情情绪综合强度 [分数] 函数 并 计算当日计划持仓数量 |
| | | def get_real_time_market_strong(): |
| | | while True: |
| | | try: |
| | | if data_cache.position_automatic_management_switch is True: |
| | | now_time = tool.get_now_time_str() |
| | | if data_cache.L1_DATA_START_TIME < now_time < data_cache.CLOSING_TIME: |
| | | # 获取大盘综合强度分数 |
| | | data_cache.real_time_market_strong = kpl_api.get_market_strong() |
| | | # 获取市场情绪字典【完整】,并整理 |
| | | data_cache.real_time_market_sentiment_dirt = kpl_api.changeStatistics() |
| | | date_today = data_cache.real_time_market_sentiment_dirt.get(['Day'], None) |
| | | significant_drawdown = data_cache.real_time_market_sentiment_dirt.get(['df_num'], None) |
| | | sentiment_indicators = data_cache.real_time_market_sentiment_dirt.get(['ztjs'], None) |
| | | limit_up_amount = data_cache.real_time_market_sentiment_dirt.get(['ztjs'], None) |
| | | connecting_board_height = data_cache.real_time_market_sentiment_dirt.get(['lbgd'], None) |
| | | # 获取市场情绪-涨跌统计 |
| | | data_cache.rise_and_fall_statistics_dirt = kpl_api.getMarketFelling() |
| | | limit_up_numbers = data_cache.rise_and_fall_statistics_dirt.get(['ZT', None]) |
| | | actual_limit_up_numbers = data_cache.rise_and_fall_statistics_dirt.get(['SJZT', None]) |
| | | ST_limit_up_numbers = data_cache.rise_and_fall_statistics_dirt.get(['STZT', None]) |
| | | limit_down_numbers = data_cache.rise_and_fall_statistics_dirt.get(['DT', None]) |
| | | actual_limit_down_numbers = data_cache.rise_and_fall_statistics_dirt.get(['SJDT', None]) |
| | | ST_limit_down_numbers = data_cache.rise_and_fall_statistics_dirt.get(['STDT', None]) |
| | | |
| | | rise_numbers = data_cache.rise_and_fall_statistics_dirt.get(['SZJS', None]) |
| | | fall_numbers = data_cache.rise_and_fall_statistics_dirt.get(['XDJS', None]) |
| | | |
| | | # 该logger.info的的日志不再需要打印,后续将转入到GUI客户端上直接显示,该数据的打印交由下方的打印机制异步执行单独存储,以便后续可视化呈现后进行更高效的数据分析 |
| | | # logger.info(f"大盘行情情绪综合强度 [分数]==={data_cache.real_time_market_strong}分") |
| | | if data_cache.MORN_MARKET_CLOSING_TIME < now_time < data_cache.NOON_MARKET_OPENING_TIME: |
| | | pass |
| | | logger.info(f"午间休市时间内 不打印大盘综合强度分数") |
| | | else: |
| | | # 大盘综合强度分数 的 异步日志 |
| | | # logger_Overall_market_strength_score.info(data_cache.real_time_market_strong) |
| | | async_log_util.info(logger_Overall_market_strength_score, f"{data_cache.real_time_market_strong}") |
| | | logger.info(f"日期:{date_today},情绪指标:{sentiment_indicators}分,大幅回撤:{significant_drawdown},涨停家数:{limit_up_amount},连板高度:{connecting_board_height}") |
| | | logger.info(f"上涨家数:{rise_numbers}分,下跌家数:{fall_numbers},实际涨停家数:{actual_limit_up_numbers},实际跌停家数:{actual_limit_down_numbers}") |
| | | logger.info(f"涨跌统计字典{data_cache.rise_and_fall_statistics_dirt}") |
| | | |
| | | usefulMoney = data_cache.account_finance_dict[0].get('usefulMoney', 0) |
| | | logger.info(f"账户可用资金==={usefulMoney}元") |
| | | # 低迷情绪比例 |
| | | low_emotion_mood_ratio = 1 |
| | | # 33分是个两级分化阶梯不好,目前不好拿捏,暂时不用 |
| | | # if data_cache.real_time_market_strong <= 33: |
| | | if data_cache.real_time_market_strong < 30: |
| | | # 如果大盘综合强度分数小于30,将低迷情绪分数比例设置为0.01,可用资金缩小一百倍 |
| | | low_emotion_mood_ratio = 0.01 |
| | | if data_cache.real_time_market_strong <= 10: |
| | | low_emotion_mood_ratio = 0 |
| | | logger.info(f"极端低迷情绪比例===={low_emotion_mood_ratio * 100}%") |
| | | |
| | | data_cache.index_trend_expectation_score = index_trend_expectation() |
| | | logger.info(f"大盘指数情绪预期分数==={data_cache.index_trend_expectation_score}分") |
| | | # # 目前大盘指数情绪预期分数 尚不科学 强制设置为初始0值 |
| | | # index_trend_expectation_score = 0 |
| | | |
| | | # 获取计算今天新增的持仓数量 |
| | | addition_position_number = len(data_cache.addition_position_symbols_set) |
| | | # 定义一个今日的剩余新增持仓数量的变量 |
| | | Unfinished_opening_plan_number = 3 - addition_position_number |
| | | logger.info(f"今日的剩余新增持仓数量==={Unfinished_opening_plan_number}") |
| | | if Unfinished_opening_plan_number != 0: |
| | | # 如果GUI看盘上没有手动设置具体的下单金额,就按照评分策略的金额下单,否则就按照GUI设置的金额下单。 |
| | | if data_cache.BUY_MONEY_PER_CODE < 0: |
| | | # 根据账户可用金额 计算今日计划下单金额 |
| | | # 账户可用金额 默认乘以0.9,永远留一点钱,一方面也冗余一些计算误差 |
| | | # ((大盘综合强度分数 + 大盘指数情绪预期分数) * 0.01) * (账户可用金额 * 0.9 * 极端低迷情绪比例 / 今日最大新增持仓票数) |
| | | # data_cache.today_planned_order_amount = ((data_cache.real_time_market_strong + data_cache.index_trend_expectation_score) * 0.01) * ( |
| | | # usefulMoney * 0.9 * low_emotion_mood_ratio / Unfinished_opening_plan_number) |
| | | data_cache.today_planned_order_amount = (usefulMoney * 0.95 * low_emotion_mood_ratio / Unfinished_opening_plan_number) |
| | | logger.info(f"采用开仓策略计算方式=》今日计划下单金额:{data_cache.today_planned_order_amount},") |
| | | else: |
| | | data_cache.today_planned_order_amount = data_cache.BUY_MONEY_PER_CODE |
| | | logger.info(f"采用GUI设置方式=》今日计划下单金额:{data_cache.today_planned_order_amount}") |
| | | |
| | | except Exception as error: |
| | | logger.error(f"获取实时大盘行情情绪综合强度[分数] 函数报错: {error}") |
| | | finally: |
| | | time.sleep(3) |
| | | |
| | | |
| | | if __name__ == '__main__': |
| | | market_strong = kpl_api.get_market_strong() |
| | | print(f"{market_strong}") |
| | | # all_index_K_line_dict = get_index_K_line() |
| | | |
| | | # all_index_k_line_dict_write() |
| | | # print(f"指数K线{data_cache.all_index_k_line_property_dict}") |
| | | all_index_k_line_dict_write() |
| | | # all_index_k_line_dict_write() |