Exemplo n.º 1
0
def generateCandidateCode(dbh, setup):
    logic = {}
    desc = formatCommentStrings(setup)
    hdr = setHeader(setup)

    logic["lsb"] = lsbLogic(setup)
    logic["poi"] = poiLogic(dbh, setup)
    logic["filters"] = filterLogic(dbh, setup)
    logic["tseg"] = timeSegmentLogic(setup)
    logic["stop_loss"] = stopLossLogic(setup)
    logic["profit_target"] = profitTargetLogic(setup)

    logger.debug(logic)
    pprint.pprint(logic)

    if not good_logic(logic):
        warn("Not Good Logic")
        return None

    logger.debug(setup)
    pprint.pprint(setup)

    strat = processStrategyTemplate(setup["template_version"], hdr, desc, setup, logic)

    logger.debug(f"write Candidate to {setup['strategy_file']}")
    open(setup["strategy_file"], "w").write(strat)
    return strat
Exemplo n.º 2
0
def add_non_optimized_settings(dbh, proto_id, cand_params):
    logger.debug(f"add_non_optimized_settings(dbh, {proto_id}, {cand_params}):")
    proto_settings = queryPrototypeParams(dbh, proto_id)
    for setting in proto_settings:
        if setting.name not in cand_params.keys():
            if setting.input_type != "var":
                warn(
                    f"add_non_optimized_settings: setting should be var for proto {proto_id} var {setting.name} !!!!"
                )
            continue
            cand_params[setting.name] = setting.value
Exemplo n.º 3
0
def parseInput(param):
    logger.debug(f"parseInput({param.input_type}):")
    logger.debug(f"parseInput({param.value}):")
    if param.input_type == "range":
        return param.name, addInputRange(param)
    elif param.input_type == "list":
        return param.name, addInputList(param)
    elif param.input_type == "var":
        return param.name, addInputVar(param)
    else:
        warn(f"input_type({param.input_type}) not coded for, id={param.id}")
Exemplo n.º 4
0
def poiLogic(dbh, setup):
    logger.debug("================= poiLogic")
    logger.debug(setup)
    pprint.pprint(setup)
    id_list = glom(setup, "opt_inputs.poi.value", default=None)
    logger.debug(f"id_list = {id_list}")
    if not id_list:
        id_list = glom(setup, "param_vars.poi.value", default=None)
        logger.debug(f"not id_list:  {id_list}")
    # new logic: candidate
    if not id_list:
        id_list = glom(setup, "vars.poi.setting", default=None)
        logger.debug(f"poi id = {id_list}")
    logic = []
    if id_list == "" or id_list == None:
        return logic
    ids = id_list
    if isinstance(id_list, str):
        logger.debug("id_list is a str")
        ids = id_list.split(",")
    if len(ids) == 0:
        return []
    for id in ids:
        logger.debug(f"for id is{id}")
        q = queryPoi(dbh, id)
        if not q:
            # logic = None
            warn(f"poiLogic: No POI logic for id: {id}")
            continue
        logger.debug("append to logic")
        logic.append({
            "poi_id": id,
            "common": q.common_logic,
            "long": q.long_logic,
            "short": q.short_logic,
        })
        logger.debug("check vars")
        if q.vars:
            for v in q.vars.split(";"):
                logger.debug(f"for v is {v}")
                name, dtype, value = v.split(":")
                # setup["param_vars"][name] = {"d_type": dtype, "value": value}
                setup["vars"][name] = {
                    "d_type": dtype,
                    "setting": value,
                    "el_block": "variable",
                }

                #'opt_inputs': {'filter_1': {'dtype': 'int',
                #             'type': 'distinct',
                #             'value': [2, 5, 6]},

    return logic
Exemplo n.º 5
0
def timeSegmentLogic(setup):
    seg = glom(setup, "opt_inputs.time_segment.value", default=None)
    if not seg:
        seg = glom(setup, "param_vars.time_segment.value", default=None)
    # new logic: candidate
    if not seg:
        seg = glom(setup, "vars.time_segment.setting", default=None)
    tseg = calcTimeSegmentSize(setup["sess_start"], setup["sess_end"])
    timeframe = int(setup["timeframes"][0]["tf"])
    sess_start = setup["sess_start"]
    sess_end = setup["sess_end"]

    if len(seg) > 1:
        code = f"""
        Switch (time_segment) begin
          case 0: begin
            time_filter = True;
          end;
          case 1 : begin
            time_filter = time > {sess_start} and time <= {add2hhmm(sess_start, tseg)};
          end;
          case 2 : begin
            time_filter = time > {add2hhmm(sess_start, tseg)} and time <= {add2hhmm(sess_start, (2*tseg) )};
          end;
          case 3 : begin
            time_filter = time > {add2hhmm(sess_start, (2*tseg))} and time < {add2hhmm(sess_end,-timeframe)};
          end;
        end;
        """
    elif len(seg) == 1:
        if seg[0] == "0":
            code = f"time_filter = True;"
        elif seg[0] == "1":
            code = f"time_filter = time > {sess_start} and time <= {add2hhmm(sess_start, tseg)};"
        elif seg[0] == "2":
            code = f"time_filter = time > {add2hhmm(sess_start, tseg)} and time <= {add2hhmm(sess_start, (2*tseg) )};"
        elif seg[0] == "3":
            code = f"time_filter = time > {add2hhmm(sess_start, (2*tseg))} and time < {add2hhmm(sess_end,-timeframe)};"
        else:
            warn(f"timeSegmentLogic({seg}) NOT CODED")
    else:
        code = f"time_filter = True;"

    return code
Exemplo n.º 6
0
def generateStrategyCode(dbh, setup):
    logic = {}
    desc = ""  # formatCommentStrings(setup)
    hdr = ""  # setHeader(setup)

    logic["lsb"] = lsbLogic(setup)
    logic["poi"] = poiLogic(dbh, setup)
    logic["filters"] = filterLogic(dbh, setup)
    logic["tseg"] = timeSegmentLogic(setup)
    logic["stop_loss"] = stopLossLogic(setup)
    logic["profit_target"] = profitTargetLogic(setup)

    setup["logic"] = {}
    setup["logic"]["lsb"] = lsbLogic(setup)
    setup["logic"]["poi"] = poiLogic(dbh, setup)
    setup["logic"]["filters"] = filterLogic(dbh, setup)
    setup["logic"]["tseg"] = timeSegmentLogic(setup)
    setup["logic"]["stop_loss"] = stopLossLogic(setup)
    setup["logic"]["profit_target"] = profitTargetLogic(setup)

    logger.debug(logic)
    pprint.pprint(logic)

    if not good_logic(logic):
        warn("Not Good Logic")
        return None

    logger.debug(setup)
    pprint.pprint(setup)

    hdr = ""
    desc = {}
    desc["chart_setup"] = ""
    desc["prototype_info"] = ""

    strat = processStrategyTemplate(setup["strategy_template_v"], hdr, desc,
                                    setup, logic)

    logger.debug(f"write Strategy to {setup['strategy_file']}")
    open(setup["strategy_file"], "w").write(strat)
    return strat
Exemplo n.º 7
0
def getStrategySetup(dbh, strat_id):
    logger.debug(f"strat_id = {strat_id}")
    strat = queryStrategy(dbh, strat_id)
    settings = queryStrategySettings(dbh, strat_id)
    params = queryStrategyParams(dbh, strat_id)

    setup = {}
    setup["strat_id"] = strat_id
    setup["cand_id"] = strat.cand_id
    setup["strategy_template_v"] = strat.strategy_template_v
    setup["oos_curve_template_v"] = strat.oos_curve_template_v
    setup["jcl_version"] = strat.jcl_version
    setup["symbol"] = strat.symbol
    setup["chart_series"] = strat.chart_series
    setup["reopt_param_names"] = strat.reopt_param_names
    setup["fitness_func"] = strat.fitness_function
    setup["max_bars_back"] = strat.max_days_back
    setup["oosPercentLast"] = 0
    setup["session_num"] = strat.market_session_id
    setup["session_name"] = f"session {strat.market_session_id}"
    setup["strategy_file"] = strat.strategy_file
    setup["strategy_oos_file"] = strat.strategy_oos_file

    setup["sess_start"], setup["sess_end"] = setSessionVars(
        dbh, setup["session_num"])
    setup["data_series"] = setDataSeries(setup["chart_series"])

    setup["vars"] = {}
    setup["counts"] = {}
    setup["counts"]["el_vars"] = 0
    setup["counts"]["el_inputs"] = 0
    setup["counts"]["data_series"] = 0

    setup["opt_inputs"] = {}
    for p in params:
        logger.debug(f"params:  p={p.name}")
        param_name, param_setup = parseInput(p)
        setup["opt_inputs"][param_name] = param_setup
        setup["vars"][param_name] = param_setup

    setup["param_vars"] = {}
    for s in settings:
        logger.debug(f"settings:  s={s.name}")
        setup["vars"].setdefault(s.name, {})["d_type"] = s.data_type
        setup["vars"][s.name]["setting"] = s.value

    for k in setup["vars"]:
        logger.debug(f"vars:  k={k}")
        if "value" in setup["vars"][k].keys() and isinstance(
                setup["vars"][k]["value"], (list, )):
            setup["vars"][k]["el_block"] = "input"
            setup["counts"]["el_inputs"] += 1
        else:
            setup["vars"][k]["el_block"] = "variable"
            setup["counts"]["el_vars"] += 1

    setup["var_names"] = []
    setup["input_names"] = []
    for k, v in setup["vars"].items():
        logger.debug(f"items:  {v}")
        pprint.pprint(f"*getCandidateSetup: items:  {v}")
        if v["el_block"] == "input":
            setup["input_names"].append(k)
        elif v["el_block"] == "variable":
            setup["var_names"].append(k)
        else:
            warn(
                f"el_block not defined, strat_id={setup['strat_id']}, var={k}")

    setup["timeframes"] = []
    for ds in setup["chart_series"].split(","):
        i, symbol, tf, unit = ds.split(":")
        tf_d = {"ds": i, "symbol": symbol, "tf": tf, "unit": unit}
        setup["timeframes"].append(tf_d)
        setup["counts"]["data_series"] += 1

    dir = f"{ats_dir}/Data/StrategyCode/"
    if platform.system() == "Windows":
        dir = str(PureWindowsPath(ats_dir_win / strategy_code_dir))

    setup["strategy_name"] = f"strat_{strat_id}"
    setup["strategy_file"] = f"{dir}/{setup['strategy_name']}"

    dir = f"{ats_dir}/Data/OptimizationApiCode/"
    if platform.system() == "Windows":
        dir = str(PureWindowsPath(ats_dir_win / jcl_code_dir))

    setup["jcl_file"] = f"{dir}{setup['strategy_name']}.jcl"

    return setup