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 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 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 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 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 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 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 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 test_setBuildResultTextWithDefault(self, mockPrint): TeamCity.setBuildResultText("Hello!") mockPrint.assert_called_with("##teamcity[buildStatus text='Hello! ({build.status.text})']")
def test_setBuildResultTextWithFalse(self, mockPrint): TeamCity.setBuildResultText("Hello!", False) mockPrint.assert_called_with("##teamcity[buildStatus text='Hello!']")
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 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 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 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 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 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)