def __init__(self): # start logger service from rrlib.rrLogger import logger from rrlib.rrPortfolio import rrPortfolio self.portfolio = rrPortfolio() self.log = logger() # To keep track of pending orders self.buyprice = None self.buycomm = None self.oneplot = False # starting ini parameters import configparser config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # max investment in % terms of porfolio # deprecating margin relates to R not maxinv self.maxinv = config.get('backtrader', 'maxinv') self.marginRequirement = float(config.get('backtrader', 'marginreq')) self.stoplossdistance = float(config.get('backtrader', 'stoploss')) # Add two MovingAverageSimple indicator and a crossover self.inds = dict() for i, d in enumerate(self.datas): self.inds[d] = dict() self.inds[d]['sma1'] = bt.indicators.SimpleMovingAverage( d.close, period=self.params.smashort) self.inds[d]['sma2'] = bt.indicators.SimpleMovingAverage( d.close, period=self.params.smalong) self.inds[d]['cross'] = bt.indicators.CrossOver( self.inds[d]['sma1'], self.inds[d]['sma2']) if i > 0: # Check we are not on the first loop of data feed: if self.oneplot is True: d.plotinfo.plotmaster = self.datas[0]
def __init__(self, *args, **kwargs): # starting common services sys.path.append(os.path.join(os.path.dirname(__file__), '..')) # starting logging from rrlib.rrLogger import logger self.log = logger() # starting backend services from rrlib.rrDb import rrDbManager from rrlib.rrPutSellStrategy import rrPutSellStrategy as rps from rrlib.rrController import rrController self.db = rrDbManager() self.sellp = rps() self.cont = rrController() # starting ini parameters config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # Telegram API key & chat id for secure comms self.APIkey = config.get('telegram', 'api') self.chatid = config.get('telegram', 'chatid') self.startBot = config.get('telegram', 'startbot') self.log.logger.debug(" rrTelegram module starting. ") # starting bot # self.bot = telegram.bot(self.APIkey) self.upd = Updater(self.APIkey) self.dp = self.upd.dispatcher
def __init__(self): # Starting common services from rrlib.rrLogger import logger, TqdmToLogger # Get logging service self.log = logger() self.tqdm_out = TqdmToLogger(self.log.logger) self.log.logger.debug(" Backtrader starting. ") # starting ini parameters import configparser import math config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # db filename to confirm it exists self.source = config.get('datasource', 'source') if self.source == "ib": self.funds = str(self.getAvailableFunds()) else: self.funds = config.get('portfolio', 'funds') if self.source == "ib": self.R = str(int(math.ceil(self.getAvailableFunds()*0.005 / 100.0)) * 100) else: self.R = config.get('portfolio', 'R') self.monthlyPremium = config.get('portfolio', 'monthlyPremium') if self.source == "ib": self.BP = float(self.getBuyingPower()) else: self.BP = config.get('portfolio', 'BP')
def __init__(self, symbol): sys.path.append(os.path.join(os.path.dirname(__file__), '..')) from rrlib.rrLogger import logger self.symbol = symbol self.log = logger() self.log.logger.debug(" Init Stock IB Data Fetcher "+str(symbol)) self.ib = IBConnection()
def __init__(self): sys.path.append(os.path.join(os.path.dirname(__file__), '..')) from rrlib.rrLogger import logger self.log = logger() # ib parameter import import configparser config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") self.ib_ip = config['ib']['ip'] self.ib_port = int(config['ib']['port']) self.ib = IB()
def __init__(self, symbol): sys.path.append(os.path.join(os.path.dirname(__file__), '..')) from rrlib.rrLogger import logger self.symbol = symbol self.log = logger() self.log.logger.debug(" Init Option Public Data Fetcher for " + symbol) # timeout import import configparser config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") self.timeout = int(config['urlfetcher']['Timeout'])
def __init__(self, *args, **kwargs): # starting common services sys.path.append(os.path.join(os.path.dirname(__file__), '..')) # starting logging from rrlib.rrLogger import logger self.log = logger() # starting ini parameters config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # Telegram API key & chat id for secure comms self.IFTTT = config['ifttt']['key'] self.url = config['ifttt']['url'] self.log.logger.debug(" rrIFTTT module starting. ")
def __init__(self): # starting common services sys.path.append(os.path.join(os.path.dirname(__file__), '..')) # starting logging from rrlib.rrLogger import logger self.log = logger() # starting backend services from rrlib.rrDb import rrDbManager self.db = rrDbManager() # starting ini parameters import configparser config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") self.log.logger.debug(" Golden Strategy module starting. ")
def __init__(self, *args, **kwargs): self.log = logger() self.intro() # Handle Ctrl - C def SigIntHand(SIG, FRM): self.log.logger.info( "To close wait for prompt and enter quit or exit. Ctrl-C does not exit" ) signal.signal(signal.SIGINT, SigIntHand) self.runCycle = 0 self.threads = [] self.running = True self.log.logger.info("Initialization finished robotRay server")
def __init__(self, symbol): # starting common services sys.path.append(os.path.join(os.path.dirname(__file__), '..')) # starting logging service from rrlib.rrLogger import logger self.symbol = symbol self.log = logger() self.log.logger.debug(" Init Stock Data Fetcher " + str(symbol)) # starting ini parameters import configparser config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # Get datasource from IB or Public self.source = config.get('datasource', 'source') # For manual fetching set time out self.timeout = int(config['urlfetcher']['Timeout'])
def __init__(self): # starting common services sys.path.append(os.path.join(os.path.dirname(__file__), '..')) # starting logging from rrlib.rrLogger import logger self.log = logger() # starting backend services from rrlib.rrDb import rrDbManager self.db = rrDbManager() # portfolio startup from rrlib.rrPortfolio import rrPortfolio self.portfolio = rrPortfolio() # starting ini parameters import configparser config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # daily decrease green if % stock dtd growth < -4.5%, -4.5% < yellow < 2%, red > 2% self.dayPriceChgGreen = config.get('sellputstrategy', 'dayPriceChgGreen') self.dayPriceChgRed = config['sellputstrategy']['dayPriceChgRed'] # expected minimum monthly premium for holding the option 1% self.monthlyPremium = self.portfolio.monthlyPremium # sma200 below 0 is red, <0.1 yellow, > 0.1 green self.smaGreen = config['sellputstrategy']['smaGreen'] self.smaRed = config['sellputstrategy']['smaRed'] # sales growth quarter to quarter self.salesGrowthGreen = config['sellputstrategy']['salesGrowthGreen'] self.salesGrowthRed = config['sellputstrategy']['salesGrowthRed'] # retreive R self.R = self.portfolio.R self.availableFunds = self.portfolio.funds # Intraday kpi green and red self.IntradayKPIGreen = config['sellputstrategy']['IntradayKPIGreen'] self.IntradayKPIRed = config['sellputstrategy']['IntradayKPIRed'] # Get number of days to BTC on Options self.BTCdays = config['sellputstrategy']['BTCdays'] # Target of premium collected before closing self.PremiumTarget = config['sellputstrategy']['PremiumTarget'] # Get option expected price flexiblity to ask limit self.ExpPrice2Ask = config['sellputstrategy']['ExpPrice2Ask'] # is telegram bot enabled for commands self.startbot = config.get('telegram', 'startbot') # Get verbose option boolean self.verbose = config['sellputstrategy']['verbose'] self.log.logger.debug(" Put Sell Strategy module starting. ")
def __init__(self, *args, **kwargs): # starting common services sys.path.append(os.path.join(os.path.dirname(__file__), '..')) # starting logging service from rrlib.rrLogger import logger self.log = logger() # starting backend services from rrlib.rrDb import rrDbManager self.db = rrDbManager() self.bt = rrBacktrader() self.sellp = rrPutSellStrategy() self.rrGoldenStrategy = rrGoldenStrategy() # starting ini parameters config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # run outside trading hours self.oth = config.get("debug", "oth") self.log.logger.debug("Initialization finished robotRay controller") # controller runtime variables self.runCycle = 0
def __init__(self): # Starting common services from rrlib.rrLogger import logger, TqdmToLogger from rrlib.rrDb import rrDbManager # Get logging service self.db = rrDbManager() self.log = logger() self.tqdm_out = TqdmToLogger(self.log.logger) self.log.logger.debug(" Backtrader starting. ") # starting ini parameters import configparser config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # db filename to confirm it exists self.dbFilename = config.get('backtrader', 'filename') self.timeframe = config.get('backtrader', 'timeframe') self.initializeDb() # Get datsource from pubic or ib self.source = config.get('datasource', 'source') # Get verbose option boolean self.verbose = config.get('datasource', 'verbose')
def __init__(self): # Starting common services from rrlib.rrLogger import logger, TqdmToLogger from rrlib.rrPortfolio import rrPortfolio # Get logging service self.log = logger() self.tqdm_out = TqdmToLogger(self.log.logger) self.log.logger.debug(" DB Manager starting. ") # start portfolio self.portfolio = rrPortfolio() # starting ini parameters import configparser config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # db filename to confirm it exists self.dbFilename = config.get('DB', 'filename') self.initializeDb() # Get list of stocks to track self.stocks = config.get('stocks', 'stocks') # Get datsource from pubic or ib self.source = config.get('datasource', 'source') # Get verbose option boolean self.verbose = config.get('datasource', 'verbose')
def __init__(self): # Starting common services from rrlib.rrLogger import logger, TqdmToLogger from rrlib.rrBacktrader import rrBacktrader from rrlib.rrPortfolio import rrPortfolio from rrlib.rrDb import rrDbManager as db # Get logging service self.log = logger() self.tqdm_out = TqdmToLogger(self.log.logger) self.log.logger.debug(" Backtrader starting. ") # startup backtrading db self.btdb = rrBacktrader() self.portfolio = rrPortfolio() self.db = db() # starting ini parameters import configparser config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # max investment in % terms of porfolio # deprecating margin relates to R not maxinv self.maxinv = config.get('backtrader', 'maxinv') self.commission = float(config.get('backtrader', 'commission')) self.marginRequirement = float(config.get('backtrader', 'marginreq')) self.stoplossdistance = float(config.get('backtrader', 'stoploss')) # for now use IB like commisions self.COMMINFO_DEFAULT = dict( stocklike=False, # Futures-like commtype=bt.CommissionInfo.COMM_FIXED, # fixed price per asset commission=2.0, # Standard IB Price for futures # mult=1000.0, # multiplier default 1 margin=float(self.portfolio.R)/(1-(1-self.stoplossdistance)) * \ self.marginRequirement # IB avg 27% del costo de la trx en acciones ) # Generate Cerebro self.cerebro = bt.Cerebro() self.cerebro.broker.setcash(float(self.portfolio.funds))
def __init__(self): # Starting common services from rrlib.rrLogger import logger, TqdmToLogger from rrlib.rrDb import rrDbManager # Get logging service self.db = rrDbManager() self.log = logger() self.tqdm_out = TqdmToLogger(self.log.logger) self.log.logger.debug(" Daily scanner starting. ") # starting ini parameters import configparser config = configparser.ConfigParser() config.read("rrlib/robotRay.ini") # set patterns for daily detection self.patterns = pd.DataFrame( np.array([ # ['CDL2CROWS', 'Two Crows', 'Low reversal w conf', '5.7 % ', '35.2 %'], [ 'CDL3BLACKCROWS', '* Three Black Crows *', 'High R2BE', '-0.144', '0.286' ], [ 'CDL3INSIDE', 'Three Inside Up/Down', 'Medium Reversal', '0.062', '0.354' ], [ 'CDL3LINESTRIKE', '* Three Line Strike *', 'High R2BU', '0.108', '0.369' ], # ['CDL3OUTSIDE', 'Three Outside Up/Down', 'Medium Reversal', '0.051', '0.35'], [ 'CDL3STARSINSOUTH', 'Three Stars In The South', 'Rare Medium R2BU w conf', '0.20', '0.40' ], [ 'CDL3WHITESOLDIERS', '* Three Advancing White Soldiers *', 'High R2BU', '-0.001', '0.333' ], [ 'CDLABANDONEDBABY', '* Abandoned Baby *', 'High reversal', '-0.046)', '0.318' ], ['CDLADVANCEBLOCK', 'Advance Block', '', '0.142', '0.381'], # ['CDLBELTHOLD' , 'Belt-hold', '','0.037', '0.346'], [ [ 'CDLBREAKAWAY', 'Breakaway', 'High Over(Sold/bought) 5 day use as conf', '0.109', '0.37' ], [ 'CDLCLOSINGMARUBOZU', 'Closing Marubozu', 'Rare High confirmation', '-0.047', '0.318' ], [ 'CDLCONCEALBABYSWALL', '* Concealing Baby Swallow *', 'Medium Rare R2BU', '0.50', '0.50' ], [ 'CDLCOUNTERATTACK', 'Counterattack', 'Low Reversal w conf', '0', '0' ], [ 'CDLDARKCLOUDCOVER', 'Dark Cloud Cover', '', '0.061', '0.354' ], # ['CDLDOJI','Doji','','',''], ['CDLDOJISTAR', 'Doji Star', '', '0.238', '0.413'], # ['CDLDRAGONFLYDOJI', 'Dragonfly Doji', '', '0.054', '0.351'], [ 'CDLENGULFING', 'Engulfing Pattern', 'Low Reversal', '0.104', '0.368' ], [ 'CDLEVENINGDOJISTAR', 'Evening Doji Star', 'High R2BE', '', '' ], [ 'CDLEVENINGSTAR', '* Evening Star *', 'Rare High R2BE', '0.006', '0.335' ], # ['CDLGAPSIDESIDEWHITE', 'Up/Down-gap side-by-side white lines', '', '0.013', '0.338'], ['CDLGRAVESTONEDOJI', 'Gravestone Doji', '', '0.196', '0.399'], ['CDLHAMMER', 'Hammer', 'Medium R2BU', '0.225', '0.408'], [ 'CDLHANGINGMAN', 'Hanging Man', 'Medium R2BE', '0.075', '0.358' ], ['CDLHARAMI', 'Harami Pattern', '', '0.219', '0.406'], [ 'CDLHARAMICROSS', 'Harami Cross Pattern', '', '0.207', '0.402' ], ['CDLHIGHWAVE', 'High-Wave Candle', '', '0.263', '0.421'], ['CDLHIKKAKE', 'Hikkake Pattern', '', '0.11', '0.371'], [ 'CDLHIKKAKEMOD', 'Modified Hikkake Pattern', '', '0.14', '0.381' ], ['CDLHOMINGPIGEON', 'Homing Pigeon', '', '0.344', '0.448'], [ 'CDLIDENTICAL3CROWS', '* Identical Three Crows *', 'High R2BE', '-0.078', '0.307' ], # ['CDLINNECK', 'In-Neck Pattern', 'Low Continuation', '0.047', '0.349'], [ 'CDLINVERTEDHAMMER', 'Inverted Hammer', 'Medium R2BU', '0.182', '0.394' ], # ['CDLKICKING', 'Kicking', '', '-0.11', '0.294'], # ['CDLKICKINGBYLENGTH','Kicking', 'bull/bear determined by the longer marubozu', '-0.117', '0.294'], ['CDLLADDERBOTTOM', 'Ladder Bottom', '', '-0.147', '0.382'], # ['CDLLONGLEGGEDDOJI', 'Long Legged Doji', '', '', ''], # ['CDLMARUBOZU', 'Marubozu', '', '-0.085', '0.305'], ['CDLMATCHINGLOW', 'Matching Low', '', '0.261', '0.42'], # ['CDLMATHOLD', 'Mat Hold', '','-0.40', '0.20'], ['CDLMORNINGDOJISTAR', 'Morning Doji Star', '', '0', '0'], ['CDLMORNINGSTAR', 'Morning Star', '', '0.152', '0.384'], # ['CDLONNECK', 'On-Neck Pattern', '', '0.015', '0.338'], ['CDLPIERCING', 'Piercing Pattern', '', '0.185', '0.395'], ['CDLRICKSHAWMAN', 'Rickshaw Man', '', '0.304', '0.435'], [ 'CDLRISEFALL3METHODS', 'Rising/Falling Three Methods', '', '0.088', '0.363' ], # ['CDLSEPARATINGLINES', 'Separating Lines', '', '-0.049', '0.317'], ['CDLSHOOTINGSTAR', 'Shooting Star', '', '0.135', '0.378'], # ['CDLSHORTLINE', 'Short Line Candle', '', '', ''], ['CDLSPINNINGTOP', 'Spinning Top', '', '0.271', '0.424'], # ['CDLSTALLEDPATTERN', 'Stalled Pattern', '', '', ''], ['CDLSTICKSANDWICH', 'Stick Sandwich', '', '0.273', '0.424'], # ['CDLTAKURI', 'Takuri (Dragonfly Doji with very long lower shadow)','', '0.038', '0.346'], ['CDLTASUKIGAP', 'Tasuki Gap', '', '0.17', '0.39'], # ['CDLTHRUSTING', 'Thrusting Pattern', '', '0.051', '0.35'], # ['CDLTRISTAR', 'Tristar Pattern', '', '0.032', '0.344'], ['CDLUNIQUE3RIVER', 'Unique 3 River', '', '0.206', '0.402'], [ 'CDLUPSIDEGAP2CROWS', 'Upside Gap Two Crows', '', '0.158', '0.386' ], [ 'CDLXSIDEGAP3METHODS', 'Upside/Downside Gap Three Methods', '', '0.133', '0.378' ] ]), columns=['cod', 'desc', 'impact', 'roi', 'successrate'])