@@ -37,25 +37,32 @@ public Quote Process(MarketDepthPair marketPair)
3737
3838 Quote quote = null ;
3939
40- // spread in percentage points: spread_in_pp = spread/price * 100
41- decimal spreadInPP = marketPair . PriceSpread . Value / marketPair . MediumPrice . Value * 100 ;
4240
4341 _logger . Info ( $ "Best ask / bid: { marketPair . Ask . Price } / { marketPair . Bid . Price } . Update Id: { marketPair . UpdateTime } .") ;
44- _logger . Info ( $ "Spread absolute / relative: { marketPair . PriceSpread } / { spreadInPP : F3} %. Update Id: { marketPair . UpdateTime } .") ;
4542
46- if ( spreadInPP >= _marketStrategyConfig . TradeWhenSpreadGreaterThan )
43+ // get price spreads (in percent)
44+ decimal actualSpread = marketPair . PriceSpread . Value / marketPair . MediumPrice . Value * 100 ; // spread_relative = spread_absolute/price * 100
45+ decimal expectedSpread = _marketStrategyConfig . TradeWhenSpreadGreaterThan ;
46+
47+ _logger . Info ( $ "Spread absolute / relative: { marketPair . PriceSpread } / { actualSpread : F3} %. Update Id: { marketPair . UpdateTime } .") ;
48+
49+
50+ if ( actualSpread >= expectedSpread )
4751 {
48- // compute order price
49- decimal orderPrice = marketPair . Bid . Price + marketPair . MediumPrice . Value * _marketStrategyConfig . TradeWhenSpreadGreaterThan / 100 ;
52+ // compute new order price
53+ decimal extra = marketPair . MediumPrice . Value * ( actualSpread - expectedSpread ) / 100 ; // extra = medium_price * (spread_actual - spread_expected)
54+ decimal orderPrice = marketPair . Bid . Price + extra ; // new_price = best_bid + extra
5055
5156 // compute order volume
52- decimal orderVolume = marketPair . VolumeSpread . Value > _marketStrategyConfig . MaxOrderVolume
57+ decimal volumeSpread = marketPair . VolumeSpread . Value ;
58+ decimal orderVolume = volumeSpread > _marketStrategyConfig . MaxOrderVolume
5359 ? _marketStrategyConfig . MaxOrderVolume // set max volume
54- : ( marketPair . VolumeSpread . Value < _marketStrategyConfig . MinOrderVolume
60+ : ( volumeSpread < _marketStrategyConfig . MinOrderVolume
5561 ? _marketStrategyConfig . MinOrderVolume // set min volume
56- : marketPair . VolumeSpread . Value ) ;
62+ : volumeSpread ) ;
63+
5764
58- // return price-volume pair
65+ // return new price-volume pair
5966 quote = new Quote ( orderPrice , orderVolume , OrderSide . Buy ) ;
6067 }
6168
0 commit comments