hadrianl / ibapi

Interactive Brokers API - GoLang Implement
MIT License
137 stars 59 forks source link

Order Conditions not working #33

Open superhedge22 opened 2 years ago

superhedge22 commented 2 years ago

Hi,

It seems there's a problem with InitOrderCondition, the condition is not being passed upon OrderCondition, so the value is always 0. I tried initializing it with a TimeCondition and a margin condition, but this always crashes the ib client. I also tried to assert it to time condition, but both the asserted and original OrderConditioner doesn't seem to be carrying conType forward and since this variable isn't exported, it's not possible to set it from an outside package.

I did a workaround and created a factory function to solve my problem, but of course, this is not optimal.

func NewTimeCondition(time string, isMore bool, isConj bool) TimeCondition {
    oc := OrderCondition{
        conditionType:           3,
        IsConjunctionConnection: isConj,
    }
    tc := TimeCondition{
        OperatorCondition: OperatorCondition{oc, isMore},
        Time:              time,
    }
    return tc
}

I'm using golang 1.17/MacOS 12.0.1

superhedge22 commented 2 years ago

Investigating further, I discovered that price conditions also doesn't work. I will investigate and test further and suggest a pull request/patch

hadrianl commented 2 years ago

OK! Thanks!

pchavanne commented 1 year ago

The problem comes from the OrderCondition setter that doesn't have a pointer receiver.

func (oc OrderCondition) setCondType(condType int64) { oc.conditionType = condType }

So cond.setCondType(1) in InitOrderCondition has no effect.