<commit_before>mport copy
import pandas as pd
import requests
from requests import Request
from six.moves.urllib.parse import urlencode
import datetime
try:
    # 实盘易操作SDK,新版SDK已解决聚宽序列化问题。
    import shipane_sdk
except:
    pass

'''选择规则组合成一个量化策略'''
def select_strategy(context):
    '''
    策略选择设置说明, 策略由以下步骤规则组合，组合而成:
    1.持仓股票的处理规则
    2.调仓条件判断规则
    3.Query选股规则 (可选，有些规则可能不需要这个)
    4.股票池过滤规则 (可选，有些规则可能不需要这个)
    5.调仓规则
    6.其它规则(如统计)

    每个步骤的规则组合为一个二维数组
    一维指定由什么规则组成，注意顺序，程序将会按顺序创建，按顺序执行。
    不同的规则组合可能存在一定的顺序关系。
    二维指定具体规则配置，由 [0.是否启用，1.描述，2.规则实现类名，3.规则传递参数(dict)]] 组成。
    注：所有规则类都必需继承自Rule类或Rule类的子类
    '''

    # 规则配置list下标描述变量。提高可读性与未来添加更多规则配置。
    g.cs_enabled, g.cs_name, g.cs_memo, g.cs_class_name, g.cs_param = range(5)

    # 默认不开仓的标志为-1
    g.not_open_days = -1
    # 0.是否启用，1.描述，2.规则实现类名，3.规则传递参数(dict)]
    period = 3  # 调仓频率
    # 配置 1.持仓股票的处理规则 (这里主要配置是否进行个股止损止盈)
    g.position_stock_config = [
        [False, '', '个股止损', Stop_loss_stocks, {
            'period': period  # 调仓频率，日
            }, ],
        [False, '', '个股止盈', Stop_profit_stocks,
            {'period': period,  # 调仓频率，日
             }]
    ]

    # 配置 2.调仓条件判断规则
    g.adjust_condition_config = [
        [True, '', '统计净值', Stat_portfolio, {}],
        [False, '', '指数最高低价比值止损', Stop_loss_by_price, {
            'index': '000001.XSHG',  # 使用的指数,默认 '000001.XSHG'
             'day_count': 160,  # 可选 取day_count天内的最高价，最低价。默认160
             'multiple': 2.2  # 可选 最高价为最低价的multiple倍时，触 发清仓
            }],
        [False, '', '指数三乌鸦止损', Stop_loss_by_3_black_crows, {
            'index': '000001.XSHG',  # 使用的指数,默认 '000001.XSHG'
             'dst_drop_minute_count': 60,  # 可选，在三乌鸦触发情况下，一天之内有多少分钟涨幅<0,则触发止损，默认60分钟
            }],

        [False, '', '28调仓择时', Index28_condition, {  # 该调仓条件可能会产生清仓行为
                'index2': '000016.XSHG',  # 大盘指数
                'index8': '399333.XSHE',  # 小盘指数
                'index_growth_rate': 0.01,  # 判定调仓的二八指数20日增幅
            }],
        [False, '', '调仓日计数器', Period_condition, {
                'period': period,  # 调仓频率,日
            }],
        [True, '', '调仓时间', Time_condition, {
                'times': [[14, 50]],
            }],
        [True, '', '当天净值管理风控', Stop_loss_by_currentday_net_worth, {
            'check_days': 1,
            'back_percent': 2,
            }],
        [False, '', '三天净值管理风控', Stop_loss_by_last3day_net_worth, {
            'check_days': 3,
            'back_percent': 5,
            }],
        [False, '', '五天净值管理风控', Stop_loss_by_last5day_net_worth, {
            'check_days': 5,
            'back_percent': 8,
            }],

    ]

    # 配置 3.Query选股规则
    g.pick_stock_by_query_config = [
        [True, '', '选取小市值', Pick_small_cap, {}],
        [True, '', '评分大于10', Pick_score_up, {}],
        [True, '', '过滤EPS', Filter_eps, {
            'eps_min': 0  # 最小EPS
            }],
        [True, '', '初选股票数量', Filter_limite, {
            'pick_stock_count': 100  # 备选股票数目
            }]
    ]

    # 配置 4.股票池过滤规则
    g.filter_stock_list_config = [
        [True, '_filter_gem_', '过滤创业板', Filter_gem, {}],
        [True, '', '过滤ST', Filter_st, {}],
        [True, '', '过滤停牌', Filter_paused_stock, {}],
        [True, '', '过滤涨停', Filter_limitup, {}],
        [True, '', '过滤跌停', Filter_limitdown, {}],
        [True, '', '股票评分', Filter_rank, {
            'rank_stock_count': 20  # 评分股数
            }],
        [True, '', '获取最终选股数', Filter_buy_count, {
            'buy_count': 3  # 最终入选股票数
            }],
    ]

    # 配置 5.调仓规则
    g.adjust_position_config = [
        [True, '', '卖出股票', Sell_stocks, {}],
        [True, '', '买入股票', Buy_stocks, {
            'buy_count': 3  # 最终买入股票数
            }]
    ]

    # 判断是否在模拟盘运行
    g.is_sim_trade = context.run_params.type == 'sim_trade'

    # 配置 6.其它规则
    g.other_config = [
        # 注意：Shipane_order 和 Shipane_sync_p 启用一个就行了。
        # 请配置正确的实盘易IP，端口，Key,client

        [False, 'Shipane_order_moni', '实盘易跟order下单', Shipane_order, {
            'host': '172.16.31.10',  # 实盘易IP
            'port': 917,  # 端口
            'key': 'zyftiger',  # 实盘易 key
            'client': 'title:htzq',  # 设置操作的券商,只有一个可以为''
            }],

        [False, '_shipane_moni_', '实盘易-对比持仓下单', Shipane_sync_p, {
            'host': '172.16.31.10',  # 实盘易IP
            'port': 917,  # 端口
            'key': 'zyftiger',  # 实盘易 key
            'client': 'title:moni',  # 设置操作的券商,只有一个可以为''
            'strong_op': True,  # 设置是否为强力买卖模式,几十万以上建议开启。小资金无所谓，关闭效率高一点点
                }],

        # 通过实盘易自动申购新股
        [False, '_Purchase_new_stocks_', '实盘易申购新股', Purchase_new_stocks, {
            'times': [[9, 40]],  # 执行申购新股的时间
            'host':'172.16.31.10',  # 实盘易IP
            'port':917,  # 端口
            'key':'zyftiger',  # 实盘易 key
            'clients':['title:moni']  # 执行申购新股的券商标题list，可以写多个，
                }],

        [True, '', '统计', Stat, {}]
    ]


# 创建一个规则执行器，并初始化一些通用事件
def create_rule(class_type, name, params, memo):
    obj = class_type(params)
    obj.name = name
    obj.on_open_position = open_position  # 买股
    obj.on_close_position = close_position  # 卖股
    obj.on_clear_position = clear_position  # 清仓
    obj.on_get_obj_by_class_type = get_obj_by_class_type  # 通过类名得到类的实例
    obj.memo = memo
    return obj<commit_msg>delete client info, because only one client defautly.<commit_after>mport copy
import pandas as pd
import requests
from requests import Request
from six.moves.urllib.parse import urlencode
import datetime
try:
    # 实盘易操作SDK,新版SDK已解决聚宽序列化问题。
    import shipane_sdk
except:
    pass

'''选择规则组合成一个量化策略'''
def select_strategy(context):
    '''
    策略选择设置说明, 策略由以下步骤规则组合，组合而成:
    1.持仓股票的处理规则
    2.调仓条件判断规则
    3.Query选股规则 (可选，有些规则可能不需要这个)
    4.股票池过滤规则 (可选，有些规则可能不需要这个)
    5.调仓规则
    6.其它规则(如统计)

    每个步骤的规则组合为一个二维数组
    一维指定由什么规则组成，注意顺序，程序将会按顺序创建，按顺序执行。
    不同的规则组合可能存在一定的顺序关系。
    二维指定具体规则配置，由 [0.是否启用，1.描述，2.规则实现类名，3.规则传递参数(dict)]] 组成。
    注：所有规则类都必需继承自Rule类或Rule类的子类
    '''

    # 规则配置list下标描述变量。提高可读性与未来添加更多规则配置。
    g.cs_enabled, g.cs_name, g.cs_memo, g.cs_class_name, g.cs_param = range(5)

    # 默认不开仓的标志为-1
    g.not_open_days = -1
    # 0.是否启用，1.描述，2.规则实现类名，3.规则传递参数(dict)]
    period = 3  # 调仓频率
    # 配置 1.持仓股票的处理规则 (这里主要配置是否进行个股止损止盈)
    g.position_stock_config = [
        [False, '', '个股止损', Stop_loss_stocks, {
            'period': period  # 调仓频率，日
            }, ],
        [False, '', '个股止盈', Stop_profit_stocks,
            {'period': period,  # 调仓频率，日
             }]
    ]

    # 配置 2.调仓条件判断规则
    g.adjust_condition_config = [
        [True, '', '统计净值', Stat_portfolio, {}],
        [False, '', '指数最高低价比值止损', Stop_loss_by_price, {
            'index': '000001.XSHG',  # 使用的指数,默认 '000001.XSHG'
             'day_count': 160,  # 可选 取day_count天内的最高价，最低价。默认160
             'multiple': 2.2  # 可选 最高价为最低价的multiple倍时，触 发清仓
            }],
        [False, '', '指数三乌鸦止损', Stop_loss_by_3_black_crows, {
            'index': '000001.XSHG',  # 使用的指数,默认 '000001.XSHG'
             'dst_drop_minute_count': 60,  # 可选，在三乌鸦触发情况下，一天之内有多少分钟涨幅<0,则触发止损，默认60分钟
            }],

        [False, '', '28调仓择时', Index28_condition, {  # 该调仓条件可能会产生清仓行为
                'index2': '000016.XSHG',  # 大盘指数
                'index8': '399333.XSHE',  # 小盘指数
                'index_growth_rate': 0.01,  # 判定调仓的二八指数20日增幅
            }],
        [False, '', '调仓日计数器', Period_condition, {
                'period': period,  # 调仓频率,日
            }],
        [True, '', '调仓时间', Time_condition, {
                'times': [[14, 50]],
            }],
        [True, '', '当天净值管理风控', Stop_loss_by_currentday_net_worth, {
            'check_days': 1,
            'back_percent': 2,
            }],
        [False, '', '三天净值管理风控', Stop_loss_by_last3day_net_worth, {
            'check_days': 3,
            'back_percent': 5,
            }],
        [False, '', '五天净值管理风控', Stop_loss_by_last5day_net_worth, {
            'check_days': 5,
            'back_percent': 8,
            }],

    ]

    # 配置 3.Query选股规则
    g.pick_stock_by_query_config = [
        [True, '', '选取小市值', Pick_small_cap, {}],
        [True, '', '评分大于10', Pick_score_up, {}],
        [True, '', '过滤EPS', Filter_eps, {
            'eps_min': 0  # 最小EPS
            }],
        [True, '', '初选股票数量', Filter_limite, {
            'pick_stock_count': 100  # 备选股票数目
            }]
    ]

    # 配置 4.股票池过滤规则
    g.filter_stock_list_config = [
        [True, '_filter_gem_', '过滤创业板', Filter_gem, {}],
        [True, '', '过滤ST', Filter_st, {}],
        [True, '', '过滤停牌', Filter_paused_stock, {}],
        [True, '', '过滤涨停', Filter_limitup, {}],
        [True, '', '过滤跌停', Filter_limitdown, {}],
        [True, '', '股票评分', Filter_rank, {
            'rank_stock_count': 20  # 评分股数
            }],
        [True, '', '获取最终选股数', Filter_buy_count, {
            'buy_count': 3  # 最终入选股票数
            }],
    ]

    # 配置 5.调仓规则
    g.adjust_position_config = [
        [True, '', '卖出股票', Sell_stocks, {}],
        [True, '', '买入股票', Buy_stocks, {
            'buy_count': 3  # 最终买入股票数
            }]
    ]

    # 判断是否在模拟盘运行
    g.is_sim_trade = context.run_params.type == 'sim_trade'

    # 配置 6.其它规则
    g.other_config = [
        # 注意：Shipane_order 和 Shipane_sync_p 启用一个就行了。
        # 请配置正确的实盘易IP，端口，Key,client

        [False, 'Shipane_order_moni', '实盘易跟order下单', Shipane_order, {
            'host': '172.16.31.10',  # 实盘易IP
            'port': 917,  # 端口
            'key': 'zyftiger',  # 实盘易 key
            'client': '',  # 设置操作的券商,只有一个可以为''
            }],

        [False, '_shipane_moni_', '实盘易-对比持仓下单', Shipane_sync_p, {
            'host': '172.16.31.10',  # 实盘易IP
            'port': 917,  # 端口
            'key': 'zyftiger',  # 实盘易 key
            'client': '',  # 设置操作的券商,只有一个可以为''
            'strong_op': True,  # 设置是否为强力买卖模式,几十万以上建议开启。小资金无所谓，关闭效率高一点点
                }],

        # 通过实盘易自动申购新股
        [True, '_Purchase_new_stocks_', '实盘易申购新股', Purchase_new_stocks, {
            'times': [[9, 40]],  # 执行申购新股的时间
            'host':'172.16.31.10',  # 实盘易IP
            'port':917,  # 端口
            'key':'zyftiger',  # 实盘易 key
            'client':'' #执行申购新股的券商标题list，可以写多个，
                }],

        [True, '', '统计', Stat, {}]
    ]


# 创建一个规则执行器，并初始化一些通用事件
def create_rule(class_type, name, params, memo):
    obj = class_type(params)
    obj.name = name
    obj.on_open_position = open_position  # 买股
    obj.on_close_position = close_position  # 卖股
    obj.on_clear_position = clear_position  # 清仓
    obj.on_get_obj_by_class_type = get_obj_by_class_type  # 通过类名得到类的实例
    obj.memo = memo
    return obj
{'fraction_non_alphanumeric': 0.15109211775878442, 'fraction_numerical': 0.027730294396961064, 'mean_word_length': 2.044521538016768, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 6, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2983372', 'n_tokens_mistral': 5222, 'n_tokens_neox': 5659, 'n_words': 628}