Пример #1
0
def createDatabase(argv):
    """
    Create Database.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.CreateDatabase -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {"scope":__name__, "arguments":" ".join(argv)})
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {"scope": __name__, "exception": str(e)})
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)
        databaseFilePath = pyswing.database.pySwingDatabase
        scriptFilePath = pyswing.constants.pySwingDatabaseScript

        Logger.log(logging.INFO, "Creating Database", {"scope":__name__, "databaseFilePath":databaseFilePath, "scriptFilePath":scriptFilePath})

        query = open(pyswing.constants.pySwingDatabaseScript, 'r').read()
        connection = sqlite3.connect(databaseFilePath)
        c = connection.cursor()
        c.executescript(query)
        connection.commit()
        c.close()
        connection.close()
        TeamCity.setBuildResultText("Created Database")

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)
Пример #2
0
def importData(argv):
    """
    Import Share Data.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.ImportData -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {"scope":__name__, "arguments":" ".join(argv)})
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {"scope": __name__, "exception": str(e)})
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Import Market Data", {"scope":__name__, "market":marketName})

        tickerCodesRelativeFilePath = "resources/%s.txt" % (marketName)

        market = Market(tickerCodesRelativeFilePath)

        for index, row in market.tickers.iterrows():
            equity = Equity(row[0])
            equity.importData()

        TeamCity.setBuildResultText("Imported Data from Yahoo")

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)
Пример #3
0
def analyseRules(argv):
    """
    Analyse Rules.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.AnalyseRules -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {"scope":__name__, "arguments":" ".join(argv)})
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {"scope": __name__, "exception": str(e)})
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Analyse Rules", {"scope":__name__, "market":marketName})

        rules = getRules()
        for ruleString in rules:
            rule = Rule(ruleString)
            rule.analyseRule()

        TeamCity.setBuildResultText("Analysed Rules")

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)
Пример #4
0
def updateIndicators(argv):
    """
    Update Indicators.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.UpdateIndicators -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {
        "scope": __name__,
        "arguments": " ".join(argv)
    })
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {
            "scope": __name__,
            "exception": str(e)
        })
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Update Indicators", {
            "scope": __name__,
            "market": marketName
        })

        tickerCodesRelativeFilePath = "resources/%s.txt" % (marketName)

        market = Market(tickerCodesRelativeFilePath)

        # Market Indicators
        adiIndicator = IndicatorADI()
        adiIndicator.updateIndicator()

        # Equity Indicators
        for index, row in market.tickers.iterrows():
            tickerCode = row[0]
            equity = Equity(tickerCode)
            equityDataFrame = equity.dataFrame()

            smaIndicator = IndicatorSMA(equityDataFrame, tickerCode)
            smaIndicator.updateIndicator()

            emaIndicator = IndicatorEMA(equityDataFrame, tickerCode)
            emaIndicator.updateIndicator()

            bbIndicator = IndicatorBB20(equityDataFrame, tickerCode)
            bbIndicator.updateIndicator()

            rocIndicator = IndicatorROC(equityDataFrame, tickerCode)
            rocIndicator.updateIndicator()

            macdIndicator = IndicatorMACD(equityDataFrame, tickerCode)
            macdIndicator.updateIndicator()

            stochIndicator = IndicatorSTOCH(equityDataFrame, tickerCode)
            stochIndicator.updateIndicator()

            rsiIndicator = IndicatorRSI(equityDataFrame, tickerCode)
            rsiIndicator.updateIndicator()

            adxIndicator = IndicatorADX(equityDataFrame, tickerCode)
            adxIndicator.updateIndicator()

            aroonIndicator = IndicatorAROON(equityDataFrame, tickerCode)
            aroonIndicator.updateIndicator()

            dxIndicator = IndicatorDX(equityDataFrame, tickerCode)
            dxIndicator.updateIndicator()

        TeamCity.setBuildResultText("Updated Indicators")

    else:
        Logger.log(logging.ERROR, "Missing Options", {
            "scope": __name__,
            "options": str(argv)
        })
        usage()
        sys.exit(2)
Пример #5
0
def evaluateRules(argv):
    """
    Evaluate Rules.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.EvaluateRules -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {
        "scope": __name__,
        "arguments": " ".join(argv)
    })
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {
            "scope": __name__,
            "exception": str(e)
        })
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Evaluate Rules", {
            "scope": __name__,
            "market": marketName
        })

        tickerCodesRelativeFilePath = "resources/%s.txt" % (marketName)

        market = Market(tickerCodesRelativeFilePath)

        rules = []
        rules.append(SimpleRule("Indicator_ROC", "ROC_5 > 1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_5 > 3"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_5 > 5"))

        rules.append(SimpleRule("Indicator_ROC", "ROC_5 < -1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_5 < -3"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_5 < -5"))

        rules.append(SimpleRule("Indicator_ROC", "ROC_10 > 1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_10 > 4"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_10 > 8"))

        rules.append(SimpleRule("Indicator_ROC", "ROC_10 < -1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_10 < -4"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_10 < -8"))

        rules.append(SimpleRule("Indicator_ROC", "ROC_20 > 1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_20 > 5"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_20 > 10"))

        rules.append(SimpleRule("Indicator_ROC", "ROC_20 < -1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_20 < -5"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_20 < -10"))

        #

        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.GreaterThan, 1.01))
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.LessThan, 0.99))
        #
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.GreaterThan, 1.02))
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.LessThan, 0.98))
        #
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.GreaterThan, 1.03))
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.LessThan, 0.97))
        #
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.GreaterThan, 1.05))
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.LessThan, 0.95))
        #
        # rules.append(RelativeRule("Equities", "Close", -5, Comparison.GreaterThan, 1.10))
        # rules.append(RelativeRule("Equities", "Close", -5, Comparison.LessThan, 0.90))
        #
        # rules.append(RelativeRule("Equities", "Close", -5, Comparison.GreaterThan, 1.20))
        # rules.append(RelativeRule("Equities", "Close", -5, Comparison.LessThan, 0.80))

        #

        # rules.append(CrossingRule("Indicator_SMA","SMA_5","Indicator_SMA","SMA_20"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_10","Indicator_SMA","SMA_50"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_10","Indicator_SMA","SMA_200"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_20","Indicator_SMA","SMA_200"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_20","Indicator_SMA","SMA_5"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_50","Indicator_SMA","SMA_10"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_200","Indicator_SMA","SMA_10"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_200","Indicator_SMA","SMA_20"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close > t2.SMA_100"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close > 1.1 * t2.SMA_100"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close > 1.2 * t2.SMA_100"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close > t2.SMA_200"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close > 1.1 * t2.SMA_200"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close > 1.2 * t2.SMA_200"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close > t2.SMA_300"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close > 1.1 * t2.SMA_300"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close > 1.2 * t2.SMA_300"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close < t2.SMA_100"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close < 0.9 * t2.SMA_100"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close < 0.8 * t2.SMA_100"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close < t2.SMA_200"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close < 0.9 * t2.SMA_200"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close < 0.8 * t2.SMA_200"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close < t2.SMA_300"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close < 0.9 * t2.SMA_300"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_SMA",
                                  "t1.Close < 0.8 * t2.SMA_300"))

        #

        # rules.append(CrossingRule("Indicator_EMA","EMA_5","Indicator_EMA","EMA_20"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_10","Indicator_EMA","EMA_50"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_10","Indicator_EMA","EMA_200"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_20","Indicator_EMA","EMA_200"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_20","Indicator_EMA","EMA_5"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_50","Indicator_EMA","EMA_10"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_200","Indicator_EMA","EMA_10"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_200","Indicator_EMA","EMA_20"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close > t2.EMA_100"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close > 1.1 * t2.EMA_100"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close > 1.2 * t2.EMA_100"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close > t2.EMA_200"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close > 1.1 * t2.EMA_200"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close > 1.2 * t2.EMA_200"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close > t2.EMA_300"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close > 1.1 * t2.EMA_300"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close > 1.2 * t2.EMA_300"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close < t2.EMA_100"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close < 0.9 * t2.EMA_100"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close < 0.8 * t2.EMA_100"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close < t2.EMA_200"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close < 0.9 * t2.EMA_200"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close < 0.8 * t2.EMA_200"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close < t2.EMA_300"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close < 0.9 * t2.EMA_300"))
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_EMA",
                                  "t1.Close < 0.8 * t2.EMA_300"))

        rules.append(
            CrossingRule("Indicator_SMA", "SMA_20", "Indicator_EMA",
                         "EMA_200"))
        rules.append(
            CrossingRule("Indicator_EMA", "EMA_200", "Indicator_SMA",
                         "SMA_20"))

        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_BB20",
                                  "t1.Close > t2.upperband"))
        rules.append(
            MultipleIndicatorRule(
                "Equities", "Indicator_BB20",
                "abs(t1.Close - t2.upperband) < abs(t1.Close - t2.middleband)")
        )
        rules.append(
            MultipleIndicatorRule("Equities", "Indicator_BB20",
                                  "t1.Close < t2.lowerband"))
        rules.append(
            MultipleIndicatorRule(
                "Equities", "Indicator_BB20",
                "abs(t1.Close - t2.lowerband) < abs(t1.Close - t2.middleband)")
        )

        rules.append(
            SimpleRule("Indicator_BB20",
                       "upperbandroc < 0 and lowerbandroc > 0"))
        rules.append(
            SimpleRule("Indicator_BB20",
                       "upperbandroc < -1 and lowerbandroc > 1"))
        rules.append(
            SimpleRule("Indicator_BB20",
                       "upperbandroc > 0 and lowerbandroc < 0"))
        rules.append(
            SimpleRule("Indicator_BB20",
                       "upperbandroc > 1 and lowerbandroc <- 1"))

        rules.append(SimpleRule("Indicator_BB20", "upperbandroc > 1"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc > 2"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc > 3"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc < -1"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc < -2"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc < -3"))

        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc > 1"))
        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc > 2"))
        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc > 3"))
        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc < -1"))
        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc < -2"))
        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc < -3"))

        rules.append(
            SimpleRule("Equities", "abs(Close - High) * 2 < abs(Close - Low)"))
        rules.append(
            SimpleRule("Equities", "abs(Close - High) * 5 < abs(Close - Low)"))
        rules.append(
            SimpleRule("Equities",
                       "abs(Close - High) * 10 < abs(Close - Low)"))

        rules.append(
            SimpleRule("Equities", "abs(Close - High) > 2 * abs(Close - Low)"))
        rules.append(
            SimpleRule("Equities", "abs(Close - High) > 5 * abs(Close - Low)"))
        rules.append(
            SimpleRule("Equities",
                       "abs(Close - High) > 10 * abs(Close - Low)"))

        rules.append(
            SimpleRule("Indicator_MACD", "MACD_12_26_9_DIVERGENCE < 0"))
        rules.append(
            SimpleRule("Indicator_MACD", "MACD_12_26_9_DIVERGENCE > 0"))

        rules.append(SimpleRule("Indicator_MACD", "MACD_12_26_9 > MACD_12_26"))
        rules.append(SimpleRule("Indicator_MACD", "MACD_12_26_9 < MACD_12_26"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < 5"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < 10"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < 15"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < 20"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < 30"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > 95"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > 90"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > 85"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > 80"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > 70"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D < 5"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D < 10"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D < 15"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D < 20"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D < 30"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D > 95"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D > 90"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D > 85"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D > 80"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D > 70"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > STOCH_D"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < STOCH_D"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC > 50"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC > 100"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC > 200"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC < -50"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC < -60"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC < -70"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC > 50"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC > 100"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC > 200"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC < -50"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC < -60"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC < -70"))

        rules.append(SimpleRule("Indicator_ADX", "ADX > 30"))
        rules.append(SimpleRule("Indicator_ADX", "ADX > 40"))
        rules.append(SimpleRule("Indicator_ADX", "ADX > 50"))

        rules.append(SimpleRule("Indicator_ADX", "ADX_ROC > 10"))
        rules.append(SimpleRule("Indicator_ADX", "ADX_ROC > 20"))

        rules.append(SimpleRule("Indicator_ADX", "ADX_ROC < -10"))
        rules.append(SimpleRule("Indicator_ADX", "ADX_ROC < -20"))

        rules.append(SimpleRule("Indicator_DX", "DX > 40"))
        rules.append(SimpleRule("Indicator_DX", "DX > 50"))
        rules.append(SimpleRule("Indicator_DX", "DX > 60"))

        # rules.append(SimpleRule("Indicator_DX", "DX_ROC > 1000"))
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC > 2000"))
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC > 3000"))
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC > 4000"))
        #
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC < -95"))
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC < -97"))
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC < -98"))

        rules.append(SimpleRule("Indicator_RSI", "RSI > 20"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 30"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 40"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 50"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 60"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 70"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 80"))

        rules.append(SimpleRule("Indicator_RSI", "RSI < 80"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 70"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 60"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 50"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 40"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 30"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 20"))

        rules.append(SimpleRule("Indicator_AROON", "AROON_UP = 100"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP = 0"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP > 50"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP < 50"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP > 90"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP < 90"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP > 10"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP < 10"))

        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN = 100"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN = 0"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN > 50"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN < 50"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN > 90"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN < 90"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN > 10"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN < 10"))

        rules.append(
            SimpleRule("Equities",
                       "abs(High - Close) > 10 * abs(Low - Close)"))
        rules.append(
            SimpleRule("Equities",
                       "abs(High - Close) * 10 < abs(Low - Close)"))

        rules.append(
            SimpleRule("Equities",
                       "abs(High - Close) > 100 * abs(Low - Close)"))
        rules.append(
            SimpleRule("Equities",
                       "abs(High - Close) * 100 < abs(Low - Close)"))

        for index, row in market.tickers.iterrows():
            tickerCode = row[0]
            for rule in rules:
                rule.evaluateRule(tickerCode)

        marketRules = []

        marketRules.append(MarketRule("Indicator_ADI", "ADI > 0"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI > 25"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI > 50"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI < 0"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI < -25"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI < -50"))

        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC > 1"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC > 3"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC > 7"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC < -1"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC < -3"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC < -7"))

        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA > 5"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA > 10"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA > 20"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA < -5"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA < -10"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA < -20"))

        for marketRule in marketRules:
            marketRule.evaluateRule()

        TeamCity.setBuildResultText("Evaluated Rules")

    else:
        Logger.log(logging.ERROR, "Missing Options", {
            "scope": __name__,
            "options": str(argv)
        })
        usage()
        sys.exit(2)
Пример #6
0
def analyseStrategies(argv):
    """
    Analyse Strategies.

    :param argv: Command Line Parameters.

    -n = Name
    -s = Strategy Name
    -r = Minimum Return per Trade
    -t = Minimum Number of Trades

    Example:

    python -m pyswing.AnalyseStrategies -n asx -s v4.0 -r 1.0 -t 500
    """

    Logger.log(logging.INFO, "Log Script Call", {
        "scope": __name__,
        "arguments": " ".join(argv)
    })
    Logger.pushLogData("script", __name__)

    marketName = ""
    returnPerTrade = ""
    numberOfTrades = ""

    try:
        shortOptions = "n:r:s:t:dh"
        longOptions = [
            "marketName=", "return=", "strategy=", "trades=", "debug", "help"
        ]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {
            "scope": __name__,
            "exception": str(e)
        })
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg
        elif opt in ("-r", "--return"):
            returnPerTrade = arg
        elif opt in ("-s", "--strategy"):
            pyswing.constants.pySwingStrategy = arg
        elif opt in ("-t", "--trades"):
            numberOfTrades = arg

    if marketName != "" and numberOfTrades != "" and returnPerTrade != "" and pyswing.constants.pySwingStrategy:

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(
            logging.INFO, "Analyse Strategies", {
                "scope": __name__,
                "market": marketName,
                "numberOfTrades": numberOfTrades,
                "returnPerTrade": returnPerTrade,
                "strategy": pyswing.constants.pySwingStrategy
            })

        strategies = getStrategies(numberOfTrades, returnPerTrade)

        for strategy in strategies:
            strategy.analyse()

        TeamCity.setBuildResultText("Analysed Strategies")

    else:
        Logger.log(logging.ERROR, "Missing Options", {
            "scope": __name__,
            "options": str(argv)
        })
        usage()
        sys.exit(2)
Пример #7
0
def createDatabase(argv):
    """
    Create Database.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.CreateDatabase -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {
        "scope": __name__,
        "arguments": " ".join(argv)
    })
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {
            "scope": __name__,
            "exception": str(e)
        })
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)
        databaseFilePath = pyswing.database.pySwingDatabase
        scriptFilePath = pyswing.constants.pySwingDatabaseScript

        Logger.log(
            logging.INFO, "Creating Database", {
                "scope": __name__,
                "databaseFilePath": databaseFilePath,
                "scriptFilePath": scriptFilePath
            })

        query = open(pyswing.constants.pySwingDatabaseScript, 'r').read()
        connection = sqlite3.connect(databaseFilePath)
        c = connection.cursor()
        c.executescript(query)
        connection.commit()
        c.close()
        connection.close()
        TeamCity.setBuildResultText("Created Database")

    else:
        Logger.log(logging.ERROR, "Missing Options", {
            "scope": __name__,
            "options": str(argv)
        })
        usage()
        sys.exit(2)
Пример #8
0
def askHorse(argv):
    """
    "Ask Horse" i.e. Check the Active Strategies against the most recent data...

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.AskHorse -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {"scope":__name__, "arguments":" ".join(argv)})
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {"scope": __name__, "exception": str(e)})
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)

        latestDate = getLatestDate()

        Logger.log(logging.INFO, "Ask Horse", {"scope":__name__, "market":marketName, "latestDate":latestDate})

        strategies = getActiveStrategies()

        tradeDetails = []
        for strategy in strategies:
            rulesDetail = ("Rules: '%s', '%s' and '%s'") % (strategy._rule1, strategy._rule2, strategy._rule3)
            Logger.log(logging.INFO, "Checking Strategy", {"scope":__name__, "strategy":rulesDetail})
            if strategy.askHorse(latestDate):
                tradeDetails.extend(strategy.tradeDetails)

        sendEmail(tradeDetails)

        if len(tradeDetails) > 0:
            TeamCity.setBuildResultText("Horse Says Trade! (x%s)" % len(tradeDetails))
        else:
            TeamCity.setBuildResultText("Horse Says Go Back To Bed!")

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)
Пример #9
0
def calculateExitValues(argv):
    """
    Calculate Exit Values.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.CalculateExitValues -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {
        "scope": __name__,
        "arguments": " ".join(argv)
    })
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {
            "scope": __name__,
            "exception": str(e)
        })
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Calculate Exit Values", {
            "scope": __name__,
            "market": marketName
        })

        tickerCodesRelativeFilePath = "resources/%s.txt" % (marketName)

        market = Market(tickerCodesRelativeFilePath)

        for index, row in market.tickers.iterrows():
            tickerCode = row[0]

            exitValuesTrailingStop3 = ExitValuesTrailingStop(
                tickerCode, 0.03, 2)
            exitValuesTrailingStop3.calculateExitValues()

            # exitValuesTrailingStop2 = ExitValuesTrailingStop(tickerCode, 0.02, 3)
            # exitValuesTrailingStop2.calculateExitValues()
            #
            # exitValuesYesterday2 = ExitValuesYesterday(tickerCode, 0.02, 3)
            # exitValuesYesterday2.calculateExitValues()
            #
            # exitValuesYesterday3 = ExitValuesYesterday(tickerCode, 0.03, 2)
            # exitValuesYesterday3.calculateExitValues()

        TeamCity.setBuildResultText("Calculated Exit Values")

    else:
        Logger.log(logging.ERROR, "Missing Options", {
            "scope": __name__,
            "options": str(argv)
        })
        usage()
        sys.exit(2)
Пример #10
0
def evaluateRules(argv):
    """
    Evaluate Rules.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.EvaluateRules -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {"scope":__name__, "arguments":" ".join(argv)})
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {"scope": __name__, "exception": str(e)})
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Evaluate Rules", {"scope":__name__, "market":marketName})

        tickerCodesRelativeFilePath = "resources/%s.txt" % (marketName)

        market = Market(tickerCodesRelativeFilePath)

        rules = []
        rules.append(SimpleRule("Indicator_ROC", "ROC_5 > 1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_5 > 3"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_5 > 5"))

        rules.append(SimpleRule("Indicator_ROC", "ROC_5 < -1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_5 < -3"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_5 < -5"))

        rules.append(SimpleRule("Indicator_ROC", "ROC_10 > 1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_10 > 4"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_10 > 8"))

        rules.append(SimpleRule("Indicator_ROC", "ROC_10 < -1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_10 < -4"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_10 < -8"))

        rules.append(SimpleRule("Indicator_ROC", "ROC_20 > 1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_20 > 5"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_20 > 10"))

        rules.append(SimpleRule("Indicator_ROC", "ROC_20 < -1"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_20 < -5"))
        rules.append(SimpleRule("Indicator_ROC", "ROC_20 < -10"))

        #

        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.GreaterThan, 1.01))
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.LessThan, 0.99))
        #
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.GreaterThan, 1.02))
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.LessThan, 0.98))
        #
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.GreaterThan, 1.03))
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.LessThan, 0.97))
        #
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.GreaterThan, 1.05))
        # rules.append(RelativeRule("Equities", "Close", -1, Comparison.LessThan, 0.95))
        #
        # rules.append(RelativeRule("Equities", "Close", -5, Comparison.GreaterThan, 1.10))
        # rules.append(RelativeRule("Equities", "Close", -5, Comparison.LessThan, 0.90))
        #
        # rules.append(RelativeRule("Equities", "Close", -5, Comparison.GreaterThan, 1.20))
        # rules.append(RelativeRule("Equities", "Close", -5, Comparison.LessThan, 0.80))

        #

        # rules.append(CrossingRule("Indicator_SMA","SMA_5","Indicator_SMA","SMA_20"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_10","Indicator_SMA","SMA_50"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_10","Indicator_SMA","SMA_200"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_20","Indicator_SMA","SMA_200"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_20","Indicator_SMA","SMA_5"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_50","Indicator_SMA","SMA_10"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_200","Indicator_SMA","SMA_10"))
        # rules.append(CrossingRule("Indicator_SMA","SMA_200","Indicator_SMA","SMA_20"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close > t2.SMA_100"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close > 1.1 * t2.SMA_100"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close > 1.2 * t2.SMA_100"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close > t2.SMA_200"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close > 1.1 * t2.SMA_200"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close > 1.2 * t2.SMA_200"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close > t2.SMA_300"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close > 1.1 * t2.SMA_300"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close > 1.2 * t2.SMA_300"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close < t2.SMA_100"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close < 0.9 * t2.SMA_100"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close < 0.8 * t2.SMA_100"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close < t2.SMA_200"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close < 0.9 * t2.SMA_200"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close < 0.8 * t2.SMA_200"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close < t2.SMA_300"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close < 0.9 * t2.SMA_300"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_SMA", "t1.Close < 0.8 * t2.SMA_300"))

        #

        # rules.append(CrossingRule("Indicator_EMA","EMA_5","Indicator_EMA","EMA_20"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_10","Indicator_EMA","EMA_50"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_10","Indicator_EMA","EMA_200"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_20","Indicator_EMA","EMA_200"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_20","Indicator_EMA","EMA_5"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_50","Indicator_EMA","EMA_10"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_200","Indicator_EMA","EMA_10"))
        # rules.append(CrossingRule("Indicator_EMA","EMA_200","Indicator_EMA","EMA_20"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close > t2.EMA_100"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close > 1.1 * t2.EMA_100"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close > 1.2 * t2.EMA_100"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close > t2.EMA_200"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close > 1.1 * t2.EMA_200"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close > 1.2 * t2.EMA_200"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close > t2.EMA_300"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close > 1.1 * t2.EMA_300"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close > 1.2 * t2.EMA_300"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close < t2.EMA_100"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close < 0.9 * t2.EMA_100"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close < 0.8 * t2.EMA_100"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close < t2.EMA_200"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close < 0.9 * t2.EMA_200"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close < 0.8 * t2.EMA_200"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close < t2.EMA_300"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close < 0.9 * t2.EMA_300"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_EMA", "t1.Close < 0.8 * t2.EMA_300"))

        rules.append(CrossingRule("Indicator_SMA","SMA_20","Indicator_EMA","EMA_200"))
        rules.append(CrossingRule("Indicator_EMA","EMA_200","Indicator_SMA","SMA_20"))

        rules.append(MultipleIndicatorRule("Equities", "Indicator_BB20", "t1.Close > t2.upperband"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_BB20", "abs(t1.Close - t2.upperband) < abs(t1.Close - t2.middleband)"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_BB20", "t1.Close < t2.lowerband"))
        rules.append(MultipleIndicatorRule("Equities", "Indicator_BB20", "abs(t1.Close - t2.lowerband) < abs(t1.Close - t2.middleband)"))

        rules.append(SimpleRule("Indicator_BB20", "upperbandroc < 0 and lowerbandroc > 0"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc < -1 and lowerbandroc > 1"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc > 0 and lowerbandroc < 0"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc > 1 and lowerbandroc <- 1"))

        rules.append(SimpleRule("Indicator_BB20", "upperbandroc > 1"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc > 2"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc > 3"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc < -1"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc < -2"))
        rules.append(SimpleRule("Indicator_BB20", "upperbandroc < -3"))

        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc > 1"))
        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc > 2"))
        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc > 3"))
        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc < -1"))
        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc < -2"))
        rules.append(SimpleRule("Indicator_BB20", "lowerbandroc < -3"))

        rules.append(SimpleRule("Equities", "abs(Close - High) * 2 < abs(Close - Low)"))
        rules.append(SimpleRule("Equities", "abs(Close - High) * 5 < abs(Close - Low)"))
        rules.append(SimpleRule("Equities", "abs(Close - High) * 10 < abs(Close - Low)"))

        rules.append(SimpleRule("Equities", "abs(Close - High) > 2 * abs(Close - Low)"))
        rules.append(SimpleRule("Equities", "abs(Close - High) > 5 * abs(Close - Low)"))
        rules.append(SimpleRule("Equities", "abs(Close - High) > 10 * abs(Close - Low)"))

        rules.append(SimpleRule("Indicator_MACD", "MACD_12_26_9_DIVERGENCE < 0"))
        rules.append(SimpleRule("Indicator_MACD", "MACD_12_26_9_DIVERGENCE > 0"))

        rules.append(SimpleRule("Indicator_MACD", "MACD_12_26_9 > MACD_12_26"))
        rules.append(SimpleRule("Indicator_MACD", "MACD_12_26_9 < MACD_12_26"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < 5"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < 10"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < 15"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < 20"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < 30"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > 95"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > 90"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > 85"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > 80"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > 70"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D < 5"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D < 10"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D < 15"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D < 20"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D < 30"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D > 95"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D > 90"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D > 85"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D > 80"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D > 70"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K > STOCH_D"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K < STOCH_D"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC > 50"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC > 100"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC > 200"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC < -50"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC < -60"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_K_ROC < -70"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC > 50"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC > 100"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC > 200"))

        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC < -50"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC < -60"))
        rules.append(SimpleRule("Indicator_STOCH", "STOCH_D_ROC < -70"))

        rules.append(SimpleRule("Indicator_ADX", "ADX > 30"))
        rules.append(SimpleRule("Indicator_ADX", "ADX > 40"))
        rules.append(SimpleRule("Indicator_ADX", "ADX > 50"))

        rules.append(SimpleRule("Indicator_ADX", "ADX_ROC > 10"))
        rules.append(SimpleRule("Indicator_ADX", "ADX_ROC > 20"))

        rules.append(SimpleRule("Indicator_ADX", "ADX_ROC < -10"))
        rules.append(SimpleRule("Indicator_ADX", "ADX_ROC < -20"))


        rules.append(SimpleRule("Indicator_DX", "DX > 40"))
        rules.append(SimpleRule("Indicator_DX", "DX > 50"))
        rules.append(SimpleRule("Indicator_DX", "DX > 60"))

        # rules.append(SimpleRule("Indicator_DX", "DX_ROC > 1000"))
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC > 2000"))
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC > 3000"))
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC > 4000"))
        #
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC < -95"))
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC < -97"))
        # rules.append(SimpleRule("Indicator_DX", "DX_ROC < -98"))

        rules.append(SimpleRule("Indicator_RSI", "RSI > 20"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 30"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 40"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 50"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 60"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 70"))
        rules.append(SimpleRule("Indicator_RSI", "RSI > 80"))

        rules.append(SimpleRule("Indicator_RSI", "RSI < 80"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 70"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 60"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 50"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 40"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 30"))
        rules.append(SimpleRule("Indicator_RSI", "RSI < 20"))

        rules.append(SimpleRule("Indicator_AROON", "AROON_UP = 100"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP = 0"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP > 50"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP < 50"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP > 90"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP < 90"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP > 10"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_UP < 10"))

        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN = 100"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN = 0"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN > 50"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN < 50"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN > 90"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN < 90"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN > 10"))
        rules.append(SimpleRule("Indicator_AROON", "AROON_DOWN < 10"))

        rules.append(SimpleRule("Equities", "abs(High - Close) > 10 * abs(Low - Close)"))
        rules.append(SimpleRule("Equities", "abs(High - Close) * 10 < abs(Low - Close)"))

        rules.append(SimpleRule("Equities", "abs(High - Close) > 100 * abs(Low - Close)"))
        rules.append(SimpleRule("Equities", "abs(High - Close) * 100 < abs(Low - Close)"))

        for index, row in market.tickers.iterrows():
            tickerCode = row[0]
            for rule in rules:
                rule.evaluateRule(tickerCode)

        marketRules = []

        marketRules.append(MarketRule("Indicator_ADI", "ADI > 0"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI > 25"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI > 50"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI < 0"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI < -25"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI < -50"))

        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC > 1"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC > 3"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC > 7"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC < -1"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC < -3"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_ROC < -7"))

        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA > 5"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA > 10"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA > 20"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA < -5"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA < -10"))
        marketRules.append(MarketRule("Indicator_ADI", "ADI_EMA < -20"))

        for marketRule in marketRules:
            marketRule.evaluateRule()

        TeamCity.setBuildResultText("Evaluated Rules")

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)
Пример #11
0
    def test_setBuildResultTextWithDefault(self, mockPrint):

        TeamCity.setBuildResultText("Hello!")
        mockPrint.assert_called_with("##teamcity[buildStatus text='Hello! ({build.status.text})']")
Пример #12
0
    def test_setBuildResultTextWithFalse(self, mockPrint):

        TeamCity.setBuildResultText("Hello!", False)
        mockPrint.assert_called_with("##teamcity[buildStatus text='Hello!']")
Пример #13
0
def importData(argv):
    """
    Import Share Data.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.ImportData -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {
        "scope": __name__,
        "arguments": " ".join(argv)
    })
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {
            "scope": __name__,
            "exception": str(e)
        })
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Import Market Data", {
            "scope": __name__,
            "market": marketName
        })

        tickerCodesRelativeFilePath = "resources/%s.txt" % (marketName)

        market = Market(tickerCodesRelativeFilePath)

        for index, row in market.tickers.iterrows():
            equity = Equity(row[0])
            equity.importData()

        TeamCity.setBuildResultText("Imported Data from Yahoo")

    else:
        Logger.log(logging.ERROR, "Missing Options", {
            "scope": __name__,
            "options": str(argv)
        })
        usage()
        sys.exit(2)
Пример #14
0
def evaluateThreeRuleStrategies(argv):
    """
    Evaluate Three-Rule Strategies.

    :param argv: Command Line Parameters.

    -n = Name
    -N = Number of Two-Rule Strategies to Work Through
    -s = Strategy Name
    -t = Minimum Number of Trades

    Example:

    python -m pyswing.EvaluateThreeRuleStrategies -n asx -N 10 -s v4.0 -t 400
    """

    Logger.log(logging.INFO, "Log Script Call", {"scope":__name__, "arguments":" ".join(argv)})
    Logger.pushLogData("script", __name__)

    marketName = ""
    numberOfStrategies = ""
    numberOfTrades = ""

    try:
        shortOptions = "n:N:s:t:dh"
        longOptions = ["marketName=","number=", "strategy=", "trades=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {"scope": __name__, "exception": str(e)})
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg
        elif opt in ("-N", "--number"):
            numberOfStrategies = int(arg)
        elif opt in ("-s", "--strategy"):
            pyswing.constants.pySwingStrategy = arg
        elif opt in ("-t", "--trades"):
            numberOfTrades = arg

    if marketName != "" and numberOfTrades != "" and numberOfStrategies > 0 and pyswing.constants.pySwingStrategy:

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Evaluate Three-Rule Strategies", {"scope":__name__, "market":marketName, "number":str(numberOfStrategies), "strategy":pyswing.constants.pySwingStrategy})

        rules = getRules()

        strategiesEvaluated = 0
        while strategiesEvaluated < numberOfStrategies:

            rule1, rule2, exit, type = getBestUnprocessedTwoRuleStrategy(numberOfTrades)
            for rule3 in rules:
                strategy = Strategy(rule1, rule2, exit, type, rule3)
                strategy.evaluateThreeRuleStrategy()

            markTwoRuleStrategyAsProcessed(rule1, rule2, type)

            strategiesEvaluated += 1

        deleteEmptyThreeRuleStrategies()

        TeamCity.setBuildResultText("Evaluated Three-Rule Strategies")

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)
Пример #15
0
def analyseStrategies(argv):
    """
    Analyse Strategies.

    :param argv: Command Line Parameters.

    -n = Name
    -s = Strategy Name
    -r = Minimum Return per Trade
    -t = Minimum Number of Trades

    Example:

    python -m pyswing.AnalyseStrategies -n asx -s v4.0 -r 1.0 -t 500
    """

    Logger.log(logging.INFO, "Log Script Call", {"scope": __name__, "arguments": " ".join(argv)})
    Logger.pushLogData("script", __name__)

    marketName = ""
    returnPerTrade = ""
    numberOfTrades = ""

    try:
        shortOptions = "n:r:s:t:dh"
        longOptions = ["marketName=", "return=", "strategy=", "trades=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {"scope": __name__, "exception": str(e)})
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg
        elif opt in ("-r", "--return"):
            returnPerTrade = arg
        elif opt in ("-s", "--strategy"):
            pyswing.constants.pySwingStrategy = arg
        elif opt in ("-t", "--trades"):
            numberOfTrades = arg

    if marketName != "" and numberOfTrades != "" and returnPerTrade != "" and pyswing.constants.pySwingStrategy:

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(
            logging.INFO,
            "Analyse Strategies",
            {
                "scope": __name__,
                "market": marketName,
                "numberOfTrades": numberOfTrades,
                "returnPerTrade": returnPerTrade,
                "strategy": pyswing.constants.pySwingStrategy,
            },
        )

        strategies = getStrategies(numberOfTrades, returnPerTrade)

        for strategy in strategies:
            strategy.analyse()

        TeamCity.setBuildResultText("Analysed Strategies")

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)
Пример #16
0
def updateIndicators(argv):
    """
    Update Indicators.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.UpdateIndicators -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {"scope": __name__, "arguments": " ".join(argv)})
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {"scope": __name__, "exception": str(e)})
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Update Indicators", {"scope": __name__, "market": marketName})

        tickerCodesRelativeFilePath = "resources/%s.txt" % (marketName)

        market = Market(tickerCodesRelativeFilePath)

        # Market Indicators
        adiIndicator = IndicatorADI()
        adiIndicator.updateIndicator()

        # Equity Indicators
        for index, row in market.tickers.iterrows():
            tickerCode = row[0]
            equity = Equity(tickerCode)
            equityDataFrame = equity.dataFrame()

            smaIndicator = IndicatorSMA(equityDataFrame, tickerCode)
            smaIndicator.updateIndicator()

            emaIndicator = IndicatorEMA(equityDataFrame, tickerCode)
            emaIndicator.updateIndicator()

            bbIndicator = IndicatorBB20(equityDataFrame, tickerCode)
            bbIndicator.updateIndicator()

            rocIndicator = IndicatorROC(equityDataFrame, tickerCode)
            rocIndicator.updateIndicator()

            macdIndicator = IndicatorMACD(equityDataFrame, tickerCode)
            macdIndicator.updateIndicator()

            stochIndicator = IndicatorSTOCH(equityDataFrame, tickerCode)
            stochIndicator.updateIndicator()

            rsiIndicator = IndicatorRSI(equityDataFrame, tickerCode)
            rsiIndicator.updateIndicator()

            adxIndicator = IndicatorADX(equityDataFrame, tickerCode)
            adxIndicator.updateIndicator()

            aroonIndicator = IndicatorAROON(equityDataFrame, tickerCode)
            aroonIndicator.updateIndicator()

            dxIndicator = IndicatorDX(equityDataFrame, tickerCode)
            dxIndicator.updateIndicator()

        TeamCity.setBuildResultText("Updated Indicators")

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)
Пример #17
0
def evaluateTwoRuleStrategies(argv):
    """
    Evaluate Two-Rule Strategies.

    :param argv: Command Line Parameters.

    -n = Name
    -m = Minimum Matches Per Day
    -s = Strategy Name

    Example:

    python -m pyswing.EvaluateTwoRuleStrategies -n asx -m 0.1 -s v4.0
    """

    Logger.log(logging.INFO, "Log Script Call", {"scope":__name__, "arguments":" ".join(argv)})
    Logger.pushLogData("script", __name__)

    marketName = ""
    minimumMatchesPerDay = None

    try:
        shortOptions = "n:m:s:dh"
        longOptions = ["marketName=", "matches=", "strategy=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {"scope": __name__, "exception": str(e)})
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg
        elif opt in ("-m", "--matches"):
            minimumMatchesPerDay = arg
        elif opt in ("-s", "--strategy"):
            pyswing.constants.pySwingStrategy = arg

    if marketName != "" and minimumMatchesPerDay and pyswing.constants.pySwingStrategy:

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Evaluate Two-Rule Strategies", {"scope":__name__, "market":marketName, "matches":minimumMatchesPerDay, "strategy":pyswing.constants.pySwingStrategy})

        strategies = getTwoRuleStrategies(minimumMatchesPerDay)

        exits = getExitStrategies()

        inverseStrategies = set()

        for rules in strategies:
            if rules not in inverseStrategies:

                for exit in exits:

                    buyStrategy = Strategy(rules[0], rules[1], exit, 'Buy')
                    buyStrategy.evaluateTwoRuleStrategy()

                    sellStrategy = Strategy(rules[0], rules[1], exit, 'Sell')
                    sellStrategy.evaluateTwoRuleStrategy()

                inverseStrategies.add((rules[1], rules[0]))

        TeamCity.setBuildResultText("Evaluated Two-Rule Strategies")

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)
Пример #18
0
def calculateExitValues(argv):
    """
    Calculate Exit Values.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.CalculateExitValues -n asx
    """

    Logger.log(logging.INFO, "Log Script Call", {"scope":__name__, "arguments":" ".join(argv)})
    Logger.pushLogData("script", __name__)

    marketName = ""

    try:
        shortOptions = "n:dh"
        longOptions = ["marketName=", "debug", "help"]
        opts, __ = getopt.getopt(argv, shortOptions, longOptions)
    except getopt.GetoptError as e:
        Logger.log(logging.ERROR, "Error Reading Options", {"scope": __name__, "exception": str(e)})
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-d", "--debug"):
            Logger().setLevel(logging.DEBUG)
        elif opt in ("-h", "--help"):
            print("?")
            usage()
            sys.exit()
        elif opt in ("-n", "--marketName"):
            marketName = arg

    if marketName != "":

        pyswing.database.initialiseDatabase(marketName)

        Logger.log(logging.INFO, "Calculate Exit Values", {"scope":__name__, "market":marketName})

        tickerCodesRelativeFilePath = "resources/%s.txt" % (marketName)

        market = Market(tickerCodesRelativeFilePath)

        for index, row in market.tickers.iterrows():
            tickerCode = row[0]

            exitValuesTrailingStop3 = ExitValuesTrailingStop(tickerCode, 0.03, 2)
            exitValuesTrailingStop3.calculateExitValues()

            # exitValuesTrailingStop2 = ExitValuesTrailingStop(tickerCode, 0.02, 3)
            # exitValuesTrailingStop2.calculateExitValues()
            #
            # exitValuesYesterday2 = ExitValuesYesterday(tickerCode, 0.02, 3)
            # exitValuesYesterday2.calculateExitValues()
            #
            # exitValuesYesterday3 = ExitValuesYesterday(tickerCode, 0.03, 2)
            # exitValuesYesterday3.calculateExitValues()

        TeamCity.setBuildResultText("Calculated Exit Values")

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)