def bexecute(self, lArgs, oValues): """bexecute executes the order command. """ from OTMql427.SimpleFormat import sMakeMark _lCmds = LCOMMANDS self.lArgs = lArgs self.oValues = oValues self.vassert_args(lArgs, LCOMMANDS, imin=1) if self.bis_help(lArgs): return if self.ocmd2.oListenerThread is None: self.ocmd2.vError("ListenerThread not started; use 'sub run retval.#'") return sChartId = self.ocmd2.sDefaultChart # sMark is a simple timestamp: unix time with msec. sDo = lArgs[0] if sDo in LCOMMANDS: sMark = sMakeMark() oMeth = getattr(self, 'order_' +sDo) oMeth(sMark, sChartId) return self.ocmd2.poutput("ERROR: Unrecognized order command: " + str(lArgs) +'\n' +__doc__)
def bexecute(self, lArgs, oValues): """bexecute executes the order command. """ from OTMql427.SimpleFormat import sMakeMark _lCmds = LCOMMANDS self.lArgs = lArgs self.oValues = oValues self.vassert_args(lArgs, LCOMMANDS, imin=1) if self.bis_help(lArgs): return if self.ocmd2.oListenerThread is None: self.ocmd2.vError( "ListenerThread not started; use 'sub run retval.#'") return sChartId = self.ocmd2.sDefaultChart # sMark is a simple timestamp: unix time with msec. sDo = lArgs[0] if sDo in LCOMMANDS: sMark = sMakeMark() oMeth = getattr(self, 'order_' + sDo) oMeth(sMark, sChartId) return self.ocmd2.poutput("ERROR: Unrecognized order command: " + str(lArgs) + '\n' + __doc__)
def bexecute(self, lArgs, oValues): """bexecute executes the publish command. """ from OTMql427.SimpleFormat import sMakeMark _lCmds = LCOMMANDS self.lArgs = lArgs self.oValuesb = oValues self.vassert_args(lArgs, LCOMMANDS, imin=1) if self.bis_help(lArgs): return if self.ocmd2.oCurrentPubTarget is None: assert self.ocmd2.oConfig['OTCmd2']['lOnlineTargets'], \ "ERROR: empty self.ocmd2.oConfig['OTCmd2']['lOnlineTargets']" sDo = lArgs[0] oMeth = getattr(self, 'publish_' + sDo) # Set the target for subscribe - call without args to see the current target if sDo in ['get', 'config'] or (sDo == 'set' and len(lArgs) == 1): oMeth() return # everything beyond here requires an argument self.vassert_args(lArgs, LCOMMANDS, imin=2) if sDo in ['set']: oMeth() return # sMark is a simple timestamp: unix time with msec. sMark = sMakeMark() if oValues and oValues.sChartId: sChartId = oValues.sChartId else: sChartId = self.ocmd2.sDefaultChart if not sChartId: sChartId = 'oChart_ANY_0_FFFFFFFF_1' self.ocmd2.vWarn("No default chart set; using: " + sChartId) if sDo in ['wait', 'exec', 'sync']: oMeth(sChartId, sMark) return if self.ocmd2.oListenerThread is None: self.vWarn("ListenerThread not started; do 'sub run retval.#'") if sDo in ['cmd', 'async', 'eval', 'json']: oMeth(sChartId, sMark) return self.poutput("ERROR: Unrecognized publish command: " + str(lArgs) + '\n' + __doc__) return
def bexecute(self, lArgs, oValues): """bexecute executes the publish command. """ from OTMql427.SimpleFormat import sMakeMark _lCmds = LCOMMANDS self.lArgs = lArgs self.oValuesb = oValues self.vassert_args(lArgs, LCOMMANDS, imin=1) if self.bis_help(lArgs): return if self.ocmd2.oCurrentPubTarget is None: assert self.ocmd2.oConfig['OTCmd2']['lOnlineTargets'], \ "ERROR: empty self.ocmd2.oConfig['OTCmd2']['lOnlineTargets']" sDo = lArgs[0] oMeth = getattr(self, 'publish_' +sDo) # Set the target for subscribe - call without args to see the current target if sDo in ['get', 'config'] or (sDo == 'set' and len(lArgs) == 1): oMeth() return # everything beyond here requires an argument self.vassert_args(lArgs, LCOMMANDS, imin=2) if sDo in ['set']: oMeth() return # sMark is a simple timestamp: unix time with msec. sMark = sMakeMark() if oValues and oValues.sChartId: sChartId = oValues.sChartId else: sChartId = self.ocmd2.sDefaultChart if not sChartId: sChartId = 'oChart_ANY_0_FFFFFFFF_1' self.ocmd2.vWarn("No default chart set; using: " +sChartId) if sDo in ['wait', 'exec', 'sync']: oMeth(sChartId, sMark) return if self.ocmd2.oListenerThread is None: self.vWarn("ListenerThread not started; do 'sub run retval.#'") if sDo in ['cmd', 'async', 'eval', 'json']: oMeth(sChartId, sMark) return self.poutput("ERROR: Unrecognized publish command: " + str(lArgs) +'\n' +__doc__) return
def do_order(self, oArgs, oOpts=None): from OTMql427.SimpleFormat import sFormatMessage, sMakeMark __doc__ = sORD__doc__ _lCmds = ['list', 'trades', 'history', 'info', 'exposure', 'close', 'but', 'sell'] if not oArgs: self.vOutput("Commands to order (and arguments) are required\n" + _lCmds) return if self.oListenerThread is None: self.vError("ListenerThread not started; use 'sub run retval.#'") return sChartId = self.sDefaultChart # sMark is a simple timestamp: unix time with msec. sMark = sMakeMark() lArgs = oArgs.split() sDo = lArgs[0] assert sDo in _lCmds, \ "ERROR: choose one of: " +str(_lCmds) if sDo == 'list' or sDo == 'tickets': sMsgType = 'exec' # Mt4 command # FixMe: trailing | sInfo = 'jOTOrdersTickets' j = self.gWaitForMessage(sMsgType, sChartId, sMark, sInfo) # jOTOrdersTickets # pprint the json? self.vOutput(sInfo +": " +str(j)) return if sDo == 'trades': sMsgType = 'exec' # Mt4 command # FixMe: trailing | sInfo = 'jOTOrdersTrades' j = self.gWaitForMessage(sMsgType, sChartId, sMark, sInfo) self.vOutput(sInfo +": " +str(j)) return if sDo == 'history': sMsgType = 'exec' # Mt4 command # FixMe: trailing | sInfo = 'jOTOrdersHistory' j = self.gWaitForMessage(sMsgType, sChartId, sMark, sInfo) self.vOutput(sInfo +": " +str(j)) return if sDo == 'info': sMsgType = 'exec' # Mt4 command sCmd = 'jOTOrderInformationByTicket' assert len(lArgs) > 1, "ERROR: orders info iTicket" sInfo = str(lArgs[1]) j = self.gWaitForMessage(sMsgType, sChartId, sMark, sCmd, sInfo) self.vOutput(sInfo +": " +str(j)) return if sDo == 'exposure': sMsgType = 'exec' # Mt4 command sCmd = 'fOTExposedEcuInMarket' sInfo = str(0) f = self.gWaitForMessage(sMsgType, sChartId, sMark, sCmd, sInfo) self.vOutput(sInfo +": " +str(f)) return if sDo == 'close': sMsgType = 'exec' # Mt4 command assert len(lArgs) >= 2, "ERROR: order close iTicket [fPrice iSlippage}" sTicket = lArgs[1] if len(lArgs) >= 3: sPrice = lArgs[2] sSlippage = lArgs[3] sCmd = 'iOTOrderCloseFull' self.gWaitForMessage(sMsgType, sChartId, sMark, sCmd, sTicket, sPrice, sSlippage) else: sCmd = 'iOTOrderCloseMarket' self.gWaitForMessage(sMsgType, sChartId, sMark, sCmd, sTicket) return if sDo == 'buy' or sDo == 'sell': sMsgType = 'exec' # Mt4 command if sDo == 'buy': iCmd = 0 else: iCmd = 1 # Sell 1 assert len(lArgs) >= 3, "ERROR: order buy|sell sSymbol fVolume [fPrice iSlippage]" # double stoploss, double takeprofit, # string comment="", int magic=0 sArg1 = str(iCmd) sSymbol = lArgs[1] sVolume = lArgs[2] if len(lArgs) >= 5: sPrice = lArgs[3] sSlippage = lArgs[4] sCmd = 'iOTOrderSend' self.gWaitForMessage(sMsgType, sChartId, sMark, sCmd, sSymbol, sArg1, sVolume, sPrice, sSlippage) else: sCmd = 'iOTOrderSendMarket' self.gWaitForMessage(sMsgType, sChartId, sMark, sCmd, sSymbol, sArg1, sVolume) return # (int iTicket, double fPrice, int iSlippage, color cColor=CLR_NONE) self.vError("Unrecognized order command: " + str(oArgs) +'\n' +__doc__)
def do_publish(self, oArgs, oOpts=None): from OTMql427.SimpleFormat import sFormatMessage, sMakeMark __doc__ = sPUB__doc__ _lCmds = ['get', 'set', 'config', 'wait',] # , 'cmd' 'eval', 'json' if not oArgs: self.vOutput("Commands to publish (and arguments) are required\n" + __doc__) return lArgs = oArgs.split() sDo = lArgs[0] if self.oCurrentPubTarget is None: assert self.oConfig['default']['lOnlineTargets'], \ "ERROR: empty self.oConfig['default']['lOnlineTargets']" # Set the target for subscribe - call without args to see the current target if sDo == 'get' or (sDo == 'set' and len(lArgs) == 1): if self.oCurrentPubTarget is None: l = self.oConfig['default']['lOnlineTargets'] for sElt in l: assert sElt in self.oConfig.keys(), \ "ERROR: ini section not found: " + sCurrentPubTarget if len(l) > 1: self.vOutput("The publish online targets available are: " +repr(l)) return sCurrentPubTarget = l[0] self.oCurrentPubTarget = self.oConfig[sCurrentPubTarget] self.oCurrentPubTarget.name = sCurrentPubTarget else: sCurrentPubTarget = self.oCurrentPubTarget.name self.vOutput("The current publish online target is: " +sCurrentPubTarget) return # configure the current target for subscribe: [KEY [VAL]] if sDo == 'config': if self.oCurrentPubTarget is None: assert self.oConfig['default']['lOnlineTargets'], \ "ERROR: empty self.oConfig['default']['lOnlineTargets']" l = self.oConfig['default']['lOnlineTargets'] self.vError("Use \"pub set\" to set the current target to one of: " + repr(l)) return # do I need to dict this or make an ConfigObj version? self.vConfigOp(lArgs, self.oCurrentPubTarget) return # everything beyond here requires an argument assert len(lArgs) > 1, \ "ERROR: pub " +sDo +" COMMAND ARG1..." if sDo == 'set': sTarget = lArgs[1] assert sTarget in self.oConfig['default']['lOnlineTargets'], \ "ERROR: " +sTarget +" not in OTCmd2.ini['default']['lOnlineTargets']: " \ +repr(self.oConfig['default']['lOnlineTargets']) assert sTarget in self.oConfig.keys(), \ "ERROR: sTarget not in self.oConfig.keys()" self.oCurrentPubTarget = self.oConfig[sTarget] self.oCurrentPubTarget.name = sTarget self.vOutput("Set publish target to: " + repr(self.G(sTarget))) return # sMark is a simple timestamp: unix time with msec. sMark = sMakeMark() if oOpts and oOpts.sChartId: sChartId = oOpts.sChartId else: sChartId = self.sDefaultChart if not sChartId: sChartId = 'oChart_ANY_0_FFFFFFFF_1' self.vWarn("No default chart set; using: " +sChartId) if sDo == 'wait' or sDo == 'exec' or sDo == 'sync': sMsgType = 'exec' # Mt4 command # Raises a Mt4Timeout error if there is no answer in 60 seconds gRetval = self.gWaitForMessage(sMsgType, sChartId, sMark, *lArgs[1:]) self.vOutput("Returned: " +repr(self.G(gRetval))) return if self.oListenerThread is None: self.vWarn("ListenerThread not started; do 'sub run retval.#'") if sDo == 'cmd' or sDo == 'async': # I dont think this works, at least under ZeroMQ # There is not handling of the null return message sMsgType = 'cmd' # Mt4 command e = self.eSendMessage(sMsgType, sChartId, sMark, *lArgs[1:]) return # not ready if sDo == 'eval': sMsgType = 'eval' sInfo = str(lArgs[1]) # FixMe: how do we distinguish variable or thunk? if len(lArgs) > 2: sInfo += '(' +str(','.join(lArgs[2:])) +')' gRetval = self.gWaitForMessage(sMsgType, sChartId, sMark, sInfo) self.vOutput("Returned: " +repr(self.G(gRetval))) return # not ready if sDo == 'json': sMsgType = 'json' # FixMe: broken but unused sInfo = json.dumps(str(' '.join(lArgs[1:]))) gRetval = self.gWaitForMessage(sMsgType, sChartId, sMark, sInfo) self.vOutput("Returned: " +repr(self.G(gRetval))) return self.vError("Unrecognized publish command: " + str(oArgs) +'\n' +__doc__)