[R-SIG-Finance] Long Enter Position do not "block" Short Enter Orders

Diego Peroni diegoperoni at vodafone.it
Mon Apr 11 17:42:36 CEST 2016


Now it works,
this is my custom function:

osMaxPosLS = function(data, timestamp, orderqty, ordertype, orderside, 
portfolio, symbol, ruletype, ...) {
   maxpos = osMaxPos(data, timestamp, orderqty, ordertype, orderside, 
portfolio, symbol, ruletype, ...)
   curpos = getPosQty(portfolio, symbol, timestamp)
   if (orderside == 'long' & curpos<0)
     maxpos = 0
   if (orderside == 'short' & curpos>0)
     maxpos = 0
   return (maxpos)
}

Thank you for your help!

Diego




On 11/04/2016 17:13, Ilya Kipnis wrote:
> I see your question. If you want short orders not to fire when you 
> have a long position, you should create a custom order sizing function 
> that returns 0 if your current position isn't zero for both long and 
> short positions.
>
> On Mon, Apr 11, 2016 at 11:07 AM, Diego Peroni 
> <diegoperoni at vodafone.it <mailto:diegoperoni at vodafone.it>> wrote:
>
>     Thank you Ilya,
>
>     I've placed orderset='ocoall' in both ENTER orders (named "LE" and
>     "SE") as in the following code but testing them I have the same
>     problem: long positions are closed by short (enter) positions...
>     Can you please tell me what I'm doing wrong?
>
>     Diego
>
>
>     #################################
>     # MAX POSITION (1 future)
>     #################################
>     addPosLimit(portfolio = qs.strategy, symbol = symbol, timestamp =
>     initDate, maxpos = 1)
>
>     #################################
>     # LONG STRATEGY
>     #################################
>     add.rule(qs.strategy, name='ruleSignal',
>              arguments = list(sigcol="upTrend", sigval=TRUE,
>                               replace=TRUE,
>                               prefer='Open',
>                               orderside='long',
>                               ordertype='stoplimit',
>     order.price=quote(mktdata$price.enter.long[timestamp]),
>                               orderqty=1,
>                               osFUN='osMaxPos',
>                               orderset='ocoall',
>
>     time.in.force=quote(timeInForceLong)),
>              type='enter',
>              label='LE')
>
>     add.rule(qs.strategy, name='ruleSignal',
>              arguments=list(sigcol='exitLong', sigval=TRUE,
>                             replace=FALSE,
>                             orderside='long',
>                             ordertype='market',
>                             orderqty='all',
>                             prefer='Open'
>              ),
>              type='exit',
>              label='ExitLong',
>              enabled=TRUE)
>
>     #################################
>     # SHORT STRATEGY
>     #################################
>     add.rule(qs.strategy, name='ruleSignal',
>              arguments=list(sigcol="downTrend", sigval=TRUE,
>                             replace=TRUE,
>                             prefer='Open',
>                             orderside='short',
>                             ordertype='stoplimit',
>     order.price=quote(mktdata$price.enter.short[timestamp]),
>                             orderqty=-1,
>                             osFUN='osMaxPos',
>                             orderset='ocoall',
>     time.in.force=quote(timeInForceShort)),
>              type='enter',
>              label='SE')
>
>     add.rule(qs.strategy, name='ruleSignal',
>              arguments=list(sigcol='exitShort', sigval=TRUE,
>                             replace=FALSE,
>                             orderside='short',
>                             ordertype='market',
>                             orderqty='all',
>                             prefer='Open'
>              ),
>              type='exit',
>              label='ExitShort',
>              enabled=TRUE)
>
>
>
>
>
>     On 11/04/2016 15:05, Ilya Kipnis wrote:
>>     Short orders do not by default cancel long orders. You need to
>>     have them in the same order set.
>>
>>     On Mon, Apr 11, 2016 at 6:39 AM, Diego Peroni
>>     <diegoperoni at vodafone.it <mailto:diegoperoni at vodafone.it>> wrote:
>>
>>         Hi all,
>>
>>         my simple strategy sets long/short ENTER orders and relative
>>         long/short EXIT orders.
>>
>>         I don't understand why, if I have an open LONG position,
>>         SHORT enter order triggers (wrongly closing open position...).
>>
>>         My desire is that if I already have an OPEN position (long)
>>         "opposite" orders (short enter) do not triggers.
>>
>>         Thanks in advance for your help
>>
>>         Diego
>>
>>
>>         #################################
>>         # MAX POSITION (1 future)
>>         #################################
>>         addPosLimit(portfolio = qs.strategy, symbol = symbol,
>>         timestamp = initDate, maxpos = 1)
>>
>>         #################################
>>         # LONG STRATEGY
>>         #################################
>>         add.rule(qs.strategy, name='ruleSignal',
>>                  arguments = list(sigcol="upTrend", sigval=TRUE,
>>                                   replace=TRUE,
>>                                   prefer='Open',
>>                                   orderside='long',
>>         ordertype='stoplimit',
>>         order.price=quote(mktdata$price.enter.long[timestamp]),
>>                                   orderqty=1,
>>                                   osFUN='osMaxPos',
>>         time.in.force=quote(timeInForceLong)),
>>                  type='enter',
>>                  label='LE')
>>         add.rule(qs.strategy, name='ruleSignal',
>>                  arguments=list(sigcol='exitLong', sigval=TRUE,
>>                                 replace=FALSE,
>>                                 orderside='long',
>>                                 ordertype='market',
>>                                 orderqty='all',
>>                                 prefer='Open'
>>                  ),
>>                  type='exit',
>>                  label='ExitLong',
>>                  enabled=TRUE)
>>
>>         #################################
>>         # SHORT STRATEGY
>>         #################################
>>         add.rule(qs.strategy, name='ruleSignal',
>>                  arguments=list(sigcol="downTrend", sigval=TRUE,
>>                                 replace=TRUE,
>>                                 prefer='Open',
>>                                 orderside='short',
>>                                 ordertype='stoplimit',
>>         order.price=quote(mktdata$price.enter.short[timestamp]),
>>                                 orderqty=-1,
>>                                 osFUN='osMaxPos',
>>         time.in.force=quote(timeInForceShort)),
>>                  type='enter',
>>                  label='SE')
>>         add.rule(qs.strategy, name='ruleSignal',
>>                  arguments=list(sigcol='exitShort', sigval=TRUE,
>>                                 replace=FALSE,
>>                                 orderside='short',
>>                                 ordertype='market',
>>                                 orderqty='all',
>>                                 prefer='Open'
>>                  ),
>>                  type='exit',
>>                  label='ExitShort',
>>                  enabled=TRUE)
>>
>>         _______________________________________________
>>         R-SIG-Finance at r-project.org
>>         <mailto:R-SIG-Finance at r-project.org> mailing list
>>         https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>>         -- Subscriber-posting only. If you want to post, subscribe first.
>>         -- Also note that this is not the r-help list where general R
>>         questions should go.
>>
>>
>
>


	[[alternative HTML version deleted]]



More information about the R-SIG-Finance mailing list