-
-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathtest.py
127 lines (105 loc) · 4.03 KB
/
test.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
from firstrade import account, order, symbols
# Create a session
ft_ss = account.FTSession(username="", password="", email = "", profile_path="")
need_code = ft_ss.login()
if need_code:
code = input("Please enter the pin sent to your email/phone: ")
ft_ss.login_two(code)
# Get account data
ft_accounts = account.FTAccountData(ft_ss)
if len(ft_accounts.account_numbers) < 1:
raise Exception("No accounts found or an error occured exiting...")
# Print ALL account data
print(ft_accounts.all_accounts)
# Print 1st account number.
print(ft_accounts.account_numbers[0])
# Print ALL accounts market values.
print(ft_accounts.account_balances)
# Get quote for INTC
quote = symbols.SymbolQuote(ft_ss, ft_accounts.account_numbers[0], "INTC")
print(f"Symbol: {quote.symbol}")
print(f"Tick: {quote.tick}")
print(f"Exchange: {quote.exchange}")
print(f"Bid: {quote.bid}")
print(f"Ask: {quote.ask}")
print(f"Last: {quote.last}")
print(f"Bid Size: {quote.bid_size}")
print(f"Ask Size: {quote.ask_size}")
print(f"Last Size: {quote.last_size}")
print(f"Bid MMID: {quote.bid_mmid}")
print(f"Ask MMID: {quote.ask_mmid}")
print(f"Last MMID: {quote.last_mmid}")
print(f"Change: {quote.change}")
print(f"High: {quote.high}")
print(f"Low: {quote.low}")
print(f"Change Color: {quote.change_color}")
print(f"Volume: {quote.volume}")
print(f"Quote Time: {quote.quote_time}")
print(f"Last Trade Time: {quote.last_trade_time}")
print(f"Real Time: {quote.realtime}")
print(f"Fractional: {quote.is_fractional}")
print(f"Company Name: {quote.company_name}")
# Get positions and print them out for an account.
positions = ft_accounts.get_positions(account=ft_accounts.account_numbers[1])
print(positions)
for item in positions["items"]:
print(
f"Quantity {item["quantity"]} of security {item["symbol"]} held in account {ft_accounts.account_numbers[1]}"
)
# Get account history (past 200)
history = ft_accounts.get_account_history(account=ft_accounts.account_numbers[0])
for item in history["items"]:
print(f"Transaction: {item["symbol"]} on {item["report_date"]} for {item["amount"]}.")
# Create an order object.
ft_order = order.Order(ft_ss)
# Place dry run order and print out order confirmation data.
order_conf = ft_order.place_order(
ft_accounts.account_numbers[0],
symbol="INTC",
price_type=order.PriceType.LIMIT,
order_type=order.OrderType.BUY,
duration=order.Duration.DAY,
quantity=1,
dry_run=True,
)
print(order_conf)
if "order_id" not in order_conf["result"]:
print("Dry run complete.")
print(order_conf["result"])
else:
print("Order placed successfully.")
print(f"Order ID: {order_conf["result"]["order_id"]}.")
print(f"Order State: {order_conf["result"]["state"]}.")
# Cancel placed order
# cancel = ft_accounts.cancel_order(order_conf['result']["order_id"])
# if cancel["result"]["result"] == "success":
# print("Order cancelled successfully.")
# print(cancel)
# Check orders
recent_orders = ft_accounts.get_orders(ft_accounts.account_numbers[0])
print(recent_orders)
#Get option dates
option_first = symbols.OptionQuote(ft_ss, "INTC")
for item in option_first.option_dates["items"]:
print(f"Expiration Date: {item["exp_date"]} Days Left: {item["day_left"]} Expiration Type: {item["exp_type"]}")
# Get option quote
option_quote = option_first.get_option_quote("INTC", option_first.option_dates["items"][0]["exp_date"])
print(option_quote)
# Get option greeks
option_greeks = option_first.get_greek_options("INTC", option_first.option_dates["items"][0]["exp_date"])
print(option_greeks)
print(f"Placing dry option order for {option_quote["items"][0]["opt_symbol"]} with a price of {option_quote["items"][0]["ask"]}.")
print("Symbol readable ticker 'INTC'")
# Place dry option order
option_order = ft_order.place_option_order(
account=ft_accounts.account_numbers[0],
option_symbol=option_quote["items"][0]["opt_symbol"],
order_type=order.OrderType.BUY_OPTION,
price_type=order.PriceType.MARKET,
duration=order.Duration.DAY,
contracts=1,
dry_run=True,
)
print(option_order)
# Delete cookies
ft_ss.delete_cookies()