-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathfive_percent.py
59 lines (40 loc) · 1.33 KB
/
five_percent.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import pandas as pd
from ib_insync import *
ib = IB()
ib.connect(clientId=1)
# init dataframe
df = pd.DataFrame(columns=['date', 'last'])
df.set_index('date', inplace=True)
def new_data(tickers):
''' process incoming data and check for trade entry '''
global df
for ticker in tickers:
df.loc[ticker.time] = ticker.last
five_mins_ago = df.index[-1] - pd.Timedelta(minutes=5)
if df.index[0] < five_mins_ago:
df = df[five_mins_ago:]
price_min = df.last.min()
price_max = df.last.max()
if df.last[-1] > price_min * 1.05:
submit_order('BUY')
elif df[-1] < price_max * 0.95:
submit_order('SELL')
def submit_order(direction):
''' place order with IB - exit if order gets filled '''
mastercard_order = MarketOrder(direction, 100)
trade = ib.placeOrder(mastercard_contract, mastercard_order)
ib.sleep(3)
if trade.orderStatus.status == 'Filled':
ib.disconnect()
quit(0)
# Create contracts
mastercard_contract = Stock('MA', 'SMART', 'USD')
visa_contract = Stock('V', 'SMART', 'USD')
ib.qualifyContracts(mastercard_contract)
ib.qualifyContracts(visa_contract)
# Request market data for Visa
ib.reqMktData(visa_contract)
# Set callback function for tick data
ib.pendingTickersEvent += new_data
# Run infinitely
ib.run()