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()
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)
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 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)
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)
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)
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)
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)
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())
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())
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)
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)
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)
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())
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()
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()
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()
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 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)
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)
def setUpClass(self): Logger.pushLogData("unitTesting", __name__) forceWorkingDirectory()
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)
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)
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)
def setUpClass(self): Logger.pushLogData("unitTesting", __name__) forceWorkingDirectory() self._market = Market("resources/asx.txt")
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)
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)
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)
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)
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)
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)
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)
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)
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)