@@ -31,6 +31,8 @@ public Home()
31
31
ac = new ApiConnect ( ) ;
32
32
33
33
ApiSettings saved = ac . readSettings ( ) ;
34
+ OrdersSettings orders = ac . readOrdersSettings ( ) ;
35
+
34
36
if ( saved . OrganizationID != null ) {
35
37
ac . setup ( saved ) ;
36
38
@@ -100,6 +102,9 @@ private void refreshBalance() {
100
102
101
103
private void refreshOrders ( bool fromThread )
102
104
{
105
+ //read custom order settings
106
+ ApiConnect . OrdersSettings cos = ac . readOrdersSettings ( ) ;
107
+
103
108
if ( ac . connected )
104
109
{
105
110
orders = ac . getOrders ( ) ;
@@ -125,6 +130,10 @@ private void refreshOrders(bool fromThread)
125
130
cleanOrder . Add ( "spentPercent" , "" + spent_factor . ToString ( "0.00" ) + "%" ) ;
126
131
cleanOrder . Add ( "limit" , "" + order [ "limit" ] ) ;
127
132
cleanOrder . Add ( "price" , "" + order [ "price" ] ) ;
133
+
134
+ //max price
135
+ cleanOrder . Add ( "maxPrice" , getMaxPrice ( "" + order [ "id" ] , cos ) ) ;
136
+
128
137
cleanOrder . Add ( "rigsCount" , "" + order [ "rigsCount" ] ) ;
129
138
cleanOrder . Add ( "acceptedCurrentSpeed" , "" + order [ "acceptedCurrentSpeed" ] ) ;
130
139
cleanOrders . Add ( cleanOrder ) ;
@@ -148,6 +157,17 @@ private void refreshOrders(bool fromThread)
148
157
}
149
158
}
150
159
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
+
151
171
private void refreshMarket ( ) {
152
172
if ( ac . connected )
153
173
{
@@ -197,7 +217,12 @@ private void runBot() {
197
217
}
198
218
199
219
toolStripStatusLabel1 . Text = "Working" ;
220
+
221
+ //read order individual settings
222
+ ApiConnect . OrdersSettings cos = ac . readOrdersSettings ( ) ;
223
+
200
224
BotSettings saved = JsonConvert . DeserializeObject < BotSettings > ( File . ReadAllText ( @fileName ) ) ;
225
+ Console . ForegroundColor = ConsoleColor . Green ;
201
226
Console . WriteLine ( "bot iteration tasks {0} {1} {2}" , saved . reffilOrder , saved . lowerPrice , saved . increasePrice ) ;
202
227
203
228
Control . CheckForIllegalCrossThreadCalls = false ;
@@ -207,20 +232,23 @@ private void runBot() {
207
232
refreshMarket ( ) ;
208
233
}
209
234
210
- //do refill??
235
+ Console . ForegroundColor = ConsoleColor . White ;
211
236
Console . WriteLine ( "orders to process: {0}" , orders . Count ) ;
212
237
238
+ //do refill??
213
239
if ( saved . reffilOrder ) {
214
240
foreach ( JObject order in orders )
215
241
{
216
242
float payed = float . Parse ( "" + order [ "payedAmount" ] , CultureInfo . InvariantCulture ) ;
217
243
float available = float . Parse ( "" + order [ "availableAmount" ] , CultureInfo . InvariantCulture ) ;
218
244
float spent_factor = payed / available * 100 ;
245
+ Console . ForegroundColor = ConsoleColor . Cyan ;
219
246
Console . WriteLine ( "?refill?; order {0}, payed {1}, available {2}, percent {3}" , order [ "id" ] , payed , available , spent_factor . ToString ( "0.00" ) ) ;
220
247
221
248
if ( spent_factor > 90 )
222
249
{
223
250
JObject algo = ac . getAlgo ( "" + order [ "algorithm" ] [ "algorithm" ] ) ;
251
+ Console . ForegroundColor = ConsoleColor . Cyan ;
224
252
Console . WriteLine ( "===> refill order for {0}" , algo [ "minimalOrderAmount" ] ) ;
225
253
ac . refillOrder ( "" + order [ "id" ] , "" + algo [ "minimalOrderAmount" ] ) ;
226
254
}
@@ -233,17 +261,36 @@ private void runBot() {
233
261
string order_type = "" + order [ "type" ] [ "code" ] ;
234
262
if ( order_type . Equals ( "STANDARD" ) )
235
263
{
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
+
236
271
JObject algo = ac . getAlgo ( "" + order [ "algorithm" ] [ "algorithm" ] ) ;
237
272
float order_speed = float . Parse ( "" + order [ "acceptedCurrentSpeed" ] , CultureInfo . InvariantCulture ) ;
273
+ float rigs_count = float . Parse ( "" + order [ "rigsCount" ] , CultureInfo . InvariantCulture ) ;
238
274
float order_price = float . Parse ( "" + order [ "price" ] , CultureInfo . InvariantCulture ) ;
239
275
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 ) ;
241
276
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 ) ) {
243
281
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 ) ) {
247
294
Dictionary < string , float > market = getOrderPriceRangesForAlgoAndMarket ( "" + order [ "algorithm" ] [ "algorithm" ] , "" + order [ "market" ] ) ;
248
295
var list = market . Keys . ToList ( ) ;
249
296
list . Sort ( ) ;
@@ -260,6 +307,7 @@ private void runBot() {
260
307
261
308
if ( idx > 1 ) {
262
309
float new_price = ( float ) Math . Round ( order_price + price_step_down , 4 ) ;
310
+ Console . ForegroundColor = ConsoleColor . Yellow ;
263
311
Console . WriteLine ( "===> price down order to {0}" , new_price ) ;
264
312
ac . updateOrder ( "" + order [ "algorithm" ] [ "algorithm" ] , "" + order [ "id" ] , new_price . ToString ( new CultureInfo ( "en-US" ) ) , "" + order [ "limit" ] ) ;
265
313
}
0 commit comments