parent
e87f5e85d0
commit
3332eb1e84
|
@ -0,0 +1,8 @@
|
|||
# check out this: https://github.com/intrinio/python-sdk.git
|
||||
# then run: python setup.py install --user
|
||||
docn-insiders:
|
||||
./DOCN-institutional-trans.py
|
||||
|
||||
install:
|
||||
python setup.py install --user
|
||||
# pip install intrinio-sdk
|
|
@ -0,0 +1,123 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import threading
|
||||
import signal
|
||||
import time
|
||||
import sys
|
||||
from threading import Event,Lock
|
||||
import client
|
||||
|
||||
trade_count = 0
|
||||
trade_count_lock = Lock()
|
||||
ask_count = 0
|
||||
ask_count_lock = Lock()
|
||||
bid_count = 0
|
||||
bid_count_lock = Lock()
|
||||
open_interest_count = 0
|
||||
open_interest_count_lock = Lock()
|
||||
block_count = 0
|
||||
block_count_lock = Lock()
|
||||
sweep_count = 0
|
||||
sweep_count_lock = Lock()
|
||||
large_trade_count = 0
|
||||
large_trade_count_lock = Lock()
|
||||
|
||||
def on_quote(quote : client.Quote):
|
||||
global ask_count
|
||||
global ask_count_lock
|
||||
global bid_count
|
||||
global bid_count_lock
|
||||
if (quote.type == client.QuoteType.ASK):
|
||||
with ask_count_lock: ask_count += 1
|
||||
elif (quote.type == client.QuoteType.BID):
|
||||
with bid_count_lock: bid_count += 1
|
||||
else: client.Log("on_quote - Unknown quote type {0}", quote.type)
|
||||
|
||||
def on_trade(trade : client.Trade):
|
||||
global trade_count
|
||||
global trade_count_lock
|
||||
with trade_count_lock: trade_count += 1
|
||||
|
||||
def on_open_interest(oi : client.OpenInterest):
|
||||
global open_interest_count
|
||||
global open_interest_count_lock
|
||||
with open_interest_count_lock: open_interest_count += 1
|
||||
|
||||
def on_unusual_activity(ua : client.UnusualActivity):
|
||||
global block_count
|
||||
global block_count_lock
|
||||
global sweep_count
|
||||
global sweep_count_lock
|
||||
global large_trade_count
|
||||
global large_trade_count_lock
|
||||
if (ua.type == client.UnusualActivityType.BLOCK):
|
||||
with block_count_lock: block_count += 1
|
||||
elif (ua.type == client.UnusualActivityType.SWEEP):
|
||||
with sweep_count_lock: sweep_count += 1
|
||||
elif (ua.type == client.UnusualActivityType.LARGE):
|
||||
with large_trade_count_lock: large_trade_count += 1
|
||||
else : client.Log("on_unusual_activity - Unknown type {0}", ua.type)
|
||||
|
||||
class Summarize(threading.Thread):
|
||||
def __init__(self, stop_flag : threading.Event, client : client.Client):
|
||||
threading.Thread.__init__(self, args=(), kwargs=None, daemon=True)
|
||||
self.__stop_flag : threading.Event = stop_flag
|
||||
self.__client = client
|
||||
|
||||
def run(self):
|
||||
while (not self.__stop_flag.is_set()):
|
||||
time.sleep(10.0)
|
||||
(dataMsgs, txtMsgs, queueDepth) = self.__client.getStats()
|
||||
client.Log("Client Stats - Data Messages: {0}, Text Messages: {1}, Queue Depth: {2}".format(dataMsgs, txtMsgs, queueDepth))
|
||||
client.Log("App Stats - Trades: {0}, Asks: {1}, Bids: {2}, Open Interest: {3}, Blocks: {4}, Sweeps: {5}, Large Trades: {6}"
|
||||
.format(
|
||||
trade_count,
|
||||
ask_count,
|
||||
bid_count,
|
||||
open_interest_count,
|
||||
block_count,
|
||||
sweep_count,
|
||||
large_trade_count))
|
||||
|
||||
# Your config object MUST include the 'apiKey' and 'provider', at a minimum
|
||||
config : client.Config = client.Config(
|
||||
apiKey = "OjZjZGIzZmYyNDg4NDZjYjQ4NzAzMzAyZjg0OTU5MDcz",
|
||||
provider = client.Providers.OPRA,
|
||||
numThreads = 2,
|
||||
symbols = ["AAPL"], # this is a static list of symbols (options contracts or option chains) that will automatically be subscribed to when the client starts
|
||||
logLevel = client.LogLevel.INFO)
|
||||
|
||||
# Register only the callbacks that you want.
|
||||
# Take special care when registering the 'onQuote' handler as it will increase throughput by ~10x
|
||||
intrinioRealtimeOptionsClient : client.Client = client.Client(config, onTrade = on_trade)
|
||||
|
||||
# Use this to subscribe to the entire univers of symbols (option contracts). This requires special permission.
|
||||
#intrinioRealtimeOptionsClient.joinLobby()
|
||||
|
||||
# Use this to subscribe, dynamically, to an option chain (all option contracts for a given underlying symbol).
|
||||
#intrinioRealtimeOptionsClient.join("AAPL")
|
||||
|
||||
# Use this to subscribe, dynamically, to a specific option contract.
|
||||
#intrinioRealtimeOptionsClient.join("AAP___230616P00250000")
|
||||
|
||||
# Use this to subscribe, dynamically, a list of specific option contracts or option chains.
|
||||
#intrinioRealtimeOptionsClient.join("GOOG__220408C02870000", "MSFT__220408C00315000", "AAPL__220414C00180000", "TSLA", "GE")
|
||||
|
||||
stop_event = Event()
|
||||
|
||||
def on_kill_process(sig, frame):
|
||||
client.Log("Sample Application - Stopping")
|
||||
stop_event.set()
|
||||
intrinioRealtimeOptionsClient.stop()
|
||||
sys.exit(0)
|
||||
|
||||
signal.signal(signal.SIGINT, on_kill_process)
|
||||
|
||||
summarize_thread = Summarize(stop_event,intrinioRealtimeOptionsClient)
|
||||
summarize_thread.start()
|
||||
|
||||
intrinioRealtimeOptionsClient.start()
|
||||
|
||||
time.sleep(60*60)
|
||||
# sigint, or ctrl+c, during the thread wait will also perform the same below code.
|
||||
on_kill_process(None,None)
|
Loading…
Reference in New Issue