gofinance / ib

Pure Go interface to Interactive Brokers IB API
386 stars 120 forks source link

fix ComboLegs #18

Closed uwe closed 8 years ago

uwe commented 8 years ago

For RequestMarketData the ComboLeg structure was written uncorrectly.

Here is the C++ source code:

    // Send combo legs for BAG requests (srv v8 and above)
    if( Compare(contract.secType, "BAG") == 0)
    {
        const Contract::ComboLegList* const comboLegs = contract.comboLegs.get();
        const int comboLegsCount = comboLegs ? comboLegs->size() : 0;
        ENCODE_FIELD( comboLegsCount);
        if( comboLegsCount > 0) {
            for( int i = 0; i < comboLegsCount; ++i) {
                const ComboLeg* comboLeg = ((*comboLegs)[i]).get();
                assert( comboLeg);
                ENCODE_FIELD( comboLeg->conId);
                ENCODE_FIELD( comboLeg->ratio);
                ENCODE_FIELD( comboLeg->action);
                ENCODE_FIELD( comboLeg->exchange);
            }
        }
    }

    if( m_serverVersion >= MIN_SERVER_VER_UNDER_COMP) {
        if( contract.underComp) {
            const UnderComp& underComp = *contract.underComp;
            ENCODE_FIELD( true);
            ENCODE_FIELD( underComp.conId);
            ENCODE_FIELD( underComp.delta);
            ENCODE_FIELD( underComp.price);
        }
        else {
            ENCODE_FIELD( false);
        }
    }

Now I can get quotes for combos (at least with Snapshot: false).

uwe commented 8 years ago

There was a mistake in my PR. It is fixed now (works correctly for BAG and non-BAG).