@@ -31,6 +31,8 @@ public Home()
3131 ac = new ApiConnect ( ) ;
3232
3333 ApiSettings saved = ac . readSettings ( ) ;
34+ OrdersSettings orders = ac . readOrdersSettings ( ) ;
35+
3436 if ( saved . OrganizationID != null ) {
3537 ac . setup ( saved ) ;
3638
@@ -100,6 +102,9 @@ private void refreshBalance() {
100102
101103 private void refreshOrders ( bool fromThread )
102104 {
105+ //read custom order settings
106+ ApiConnect . OrdersSettings cos = ac . readOrdersSettings ( ) ;
107+
103108 if ( ac . connected )
104109 {
105110 orders = ac . getOrders ( ) ;
@@ -125,6 +130,10 @@ private void refreshOrders(bool fromThread)
125130 cleanOrder . Add ( "spentPercent" , "" + spent_factor . ToString ( "0.00" ) + "%" ) ;
126131 cleanOrder . Add ( "limit" , "" + order [ "limit" ] ) ;
127132 cleanOrder . Add ( "price" , "" + order [ "price" ] ) ;
133+
134+ //max price
135+ cleanOrder . Add ( "maxPrice" , getMaxPrice ( "" + order [ "id" ] , cos ) ) ;
136+
128137 cleanOrder . Add ( "rigsCount" , "" + order [ "rigsCount" ] ) ;
129138 cleanOrder . Add ( "acceptedCurrentSpeed" , "" + order [ "acceptedCurrentSpeed" ] ) ;
130139 cleanOrders . Add ( cleanOrder ) ;
@@ -148,6 +157,17 @@ private void refreshOrders(bool fromThread)
148157 }
149158 }
150159
160+ private string getMaxPrice ( string id , ApiConnect . OrdersSettings cos ) {
161+ foreach ( var order in cos . OrderList )
162+ {
163+ if ( id . Equals ( order . Id ) )
164+ {
165+ return order . MaxPrice ;
166+ }
167+ }
168+ return "" ;
169+ }
170+
151171 private void refreshMarket ( ) {
152172 if ( ac . connected )
153173 {
@@ -197,7 +217,12 @@ private void runBot() {
197217 }
198218
199219 toolStripStatusLabel1 . Text = "Working" ;
220+
221+ //read order individual settings
222+ ApiConnect . OrdersSettings cos = ac . readOrdersSettings ( ) ;
223+
200224 BotSettings saved = JsonConvert . DeserializeObject < BotSettings > ( File . ReadAllText ( @fileName ) ) ;
225+ Console . ForegroundColor = ConsoleColor . Green ;
201226 Console . WriteLine ( "bot iteration tasks {0} {1} {2}" , saved . reffilOrder , saved . lowerPrice , saved . increasePrice ) ;
202227
203228 Control . CheckForIllegalCrossThreadCalls = false ;
@@ -207,20 +232,23 @@ private void runBot() {
207232 refreshMarket ( ) ;
208233 }
209234
210- //do refill??
235+ Console . ForegroundColor = ConsoleColor . White ;
211236 Console . WriteLine ( "orders to process: {0}" , orders . Count ) ;
212237
238+ //do refill??
213239 if ( saved . reffilOrder ) {
214240 foreach ( JObject order in orders )
215241 {
216242 float payed = float . Parse ( "" + order [ "payedAmount" ] , CultureInfo . InvariantCulture ) ;
217243 float available = float . Parse ( "" + order [ "availableAmount" ] , CultureInfo . InvariantCulture ) ;
218244 float spent_factor = payed / available * 100 ;
245+ Console . ForegroundColor = ConsoleColor . Cyan ;
219246 Console . WriteLine ( "?refill?; order {0}, payed {1}, available {2}, percent {3}" , order [ "id" ] , payed , available , spent_factor . ToString ( "0.00" ) ) ;
220247
221248 if ( spent_factor > 90 )
222249 {
223250 JObject algo = ac . getAlgo ( "" + order [ "algorithm" ] [ "algorithm" ] ) ;
251+ Console . ForegroundColor = ConsoleColor . Cyan ;
224252 Console . WriteLine ( "===> refill order for {0}" , algo [ "minimalOrderAmount" ] ) ;
225253 ac . refillOrder ( "" + order [ "id" ] , "" + algo [ "minimalOrderAmount" ] ) ;
226254 }
@@ -233,17 +261,36 @@ private void runBot() {
233261 string order_type = "" + order [ "type" ] [ "code" ] ;
234262 if ( order_type . Equals ( "STANDARD" ) )
235263 {
264+ //get order custom settings
265+ String omp = getMaxPrice ( "" + order [ "id" ] , cos ) ;
266+ float maxOrderPriceLimit = 0F ;
267+ if ( ! String . IsNullOrEmpty ( omp ) ) {
268+ maxOrderPriceLimit = float . Parse ( "" + omp , CultureInfo . InvariantCulture ) ;
269+ }
270+
236271 JObject algo = ac . getAlgo ( "" + order [ "algorithm" ] [ "algorithm" ] ) ;
237272 float order_speed = float . Parse ( "" + order [ "acceptedCurrentSpeed" ] , CultureInfo . InvariantCulture ) ;
273+ float rigs_count = float . Parse ( "" + order [ "rigsCount" ] , CultureInfo . InvariantCulture ) ;
238274 float order_price = float . Parse ( "" + order [ "price" ] , CultureInfo . InvariantCulture ) ;
239275 float price_step_down = float . Parse ( "" + algo [ "priceDownStep" ] , CultureInfo . InvariantCulture ) ;
240- Console . WriteLine ( "?adjust price?; order {0}, speed {1}, price {2}, step_down {3}" , order [ "id" ] , order_speed , order_price , price_step_down ) ;
241276
242- if ( saved . increasePrice && order_speed == 0 ) {
277+ Console . ForegroundColor = ConsoleColor . Green ;
278+ Console . WriteLine ( "?adjust price?; order {0}, speed {1}, rigs {2}, price {3}, step_down {4}, max order limit {5}" , order [ "id" ] , order_speed , rigs_count , order_price , price_step_down , maxOrderPriceLimit ) ;
279+
280+ if ( saved . increasePrice && ( order_speed == 0 || rigs_count == 0 ) ) {
243281 float new_price = ( float ) Math . Round ( order_price + ( price_step_down * - 1 ) , 4 ) ;
244- Console . WriteLine ( "===> price up order to {0}" , new_price ) ;
245- ac . updateOrder ( "" + order [ "algorithm" ] [ "algorithm" ] , "" + order [ "id" ] , new_price . ToString ( new CultureInfo ( "en-US" ) ) , "" + order [ "limit" ] ) ;
246- } else if ( saved . lowerPrice && order_speed > 0 ) {
282+
283+ if ( maxOrderPriceLimit > 0 && new_price > maxOrderPriceLimit ) {
284+ Console . ForegroundColor = ConsoleColor . Red ;
285+ Console . WriteLine ( "===> price up denied - max limit enforced {0} {1}" , new_price , maxOrderPriceLimit ) ;
286+ }
287+ else
288+ {
289+ Console . ForegroundColor = ConsoleColor . Yellow ;
290+ Console . WriteLine ( "===> price up order to {0}" , new_price ) ;
291+ ac . updateOrder ( "" + order [ "algorithm" ] [ "algorithm" ] , "" + order [ "id" ] , new_price . ToString ( new CultureInfo ( "en-US" ) ) , "" + order [ "limit" ] ) ;
292+ }
293+ } else if ( saved . lowerPrice && ( order_speed > 0 || rigs_count > 0 ) ) {
247294 Dictionary < string , float > market = getOrderPriceRangesForAlgoAndMarket ( "" + order [ "algorithm" ] [ "algorithm" ] , "" + order [ "market" ] ) ;
248295 var list = market . Keys . ToList ( ) ;
249296 list . Sort ( ) ;
@@ -260,6 +307,7 @@ private void runBot() {
260307
261308 if ( idx > 1 ) {
262309 float new_price = ( float ) Math . Round ( order_price + price_step_down , 4 ) ;
310+ Console . ForegroundColor = ConsoleColor . Yellow ;
263311 Console . WriteLine ( "===> price down order to {0}" , new_price ) ;
264312 ac . updateOrder ( "" + order [ "algorithm" ] [ "algorithm" ] , "" + order [ "id" ] , new_price . ToString ( new CultureInfo ( "en-US" ) ) , "" + order [ "limit" ] ) ;
265313 }
0 commit comments