@@ -20,6 +20,7 @@ public class OrderInstance
2020 private Order LastOrderStats ;
2121 private double StartingPrice ;
2222 private double StartingAmount ;
23+ private DateTime DecreaseTime ;
2324
2425 #endregion
2526
@@ -47,6 +48,7 @@ public OrderInstance(int SL, int Algo, double MaximalPrice, double Limit, Pool P
4748 OrderID = ID ;
4849 StartingPrice = Price ;
4950 StartingAmount = Amount ;
51+ DecreaseTime = DateTime . Now - APIWrapper . PRICE_DECREASE_INTERVAL ;
5052
5153 OrderThread = new Thread ( ThreadRun ) ;
5254 OrderThread . Start ( ) ;
@@ -233,8 +235,13 @@ private double GetMinimalNeededPrice(Order[] AllOrders, double TotalSpeed)
233235
234236 private bool IncreasePrice ( Order MyOrder , Order [ ] AllOrders , double MinimalPrice )
235237 {
236- // Do not make price higher if we are already on top of the list
237- if ( AllOrders [ 0 ] == MyOrder ) return false ;
238+ // Do not make price higher if we are already on top of the list (first alive).
239+ foreach ( Order O in AllOrders )
240+ {
241+ if ( ! O . Alive ) continue ;
242+ if ( O == MyOrder ) return false ;
243+ else break ;
244+ }
238245
239246 // Do not increase price, if we already have price higher or equal compared to minimal price.
240247 if ( MyOrder . Price >= MinimalPrice ) return false ;
@@ -245,27 +252,39 @@ private bool IncreasePrice(Order MyOrder, Order[] AllOrders, double MinimalPrice
245252 LibConsole . WriteLine ( LibConsole . TEXT_TYPE . INFO , "Setting price order #" + MyOrder . ID + " to " + MinimalPrice . ToString ( "F4" ) ) ;
246253 double NewP = MyOrder . SetPrice ( MinimalPrice ) ;
247254 if ( NewP > 0 ) MyOrder . Price = NewP ;
255+
256+ return true ;
248257 }
249258 else if ( MyOrder . Price < MaxPrice )
250259 {
251260 // We can at least set price to be MaxPrice
252261 LibConsole . WriteLine ( LibConsole . TEXT_TYPE . INFO , "Setting price order #" + MyOrder . ID + " to " + MaxPrice . ToString ( "F4" ) ) ;
253262 double NewP = MyOrder . SetPrice ( MaxPrice ) ;
254263 if ( NewP > 0 ) MyOrder . Price = NewP ;
264+
265+ return true ;
255266 }
256267
257- return true ; // Return true anyway, we don't want to check for price decrease, because we should increase the price.
268+ return false ;
258269 }
259270
260271
261272 private void DecreasePrice ( Order MyOrder , Order [ ] AllOrders , double MinimalPrice )
262273 {
263- // Decrease only in case if we are still above or equal to minimal price.
264- if ( MyOrder . Price + APIWrapper . PriceDecreaseSteps [ MyOrder . Algorithm ] >= MinimalPrice )
274+ // Check time if decrase is possible.
275+ if ( DecreaseTime + APIWrapper . PRICE_DECREASE_INTERVAL > DateTime . Now ) return ;
276+
277+ // Decrease only in case if we are still above or equal to minimal price. Or if we are above maximal price.
278+ if ( MyOrder . Price + APIWrapper . PRICE_DECREASE_STEP [ MyOrder . Algorithm ] >= MinimalPrice ||
279+ MyOrder . Price > MaxPrice )
265280 {
266- LibConsole . WriteLine ( LibConsole . TEXT_TYPE . INFO , "Decreasing price order #" + MyOrder . ID ) ;
267281 double NewP = MyOrder . SetPriceDecrease ( ) ;
268- if ( NewP > 0 ) MyOrder . Price = NewP ;
282+ if ( NewP > 0 )
283+ {
284+ MyOrder . Price = NewP ;
285+ LibConsole . WriteLine ( LibConsole . TEXT_TYPE . INFO , "Decreasing price order #" + MyOrder . ID + " to " + NewP . ToString ( "F4" ) ) ;
286+ DecreaseTime = DateTime . Now ;
287+ }
269288 }
270289 }
271290
0 commit comments