bulltrackers-module 1.0.105 → 1.0.106
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/README.MD +222 -222
- package/functions/appscript-api/helpers/errors.js +19 -19
- package/functions/appscript-api/index.js +58 -58
- package/functions/computation-system/helpers/orchestration_helpers.js +647 -113
- package/functions/computation-system/utils/data_loader.js +191 -191
- package/functions/computation-system/utils/utils.js +149 -254
- package/functions/core/utils/firestore_utils.js +433 -433
- package/functions/core/utils/pubsub_utils.js +53 -53
- package/functions/dispatcher/helpers/dispatch_helpers.js +47 -47
- package/functions/dispatcher/index.js +52 -52
- package/functions/etoro-price-fetcher/helpers/handler_helpers.js +124 -124
- package/functions/fetch-insights/helpers/handler_helpers.js +91 -91
- package/functions/generic-api/helpers/api_helpers.js +379 -379
- package/functions/generic-api/index.js +150 -150
- package/functions/invalid-speculator-handler/helpers/handler_helpers.js +75 -75
- package/functions/orchestrator/helpers/discovery_helpers.js +226 -226
- package/functions/orchestrator/helpers/update_helpers.js +92 -92
- package/functions/orchestrator/index.js +147 -147
- package/functions/price-backfill/helpers/handler_helpers.js +116 -123
- package/functions/social-orchestrator/helpers/orchestrator_helpers.js +61 -61
- package/functions/social-task-handler/helpers/handler_helpers.js +288 -288
- package/functions/task-engine/handler_creator.js +78 -78
- package/functions/task-engine/helpers/discover_helpers.js +125 -125
- package/functions/task-engine/helpers/update_helpers.js +118 -118
- package/functions/task-engine/helpers/verify_helpers.js +162 -162
- package/functions/task-engine/utils/firestore_batch_manager.js +258 -258
- package/index.js +105 -113
- package/package.json +45 -45
- package/functions/computation-system/computation_dependencies.json +0 -120
- package/functions/computation-system/helpers/worker_helpers.js +0 -340
- package/functions/computation-system/utils/computation_state_manager.js +0 -178
- package/functions/computation-system/utils/dependency_graph.js +0 -191
- package/functions/speculator-cleanup-orchestrator/helpers/cleanup_helpers.js +0 -160
package/index.js
CHANGED
|
@@ -1,114 +1,106 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Main entry point for the Bulltrackers shared module.
|
|
3
|
-
* This module consolidates all core logic into a single 'pipe' object
|
|
4
|
-
* to enforce a clear naming convention and dependency injection pattern.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// --- Core Utilities (Classes and Stateless Helpers) ---
|
|
8
|
-
|
|
9
|
-
const core = {
|
|
10
|
-
IntelligentHeaderManager: require('./functions/core/utils/intelligent_header_manager').IntelligentHeaderManager,
|
|
11
|
-
IntelligentProxyManager: require('./functions/core/utils/intelligent_proxy_manager').IntelligentProxyManager,
|
|
12
|
-
FirestoreBatchManager: require('./functions/task-engine/utils/firestore_batch_manager').FirestoreBatchManager,
|
|
13
|
-
firestoreUtils: require('./functions/core/utils/firestore_utils'),
|
|
14
|
-
pubsubUtils: require('./functions/core/utils/pubsub_utils'),
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
// --- Pipe 1: Orchestrator ---
|
|
18
|
-
|
|
19
|
-
const orchestrator = {
|
|
20
|
-
// Main Pipes (Entry points for Cloud Functions)
|
|
21
|
-
runDiscoveryOrchestrator: require('./functions/orchestrator/index').runDiscoveryOrchestrator,
|
|
22
|
-
runUpdateOrchestrator: require('./functions/orchestrator/index').runUpdateOrchestrator,
|
|
23
|
-
|
|
24
|
-
// Sub-Pipes (Discovery)
|
|
25
|
-
checkDiscoveryNeed: require('./functions/orchestrator/helpers/discovery_helpers').checkDiscoveryNeed,
|
|
26
|
-
getDiscoveryCandidates: require('./functions/orchestrator/helpers/discovery_helpers').getDiscoveryCandidates,
|
|
27
|
-
dispatchDiscovery: require('./functions/orchestrator/helpers/discovery_helpers').dispatchDiscovery,
|
|
28
|
-
|
|
29
|
-
// Sub-Pipes (Updates)
|
|
30
|
-
getUpdateTargets: require('./functions/orchestrator/helpers/update_helpers').getUpdateTargets,
|
|
31
|
-
dispatchUpdates: require('./functions/orchestrator/helpers/update_helpers').dispatchUpdates,
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
// --- Pipe 2: Dispatcher ---
|
|
35
|
-
|
|
36
|
-
const dispatcher = {
|
|
37
|
-
// Main Pipe
|
|
38
|
-
handleRequest: require('./functions/dispatcher/index').handleRequest,
|
|
39
|
-
|
|
40
|
-
// Sub-Pipe
|
|
41
|
-
dispatchTasksInBatches: require('./functions/dispatcher/helpers/dispatch_helpers').dispatchTasksInBatches,
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
// --- Pipe 3: Task Engine ---
|
|
45
|
-
|
|
46
|
-
const taskEngine = {
|
|
47
|
-
// Main Pipe
|
|
48
|
-
handleRequest: require('./functions/task-engine/handler_creator').handleRequest,
|
|
49
|
-
|
|
50
|
-
// Sub-Pipes
|
|
51
|
-
handleDiscover: require('./functions/task-engine/helpers/discover_helpers').handleDiscover,
|
|
52
|
-
handleVerify: require('./functions/task-engine/helpers/verify_helpers').handleVerify,
|
|
53
|
-
handleUpdate: require('./functions/task-engine/helpers/update_helpers').handleUpdate,
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
// --- Pipe 4: Computation System ---
|
|
57
|
-
const computationSystem = {
|
|
58
|
-
// Main Pipe
|
|
59
|
-
runOrchestration: require('./functions/computation-system/helpers/orchestration_helpers').runComputationOrchestrator,
|
|
60
|
-
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
orchestrator,
|
|
107
|
-
dispatcher,
|
|
108
|
-
taskEngine,
|
|
109
|
-
computationSystem,
|
|
110
|
-
api,
|
|
111
|
-
maintenance,
|
|
112
|
-
proxy,
|
|
113
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Main entry point for the Bulltrackers shared module.
|
|
3
|
+
* This module consolidates all core logic into a single 'pipe' object
|
|
4
|
+
* to enforce a clear naming convention and dependency injection pattern.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// --- Core Utilities (Classes and Stateless Helpers) ---
|
|
8
|
+
|
|
9
|
+
const core = {
|
|
10
|
+
IntelligentHeaderManager: require('./functions/core/utils/intelligent_header_manager').IntelligentHeaderManager,
|
|
11
|
+
IntelligentProxyManager: require('./functions/core/utils/intelligent_proxy_manager').IntelligentProxyManager,
|
|
12
|
+
FirestoreBatchManager: require('./functions/task-engine/utils/firestore_batch_manager').FirestoreBatchManager,
|
|
13
|
+
firestoreUtils: require('./functions/core/utils/firestore_utils'),
|
|
14
|
+
pubsubUtils: require('./functions/core/utils/pubsub_utils'),
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// --- Pipe 1: Orchestrator ---
|
|
18
|
+
|
|
19
|
+
const orchestrator = {
|
|
20
|
+
// Main Pipes (Entry points for Cloud Functions)
|
|
21
|
+
runDiscoveryOrchestrator: require('./functions/orchestrator/index').runDiscoveryOrchestrator,
|
|
22
|
+
runUpdateOrchestrator: require('./functions/orchestrator/index').runUpdateOrchestrator,
|
|
23
|
+
|
|
24
|
+
// Sub-Pipes (Discovery)
|
|
25
|
+
checkDiscoveryNeed: require('./functions/orchestrator/helpers/discovery_helpers').checkDiscoveryNeed,
|
|
26
|
+
getDiscoveryCandidates: require('./functions/orchestrator/helpers/discovery_helpers').getDiscoveryCandidates,
|
|
27
|
+
dispatchDiscovery: require('./functions/orchestrator/helpers/discovery_helpers').dispatchDiscovery,
|
|
28
|
+
|
|
29
|
+
// Sub-Pipes (Updates)
|
|
30
|
+
getUpdateTargets: require('./functions/orchestrator/helpers/update_helpers').getUpdateTargets,
|
|
31
|
+
dispatchUpdates: require('./functions/orchestrator/helpers/update_helpers').dispatchUpdates,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// --- Pipe 2: Dispatcher ---
|
|
35
|
+
|
|
36
|
+
const dispatcher = {
|
|
37
|
+
// Main Pipe
|
|
38
|
+
handleRequest: require('./functions/dispatcher/index').handleRequest,
|
|
39
|
+
|
|
40
|
+
// Sub-Pipe
|
|
41
|
+
dispatchTasksInBatches: require('./functions/dispatcher/helpers/dispatch_helpers').dispatchTasksInBatches,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// --- Pipe 3: Task Engine ---
|
|
45
|
+
|
|
46
|
+
const taskEngine = {
|
|
47
|
+
// Main Pipe
|
|
48
|
+
handleRequest: require('./functions/task-engine/handler_creator').handleRequest,
|
|
49
|
+
|
|
50
|
+
// Sub-Pipes
|
|
51
|
+
handleDiscover: require('./functions/task-engine/helpers/discover_helpers').handleDiscover,
|
|
52
|
+
handleVerify: require('./functions/task-engine/helpers/verify_helpers').handleVerify,
|
|
53
|
+
handleUpdate: require('./functions/task-engine/helpers/update_helpers').handleUpdate,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// --- Pipe 4: Computation System ---
|
|
57
|
+
const computationSystem = {
|
|
58
|
+
// Main Pipe
|
|
59
|
+
runOrchestration: require('./functions/computation-system/helpers/orchestration_helpers').runComputationOrchestrator,
|
|
60
|
+
|
|
61
|
+
// Sub-Pipes (Exposing utils for potential external use)
|
|
62
|
+
dataLoader: require('./functions/computation-system/utils/data_loader'),
|
|
63
|
+
computationUtils: require('./functions/computation-system/utils/utils'),
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// --- Pipe 5: API ---
|
|
67
|
+
|
|
68
|
+
const api = {
|
|
69
|
+
// Main Pipe
|
|
70
|
+
createApiApp: require('./functions/generic-api/index').createApiApp,
|
|
71
|
+
|
|
72
|
+
// Sub-Pipes (Helpers exposed for documentation/testing)
|
|
73
|
+
helpers: require('./functions/generic-api/helpers/api_helpers'),
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// --- Pipe 6: Maintenance ---
|
|
77
|
+
// Standalone cleanup and utility functions TODO -- Some of these are not really maintenance pipes, socials could do with its own pipe..?
|
|
78
|
+
const maintenance = {
|
|
79
|
+
runSpeculatorCleanup: require('./functions/speculator-cleanup-orchestrator/helpers/cleanup_helpers').runCleanup,
|
|
80
|
+
handleInvalidSpeculator: require('./functions/invalid-speculator-handler/helpers/handler_helpers').handleInvalidSpeculator,
|
|
81
|
+
runFetchInsights: require('./functions/fetch-insights/helpers/handler_helpers').fetchAndStoreInsights,
|
|
82
|
+
runFetchPrices: require('./functions/etoro-price-fetcher/helpers/handler_helpers').fetchAndStorePrices,
|
|
83
|
+
runSocialOrchestrator: require('./functions/social-orchestrator/helpers/orchestrator_helpers').runSocialOrchestrator,
|
|
84
|
+
handleSocialTask: require('./functions/social-task-handler/helpers/handler_helpers').handleSocialTask,
|
|
85
|
+
runBackfillAssetPrices: require('./functions/price-backfill/helpers/handler_helpers').runBackfillAssetPrices,
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// --- Pipe 7: Proxy ---
|
|
89
|
+
|
|
90
|
+
const proxy = {
|
|
91
|
+
handlePost: require('./functions/appscript-api/index').handlePost,
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// --- EXPORT THE FINAL PIPE OBJECT ---
|
|
95
|
+
module.exports = {
|
|
96
|
+
pipe: {
|
|
97
|
+
core,
|
|
98
|
+
orchestrator,
|
|
99
|
+
dispatcher,
|
|
100
|
+
taskEngine,
|
|
101
|
+
computationSystem,
|
|
102
|
+
api,
|
|
103
|
+
maintenance,
|
|
104
|
+
proxy,
|
|
105
|
+
}
|
|
114
106
|
};
|
package/package.json
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "bulltrackers-module",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Helper Functions for Bulltrackers.",
|
|
5
|
-
"main": "index.js",
|
|
6
|
-
"files": [
|
|
7
|
-
"index.js",
|
|
8
|
-
"functions/orchestrator/",
|
|
9
|
-
"functions/task-engine/",
|
|
10
|
-
"functions/core/",
|
|
11
|
-
"functions/computation-system/",
|
|
12
|
-
"functions/generic-api/",
|
|
13
|
-
"functions/dispatcher/",
|
|
14
|
-
"functions/invalid-speculator-handler/",
|
|
15
|
-
"functions/speculator-cleanup-orchestrator/",
|
|
16
|
-
"functions/fetch-insights/",
|
|
17
|
-
"functions/etoro-price-fetcher/",
|
|
18
|
-
"functions/appscript-api/",
|
|
19
|
-
"functions/social-orchestrator/",
|
|
20
|
-
"functions/social-task-handler/",
|
|
21
|
-
"functions/price-backfill/"
|
|
22
|
-
],
|
|
23
|
-
"keywords": [
|
|
24
|
-
"bulltrackers",
|
|
25
|
-
"etoro",
|
|
26
|
-
"precompute",
|
|
27
|
-
"calculations",
|
|
28
|
-
"finance"
|
|
29
|
-
],
|
|
30
|
-
"dependencies": {
|
|
31
|
-
"@google-cloud/firestore": "^7.11.3",
|
|
32
|
-
"sharedsetup": "latest",
|
|
33
|
-
"require-all": "^3.0.0",
|
|
34
|
-
"@google-cloud/pubsub": "latest",
|
|
35
|
-
"express": "^4.19.2",
|
|
36
|
-
"cors": "^2.8.5",
|
|
37
|
-
"p-limit": "^3.1.0"
|
|
38
|
-
},
|
|
39
|
-
"engines": {
|
|
40
|
-
"node": ">=20"
|
|
41
|
-
},
|
|
42
|
-
"publishConfig": {
|
|
43
|
-
"access": "public"
|
|
44
|
-
}
|
|
45
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "bulltrackers-module",
|
|
3
|
+
"version": "1.0.106",
|
|
4
|
+
"description": "Helper Functions for Bulltrackers.",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"files": [
|
|
7
|
+
"index.js",
|
|
8
|
+
"functions/orchestrator/",
|
|
9
|
+
"functions/task-engine/",
|
|
10
|
+
"functions/core/",
|
|
11
|
+
"functions/computation-system/",
|
|
12
|
+
"functions/generic-api/",
|
|
13
|
+
"functions/dispatcher/",
|
|
14
|
+
"functions/invalid-speculator-handler/",
|
|
15
|
+
"functions/speculator-cleanup-orchestrator/",
|
|
16
|
+
"functions/fetch-insights/",
|
|
17
|
+
"functions/etoro-price-fetcher/",
|
|
18
|
+
"functions/appscript-api/",
|
|
19
|
+
"functions/social-orchestrator/",
|
|
20
|
+
"functions/social-task-handler/",
|
|
21
|
+
"functions/price-backfill/"
|
|
22
|
+
],
|
|
23
|
+
"keywords": [
|
|
24
|
+
"bulltrackers",
|
|
25
|
+
"etoro",
|
|
26
|
+
"precompute",
|
|
27
|
+
"calculations",
|
|
28
|
+
"finance"
|
|
29
|
+
],
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@google-cloud/firestore": "^7.11.3",
|
|
32
|
+
"sharedsetup": "latest",
|
|
33
|
+
"require-all": "^3.0.0",
|
|
34
|
+
"@google-cloud/pubsub": "latest",
|
|
35
|
+
"express": "^4.19.2",
|
|
36
|
+
"cors": "^2.8.5",
|
|
37
|
+
"p-limit": "^3.1.0"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=20"
|
|
41
|
+
},
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"dependencies": {
|
|
3
|
-
"smart-cohort-flow": ["user-investment-profile"],
|
|
4
|
-
"dumb-cohort-flow": ["user-investment-profile"],
|
|
5
|
-
"crowd-sharpe-ratio-proxy": ["pnl-distribution-per-stock"],
|
|
6
|
-
"social-flow-correlation": [
|
|
7
|
-
"social-sentiment-aggregation",
|
|
8
|
-
"asset-crowd-flow"
|
|
9
|
-
],
|
|
10
|
-
"cash-flow-deployment": [
|
|
11
|
-
"crowd-cash-flow-proxy",
|
|
12
|
-
"asset-crowd-flow"
|
|
13
|
-
],
|
|
14
|
-
"cash-flow-liquidation": [
|
|
15
|
-
"crowd-cash-flow-proxy",
|
|
16
|
-
"asset-crowd-flow"
|
|
17
|
-
],
|
|
18
|
-
"capital-deployment-strategy": [
|
|
19
|
-
"crowd-cash-flow-proxy",
|
|
20
|
-
"new-allocation-percentage",
|
|
21
|
-
"reallocation-increase-percentage"
|
|
22
|
-
],
|
|
23
|
-
"profit-cohort-divergence": [
|
|
24
|
-
"in-profit-asset-crowd-flow",
|
|
25
|
-
"in-loss-asset-crowd-flow"
|
|
26
|
-
],
|
|
27
|
-
"smart-dumb-divergence-index": [
|
|
28
|
-
"smart-cohort-flow",
|
|
29
|
-
"dumb-cohort-flow"
|
|
30
|
-
],
|
|
31
|
-
"capital-vintage-performance": ["cash-flow-deployment"],
|
|
32
|
-
"capital-liquidation-performance": ["cash-flow-liquidation"],
|
|
33
|
-
"strategy-performance": [
|
|
34
|
-
"smart-dumb-divergence-index",
|
|
35
|
-
"profit-cohort-divergence"
|
|
36
|
-
]
|
|
37
|
-
},
|
|
38
|
-
"requirements": {
|
|
39
|
-
"activity-by-pnl-status": ["today_portfolio", "yesterday_portfolio"],
|
|
40
|
-
"daily-asset-activity": ["today_portfolio", "yesterday_portfolio"],
|
|
41
|
-
"daily-user-activity-tracker": ["today_portfolio", "yesterday_portfolio"],
|
|
42
|
-
"speculator-adjustment-activity": ["today_portfolio", "yesterday_portfolio"],
|
|
43
|
-
"asset-position-size": ["today_portfolio"],
|
|
44
|
-
"strategy-performance": ["meta"],
|
|
45
|
-
"asset-crowd-flow": ["today_portfolio", "yesterday_portfolio"],
|
|
46
|
-
"drawdown-response": ["today_portfolio", "yesterday_portfolio"],
|
|
47
|
-
"dumb-cohort-flow": ["today_portfolio", "yesterday_portfolio"],
|
|
48
|
-
"gain-response": ["today_portfolio", "yesterday_portfolio"],
|
|
49
|
-
"in-loss-asset-crowd-flow": ["today_portfolio", "yesterday_portfolio"],
|
|
50
|
-
"in-profit-asset-crowd-flow": ["today_portfolio", "yesterday_portfolio"],
|
|
51
|
-
"paper-vs-diamond-hands": ["today_portfolio", "yesterday_portfolio"],
|
|
52
|
-
"position-count-pnl": ["today_portfolio"],
|
|
53
|
-
"smart-cohort-flow": ["today_portfolio", "yesterday_portfolio"],
|
|
54
|
-
"smart-money-flow": ["today_portfolio", "yesterday_portfolio"],
|
|
55
|
-
"user-investment-profile": ["today_portfolio", "yesterday_portfolio"],
|
|
56
|
-
"crowd-cash-flow-proxy": ["today_portfolio", "yesterday_portfolio"],
|
|
57
|
-
"deposit-withdrawal-percentage": ["today_portfolio", "yesterday_portfolio"],
|
|
58
|
-
"new-allocation-percentage": ["today_portfolio", "yesterday_portfolio"],
|
|
59
|
-
"reallocation-increase-percentage": ["today_portfolio", "yesterday_portfolio"],
|
|
60
|
-
"daily-bought-vs-sold-count": ["today_insights", "yesterday_insights"],
|
|
61
|
-
"daily-buy-sell-sentiment-count": ["today_insights"],
|
|
62
|
-
"daily-ownership-delta": ["today_insights", "yesterday_insights"],
|
|
63
|
-
"daily-total-positions-held": ["today_insights"],
|
|
64
|
-
"capital-deployment-strategy": ["meta"],
|
|
65
|
-
"cash-flow-deployment": ["meta"],
|
|
66
|
-
"cash-flow-liquidation": ["meta"],
|
|
67
|
-
"crowd-sharpe-ratio-proxy": ["meta"],
|
|
68
|
-
"profit-cohort-divergence": ["meta"],
|
|
69
|
-
"smart-dumb-divergence-index": ["meta"],
|
|
70
|
-
"social-flow-correlation": ["meta"],
|
|
71
|
-
"capital-liquidation-performance": ["meta"],
|
|
72
|
-
"capital-vintage-performance": ["meta"],
|
|
73
|
-
"profitability-migration": ["today_portfolio", "yesterday_portfolio"],
|
|
74
|
-
"user-profitability-tracker": ["today_portfolio"],
|
|
75
|
-
"asset-pnl-status": ["today_portfolio"],
|
|
76
|
-
"average-daily-pnl-all-users": ["today_portfolio"],
|
|
77
|
-
"average-daily-pnl-per-sector": ["today_portfolio"],
|
|
78
|
-
"average-daily-pnl-per-stock": ["today_portfolio"],
|
|
79
|
-
"average-daily-position-pnl": ["today_portfolio"],
|
|
80
|
-
"pnl-distribution-per-stock": ["today_portfolio"],
|
|
81
|
-
"profitability-ratio-per-stock": ["today_portfolio"],
|
|
82
|
-
"profitability-skew-per-stock": ["today_portfolio"],
|
|
83
|
-
"profitable-and-unprofitable-status": ["today_portfolio"],
|
|
84
|
-
"users-processed": ["today_portfolio"],
|
|
85
|
-
"diversification-pnl": ["today_portfolio", "yesterday_portfolio"],
|
|
86
|
-
"sector-rotation": ["today_portfolio", "yesterday_portfolio"],
|
|
87
|
-
"total-long-per-sector": ["today_portfolio"],
|
|
88
|
-
"total-short-per-sector": ["today_portfolio"],
|
|
89
|
-
"crowd-conviction-score": ["today_portfolio", "yesterday_portfolio"],
|
|
90
|
-
"long-position-per-stock": ["today_portfolio"],
|
|
91
|
-
"sentiment-per-stock": ["today_portfolio"],
|
|
92
|
-
"short-position-per-stock": ["today_portfolio"],
|
|
93
|
-
"total-long-figures": ["today_portfolio"],
|
|
94
|
-
"total-short-figures": ["today_portfolio"],
|
|
95
|
-
"social-asset-posts-trend": ["today_social"],
|
|
96
|
-
"social-top-mentioned-words": ["today_social", "yesterday_social"],
|
|
97
|
-
"social-topic-interest-evolution": ["today_social"],
|
|
98
|
-
"social-word-mentions-trend": ["today_social"],
|
|
99
|
-
"social-activity-aggregation": ["today_social"],
|
|
100
|
-
"social-event-correlation": ["today_social", "yesterday_social"],
|
|
101
|
-
"social-sentiment-aggregation": ["today_social"],
|
|
102
|
-
"risk-appetite-change": ["today_portfolio", "yesterday_portfolio"],
|
|
103
|
-
"tsl-effectiveness": ["today_portfolio"],
|
|
104
|
-
"distance-to-stop-loss-per-leverage": ["today_portfolio"],
|
|
105
|
-
"distance-to-tp-per-leverage": ["today_portfolio"],
|
|
106
|
-
"entry-distance-to-sl-per-leverage": ["today_portfolio"],
|
|
107
|
-
"entry-distance-to-tp-per-leverage": ["today_portfolio"],
|
|
108
|
-
"holding-duration-per-asset": ["today_portfolio"],
|
|
109
|
-
"leverage-per-asset": ["today_portfolio"],
|
|
110
|
-
"leverage-per-sector": ["today_portfolio"],
|
|
111
|
-
"risk-reward-ratio-per-asset": ["today_portfolio"],
|
|
112
|
-
"speculator-asset-sentiment": ["today_portfolio"],
|
|
113
|
-
"speculator-danger-zone": ["today_portfolio"],
|
|
114
|
-
"stop-loss-distance-by-sector-short-long-breakdown": ["today_portfolio"],
|
|
115
|
-
"stop-loss-distance-by-ticker-short-long-breakdown": ["today_portfolio"],
|
|
116
|
-
"stop-loss-per-asset": ["today_portfolio"],
|
|
117
|
-
"take-profit-per-asset": ["today_portfolio"],
|
|
118
|
-
"tsl-per-asset": ["today_portfolio"]
|
|
119
|
-
}
|
|
120
|
-
}
|