Beispiel #1
0
import signal
import sys

from ib.client import Client
from ib.contractkeys import Currency, CurrencyLocal, Stock, Option, OptionLocal
from com.ib.client import Contract, ExecutionFilter
import ib.client
import ib.combo_orders as co

ib.client.LOGLEVEL = logging.DEBUG

def cleanup(signal, frame):
	c.disconnect()
	sys.exit(0)

c = Client()
c.connect()

expiry = '20130201'
cbkeys = [Option('BAC', expiry, 'C', 10), 
          Option('BAC', expiry, 'C', 11), 
          Option('BAC', expiry, 'C', 12)]
pbkeys = [Option('BAC', expiry, 'P', 10), 
          Option('BAC', expiry, 'P', 11), 
          Option('BAC', expiry, 'P', 12)]

cbinkeys = [Option('BAC', expiry, 'C', 10.5), 
              Option('BAC', expiry, 'C', 11), 
              Option('BAC', expiry, 'C', 11.5)]
pbinkeys = [Option('BAC', expiry, 'P', 10.5), 
              Option('BAC', expiry, 'P', 11), 
Beispiel #2
0
import signal
import sys

from ib.client import Client
from ib.contractkeys import Stock, Option, OptionLocal, Currency
from com.ib.client import Contract, ExecutionFilter
import ib.client
import ib.combo_orders as co

ib.client.LOGLEVEL = logging.DEBUG

def cleanup(signal, frame):
	c.disconnect()
	sys.exit(0)

c = Client()
c.connect()


spot_prices = [x*.01 for x in range(800, 1301)]

symbol = 'BAC'
expirys = ('20130201', '20130215')
strikes = range(9, 13)
keys = [Stock(symbol)]
keys += [Option(symbol, x, y, z) for x in expirys for y in ['C', 'P'] for z in strikes]
contracts = [c.request_contract_details(x)[0].m_summary.m_conId for x in keys]
id_to_key = dict(zip(contracts, keys))

pairs = [(x, y) for x in contracts for y in contracts if x != y]
triples = [(x, y, z) for x in contracts for y in contracts for z in contracts 
Beispiel #3
0
#!/usr/local/bin/jython
import logging
import signal
import sys

from ib.client import Client
from ib.contractkeys import Currency, CurrencyLocal, Stock, Option, OptionLocal
from com.ib.client import Contract, ExecutionFilter
import ib.client
import ib.combo_orders as co

ib.client.LOGLEVEL = logging.DEBUG

def cleanup(signal, frame):
	c.disconnect()
	sys.exit(0)

c = Client()
c.connect()

symbol = 'EMC'
expiry = '20130125'
right = 'C'
details = c.request_contract_details(Option(symbol, expiry, right, None))
a = [(x.m_summary.m_conId, x.m_summary.m_strike) for x in details]  

[c.request_historical_data(x.m_summary, end_time='20130123 15:50:00', duration='1 D', bar_size='1 min', show='ASK') for x in details]


signal.signal(signal.SIGINT, cleanup)
from collections import namedtuple
import glob
import os
import shutil
import signal
import sys

from ib.client import Client
from ib.contractkeys import ContractId

pattern = './Butterfly*.mkt'
newdirname = '%(symbol)s_%(expiry)s_%(right)s'
newfilename = '%(strike1)06.2f_%(strike2)06.2f_%(strike3)06.2f.mkt'

if __name__ == "__main__":
    c = Client(client_id=8)
    c.connect()
    filenames = glob.glob(pattern)
    for filename in filenames:
        conIds = filename.split('.mkt')[0].split('_')[1:]
        conIds = [int(x) for x in conIds]
        strikes = []
        for conId in conIds:
            contract = c.request_contract_details(ContractId(conId))[0].m_summary
            strikes.append(contract.m_strike)
        ndname = newdirname % {'symbol': contract.m_symbol, 
                              'expiry': contract.m_expiry,
                              'right': contract.m_right}
        if not os.path.exists(ndname): os.makedirs(ndname)
        nfname = newfilename % {'strike1': strikes[0],
                                'strike2': strikes[1],
Beispiel #5
0
 def __init__(self, host='', port=7496, client_id=82, paper_trader=False):
     self.client = Client(client_id)
     self.client.connect(host, port)
     self.paper_trader = paper_trader
Beispiel #6
0
class Reversal():
    action_base = {'m_exchange': 'SMART', 'm_openClose': 0, 
                   'm_shortSaleSlot': 0, 'm_designatedLocation': ''}
    option_base = {'m_secType': 'OPT', 'm_exchange': 'SMART',
                   'm_currency': 'USD'}
    stock_base = {'m_secType': 'STK', 'm_exchange': 'SMART', 
                  'm_currency': 'USD'}
    combo_base = {'m_symbol': 'USD', 'm_secType': 'BAG', 'm_exchange': 'SMART',
                  'm_currency': 'USD'}

    def __init__(self, host='', port=7496, client_id=82, paper_trader=False):
        self.client = Client(client_id)
        self.client.connect(host, port)
        self.paper_trader = paper_trader

    def enter_position(self, ticker, expiry, strike, qty=1, longshort=True):
        ''' ticker, strike, and expiry are all strings.
            expiry should be in the form YYMMDD.
        '''
        self.request_contract_ids(ticker, expiry, strike)
        if self.get_contract_ids():
            if self.paper_trader:
                self.gen_separate_orders(qty, longshort)
                order_ids = self.place_separate_orders()
                return order_ids
            else:                
                self.gen_combo_contract()
                self.gen_order(qty, longshort=longshort)
                order_id = self.client.nextId
                self.place_order()
                return order_id
        else:
            errmsg = 'Not all legs exist for ticker %s expiry %s strike %s'
            errmsg = errmsg % (ticker, expiry, str(strike))
            logger.error('%s %s %s' % ('*'*3, errmsg, '*'*3))
            return False

    def request_contract_ids(self, ticker, expiry, strike):
        if len(expiry) != 6:
            msg = 'Expiry format should be YYMMDD, not %s' % str(expiry)
            logger.fatal(msg)
            raise Exception(msg)
        ticker = ticker.upper().strip()
        strike = Decimal(str(strike))*1000

        call_id = '%-6s%s%s%08i' %(ticker, expiry, 'C', strike)
        put_id = '%-6s%s%s%08i' %(ticker, expiry, 'P', strike)

        call = dict(self.option_base.items() 
                    + {'m_localSymbol': call_id}.items())
        stock = dict(self.stock_base.items() 
                     + {'m_symbol': ticker}.items())
        put = dict(self.option_base.items() 
                   + {'m_localSymbol': put_id}.items())

        self.c_req = self.client.request_contract(call)
        self.s_req = self.client.request_contract(stock)
        self.p_req = self.client.request_contract(put)

    def get_contract_ids(self):
        all_requests = (self.client.req_contracts.keys()
                        + self.client.failed_contracts.keys())
        count = 0
        while (self.c_req not in all_requests
            or self.s_req not in all_requests
            or self.p_req not in all_requests):
            count += 1
            if count % 10 == 0: 
                msg = 'On iteration %i for requests %i, %i, %i'
                msgdata = (count, self.c_req, self.s_req, self.p_req)
                logger.debug(msg, *msgdata)
            sleep(.1)
            all_requests = (self.client.req_contracts.keys()
                            + self.client.failed_contracts.keys())
        msg = 'Took %0.1f seconds to get contract info for requests %i, %i, %i'
        msgdata = (count*0.1, self.c_req, self.s_req, self.p_req)
        logger.debug(msg, *msgdata)
        if (self.c_req 
         or self.s_req 
         or self.p_req) in self.client.failed_contracts: return False

        self.c_con_id = self.client.req_contracts[self.c_req][0].m_conId 
        self.s_con_id = self.client.req_contracts[self.s_req][0].m_conId 
        self.p_con_id = self.client.req_contracts[self.p_req][0].m_conId 
        return True

    def gen_combo_contract(self):
        c_action = dict({'m_conId': self.c_con_id, 'm_action': 'BUY',
                         'm_ratio': 1}.items() + self.action_base.items())
        s_action = dict({'m_conId': self.s_con_id, 'm_action': 'SELL', 
                         'm_ratio': 100}.items() + self.action_base.items())
        p_action = dict({'m_conId': self.p_con_id, 'm_action': 'SELL', 
                         'm_ratio': 1}.items() + self.action_base.items())
        legs = Vector()
        legs.add(ComboLeg(**c_action))
        legs.add(ComboLeg(**s_action))
        legs.add(ComboLeg(**p_action))
        combo_params = dict({'m_comboLegs': legs}.items()
                           + self.combo_base.items())
        self.combo_contract = Contract()
        [setattr(self.combo_contract, m, combo_params[m]) 
            for m in dir(self.combo_contract) if m in combo_params]

    def gen_separate_orders(self, qty=1, longshort=True):
        qty = int(qty)
        c_order = {'m_totalQuantity': 1*qty, 'm_orderType': 'MKT'}
        s_order = {'m_totalQuantity': 100*qty, 'm_orderType': 'MKT'}
        p_order = {'m_totalQuantity': 1*qty, 'm_orderType': 'MKT'}
        if longshort:
            c_order['m_action'] = 'BUY'
            s_order['m_action'] = 'SELL'
            p_order['m_action'] = 'SELL'
        else:
            c_order['m_action'] = 'SELL'
            s_order['m_action'] = 'BUY'
            p_order['m_action'] = 'BUY'

        self.c_order = Order(**c_order)
        self.s_order = Order(**s_order)
        self.p_order = Order(**p_order)

    def gen_order(self, qty, longshort=True):
        qty = int(qty)
        self.order = Order()
        order_params = {'m_totalQuantity': qty, 'm_orderType': 'MKT'}
        if longshort: order_params['m_action'] = 'BUY'
        else: order_params['m_action'] = 'SELL'
        [setattr(self.order, m, order_params[m]) for m in dir(self.order)
            if m in order_params]

    def place_separate_orders(self):
        order_ids = [self.client.nextId]
        self.client.m_client.placeOrder(self.client.nextId,
                                        self.client.req_contracts[self.c_req][0],
                                        self.c_order)
        self.client.m_client.reqIds(1)
        while order_ids[-1] == self.client.nextId: 
            logger.debug('order %i still processing', order_ids[-1])
            sleep(.025)
            self.client.m_client.reqIds(1)

        order_ids.append(self.client.nextId)
        self.client.m_client.placeOrder(self.client.nextId,
                                        self.client.req_contracts[self.s_req][0],
                                        self.s_order)
        self.client.m_client.reqIds(1)
        while order_ids[-1] == self.client.nextId: 
            logger.debug('order %i still processing', order_ids[-1])
            sleep(.025)
            self.client.m_client.reqIds(1)

        order_ids.append(self.client.nextId)
        self.client.m_client.placeOrder(self.client.nextId,
                                        self.client.req_contracts[self.p_req][0],
                                        self.p_order)
        self.client.m_client.reqIds(1)
        while order_ids[-1] == self.client.nextId: 
            sleep(.02)
            self.client.m_client.reqIds(1)
        return order_ids

    def place_order(self):
        self.client.m_client.placeOrder(self.client.nextId, 
                                        self.combo_contract,
                                        self.order)
        self.client.m_client.reqIds(1)