예제 #1
0
    def setUpClass(self):

        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

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

        deleteFile(pyswing.database.pySwingDatabase)

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())

        pretendDate = datetime.datetime(2015, 9, 1)
        with patch.object(Equity, '_getTodaysDate', return_value=pretendDate) as mock_method:

            self._equity = Equity("WOR.AX")
            self._equity.importData()

        indicatorADI = IndicatorADI()
        indicatorADI.updateIndicator()

        self.rule = MarketRule("Indicator_ADI", "ADI > 0")
        self.rule.evaluateRule()
예제 #2
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

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

        deleteFile(pyswing.database.pySwingDatabase)
        deleteFile(pyswing.database.pySwingTestDatabase)

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())

        pretendDate = datetime.datetime(2015, 7, 1)
        with patch.object(Equity, '_getTodaysDate',
                          return_value=pretendDate) as mock_method:
            args = "-n unitTest".split()
            importData(args)

        args = "-n unitTest".split()
        updateIndicators(args)

        args = "-n unitTest".split()
        evaluateRules(args)

        args = "-n unitTest".split()
        analyseRules(args)

        args = "-n unitTest".split()
        calculateExitValues(args)
예제 #3
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()
예제 #4
0
    def setUpClass(self):

        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

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

        deleteFile(pyswing.database.pySwingDatabase)

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())

        pretendDate = datetime.datetime(2015, 9, 1)
        with patch.object(Equity, '_getTodaysDate',
                          return_value=pretendDate) as mock_method:

            self._equity = Equity("WOR.AX")
            self._equity.importData()

        indicatorADI = IndicatorADI()
        indicatorADI.updateIndicator()

        self.rule = MarketRule("Indicator_ADI", "ADI > 0")
        self.rule.evaluateRule()
예제 #5
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

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

        deleteFile(pyswing.database.pySwingDatabase)
        deleteFile(pyswing.database.pySwingTestDatabase)

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())

        pretendDate = datetime.datetime(2015, 7, 1)
        with patch.object(Equity, '_getTodaysDate', return_value=pretendDate) as mock_method:
            args = "-n unitTest".split()
            importData(args)

        args = "-n unitTest".split()
        updateIndicators(args)

        args = "-n unitTest".split()
        evaluateRules(args)

        args = "-n unitTest".split()
        analyseRules(args)

        args = "-n unitTest".split()
        calculateExitValues(args)
예제 #6
0
    def test_pushLogData(self):

        myLogEntry = Logger._buildLogMessage(logging.INFO, "Test Log Entry", {
            "key1": "value1",
            "key2": "value2"
        })
        self.assertTrue(
            'key1="value1" key2="value2"' in myLogEntry,
            'Expected key1="value1" key2="value2" in %s' % myLogEntry)

        Logger.pushLogData("key3", "value3")
        myLogEntry = Logger._buildLogMessage(logging.INFO, "Test Log Entry", {
            "key1": "value1",
            "key2": "value2"
        })
        self.assertTrue(
            'key1="value1" key2="value2"' in myLogEntry,
            'Expected key1="value1" key2="value2" in %s' % myLogEntry)
        self.assertTrue('key3="value3"' in myLogEntry,
                        'Expected key3="value3" in %s' % myLogEntry)

        Logger.popLogData("key3")
        myLogEntry = Logger._buildLogMessage(logging.INFO, "Test Log Entry", {
            "key1": "value1",
            "key2": "value2"
        })
        self.assertTrue(
            'key1="value1" key2="value2"' in myLogEntry,
            'Expected key1="value1" key2="value2" in %s' % myLogEntry)
        self.assertFalse('key3="value3"' in myLogEntry,
                         'Did Not Expect key3="value3" in %s' % myLogEntry)
예제 #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 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)
예제 #9
0
    def setUpClass(self):

        Logger.pushLogData("unitTesting", __name__)

        forceWorkingDirectory()

        pyswing.database.pySwingDatabase = None
        pyswing.database.pySwingDatabaseInitialised = False
        pyswing.database.pySwingDatabaseOverridden = False
def generateHistoricTradesForActiveStrategies(argv):
    """
    Generate (in the HistoricTrades database table) Historic Trades for the Active Strategies.

    Empty the database table and then fill it with the historic trades for all the active strategies.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.GenerateHistoricTradesForActiveStrategies -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, "Generate Historic Trades for Active Strategies", {"scope":__name__, "market":marketName})

        emptyHistoricTradesTable()

        strategies = getActiveStrategies()

        for strategy in strategies:
            strategy.generateHistoricTrades()

    else:
        Logger.log(logging.ERROR, "Missing Options", {"scope": __name__, "options": str(argv)})
        usage()
        sys.exit(2)
예제 #11
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)
예제 #12
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

        deleteFile(pyswing.database.pySwingDatabase)

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())
예제 #13
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

        deleteFile(pyswing.database.pySwingDatabase)

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())
예제 #14
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

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

        deleteFile(pyswing.database.pySwingDatabase)

        copyFile(pyswing.database.pySwingTestDatabase, pyswing.database.pySwingDatabase)
예제 #15
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

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

        deleteFile(pyswing.database.pySwingDatabase)

        copyFile(pyswing.database.pySwingTestDatabase, pyswing.database.pySwingDatabase)
예제 #16
0
    def test_pushLogData(self):

        myLogEntry = Logger._buildLogMessage(logging.INFO, "Test Log Entry", {"key1":"value1","key2":"value2"})
        self.assertTrue('key1="value1" key2="value2"' in myLogEntry, 'Expected key1="value1" key2="value2" in %s' % myLogEntry)

        Logger.pushLogData("key3","value3")
        myLogEntry = Logger._buildLogMessage(logging.INFO, "Test Log Entry", {"key1":"value1","key2":"value2"})
        self.assertTrue('key1="value1" key2="value2"' in myLogEntry, 'Expected key1="value1" key2="value2" in %s' % myLogEntry)
        self.assertTrue('key3="value3"' in myLogEntry, 'Expected key3="value3" in %s' % myLogEntry)

        Logger.popLogData("key3")
        myLogEntry = Logger._buildLogMessage(logging.INFO, "Test Log Entry", {"key1":"value1","key2":"value2"})
        self.assertTrue('key1="value1" key2="value2"' in myLogEntry, 'Expected key1="value1" key2="value2" in %s' % myLogEntry)
        self.assertFalse('key3="value3"' in myLogEntry, 'Did Not Expect key3="value3" in %s' % myLogEntry)
예제 #17
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

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

        deleteFile(pyswing.database.pySwingDatabase)

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())
예제 #18
0
    def setUpClass(self):

        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

        pyswing.database.overrideDatabase("output/TestRule.db")

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())

        myRule = Rule("Rule - myRule")
        myRule._createTable()

        myOtherRule = Rule("Rule - myOtherRule")
        myOtherRule._createTable()
예제 #19
0
    def setUpClass(self):

        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

        pyswing.database.overrideDatabase("output/TestRule.db")

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())

        myRule = Rule("Rule - myRule")
        myRule._createTable()

        myOtherRule = Rule("Rule - myOtherRule")
        myOtherRule._createTable()
예제 #20
0
    def setUpClass(self):

        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

        deleteFile(pyswing.database.pySwingDatabase)

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())

        pretendDate = datetime.datetime(2015, 9, 1)
        with patch.object(Equity, '_getTodaysDate', return_value=pretendDate) as mock_method:

            self._equityCBA = Equity("WOR.AX")
            self._equityCBA.importData()
예제 #21
0
    def setUpClass(self):

        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

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

        deleteFile(pyswing.database.pySwingDatabase)

        args = "-n %s" % ("unitTesting")
        createDatabase(args.split())

        pretendDate = datetime.datetime(2015, 9, 1)
        with patch.object(Equity, '_getTodaysDate', return_value=pretendDate) as mock_method:

            self._equityCBA = Equity("CBA.AX")
            self._equityCBA.importData()
예제 #22
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()
예제 #23
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)
예제 #24
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)
예제 #25
0
 def setUpClass(self):
     Logger.pushLogData("unitTesting", __name__)
     forceWorkingDirectory()
예제 #26
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)
예제 #27
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)
예제 #28
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)
예제 #29
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

        self._market = Market("resources/asx.txt")
예제 #30
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)
예제 #31
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)
예제 #32
0
 def setUpClass(self):
     Logger.pushLogData("unitTesting", __name__)
     forceWorkingDirectory()
예제 #33
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)
예제 #34
0
파일: AskHorse.py 프로젝트: garyjoy/pyswing
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)
예제 #35
0
    def setUpClass(self):
        Logger.pushLogData("unitTesting", __name__)
        forceWorkingDirectory()

        self._market = Market("resources/asx.txt")
예제 #36
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)
예제 #37
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)
예제 #38
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)
예제 #39
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)
예제 #40
0
def generateHistoricTradesForActiveStrategies(argv):
    """
    Generate (in the HistoricTrades database table) Historic Trades for the Active Strategies.

    Empty the database table and then fill it with the historic trades for all the active strategies.

    :param argv: Command Line Parameters.

    -n = Name

    Example:

    python -m pyswing.GenerateHistoricTradesForActiveStrategies -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,
                   "Generate Historic Trades for Active Strategies", {
                       "scope": __name__,
                       "market": marketName
                   })

        emptyHistoricTradesTable()

        strategies = getActiveStrategies()

        for strategy in strategies:
            strategy.generateHistoricTrades()

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