diff --git a/img.png b/img.png new file mode 100644 index 00000000..6ced0723 Binary files /dev/null and b/img.png differ diff --git a/img_1.png b/img_1.png new file mode 100644 index 00000000..db9d041e Binary files /dev/null and b/img_1.png differ diff --git a/trader/lighter_trader_v2_trading.go b/trader/lighter_trader_v2_trading.go index 4054905d..63037de3 100644 --- a/trader/lighter_trader_v2_trading.go +++ b/trader/lighter_trader_v2_trading.go @@ -626,7 +626,8 @@ func (t *LighterTraderV2) CreateStopOrder(symbol string, isAsk bool, quantity fl priceValue = uint32(triggerPrice * 1.05 * 1e2) } - // Stop orders use GoodTillTime with expiry + // Stop orders MUST use ImmediateOrCancel (0) with expiry set + // Lighter SDK validates: StopLossOrder/TakeProfitOrder require TimeInForce=0 (ImmediateOrCancel) orderExpiry := time.Now().Add(30 * 24 * time.Hour).UnixMilli() // 30 days txReq := &types.CreateOrderTxReq{ @@ -636,7 +637,7 @@ func (t *LighterTraderV2) CreateStopOrder(symbol string, isAsk bool, quantity fl Price: priceValue, IsAsk: boolToUint8(isAsk), Type: orderTypeValue, - TimeInForce: 1, // GoodTillTime + TimeInForce: 0, // ImmediateOrCancel - REQUIRED for stop/take-profit orders! ReduceOnly: 1, // Stop orders should be reduce-only TriggerPrice: triggerPriceValue, OrderExpiry: orderExpiry,