Example #1
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

        pyswing.globals.potentialRuleMatches = None
        pyswing.globals.equityCount = None

        pyswing.database.overrideDatabase("output/TestStrategy.db")
        pyswing.constants.pySwingStartDate = datetime.datetime(2015, 1, 1)

        deleteFile(pyswing.database.pySwingDatabase)

        copyFile(pyswing.database.pySwingTestDatabase, pyswing.database.pySwingDatabase)

        twoRuleStrategy = Strategy("Rule Equities Indicator_BB20 abs(t1.Close - t2.upperband) < abs(t1.Close - t2.middleband)", "Rule Equities abs(Close - High) * 2 < abs(Close - Low)", "Exit TrailingStop3.0 RiskRatio2", "Buy")
        twoRuleStrategy.evaluateTwoRuleStrategy()

        threeRuleStrategy = Strategy("Rule Equities Indicator_BB20 abs(t1.Close - t2.upperband) < abs(t1.Close - t2.middleband)", "Rule Equities abs(Close - High) * 2 < abs(Close - Low)", "Exit TrailingStop3.0 RiskRatio2", "Buy", "Rule Indicator_RSI RSI > 20")
        threeRuleStrategy.evaluateThreeRuleStrategy()

        historicTrades = Strategy("Rule Equities Indicator_BB20 abs(t1.Close - t2.upperband) < abs(t1.Close - t2.middleband)", "Rule Equities abs(Close - High) * 2 < abs(Close - Low)", "Exit TrailingStop3.0 RiskRatio2", "Buy", "Rule Indicator_RSI RSI > 20")
        historicTrades.generateHistoricTrades()
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)
Example #3
0
    def test_analyseStrategy(self):

        strategy = Strategy('Rule Indicator_RSI RSI > 20', 'Rule Indicator_RSI RSI > 20', 'Exit TrailingStop3.0 RiskRatio2', 'Buy', 'Rule Indicator_RSI RSI > 20')
        strategy.meanResultPerTrade = 1.0
        strategy.medianResultPerTrade = 1.0
        strategy.totalProfit = 1.0
        strategy.numberOfTrades = 1.0
        strategy.sharpeRatio = 1.0
        strategy.maximumDrawdown = 1.0
        data = strategy.askHorse('2015-05-25 00:00:00')
        self.assertTrue(data)
        self.assertEqual(len(strategy.tradeDetails), 3)

        strategy = Strategy('Rule Equities abs(Close - High) * 10 < abs(Close - Low)', 'Rule Equities abs(Close - High) * 10 < abs(Close - Low)', 'Exit TrailingStop3.0 RiskRatio2', 'Buy', 'Rule Equities abs(Close - High) * 10 < abs(Close - Low)')
        strategy.meanResultPerTrade = 1.0
        strategy.medianResultPerTrade = 1.0
        strategy.totalProfit = 1.0
        strategy.numberOfTrades = 1.0
        strategy.sharpeRatio = 1.0
        strategy.maximumDrawdown = 1.0
        moreData = strategy.askHorse('2015-05-26 00:00:00')
        self.assertFalse(moreData)
        self.assertEqual(len(strategy.tradeDetails), 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)
Example #5
0
    def test_analyseStrategy(self):

        strategy = Strategy('Rule Indicator_RSI RSI > 20',
                            'Rule Indicator_RSI RSI > 20',
                            'Exit TrailingStop3.0 RiskRatio2', 'Buy',
                            'Rule Indicator_RSI RSI > 20')
        strategy.meanResultPerTrade = 1.0
        strategy.medianResultPerTrade = 1.0
        strategy.totalProfit = 1.0
        strategy.numberOfTrades = 1.0
        strategy.sharpeRatio = 1.0
        strategy.maximumDrawdown = 1.0
        data = strategy.askHorse('2015-05-25 00:00:00')
        self.assertTrue(data)
        self.assertEqual(len(strategy.tradeDetails), 3)

        strategy = Strategy(
            'Rule Equities abs(Close - High) * 10 < abs(Close - Low)',
            'Rule Equities abs(Close - High) * 10 < abs(Close - Low)',
            'Exit TrailingStop3.0 RiskRatio2', 'Buy',
            'Rule Equities abs(Close - High) * 10 < abs(Close - Low)')
        strategy.meanResultPerTrade = 1.0
        strategy.medianResultPerTrade = 1.0
        strategy.totalProfit = 1.0
        strategy.numberOfTrades = 1.0
        strategy.sharpeRatio = 1.0
        strategy.maximumDrawdown = 1.0
        moreData = strategy.askHorse('2015-05-26 00:00:00')
        self.assertFalse(moreData)
        self.assertEqual(len(strategy.tradeDetails), 0)
Example #6
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

        pyswing.globals.potentialRuleMatches = None
        pyswing.globals.equityCount = None

        pyswing.database.overrideDatabase("output/TestStrategy.db")
        pyswing.constants.pySwingStartDate = datetime.datetime(2015, 1, 1)

        deleteFile(pyswing.database.pySwingDatabase)

        copyFile(pyswing.database.pySwingTestDatabase,
                 pyswing.database.pySwingDatabase)

        twoRuleStrategy = Strategy(
            "Rule Equities Indicator_BB20 abs(t1.Close - t2.upperband) < abs(t1.Close - t2.middleband)",
            "Rule Equities abs(Close - High) * 2 < abs(Close - Low)",
            "Exit TrailingStop3.0 RiskRatio2", "Buy")
        twoRuleStrategy.evaluateTwoRuleStrategy()

        threeRuleStrategy = Strategy(
            "Rule Equities Indicator_BB20 abs(t1.Close - t2.upperband) < abs(t1.Close - t2.middleband)",
            "Rule Equities abs(Close - High) * 2 < abs(Close - Low)",
            "Exit TrailingStop3.0 RiskRatio2", "Buy",
            "Rule Indicator_RSI RSI > 20")
        threeRuleStrategy.evaluateThreeRuleStrategy()

        historicTrades = Strategy(
            "Rule Equities Indicator_BB20 abs(t1.Close - t2.upperband) < abs(t1.Close - t2.middleband)",
            "Rule Equities abs(Close - High) * 2 < abs(Close - Low)",
            "Exit TrailingStop3.0 RiskRatio2", "Buy",
            "Rule Indicator_RSI RSI > 20")
        historicTrades.generateHistoricTrades()