@@ -14,49 +14,51 @@ type IncomingMessageID int64
14
14
15
15
// Message types enum
16
16
const (
17
- mTickPrice IncomingMessageID = 1
18
- mTickSize = 2
19
- mOrderStatus = 3
20
- mErrorMessage = 4
21
- mOpenOrder = 5
22
- mAccountValue = 6
23
- mPortfolioValue = 7
24
- mAccountUpdateTime = 8
25
- mNextValidID = 9
26
- mContractData = 10
27
- mExecutionData = 11
28
- mMarketDepth = 12
29
- mMarketDepthL2 = 13
30
- mNewsBulletins = 14
31
- mManagedAccounts = 15
32
- mReceiveFA = 16
33
- mHistoricalData = 17
34
- mBondContractData = 18
35
- mScannerParameters = 19
36
- mScannerData = 20
37
- mTickOptionComputation = 21
38
- mTickGeneric = 45
39
- mTickString = 46
40
- mTickEFP = 47
41
- mCurrentTime = 49
42
- mRealtimeBars = 50
43
- mFundamentalData = 51
44
- mContractDataEnd = 52
45
- mOpenOrderEnd = 53
46
- mAccountDownloadEnd = 54
47
- mExecutionDataEnd = 55
48
- mDeltaNeutralValidation = 56
49
- mTickSnapshotEnd = 57
50
- mMarketDataType = 58
51
- mCommissionReport = 59
52
- mPosition = 61
53
- mPositionEnd = 62
54
- mAccountSummary = 63
55
- mAccountSummaryEnd = 64
56
- mVerifyMessageAPI = 65
57
- mVerifyCompleted = 66
58
- mDisplayGroupList = 67
59
- mDisplayGroupUpdated = 68
17
+ mTickPrice IncomingMessageID = 1
18
+ mTickSize = 2
19
+ mOrderStatus = 3
20
+ mErrorMessage = 4
21
+ mOpenOrder = 5
22
+ mAccountValue = 6
23
+ mPortfolioValue = 7
24
+ mAccountUpdateTime = 8
25
+ mNextValidID = 9
26
+ mContractData = 10
27
+ mExecutionData = 11
28
+ mMarketDepth = 12
29
+ mMarketDepthL2 = 13
30
+ mNewsBulletins = 14
31
+ mManagedAccounts = 15
32
+ mReceiveFA = 16
33
+ mHistoricalData = 17
34
+ mBondContractData = 18
35
+ mScannerParameters = 19
36
+ mScannerData = 20
37
+ mTickOptionComputation = 21
38
+ mTickGeneric = 45
39
+ mTickString = 46
40
+ mTickEFP = 47
41
+ mCurrentTime = 49
42
+ mRealtimeBars = 50
43
+ mFundamentalData = 51
44
+ mContractDataEnd = 52
45
+ mOpenOrderEnd = 53
46
+ mAccountDownloadEnd = 54
47
+ mExecutionDataEnd = 55
48
+ mDeltaNeutralValidation = 56
49
+ mTickSnapshotEnd = 57
50
+ mMarketDataType = 58
51
+ mCommissionReport = 59
52
+ mPosition = 61
53
+ mPositionEnd = 62
54
+ mAccountSummary = 63
55
+ mAccountSummaryEnd = 64
56
+ mVerifyMessageAPI = 65
57
+ mVerifyCompleted = 66
58
+ mDisplayGroupList = 67
59
+ mDisplayGroupUpdated = 68
60
+ mSecurityDefinitionOptionParameter = 75
61
+ mSecurityDefinitionOptionParameterEnd = 76
60
62
)
61
63
62
64
// code2Msg is equivalent of EReader.processMsg() switch statement cases.
@@ -148,12 +150,28 @@ func code2Msg(code int64) (r Reply, err error) {
148
150
r = & DisplayGroupList {}
149
151
case int64 (mDisplayGroupUpdated ):
150
152
r = & DisplayGroupUpdated {}
153
+ case int64 (mSecurityDefinitionOptionParameter ):
154
+ r = & SecurityDefinitionOptionParameter {}
155
+ case int64 (mSecurityDefinitionOptionParameterEnd ):
156
+ r = & SecurityDefinitionOptionParameterEnd {}
151
157
default :
152
158
err = fmt .Errorf ("Unsupported incoming message type %d" , code )
153
159
}
154
160
return r , err
155
161
}
156
162
163
+ func msgHasVersion (code int64 ) bool {
164
+ switch code {
165
+ case int64 (mSecurityDefinitionOptionParameter ):
166
+ return false
167
+ case int64 (mSecurityDefinitionOptionParameterEnd ):
168
+ return false
169
+ default :
170
+ }
171
+
172
+ return true
173
+ }
174
+
157
175
// TickPrice holds bid, ask, last, etc. price information
158
176
type TickPrice struct {
159
177
id int64
@@ -1893,3 +1911,80 @@ func (d *DisplayGroupUpdated) read(b *bufio.Reader) (err error) {
1893
1911
d .ContractInfo , err = readString (b )
1894
1912
return err
1895
1913
}
1914
+
1915
+ type SecurityDefinitionOptionParameter struct {
1916
+ id int64
1917
+ Exchange string
1918
+ ContractId int64
1919
+ TradingClass string
1920
+ Multiplier string
1921
+ Expirations []string
1922
+ Strikes []float64
1923
+ }
1924
+
1925
+ func (s * SecurityDefinitionOptionParameter ) ID () int64 { return s .id }
1926
+ func (s * SecurityDefinitionOptionParameter ) code () IncomingMessageID {
1927
+ return mSecurityDefinitionOptionParameter
1928
+ }
1929
+ func (s * SecurityDefinitionOptionParameter ) read (b * bufio.Reader ) (err error ) {
1930
+ if s .id , err = readInt (b ); err != nil {
1931
+ return err
1932
+ }
1933
+
1934
+ if s .Exchange , err = readString (b ); err != nil {
1935
+ return err
1936
+ }
1937
+
1938
+ if s .ContractId , err = readInt (b ); err != nil {
1939
+ return err
1940
+ }
1941
+
1942
+ if s .TradingClass , err = readString (b ); err != nil {
1943
+ return err
1944
+ }
1945
+
1946
+ if s .Multiplier , err = readString (b ); err != nil {
1947
+ return err
1948
+ }
1949
+
1950
+ numExpirations , err := readInt (b )
1951
+ if err != nil {
1952
+ return err
1953
+ }
1954
+
1955
+ s .Expirations = make ([]string , numExpirations )
1956
+ for i := int64 (0 ); i < numExpirations ; i += 1 {
1957
+ if s .Expirations [i ], err = readString (b ); err != nil {
1958
+ return err
1959
+ }
1960
+ }
1961
+
1962
+ numStrikes , err := readInt (b )
1963
+ if err != nil {
1964
+ return err
1965
+ }
1966
+
1967
+ s .Strikes = make ([]float64 , numStrikes )
1968
+ for i := int64 (0 ); i < numStrikes ; i += 1 {
1969
+ if s .Strikes [i ], err = readFloat (b ); err != nil {
1970
+ return err
1971
+ }
1972
+ }
1973
+
1974
+ return nil
1975
+
1976
+ }
1977
+
1978
+ type SecurityDefinitionOptionParameterEnd struct {
1979
+ id int64
1980
+ }
1981
+
1982
+ // ID contains the TWS "reqId", which is used for reply correlation.
1983
+ func (s * SecurityDefinitionOptionParameterEnd ) ID () int64 { return s .id }
1984
+ func (s * SecurityDefinitionOptionParameterEnd ) code () IncomingMessageID {
1985
+ return mSecurityDefinitionOptionParameterEnd
1986
+ }
1987
+ func (s * SecurityDefinitionOptionParameterEnd ) read (b * bufio.Reader ) (err error ) {
1988
+ s .id , err = readInt (b )
1989
+ return err
1990
+ }
0 commit comments