@gbozee/ultimate 0.0.2-190 → 0.0.2-192
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/frontend-index.d.ts +7 -0
- package/dist/frontend-index.js +21 -4
- package/dist/index.cjs +25 -5
- package/dist/index.d.ts +11 -0
- package/dist/index.js +25 -5
- package/dist/mcp-server.cjs +25 -5
- package/dist/mcp-server.js +25 -5
- package/package.json +1 -1
package/dist/frontend-index.d.ts
CHANGED
|
@@ -642,6 +642,7 @@ export declare function determineOptimumReward(payload: {
|
|
|
642
642
|
high_range?: number;
|
|
643
643
|
target_loss?: number;
|
|
644
644
|
distribution?: GetEntriesParams["distribution"];
|
|
645
|
+
max_size?: number;
|
|
645
646
|
}): number | {
|
|
646
647
|
result: any[];
|
|
647
648
|
value: number;
|
|
@@ -649,6 +650,7 @@ export declare function determineOptimumReward(payload: {
|
|
|
649
650
|
risk_per_trade: number;
|
|
650
651
|
max: number;
|
|
651
652
|
min: number;
|
|
653
|
+
avg_size: any;
|
|
652
654
|
neg_pnl: any;
|
|
653
655
|
entry: any;
|
|
654
656
|
};
|
|
@@ -681,6 +683,7 @@ export declare function computeRiskReward(payload: {
|
|
|
681
683
|
risk_per_trade: number;
|
|
682
684
|
target_loss?: number;
|
|
683
685
|
distribution?: GetEntriesParams["distribution"];
|
|
686
|
+
max_size?: number;
|
|
684
687
|
}): number | {
|
|
685
688
|
result: any[];
|
|
686
689
|
value: number;
|
|
@@ -688,6 +691,7 @@ export declare function computeRiskReward(payload: {
|
|
|
688
691
|
risk_per_trade: number;
|
|
689
692
|
max: number;
|
|
690
693
|
min: number;
|
|
694
|
+
avg_size: any;
|
|
691
695
|
neg_pnl: any;
|
|
692
696
|
entry: any;
|
|
693
697
|
};
|
|
@@ -698,6 +702,7 @@ export declare function getRiskReward(payload: {
|
|
|
698
702
|
global_config: GlobalConfig;
|
|
699
703
|
force_exact_risk?: boolean;
|
|
700
704
|
target_loss?: number;
|
|
705
|
+
max_size?: number;
|
|
701
706
|
distribution?: GetEntriesParams["distribution"];
|
|
702
707
|
}): any;
|
|
703
708
|
export declare function computeProfitDetail(payload: {
|
|
@@ -913,6 +918,7 @@ export declare function generateOppositeTradeConfig(payload: {
|
|
|
913
918
|
risk_per_trade: number;
|
|
914
919
|
max: number;
|
|
915
920
|
min: number;
|
|
921
|
+
avg_size: any;
|
|
916
922
|
neg_pnl: any;
|
|
917
923
|
entry: any;
|
|
918
924
|
};
|
|
@@ -980,6 +986,7 @@ export declare function generateDangerousConfig(payload: {
|
|
|
980
986
|
risk_per_trade: number;
|
|
981
987
|
max: number;
|
|
982
988
|
min: number;
|
|
989
|
+
avg_size: any;
|
|
983
990
|
neg_pnl: any;
|
|
984
991
|
entry: any;
|
|
985
992
|
};
|
package/dist/frontend-index.js
CHANGED
|
@@ -2110,7 +2110,8 @@ function determineOptimumReward(payload) {
|
|
|
2110
2110
|
low_range = 1,
|
|
2111
2111
|
high_range = 199,
|
|
2112
2112
|
target_loss,
|
|
2113
|
-
distribution
|
|
2113
|
+
distribution,
|
|
2114
|
+
max_size
|
|
2114
2115
|
} = payload;
|
|
2115
2116
|
const criterion = app_config.strategy || "quantity";
|
|
2116
2117
|
const risk_rewards = createArray(low_range, high_range, 1);
|
|
@@ -2132,6 +2133,7 @@ function determineOptimumReward(payload) {
|
|
|
2132
2133
|
let min = Infinity;
|
|
2133
2134
|
let neg_pnl = trades[0]?.neg_pnl || 0;
|
|
2134
2135
|
let entry = trades.at(-1)?.entry;
|
|
2136
|
+
let avg_size = trades[0]?.avg_size || 0;
|
|
2135
2137
|
if (!entry) {
|
|
2136
2138
|
return null;
|
|
2137
2139
|
}
|
|
@@ -2148,11 +2150,15 @@ function determineOptimumReward(payload) {
|
|
|
2148
2150
|
risk_per_trade: app_config.risk_per_trade,
|
|
2149
2151
|
max,
|
|
2150
2152
|
min,
|
|
2153
|
+
avg_size,
|
|
2151
2154
|
neg_pnl,
|
|
2152
2155
|
entry
|
|
2153
2156
|
};
|
|
2154
2157
|
});
|
|
2155
2158
|
func = func.filter((r) => Boolean(r));
|
|
2159
|
+
if (max_size !== undefined && max_size > 0) {
|
|
2160
|
+
func = func.filter((r) => r.avg_size <= max_size);
|
|
2161
|
+
}
|
|
2156
2162
|
if (target_loss === undefined) {
|
|
2157
2163
|
func = func.filter((r) => {
|
|
2158
2164
|
let foundIndex = r?.result.findIndex((e) => e.quantity === r.max);
|
|
@@ -2290,7 +2296,15 @@ function determineOptimumRisk(config, payload, params) {
|
|
|
2290
2296
|
};
|
|
2291
2297
|
}
|
|
2292
2298
|
function computeRiskReward(payload) {
|
|
2293
|
-
const {
|
|
2299
|
+
const {
|
|
2300
|
+
app_config,
|
|
2301
|
+
entry,
|
|
2302
|
+
stop,
|
|
2303
|
+
risk_per_trade,
|
|
2304
|
+
target_loss,
|
|
2305
|
+
distribution,
|
|
2306
|
+
max_size
|
|
2307
|
+
} = payload;
|
|
2294
2308
|
const kind = entry > stop ? "long" : "short";
|
|
2295
2309
|
app_config.kind = kind;
|
|
2296
2310
|
app_config.entry = entry;
|
|
@@ -2299,12 +2313,14 @@ function computeRiskReward(payload) {
|
|
|
2299
2313
|
const result = determineOptimumReward({
|
|
2300
2314
|
app_config,
|
|
2301
2315
|
target_loss,
|
|
2302
|
-
distribution
|
|
2316
|
+
distribution,
|
|
2317
|
+
max_size
|
|
2303
2318
|
});
|
|
2304
2319
|
return result;
|
|
2305
2320
|
}
|
|
2306
2321
|
function getRiskReward(payload) {
|
|
2307
2322
|
const {
|
|
2323
|
+
max_size,
|
|
2308
2324
|
entry,
|
|
2309
2325
|
stop,
|
|
2310
2326
|
risk,
|
|
@@ -2327,7 +2343,8 @@ function getRiskReward(payload) {
|
|
|
2327
2343
|
stop,
|
|
2328
2344
|
risk_per_trade: risk,
|
|
2329
2345
|
target_loss,
|
|
2330
|
-
distribution
|
|
2346
|
+
distribution,
|
|
2347
|
+
max_size
|
|
2331
2348
|
});
|
|
2332
2349
|
if (force_exact_risk) {
|
|
2333
2350
|
const new_risk_per_trade = determineOptimumRisk(global_config, {
|
package/dist/index.cjs
CHANGED
|
@@ -54960,7 +54960,10 @@ class AppDatabase {
|
|
|
54960
54960
|
const existing_stop_orders = await this.pb.collection("orders").getFullList({
|
|
54961
54961
|
filter: `symbol:lower="${symbol.toLowerCase()}" && account.owner:lower="${account.owner.toLowerCase()}" && account.exchange:lower="${account.exchange.toLowerCase()}" && kind="${kind}" && side:lower="${stop_side}" && stop > 0`
|
|
54962
54962
|
});
|
|
54963
|
-
const
|
|
54963
|
+
const stop_limit_orders = await this.pb.collection("orders").getFullList({
|
|
54964
|
+
filter: `symbol:lower="${symbol.toLowerCase()}" && account.owner:lower="${account.owner.toLowerCase()}" && account.exchange:lower="${account.exchange.toLowerCase()}" && kind="${kind}" && side:lower="${side}" && stop > 0`
|
|
54965
|
+
});
|
|
54966
|
+
const exchange_order_ids = orders.concat(existing_stop_orders).concat(stop_limit_orders).map((o) => account.exchange === "bybit" ? o.order_id : account.exchange === "binance" && o.client_order_id ? o.client_order_id : parseInt(o.order_id, 10));
|
|
54964
54967
|
if (raw) {
|
|
54965
54968
|
return exchange_order_ids;
|
|
54966
54969
|
}
|
|
@@ -57486,7 +57489,8 @@ function determineOptimumReward(payload) {
|
|
|
57486
57489
|
low_range = 1,
|
|
57487
57490
|
high_range = 199,
|
|
57488
57491
|
target_loss,
|
|
57489
|
-
distribution
|
|
57492
|
+
distribution,
|
|
57493
|
+
max_size
|
|
57490
57494
|
} = payload;
|
|
57491
57495
|
const criterion = app_config.strategy || "quantity";
|
|
57492
57496
|
const risk_rewards = createArray(low_range, high_range, 1);
|
|
@@ -57508,6 +57512,7 @@ function determineOptimumReward(payload) {
|
|
|
57508
57512
|
let min = Infinity;
|
|
57509
57513
|
let neg_pnl = trades[0]?.neg_pnl || 0;
|
|
57510
57514
|
let entry = trades.at(-1)?.entry;
|
|
57515
|
+
let avg_size = trades[0]?.avg_size || 0;
|
|
57511
57516
|
if (!entry) {
|
|
57512
57517
|
return null;
|
|
57513
57518
|
}
|
|
@@ -57524,11 +57529,15 @@ function determineOptimumReward(payload) {
|
|
|
57524
57529
|
risk_per_trade: app_config.risk_per_trade,
|
|
57525
57530
|
max,
|
|
57526
57531
|
min,
|
|
57532
|
+
avg_size,
|
|
57527
57533
|
neg_pnl,
|
|
57528
57534
|
entry
|
|
57529
57535
|
};
|
|
57530
57536
|
});
|
|
57531
57537
|
func = func.filter((r2) => Boolean(r2));
|
|
57538
|
+
if (max_size !== undefined && max_size > 0) {
|
|
57539
|
+
func = func.filter((r2) => r2.avg_size <= max_size);
|
|
57540
|
+
}
|
|
57532
57541
|
if (target_loss === undefined) {
|
|
57533
57542
|
func = func.filter((r2) => {
|
|
57534
57543
|
let foundIndex = r2?.result.findIndex((e2) => e2.quantity === r2.max);
|
|
@@ -57666,7 +57675,15 @@ function determineOptimumRisk(config2, payload, params) {
|
|
|
57666
57675
|
};
|
|
57667
57676
|
}
|
|
57668
57677
|
function computeRiskReward(payload) {
|
|
57669
|
-
const {
|
|
57678
|
+
const {
|
|
57679
|
+
app_config,
|
|
57680
|
+
entry,
|
|
57681
|
+
stop,
|
|
57682
|
+
risk_per_trade,
|
|
57683
|
+
target_loss,
|
|
57684
|
+
distribution,
|
|
57685
|
+
max_size
|
|
57686
|
+
} = payload;
|
|
57670
57687
|
const kind = entry > stop ? "long" : "short";
|
|
57671
57688
|
app_config.kind = kind;
|
|
57672
57689
|
app_config.entry = entry;
|
|
@@ -57675,12 +57692,14 @@ function computeRiskReward(payload) {
|
|
|
57675
57692
|
const result = determineOptimumReward({
|
|
57676
57693
|
app_config,
|
|
57677
57694
|
target_loss,
|
|
57678
|
-
distribution
|
|
57695
|
+
distribution,
|
|
57696
|
+
max_size
|
|
57679
57697
|
});
|
|
57680
57698
|
return result;
|
|
57681
57699
|
}
|
|
57682
57700
|
function getRiskReward(payload) {
|
|
57683
57701
|
const {
|
|
57702
|
+
max_size,
|
|
57684
57703
|
entry,
|
|
57685
57704
|
stop,
|
|
57686
57705
|
risk,
|
|
@@ -57703,7 +57722,8 @@ function getRiskReward(payload) {
|
|
|
57703
57722
|
stop,
|
|
57704
57723
|
risk_per_trade: risk,
|
|
57705
57724
|
target_loss,
|
|
57706
|
-
distribution
|
|
57725
|
+
distribution,
|
|
57726
|
+
max_size
|
|
57707
57727
|
});
|
|
57708
57728
|
if (force_exact_risk) {
|
|
57709
57729
|
const new_risk_per_trade = determineOptimumRisk(global_config, {
|
package/dist/index.d.ts
CHANGED
|
@@ -1549,6 +1549,7 @@ export declare function determineOptimumReward(payload: {
|
|
|
1549
1549
|
high_range?: number;
|
|
1550
1550
|
target_loss?: number;
|
|
1551
1551
|
distribution?: GetEntriesParams["distribution"];
|
|
1552
|
+
max_size?: number;
|
|
1552
1553
|
}): number | {
|
|
1553
1554
|
result: any[];
|
|
1554
1555
|
value: number;
|
|
@@ -1556,6 +1557,7 @@ export declare function determineOptimumReward(payload: {
|
|
|
1556
1557
|
risk_per_trade: number;
|
|
1557
1558
|
max: number;
|
|
1558
1559
|
min: number;
|
|
1560
|
+
avg_size: any;
|
|
1559
1561
|
neg_pnl: any;
|
|
1560
1562
|
entry: any;
|
|
1561
1563
|
};
|
|
@@ -1588,6 +1590,7 @@ export declare function computeRiskReward(payload: {
|
|
|
1588
1590
|
risk_per_trade: number;
|
|
1589
1591
|
target_loss?: number;
|
|
1590
1592
|
distribution?: GetEntriesParams["distribution"];
|
|
1593
|
+
max_size?: number;
|
|
1591
1594
|
}): number | {
|
|
1592
1595
|
result: any[];
|
|
1593
1596
|
value: number;
|
|
@@ -1595,6 +1598,7 @@ export declare function computeRiskReward(payload: {
|
|
|
1595
1598
|
risk_per_trade: number;
|
|
1596
1599
|
max: number;
|
|
1597
1600
|
min: number;
|
|
1601
|
+
avg_size: any;
|
|
1598
1602
|
neg_pnl: any;
|
|
1599
1603
|
entry: any;
|
|
1600
1604
|
};
|
|
@@ -1605,6 +1609,7 @@ export declare function getRiskReward(payload: {
|
|
|
1605
1609
|
global_config: GlobalConfig;
|
|
1606
1610
|
force_exact_risk?: boolean;
|
|
1607
1611
|
target_loss?: number;
|
|
1612
|
+
max_size?: number;
|
|
1608
1613
|
distribution?: GetEntriesParams["distribution"];
|
|
1609
1614
|
}): any;
|
|
1610
1615
|
export declare function computeProfitDetail(payload: {
|
|
@@ -1820,6 +1825,7 @@ export declare function generateOppositeTradeConfig(payload: {
|
|
|
1820
1825
|
risk_per_trade: number;
|
|
1821
1826
|
max: number;
|
|
1822
1827
|
min: number;
|
|
1828
|
+
avg_size: any;
|
|
1823
1829
|
neg_pnl: any;
|
|
1824
1830
|
entry: any;
|
|
1825
1831
|
};
|
|
@@ -1887,6 +1893,7 @@ export declare function generateDangerousConfig(payload: {
|
|
|
1887
1893
|
risk_per_trade: number;
|
|
1888
1894
|
max: number;
|
|
1889
1895
|
min: number;
|
|
1896
|
+
avg_size: any;
|
|
1890
1897
|
neg_pnl: any;
|
|
1891
1898
|
entry: any;
|
|
1892
1899
|
};
|
|
@@ -2238,6 +2245,7 @@ export declare class ExchangePosition {
|
|
|
2238
2245
|
risk_per_trade: number;
|
|
2239
2246
|
max: number;
|
|
2240
2247
|
min: number;
|
|
2248
|
+
avg_size: any;
|
|
2241
2249
|
neg_pnl: any;
|
|
2242
2250
|
entry: any;
|
|
2243
2251
|
};
|
|
@@ -2249,6 +2257,7 @@ export declare class ExchangePosition {
|
|
|
2249
2257
|
risk_per_trade: number;
|
|
2250
2258
|
max: number;
|
|
2251
2259
|
min: number;
|
|
2260
|
+
avg_size: any;
|
|
2252
2261
|
neg_pnl: any;
|
|
2253
2262
|
entry: any;
|
|
2254
2263
|
}>;
|
|
@@ -2326,6 +2335,7 @@ export declare class ExchangePosition {
|
|
|
2326
2335
|
risk_per_trade: number;
|
|
2327
2336
|
max: number;
|
|
2328
2337
|
min: number;
|
|
2338
|
+
avg_size: any;
|
|
2329
2339
|
neg_pnl: any;
|
|
2330
2340
|
entry: any;
|
|
2331
2341
|
};
|
|
@@ -2902,6 +2912,7 @@ declare class ExchangeAccount$1 {
|
|
|
2902
2912
|
risk_per_trade: number;
|
|
2903
2913
|
max: number;
|
|
2904
2914
|
min: number;
|
|
2915
|
+
avg_size: any;
|
|
2905
2916
|
neg_pnl: any;
|
|
2906
2917
|
entry: any;
|
|
2907
2918
|
};
|
package/dist/index.js
CHANGED
|
@@ -54898,7 +54898,10 @@ class AppDatabase {
|
|
|
54898
54898
|
const existing_stop_orders = await this.pb.collection("orders").getFullList({
|
|
54899
54899
|
filter: `symbol:lower="${symbol.toLowerCase()}" && account.owner:lower="${account.owner.toLowerCase()}" && account.exchange:lower="${account.exchange.toLowerCase()}" && kind="${kind}" && side:lower="${stop_side}" && stop > 0`
|
|
54900
54900
|
});
|
|
54901
|
-
const
|
|
54901
|
+
const stop_limit_orders = await this.pb.collection("orders").getFullList({
|
|
54902
|
+
filter: `symbol:lower="${symbol.toLowerCase()}" && account.owner:lower="${account.owner.toLowerCase()}" && account.exchange:lower="${account.exchange.toLowerCase()}" && kind="${kind}" && side:lower="${side}" && stop > 0`
|
|
54903
|
+
});
|
|
54904
|
+
const exchange_order_ids = orders.concat(existing_stop_orders).concat(stop_limit_orders).map((o) => account.exchange === "bybit" ? o.order_id : account.exchange === "binance" && o.client_order_id ? o.client_order_id : parseInt(o.order_id, 10));
|
|
54902
54905
|
if (raw) {
|
|
54903
54906
|
return exchange_order_ids;
|
|
54904
54907
|
}
|
|
@@ -57424,7 +57427,8 @@ function determineOptimumReward(payload) {
|
|
|
57424
57427
|
low_range = 1,
|
|
57425
57428
|
high_range = 199,
|
|
57426
57429
|
target_loss,
|
|
57427
|
-
distribution
|
|
57430
|
+
distribution,
|
|
57431
|
+
max_size
|
|
57428
57432
|
} = payload;
|
|
57429
57433
|
const criterion = app_config.strategy || "quantity";
|
|
57430
57434
|
const risk_rewards = createArray(low_range, high_range, 1);
|
|
@@ -57446,6 +57450,7 @@ function determineOptimumReward(payload) {
|
|
|
57446
57450
|
let min = Infinity;
|
|
57447
57451
|
let neg_pnl = trades[0]?.neg_pnl || 0;
|
|
57448
57452
|
let entry = trades.at(-1)?.entry;
|
|
57453
|
+
let avg_size = trades[0]?.avg_size || 0;
|
|
57449
57454
|
if (!entry) {
|
|
57450
57455
|
return null;
|
|
57451
57456
|
}
|
|
@@ -57462,11 +57467,15 @@ function determineOptimumReward(payload) {
|
|
|
57462
57467
|
risk_per_trade: app_config.risk_per_trade,
|
|
57463
57468
|
max,
|
|
57464
57469
|
min,
|
|
57470
|
+
avg_size,
|
|
57465
57471
|
neg_pnl,
|
|
57466
57472
|
entry
|
|
57467
57473
|
};
|
|
57468
57474
|
});
|
|
57469
57475
|
func = func.filter((r2) => Boolean(r2));
|
|
57476
|
+
if (max_size !== undefined && max_size > 0) {
|
|
57477
|
+
func = func.filter((r2) => r2.avg_size <= max_size);
|
|
57478
|
+
}
|
|
57470
57479
|
if (target_loss === undefined) {
|
|
57471
57480
|
func = func.filter((r2) => {
|
|
57472
57481
|
let foundIndex = r2?.result.findIndex((e2) => e2.quantity === r2.max);
|
|
@@ -57604,7 +57613,15 @@ function determineOptimumRisk(config2, payload, params) {
|
|
|
57604
57613
|
};
|
|
57605
57614
|
}
|
|
57606
57615
|
function computeRiskReward(payload) {
|
|
57607
|
-
const {
|
|
57616
|
+
const {
|
|
57617
|
+
app_config,
|
|
57618
|
+
entry,
|
|
57619
|
+
stop,
|
|
57620
|
+
risk_per_trade,
|
|
57621
|
+
target_loss,
|
|
57622
|
+
distribution,
|
|
57623
|
+
max_size
|
|
57624
|
+
} = payload;
|
|
57608
57625
|
const kind = entry > stop ? "long" : "short";
|
|
57609
57626
|
app_config.kind = kind;
|
|
57610
57627
|
app_config.entry = entry;
|
|
@@ -57613,12 +57630,14 @@ function computeRiskReward(payload) {
|
|
|
57613
57630
|
const result = determineOptimumReward({
|
|
57614
57631
|
app_config,
|
|
57615
57632
|
target_loss,
|
|
57616
|
-
distribution
|
|
57633
|
+
distribution,
|
|
57634
|
+
max_size
|
|
57617
57635
|
});
|
|
57618
57636
|
return result;
|
|
57619
57637
|
}
|
|
57620
57638
|
function getRiskReward(payload) {
|
|
57621
57639
|
const {
|
|
57640
|
+
max_size,
|
|
57622
57641
|
entry,
|
|
57623
57642
|
stop,
|
|
57624
57643
|
risk,
|
|
@@ -57641,7 +57660,8 @@ function getRiskReward(payload) {
|
|
|
57641
57660
|
stop,
|
|
57642
57661
|
risk_per_trade: risk,
|
|
57643
57662
|
target_loss,
|
|
57644
|
-
distribution
|
|
57663
|
+
distribution,
|
|
57664
|
+
max_size
|
|
57645
57665
|
});
|
|
57646
57666
|
if (force_exact_risk) {
|
|
57647
57667
|
const new_risk_per_trade = determineOptimumRisk(global_config, {
|
package/dist/mcp-server.cjs
CHANGED
|
@@ -61654,7 +61654,10 @@ class AppDatabase {
|
|
|
61654
61654
|
const existing_stop_orders = await this.pb.collection("orders").getFullList({
|
|
61655
61655
|
filter: `symbol:lower="${symbol.toLowerCase()}" && account.owner:lower="${account.owner.toLowerCase()}" && account.exchange:lower="${account.exchange.toLowerCase()}" && kind="${kind}" && side:lower="${stop_side}" && stop > 0`
|
|
61656
61656
|
});
|
|
61657
|
-
const
|
|
61657
|
+
const stop_limit_orders = await this.pb.collection("orders").getFullList({
|
|
61658
|
+
filter: `symbol:lower="${symbol.toLowerCase()}" && account.owner:lower="${account.owner.toLowerCase()}" && account.exchange:lower="${account.exchange.toLowerCase()}" && kind="${kind}" && side:lower="${side}" && stop > 0`
|
|
61659
|
+
});
|
|
61660
|
+
const exchange_order_ids = orders.concat(existing_stop_orders).concat(stop_limit_orders).map((o) => account.exchange === "bybit" ? o.order_id : account.exchange === "binance" && o.client_order_id ? o.client_order_id : parseInt(o.order_id, 10));
|
|
61658
61661
|
if (raw) {
|
|
61659
61662
|
return exchange_order_ids;
|
|
61660
61663
|
}
|
|
@@ -64160,7 +64163,8 @@ function determineOptimumReward(payload) {
|
|
|
64160
64163
|
low_range = 1,
|
|
64161
64164
|
high_range = 199,
|
|
64162
64165
|
target_loss,
|
|
64163
|
-
distribution
|
|
64166
|
+
distribution,
|
|
64167
|
+
max_size
|
|
64164
64168
|
} = payload;
|
|
64165
64169
|
const criterion = app_config.strategy || "quantity";
|
|
64166
64170
|
const risk_rewards = createArray(low_range, high_range, 1);
|
|
@@ -64182,6 +64186,7 @@ function determineOptimumReward(payload) {
|
|
|
64182
64186
|
let min = Infinity;
|
|
64183
64187
|
let neg_pnl = trades[0]?.neg_pnl || 0;
|
|
64184
64188
|
let entry = trades.at(-1)?.entry;
|
|
64189
|
+
let avg_size = trades[0]?.avg_size || 0;
|
|
64185
64190
|
if (!entry) {
|
|
64186
64191
|
return null;
|
|
64187
64192
|
}
|
|
@@ -64198,11 +64203,15 @@ function determineOptimumReward(payload) {
|
|
|
64198
64203
|
risk_per_trade: app_config.risk_per_trade,
|
|
64199
64204
|
max,
|
|
64200
64205
|
min,
|
|
64206
|
+
avg_size,
|
|
64201
64207
|
neg_pnl,
|
|
64202
64208
|
entry
|
|
64203
64209
|
};
|
|
64204
64210
|
});
|
|
64205
64211
|
func = func.filter((r2) => Boolean(r2));
|
|
64212
|
+
if (max_size !== undefined && max_size > 0) {
|
|
64213
|
+
func = func.filter((r2) => r2.avg_size <= max_size);
|
|
64214
|
+
}
|
|
64206
64215
|
if (target_loss === undefined) {
|
|
64207
64216
|
func = func.filter((r2) => {
|
|
64208
64217
|
let foundIndex = r2?.result.findIndex((e2) => e2.quantity === r2.max);
|
|
@@ -64340,7 +64349,15 @@ function determineOptimumRisk(config2, payload, params) {
|
|
|
64340
64349
|
};
|
|
64341
64350
|
}
|
|
64342
64351
|
function computeRiskReward(payload) {
|
|
64343
|
-
const {
|
|
64352
|
+
const {
|
|
64353
|
+
app_config,
|
|
64354
|
+
entry,
|
|
64355
|
+
stop,
|
|
64356
|
+
risk_per_trade,
|
|
64357
|
+
target_loss,
|
|
64358
|
+
distribution,
|
|
64359
|
+
max_size
|
|
64360
|
+
} = payload;
|
|
64344
64361
|
const kind = entry > stop ? "long" : "short";
|
|
64345
64362
|
app_config.kind = kind;
|
|
64346
64363
|
app_config.entry = entry;
|
|
@@ -64349,12 +64366,14 @@ function computeRiskReward(payload) {
|
|
|
64349
64366
|
const result = determineOptimumReward({
|
|
64350
64367
|
app_config,
|
|
64351
64368
|
target_loss,
|
|
64352
|
-
distribution
|
|
64369
|
+
distribution,
|
|
64370
|
+
max_size
|
|
64353
64371
|
});
|
|
64354
64372
|
return result;
|
|
64355
64373
|
}
|
|
64356
64374
|
function getRiskReward(payload) {
|
|
64357
64375
|
const {
|
|
64376
|
+
max_size,
|
|
64358
64377
|
entry,
|
|
64359
64378
|
stop,
|
|
64360
64379
|
risk,
|
|
@@ -64377,7 +64396,8 @@ function getRiskReward(payload) {
|
|
|
64377
64396
|
stop,
|
|
64378
64397
|
risk_per_trade: risk,
|
|
64379
64398
|
target_loss,
|
|
64380
|
-
distribution
|
|
64399
|
+
distribution,
|
|
64400
|
+
max_size
|
|
64381
64401
|
});
|
|
64382
64402
|
if (force_exact_risk) {
|
|
64383
64403
|
const new_risk_per_trade = determineOptimumRisk(global_config, {
|
package/dist/mcp-server.js
CHANGED
|
@@ -61627,7 +61627,10 @@ class AppDatabase {
|
|
|
61627
61627
|
const existing_stop_orders = await this.pb.collection("orders").getFullList({
|
|
61628
61628
|
filter: `symbol:lower="${symbol.toLowerCase()}" && account.owner:lower="${account.owner.toLowerCase()}" && account.exchange:lower="${account.exchange.toLowerCase()}" && kind="${kind}" && side:lower="${stop_side}" && stop > 0`
|
|
61629
61629
|
});
|
|
61630
|
-
const
|
|
61630
|
+
const stop_limit_orders = await this.pb.collection("orders").getFullList({
|
|
61631
|
+
filter: `symbol:lower="${symbol.toLowerCase()}" && account.owner:lower="${account.owner.toLowerCase()}" && account.exchange:lower="${account.exchange.toLowerCase()}" && kind="${kind}" && side:lower="${side}" && stop > 0`
|
|
61632
|
+
});
|
|
61633
|
+
const exchange_order_ids = orders.concat(existing_stop_orders).concat(stop_limit_orders).map((o) => account.exchange === "bybit" ? o.order_id : account.exchange === "binance" && o.client_order_id ? o.client_order_id : parseInt(o.order_id, 10));
|
|
61631
61634
|
if (raw) {
|
|
61632
61635
|
return exchange_order_ids;
|
|
61633
61636
|
}
|
|
@@ -64133,7 +64136,8 @@ function determineOptimumReward(payload) {
|
|
|
64133
64136
|
low_range = 1,
|
|
64134
64137
|
high_range = 199,
|
|
64135
64138
|
target_loss,
|
|
64136
|
-
distribution
|
|
64139
|
+
distribution,
|
|
64140
|
+
max_size
|
|
64137
64141
|
} = payload;
|
|
64138
64142
|
const criterion = app_config.strategy || "quantity";
|
|
64139
64143
|
const risk_rewards = createArray(low_range, high_range, 1);
|
|
@@ -64155,6 +64159,7 @@ function determineOptimumReward(payload) {
|
|
|
64155
64159
|
let min = Infinity;
|
|
64156
64160
|
let neg_pnl = trades[0]?.neg_pnl || 0;
|
|
64157
64161
|
let entry = trades.at(-1)?.entry;
|
|
64162
|
+
let avg_size = trades[0]?.avg_size || 0;
|
|
64158
64163
|
if (!entry) {
|
|
64159
64164
|
return null;
|
|
64160
64165
|
}
|
|
@@ -64171,11 +64176,15 @@ function determineOptimumReward(payload) {
|
|
|
64171
64176
|
risk_per_trade: app_config.risk_per_trade,
|
|
64172
64177
|
max,
|
|
64173
64178
|
min,
|
|
64179
|
+
avg_size,
|
|
64174
64180
|
neg_pnl,
|
|
64175
64181
|
entry
|
|
64176
64182
|
};
|
|
64177
64183
|
});
|
|
64178
64184
|
func = func.filter((r2) => Boolean(r2));
|
|
64185
|
+
if (max_size !== undefined && max_size > 0) {
|
|
64186
|
+
func = func.filter((r2) => r2.avg_size <= max_size);
|
|
64187
|
+
}
|
|
64179
64188
|
if (target_loss === undefined) {
|
|
64180
64189
|
func = func.filter((r2) => {
|
|
64181
64190
|
let foundIndex = r2?.result.findIndex((e2) => e2.quantity === r2.max);
|
|
@@ -64313,7 +64322,15 @@ function determineOptimumRisk(config2, payload, params) {
|
|
|
64313
64322
|
};
|
|
64314
64323
|
}
|
|
64315
64324
|
function computeRiskReward(payload) {
|
|
64316
|
-
const {
|
|
64325
|
+
const {
|
|
64326
|
+
app_config,
|
|
64327
|
+
entry,
|
|
64328
|
+
stop,
|
|
64329
|
+
risk_per_trade,
|
|
64330
|
+
target_loss,
|
|
64331
|
+
distribution,
|
|
64332
|
+
max_size
|
|
64333
|
+
} = payload;
|
|
64317
64334
|
const kind = entry > stop ? "long" : "short";
|
|
64318
64335
|
app_config.kind = kind;
|
|
64319
64336
|
app_config.entry = entry;
|
|
@@ -64322,12 +64339,14 @@ function computeRiskReward(payload) {
|
|
|
64322
64339
|
const result = determineOptimumReward({
|
|
64323
64340
|
app_config,
|
|
64324
64341
|
target_loss,
|
|
64325
|
-
distribution
|
|
64342
|
+
distribution,
|
|
64343
|
+
max_size
|
|
64326
64344
|
});
|
|
64327
64345
|
return result;
|
|
64328
64346
|
}
|
|
64329
64347
|
function getRiskReward(payload) {
|
|
64330
64348
|
const {
|
|
64349
|
+
max_size,
|
|
64331
64350
|
entry,
|
|
64332
64351
|
stop,
|
|
64333
64352
|
risk,
|
|
@@ -64350,7 +64369,8 @@ function getRiskReward(payload) {
|
|
|
64350
64369
|
stop,
|
|
64351
64370
|
risk_per_trade: risk,
|
|
64352
64371
|
target_loss,
|
|
64353
|
-
distribution
|
|
64372
|
+
distribution,
|
|
64373
|
+
max_size
|
|
64354
64374
|
});
|
|
64355
64375
|
if (force_exact_risk) {
|
|
64356
64376
|
const new_risk_per_trade = determineOptimumRisk(global_config, {
|