Esempio n. 1
0
    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__)
Esempio n. 2
0
    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__)
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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__)
Esempio n. 6
0
    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__)