Skip to content

Commit

Permalink
Breaking: Now tick types are served as enum instead of strings.
Browse files Browse the repository at this point in the history
Breaking: Now tick types are served as enum instead of strings.
tickname() isn't changed.
  • Loading branch information
oliviermilla authored Jun 26, 2024
2 parents c418c49 + e569ed0 commit ca4454c
Show file tree
Hide file tree
Showing 6 changed files with 140 additions and 141 deletions.
2 changes: 1 addition & 1 deletion src/InteractiveBrokers.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ include("types_private.jl")
include("wrapper.jl")
include("reader.jl") ; using .Reader: check_all, start_reader
include("utils.jl")

include("TickTypes.jl")

"""
Connection()
Expand Down
115 changes: 115 additions & 0 deletions src/TickTypes.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
module TickTypes

export tickname
export TICK_TYPES

tickname(i) = string(TICK_TYPES(i))

@enum TICK_TYPES::Int begin
BID_SIZE = 0
BID = 1
ASK = 2
ASK_SIZE = 3
LAST = 4
LAST_SIZE = 5
HIGH = 6
LOW = 7
VOLUME = 8
CLOSE = 9
BID_OPTION = 10
ASK_OPTION = 11
LAST_OPTION = 12
MODEL_OPTION = 13
OPEN = 14
LOW_13_WEEK = 15
HIGH_13_WEEK = 16
LOW_26_WEEK = 17
HIGH_26_WEEK = 18
LOW_52_WEEK = 19
HIGH_52_WEEK = 20
AVG_VOLUME = 21
OPEN_INTEREST = 22
OPTION_HISTORICAL_VOL = 23
OPTION_IMPLIED_VOL = 24
OPTION_BID_EXCH = 25
OPTION_ASK_EXCH = 26
OPTION_CALL_OPEN_INTEREST = 27
OPTION_PUT_OPEN_INTEREST = 28
OPTION_CALL_VOLUME = 29
OPTION_PUT_VOLUME = 30
INDEX_FUTURE_PREMIUM = 31
BID_EXCH = 32
ASK_EXCH = 33
AUCTION_VOLUME = 34
AUCTION_PRICE = 35
AUCTION_IMBALANCE = 36
MARK_PRICE = 37
BID_EFP_COMPUTATION = 38
ASK_EFP_COMPUTATION = 39
LAST_EFP_COMPUTATION = 40
OPEN_EFP_COMPUTATION = 41
HIGH_EFP_COMPUTATION = 42
LOW_EFP_COMPUTATION = 43
CLOSE_EFP_COMPUTATION = 44
LAST_TIMESTAMP = 45
SHORTABLE = 46
FUNDAMENTAL_RATIOS = 47
RT_VOLUME = 48
HALTED = 49
BID_YIELD = 50
ASK_YIELD = 51
LAST_YIELD = 52
CUST_OPTION_COMPUTATION = 53
TRADE_COUNT = 54
TRADE_RATE = 55
VOLUME_RATE = 56
LAST_RTH_TRADE = 57
RT_HISTORICAL_VOL = 58
IB_DIVIDENDS = 59
BOND_FACTOR_MULTIPLIER = 60
REGULATORY_IMBALANCE = 61
NEWS_TICK = 62
SHORT_TERM_VOLUME_3_MIN = 63
SHORT_TERM_VOLUME_5_MIN = 64
SHORT_TERM_VOLUME_10_MIN = 65
DELAYED_BID = 66
DELAYED_ASK = 67
DELAYED_LAST = 68
DELAYED_BID_SIZE = 69
DELAYED_ASK_SIZE = 70
DELAYED_LAST_SIZE = 71
DELAYED_HIGH = 72
DELAYED_LOW = 73
DELAYED_VOLUME = 74
DELAYED_CLOSE = 75
DELAYED_OPEN = 76
RT_TRD_VOLUME = 77
CREDITMAN_MARK_PRICE = 78
CREDITMAN_SLOW_MARK_PRICE = 79
DELAYED_BID_OPTION = 80
DELAYED_ASK_OPTION = 81
DELAYED_LAST_OPTION = 82
DELAYED_MODEL_OPTION = 83
LAST_EXCH = 84
LAST_REG_TIME = 85
FUTURES_OPEN_INTEREST = 86
AVG_OPT_VOLUME = 87
DELAYED_LAST_TIMESTAMP = 88
SHORTABLE_SHARES = 89
DELAYED_HALTED = 90
REUTERS_2_MUTUAL_FUNDS = 91
ETF_NAV_CLOSE = 92
ETF_NAV_PRIOR_CLOSE = 93
ETF_NAV_BID = 94
ETF_NAV_ASK = 95
ETF_NAV_LAST = 96
ETF_FROZEN_NAV_LAST = 97
ETF_NAV_HIGH = 98
ETF_NAV_LOW = 99
SOCIAL_MARKET_ANALYTICS = 100
ESTIMATED_IPO_MIDPOINT = 101
FINAL_IPO_LAST = 102
DELAYED_YIELD_BID = 103
DELAYED_YIELD_ASK = 104
end
end
1 change: 0 additions & 1 deletion src/decode.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using Base.Iterators: take

include("process.jl")
include("ticktype.jl")

# Make a shortcut
const pop = popfirst!
Expand Down
12 changes: 6 additions & 6 deletions src/process.jl
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ const process = Dict(
size::Union{Float64,Nothing},
mask::Int = it

InteractiveBrokers.forward(w, :tickPrice, tickerId, tickname(ticktype), price, size, unmask(TickAttrib, mask))
InteractiveBrokers.forward(w, :tickPrice, tickerId, InteractiveBrokers.TICK_TYPES(ticktype), price, size, unmask(TickAttrib, mask))
end,

# TICK_SIZE
Expand All @@ -103,7 +103,7 @@ const process = Dict(
ticktype::Int,
size::Float64 = it

InteractiveBrokers.forward(w, :tickSize, tickerId, tickname(ticktype), size)
InteractiveBrokers.forward(w, :tickSize, tickerId, InteractiveBrokers.TICK_TYPES(ticktype), size)
end,

# ORDER_STATUS
Expand Down Expand Up @@ -499,7 +499,7 @@ const process = Dict(
# (delta, gamma, vega, theta) == -2 means NA
replace!(view(v, [2, 5, 6, 7]), -2 => nothing)

InteractiveBrokers.forward(w, :tickOptionComputation, tickerId, tickname(ticktype), tickAttrib, v...)
InteractiveBrokers.forward(w, :tickOptionComputation, tickerId, InteractiveBrokers.TICK_TYPES(ticktype), tickAttrib, v...)
end,

# TICK_GENERIC
Expand All @@ -509,7 +509,7 @@ const process = Dict(
ticktype::Int,
value::Float64 = it

InteractiveBrokers.forward(w, :tickGeneric, tickerId, tickname(ticktype), value)
InteractiveBrokers.forward(w, :tickGeneric, tickerId, InteractiveBrokers.TICK_TYPES(ticktype), value)
end,

# TICK_STRING
Expand All @@ -519,7 +519,7 @@ const process = Dict(
ticktype::Int,
value::String = it

InteractiveBrokers.forward(w, :tickString, tickerId, tickname(ticktype), value)
InteractiveBrokers.forward(w, :tickString, tickerId, InteractiveBrokers.TICK_TYPES(ticktype), value)
end,

# TICK_EFP
Expand All @@ -528,7 +528,7 @@ const process = Dict(
tickerId::Int,
ticktype::Int = it

InteractiveBrokers.forward(w, tickEFP, tickerId, tickname(ticktype), slurp((Float64, String, Float64, Int, String, Float64, Float64), it)...)
InteractiveBrokers.forward(w, tickEFP, tickerId, InteractiveBrokers.TICK_TYPES(ticktype), slurp((Float64, String, Float64, Int, String, Float64, Float64), it)...)
end,

# CURRENT_TIME
Expand Down
110 changes: 0 additions & 110 deletions src/ticktype.jl

This file was deleted.

41 changes: 18 additions & 23 deletions test/test_utils.jl
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
@testset "Utils" begin

@test InteractiveBrokers.Reader.tickname( 0) == "BID_SIZE"

@test InteractiveBrokers.Reader.tickname(90) == "DELAYED_HALTED"

@test InteractiveBrokers.Reader.tickname(102) == "FINAL_IPO_LAST"

@test (@test_logs (:error, "tickname(): unknown ticktype") InteractiveBrokers.Reader.tickname(-1)) == "UNKNOWN"

@test InteractiveBrokers.funddist("Y") == "Income Fund"
@test InteractiveBrokers.fundtype("003") == "Multi-asset"
@test InteractiveBrokers.funddist("") == InteractiveBrokers.fundtype("") == "None"

@test fieldname(InteractiveBrokers.Contract, 15) === :secId
@test fieldname(InteractiveBrokers.Contract, 17) === :issuerId

@test fieldname(InteractiveBrokers.ContractDetails, 44) === :fundName
@test fieldname(InteractiveBrokers.ContractDetails, 58) === :fundBlueSkyTerritories

@test fieldname(InteractiveBrokers.Order, 79) === :account
@test fieldname(InteractiveBrokers.Order, 125) === :parentPermId

end

@test InteractiveBrokers.TickTypes.tickname(0) == "BID_SIZE"
@test InteractiveBrokers.TickTypes.tickname(90) == "DELAYED_HALTED"
@test InteractiveBrokers.TickTypes.tickname(102) == "FINAL_IPO_LAST"

@test InteractiveBrokers.funddist("Y") == "Income Fund"
@test InteractiveBrokers.fundtype("003") == "Multi-asset"
@test InteractiveBrokers.funddist("") == InteractiveBrokers.fundtype("") == "None"

@test fieldname(InteractiveBrokers.Contract, 15) === :secId
@test fieldname(InteractiveBrokers.Contract, 17) === :issuerId

@test fieldname(InteractiveBrokers.ContractDetails, 44) === :fundName
@test fieldname(InteractiveBrokers.ContractDetails, 58) === :fundBlueSkyTerritories

@test fieldname(InteractiveBrokers.Order, 79) === :account
@test fieldname(InteractiveBrokers.Order, 125) === :parentPermId

end

0 comments on commit ca4454c

Please sign in to comment.