Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NewInstrumentManager does not seem to work. #2

Open
pilwon opened this issue Aug 19, 2014 · 2 comments
Open

NewInstrumentManager does not seem to work. #2

pilwon opened this issue Aug 19, 2014 · 2 comments

Comments

@pilwon
Copy link

pilwon commented Aug 19, 2014

Thanks for sharing this project.

I tried to get some data using the following code but I get 0 as value. Is this package still under development or is it currently being used for some relatively important applications?

package main

import (
    "fmt"
    "log"
    "os"

    "github.com/gofinance/ib"
)

func failOnError(err error, msg string) {
    if err != nil {
        log.Fatalf("%s: %s", msg, err)
        panic(fmt.Sprintf("%s: %s", msg, err))
    }
}

func testCurrentTime(engine *ib.Engine) {
    m, err := ib.NewCurrentTimeManager(engine)
    failOnError(err, "Failed to create current time manager")
    defer m.Close()
    fmt.Println(m.Time())
}

func testInstrument1(engine *ib.Engine) {
    m, err := ib.NewInstrumentManager(engine, ib.Contract{
        Symbol:       "AAPL",
        SecurityType: "STK",
        Exchange:     "SMART",
        Currency:     "USD",
    })
    failOnError(err, "Failed to create instrument manager")
    defer m.Close()
    fmt.Println(m.Bid(), m.Ask(), m.Last())
}

func testInstrument2(engine *ib.Engine) {
    m, err := ib.NewInstrumentManager(engine, ib.Contract{
        Symbol:       "USD",
        SecurityType: "CASH",
        Exchange:     "IDEALPRO",
        Currency:     "CAD",
    })
    failOnError(err, "Failed to create instrument manager")
    defer m.Close()
    fmt.Println(m.Bid(), m.Ask(), m.Last())
}

func main() {
    opts := ib.NewEngineOptions{
        Gateway: "127.0.0.1:7496",
    }
    if os.Getenv("CI") != "" || os.Getenv("IB_ENGINE_DUMP") != "" {
        opts.DumpConversation = true
    }

    engine, err := ib.NewEngine(opts)
    failOnError(err, "Failed to connect engine")
    defer engine.Stop()

    testCurrentTime(engine)
    testInstrument1(engine)
    testInstrument2(engine)
}
$ go run test.go
0001-01-01 00:00:00 +0000 UTC
0 0 0
0 0 0
@benalexau
Copy link
Member

I am no longer developing this package, and I'm aware the original author is also no longer developing it. While some of our portfolio monitoring systems use this package in production, these only touch account management message types. The market data messages are present, but we don't use them (we use Nanex NxCore instead) and therefore I cannot comment on their robustness. Certainly there are tests though, and they pass based on the CI server report. There are no order-related messages.

If you wish to use Go with IB, feel free to send some pull requests and I'll add you as a member to the gofinance organisation so you can merge them.

@dsouzae
Copy link
Contributor

dsouzae commented Sep 19, 2014

You need to use the SinkManager. See the instrument_manager_test.go for more details, and for further details read how SinkManager works in manager.go.

See below for an example of what you need to change - I added 2 lines of code before the Println.

func testInstrument1(engine *ib.Engine) {
    m, err := ib.NewInstrumentManager(engine, ib.Contract{
        Symbol:       "AAPL",
        SecurityType: "STK",
        Exchange:     "SMART",
        Currency:     "USD",
    })
    failOnError(err, "Failed to create instrument manager")
    defer m.Close()
    var mgr ib.Manager = m
    ib.SinkManager(&mgr, 5*time.Second, 2)
    fmt.Println(m.Bid(), m.Ask(), m.Last())
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants