2016-03-24 9 views
6

Sto lavorando con il pacchetto ibrokers in R e sto cercando di impostare più prezzi di chiusura per un'operazione. Ad esempio, acquista 100 azioni di AAPL a $ 106, vendi 50 a $ 107 e 50 a $ 108, con un prezzo di stop di $ 105.Quantità multiple negli ordini di parentesi utilizzando IBrokers in R

Quando invio ordini multipli di profitti, sembra che la quantità di 50 sia ignorata, invece ottengo due ordini di vendita per 100 azioni ciascuno.

Questo è il codice sto facendo funzionare

tws <- twsConnect() 

stock <- twsEquity("AAPL") 
parentLongId <- reqIds(tws) 

parentLongOrder <- twsOrder(parentLongId, action="BUY", totalQuantity = 100, 
          orderType = "LMT", lmtPrice = 106, 
          transmit=TRUE) 
placeOrder(tws, stock, parentLongOrder) 


childLongProfitId <- reqIds(tws) 
childLongProfitOrder <- twsOrder(childLongProfitId, action="SELL", totalQuantity = 50, 
           orderType = "LMT", lmtPrice = 107, 
           transmit=TRUE, parentId = parentLongId) 
placeOrder(tws, stock, childLongProfitOrder) 

childLongProfitId2 <- reqIds(tws) 
childLongProfitOrder2 <- twsOrder(childLongProfitId2, action="SELL", totalQuantity = 50, 
            orderType = "LMT", lmtPrice = 108, 
            transmit=TRUE, parentId = parentLongId) 
placeOrder(tws, stock, childLongProfitOrder2) 

childLongStopId <- reqIds(tws) 
childLongStopOrder <- twsOrder(childLongStopId, action="SELL", totalQuantity = 100, 
           orderType = "STP", auxPrice = 105, 
           transmit=TRUE, parentId = parentLongId, account=accountNum) 
placeOrder(tws, stock, childLongStopOrder) 

twsDisconnect(tws) 

Si può vedere che la quantità è 100 per tutti e 3 gli ordini invece di 100 per l'acquisto e il 50 per ciascuno degli ordini di vendita. Orders in Trader Workstation

Qualcuno sa come questo può essere corretto?

Come controllo di integrità, ho inserito gli ordini senza parentId e ha funzionato. Ecco il codice per questo:

tws <- twsConnect() #open connection, R automatically pauses until manually accepted on IB. 

stock <- twsEquity("AAPL") 
parentLongId <- reqIds(tws) 

parentLongOrder <- twsOrder(parentLongId, action="BUY", totalQuantity = 100, 
          orderType = "LMT", lmtPrice = 106, 
          transmit=TRUE) 
placeOrder(tws, stock, parentLongOrder) 


childLongProfitId <- reqIds(tws) 
childLongProfitOrder <- twsOrder(childLongProfitId, action="SELL", totalQuantity = 50, 
           orderType = "LMT", lmtPrice = 107, 
           transmit=TRUE) 
placeOrder(tws, stock, childLongProfitOrder) 

childLongProfitId2 <- reqIds(tws) 
childLongProfitOrder2 <- twsOrder(childLongProfitId2, action="SELL", totalQuantity = 50, 
            orderType = "LMT", lmtPrice = 108, 
            transmit=TRUE) 
placeOrder(tws, stock, childLongProfitOrder2) 

childLongStopId <- reqIds(tws) 
childLongStopOrder <- twsOrder(childLongStopId, action="SELL", totalQuantity = 100, 
           orderType = "STP", auxPrice = 105, 
           transmit=TRUE, parentId = parentLongId, account=accountNum) 
placeOrder(tws, stock, childLongStopOrder) 

twsDisconnect(tws) 

Anche se questo non funziona, in pratica, dal momento che voglio che il profitto e fermare gli ordini per annullare gli altri una volta colpito.

Grazie.

+1

Suggerirei 2 ordini di staffa o solo uno con 2 lotti di ordini di chiusura OCA. Inserire essenzialmente due ordini di parentesi per metà dell'importo ma con importi di profitto diversi. – brian

+0

Ciao Brian. La creazione di 2 serie di ordini funzionerà, ma potrebbe creare problemi se voglio spostare anche la fermata. Avrò bisogno di spostarlo due volte. Non sempre voglio che gli ordini siano "impostati e dimenticati". – mks212

+0

L'ho appena visto. Se tu potessi estendere il premio di 6 ore circa, potrei prenderti cura di questo per te. –

risposta

0

Suggerisci di mettere i tuoi 100 ordini 1a seguito dai 50 ordini. Significa nella tua unica chiamata per piazzare uno scambio. Le API funzionano stranamente a volte ... Soprattutto quelle open source. Potresti avere più fortuna nell'usare l'API Java in R installazione dettagliata qui http://m.youtube.com/watch?v=yfhmaqFyHPI

+0

Ciao Matt, Mettere l'ordine di stop prima non ha funzionato purtroppo. Non ho molta familiarità con java anche se so che è supportato molto meglio. Un'altra alternativa è usare il DDE di Excel. Per qualcosa di così semplice, probabilmente farà il trucco. La sfida è che non appena diventa più complicato, posso essere sfortunato. – mks212

Problemi correlati