Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop

This commit is contained in:
Andreja committed 2021-11-29 17:13:29 +01:00
commit 04fc3f89f4
350 files changed
+251455 -30688

No files matched your search

+12 -4
View File
@@ -58,13 +58,21 @@ exports.newDesktopRoot = function newDesktopRoot() {
/*
Setting up Secrets.
*/
SA.secrets = {
array: require('./My-Secrets/Secrets.json').secrets,
map: new Map()
try {
SA.secrets = {
array: require('./My-Secrets/Secrets.json').secrets,
map: new Map()
}
} catch (err) {
SA.secrets = {
array: [],
map: new Map()
}
}
for (let i = 0; i < SA.secrets.array.length; i++) {
let secret = SA.secrets.array[i]
SA.secrets.map.set (secret.nodeCodeName, secret)
SA.secrets.map.set(secret.nodeCodeName, secret)
}
run()
+1
View File
@@ -32,6 +32,7 @@ exports.newEnvironment = function () {
PATH_TO_FONTS: path.join(basePath, './Platform/WebServer/Fonts'),
DESKTOP_APP_SIGNING_ACCOUNT: 'Social-Trading-Desktop-App-1',
DESKTOP_APP_MAX_OUTGOING_PEERS: 1,
TASK_SERVER_APP_MAX_OUTGOING_PEERS: 1,
MOBILE_APP_SIGNING_ACCOUNT: 'Social-Trading-Mobile-App-1',
SERVER_APP_SIGNING_ACCOUNT: 'Social-Trading-Server-App-1',
PLATFORM_APP_SIGNING_ACCOUNT: 'Algo-Traders-Platform-1',
+12 -4
View File
@@ -47,7 +47,7 @@ exports.newNetworkRoot = function newNetworkRoot() {
fs: require('fs'),
path: require('path'),
util: require('util'),
http: require('http'),
http: require('http'),
nodeFetch: require('node-fetch'),
web3: require('web3'),
ws: require('ws'),
@@ -56,10 +56,18 @@ exports.newNetworkRoot = function newNetworkRoot() {
/*
Setting up Secrets.
*/
SA.secrets = {
array: require('./My-Secrets/Secrets.json').secrets,
map: new Map()
try {
SA.secrets = {
array: require('./My-Secrets/Secrets.json').secrets,
map: new Map()
}
} catch (err) {
SA.secrets = {
array: [],
map: new Map()
}
}
for (let i = 0; i < SA.secrets.array.length; i++) {
let secret = SA.secrets.array[i]
SA.secrets.map.set(secret.nodeCodeName, secret)
+105
View File
@@ -0,0 +1,105 @@
----- Changes made outside of /Projects/Portfolio-Management/ -----
Projects/ProjectsSchema.json:
cp Algorithmic-Trading Portfolio-Management - Some stuff definitely unneded here
Projects/Community-Plugins/UI/Function-Libraries/
ActionSwitch.js:
cp case 'Add Missing Plugin Trading Mines' case 'Add Missing Plugin Portfolio Mines'
cp case 'Add Missing Plugin Trading Systems' case 'Add Missing Plugin Portfolio Systems'
cp case 'Add Missing Plugin Trading Engines' case 'Add Missing Plugin Portfolio Engines'
PluginsFunctions.js:
cp addMissingPluginTradingMines addMissingPluginPortfolioMines
cp addMissingPluginTradingSystems addMissingPluginPortfolioSystems
cp addMissingPluginTradingEngines addMissingPluginPortfolioEngines
../Utilities/Plugins.js:
function getPluginFolderNamesByNodeType(nodeType):
add case 'Portfolio Engine'
add case 'Portfolio Mine'
add case 'Portfolio System'
Projects/Data-Mining/UI/Function-Libraries/
MineFunctions.js:
cp scanBotArray(dataMine.tradingBots) scanBotArray(dataMine.portfolioBots)
Skipping:
Projects/Foundations/TS/Function-Libraries/OutputManagementFunctions.js:
tradingProcessDate, VARS...INDEX_MAP->TRADING_PROCESSING_DAILY_FILES, ...
Projects/Foundations/TS/Function-Libraries/
SingleMarketFunctions.js:
cp findNodeInNodeMesh(outputDatasetNode, 'Trading Bot') ...'Portfolio Bot')
Line 117 if...else add portfolioMineNode
Projects/Foundations/TS/Process-Modules/
Dataset.js:
cp startingNode.type === 'Market Trading Products'
ProcessOutput.js:
cp line 27-29, 124-126
StatusReport.js:
Lines 102, 116, cp 172-222 dealing with finding process definitions the report depends on has been cloned from Trading -> Portfolio
Projects/Foundations/UI/Function-Libraries/
ActionSwitch.js:
cp case statements run-all, stop-all, add-missing, references, products, etc.
Line 506 && 512 may not need to have been cloned but I did for now - regarding live and paper trading.
ChartingSpaceFunctions.js: Needs Completion to include Portfolio at Charting Space.
'Market Trading|Portfolio Tasks' -> 'nodeType' as param. <= If error arises note that it was not configured this way by Luis when adding the Learning Mine. This is a File that could be heavily re-factored && optimized.
ProductFunctions.js:
Skipping:
Projects/Foundations/UI/Function-Libraries/ChartingSpaceFunctions.js: Needs Completion
Projects/Foundations/UI/Function-Libraries/CryptoEcosystemFunctions.js
Projects/Foundations/UI/Function-Libraries/
DataStorageFunctions.js:
Many things cloned. But on line 156 only did 'addMissingSession(livePortfolioSessionArray) not back|forward|paper
TaskFunctions.js:
run/stop | addMissing - Portfolio Tasks. Project|Exchange|Market|Mine
Line 148 - Only cloned 'Live Portfolio Session->'
Line 198 - Only cloned 'Production Portfolio Tasks->'
Skipping:
Projects/Foundations/UI/Function-Libraries/DependenciesFilter.js:
Appears 'tradingSystem' var here is just a parameter so no need change.
Projects/Foundations/UI/Spaces/
/Charting-Space/PlottersManager.js:
/Plotting/RecordValues.js:
/Design-Space/Workspace.js:
/Floating-Space/FloatingSpace.js:
/Panel-Space/Layer.js: Line 173 Only 'Live Portfolio Session'
Projects/Visual-Scripting/UI/Function-Libraries/
<<<<<<< Updated upstream
ActionsSwitch.js: *** NOTE: Not sure how to handle line 14 at the current moment. ***
UiObjectsFromNodes.js: only if(uiObjectType === 'Live Portfolio Session')
=======
ActionsSwitch.js:
NodePath.js*** NOTE: Not sure how to handle line 14 at the current moment. ***
UIObjectsFromNodes.js: Line 977 'Live Portfolio Session' only.
>>>>>>> Stashed changes
Skipping:
Projects/Foundations/UI/Spaces/Floating-Space/ConditionEditor.js
Skipping:
Projects/Governance/UI/Function-Libraries/ActionSwitch.js:
Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/LearningSession.js:
Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js:
Projects/Machine-Learning/*
Projects/Network/*
node_modules, */My-Workspaces, */My-Log-Files, *.json, .gitignore, desktop.js, Environment.js, README.md, run.js, setup.js, Tested-Exchanges, CODEOWNERS, DesktopApp.js, WebApp.js, Projects/Social-Bots/*, Projects/Social-Trading/*, Projects/Governance/*
----- Changes made inside Portfolio-Management (Clone of Algorithmic-Trading) -----
References to trading changed to portfolio regardless of capitalization:
Examples:
find ./ -type f -exec sed -i 's/trading/portfolio/g' {} \;
find ./ -type f -exec sed -i 's/Trading/Portfolio/g' {} \;
find ./ -type f -exec sed -i 's/TRADING/PORTFOLIO/g' {} \;
+2 -4
View File
@@ -163,17 +163,14 @@ exports.newGithubServer = function newGithubServer() {
}
}
async function createGithubFork(repository, username, token) {
async function createGithubFork(token) {
try {
username = unescape(username)
token = unescape(token)
await doGithub()
async function doGithub() {
try {
//const repo = 'Superalgos'
//const owner = username
const { Octokit } = SA.nodeModules.octokit
const octokit = new Octokit({
auth: token,
@@ -334,6 +331,7 @@ exports.newGithubServer = function newGithubServer() {
let lastPage = false
while (lastPage === false) {
page++
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
let listResponse = await octokit.rest.pulls.listFiles({
owner: owner,
+13 -2
View File
@@ -1315,8 +1315,6 @@ exports.newHttpInterface = function newHttpInterface() {
case 'createGithubFork': {
let serverResponse = await PL.servers.GITHUB_SERVER.createGithubFork(
params.repository,
params.username,
params.token
)
@@ -1355,8 +1353,21 @@ exports.newHttpInterface = function newHttpInterface() {
let error
await checkFork()
await updateUser()
async function checkFork() {
let serverResponse = await PL.servers.GITHUB_SERVER.createGithubFork(
params.token
)
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse)
if(error != undefined) {
console.log('[ERROR] httpInterface -> Gov -> createFork -> You already have a fork. Good for you!')
}
}
async function updateUser() {
await doGithubUser()
File diff suppressed because it is too large. Load diff
@@ -27,23 +27,58 @@
},
{
"style": "Text",
"text": "In practical terms, a trading system is a hierarchical arrangement organizing the actionable aspects of your investment plan. The hierarchy contains definitions regarding any number of trading strategies, all operating on the same market and sharing the same initial capital allocation."
"text": "In practical terms, a trading system is a hierarchical arrangement organizing the actionable aspects of your investment plan. The hierarchy contains definitions regarding any number of trading strategies, all operating on the same market and sharing the same initial capital allocation.",
"translations": [
{
"language": "ES",
"text": "En términos prácticos, un Trading System es una disposición jerárquica que organiza los aspectos procesables de su plan de inversión. Esta jerarquía contiene definiciones respecto a un sinnúmero de estrategias de trading, todas operando en el mismo mercado y compartiendo la misma asignación de capital inicial.",
"updated": 1637880963165
}
]
},
{
"style": "Text",
"text": "You use a trading system to define strategies following the Superalgos Protocol, splitting strategies into four stages: trigger, open, manage, and close."
"text": "You use a trading system to define strategies following the Superalgos Protocol, splitting strategies into four stages: trigger, open, manage, and close.",
"translations": [
{
"language": "ES",
"text": "Se utiliza un Trading System para definir estrategias acorde al protocolo de Superalgos, dividiendo a éstas en cuatro etapas: activación, apertura, gestión y cierre.",
"updated": 1637880976135
}
]
},
{
"style": "Text",
"text": "The concept of describing strategies in stages is fundamental to the methodical aspect of the trading system, as it provides a framework to run every strategy with the same framework, which contributes to developing scalable trading systems that may grow to any number of strategies."
"text": "The concept of describing strategies in stages is fundamental to the methodical aspect of the trading system, as it provides a framework to run every strategy with the same framework, which contributes to developing scalable trading systems that may grow to any number of strategies.",
"translations": [
{
"language": "ES",
"text": "El concepto de describir estrategias en etapas es fundamental para el aspecto metódico del Trading System, ya que provee la infraestructura necesaria para ejecutar cualquier estrategia con la misma infraestructura. Esto contribuye a desarrollar Trading Systems escalables, que pueden alcanzar innumerable cantidad de estrategias.",
"updated": 1637880986625
}
]
},
{
"style": "Text",
"text": "When a trading system features more than one strategy, the first strategy has precedence over the second, the second over the third, and so on. This means that strategies are evaluated in a sequence. When a given strategy is triggered-on, the remaining strategies in the queue are no longer evaluated until the strategy triggers off. In other words, when multiple strategies are deployed within a single trading system, only one strategy may trade at any given moment, and precedence is given by the order around the trading system node."
"text": "When a trading system features more than one strategy, the first strategy has precedence over the second, the second over the third, and so on. This means that strategies are evaluated in a sequence. When a given strategy is triggered-on, the remaining strategies in the queue are no longer evaluated until the strategy triggers off. In other words, when multiple strategies are deployed within a single trading system, only one strategy may trade at any given moment, and precedence is given by the order around the trading system node.",
"translations": [
{
"language": "ES",
"text": "Cuando un Trading System ofrece más de una estrategia, la primera estrategia tiene prioridad sobre la segunda, la segunda sobre la tercera, y así sucesivamente. Esto significa que las estrategias son analizadas de manera secuencial. Cuando una estrategia dada es activada, las estrategias restantes no serán analizadas hasta que ésta se desactive. En otras palabras, cuando se implementan múltiples estrategias bajo un único Trading System, solo una estrategia puede operar en un momento dado, y la prioridad está dada por el orden especificado en el Nodo del Trading System.",
"updated": 1637881003253
}
]
},
{
"style": "Text",
"text": "As a corollary to the above, if you wish strategies to operate in different markets, or you wish strategies to be able to take positions simultaneously, then you must set up those strategies in different trading systems."
"text": "As a corollary to the above, if you wish strategies to operate in different markets, or you wish strategies to be able to take positions simultaneously, then you must set up those strategies in different trading systems.",
"translations": [
{
"language": "ES",
"text": "Como complemento a lo anterior, si se desea configurar estrategias que operen sobre diferentes mercados, o estrategias que tengan la posibilidad de abrir posiciones de forma simultánea, entonces se las deberá configurar bajo Trading Systems distintos.",
"updated": 1637881023208
}
]
}
]
}
@@ -25,6 +25,8 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
let tradingPositionModuleObject = TS.projects.algorithmicTrading.botModules.tradingPosition.newAlgorithmicTradingBotModulesTradingPosition(processIndex)
let tradingExecutionModuleObject = TS.projects.algorithmicTrading.botModules.tradingExecution.newAlgorithmicTradingBotModulesTradingExecution(processIndex)
let announcementsModuleObject = TS.projects.socialBots.botModules.announcements.newSocialBotsBotModulesAnnouncements(processIndex)
let outgoingTradingSignalsModuleObject = TS.projects.tradingSignals.modules.outgoingTradingSignals.newTradingSignalsModulesOutgoingTradingSignals(processIndex)
let portfolioManagerClient = TS.projects.portfolioManagement.modules.portfolioManagerClient.newPortfolioManagementModulesPortfolioManagerClient(processIndex)
let snapshotsModuleObject = TS.projects.algorithmicTrading.botModules.snapshots.newAlgorithmicTradingBotModulesSnapshots(processIndex)
let tradingEpisodeModuleObject = TS.projects.algorithmicTrading.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex)
@@ -97,15 +99,15 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
tradingPositionModuleObject.cycleBasedStatistics()
}
function runTriggerStage() {
async function runTriggerStage() {
/*
We check if we will be triggering on, off or taking position.
*/
checkTriggerOn()
checkTriggerOff()
checkTakePosition()
await checkTriggerOn()
await checkTriggerOff()
await checkTakePosition()
function checkTriggerOn() {
async function checkTriggerOn() {
if (
tradingEngine.tradingCurrent.strategy.index.value === tradingEngine.tradingCurrent.strategy.index.config.initialValue
) {
@@ -137,7 +139,12 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
passed = tradingSystem.checkConditions(situation, passed)
tradingSystem.values.push([situation.id, passed])
let response = await portfolioManagerClient.askPortfolioEventsManager(triggerStage.triggerOn, passed)
passed = response.raiseEvent
if (passed) {
tradingSystem.highlights.push(situation.id)
tradingSystem.highlights.push(triggerStage.triggerOn.id)
tradingSystem.highlights.push(triggerStage.id)
@@ -147,6 +154,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
/* Initialize this */
tradingEngine.tradingCurrent.tradingEpisode.distanceToTradingEvent.triggerOn.value = 1
outgoingTradingSignalsModuleObject.broadcastSignal(triggerStage.triggerOn)
announcementsModuleObject.makeAnnouncements(triggerStage.triggerOn)
if (TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.type === 'Backtesting Session') {
@@ -156,9 +164,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
}
}
}
changeStageStatus('Trigger Stage', 'Open')
}
}
}
@@ -167,7 +173,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
}
}
function checkTriggerOff() {
async function checkTriggerOff() {
if (tradingEngine.tradingCurrent.strategyTriggerStage.status.value === 'Open') {
checkUserDefinedCode('Trigger Stage', 'Running', 'first');
@@ -188,12 +194,18 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
passed = tradingSystem.checkConditions(situation, passed)
tradingSystem.values.push([situation.id, passed])
let response = await portfolioManagerClient.askPortfolioEventsManager(triggerStage.triggerOff, passed)
passed = response.raiseEvent
if (passed) {
tradingSystem.highlights.push(situation.id)
tradingSystem.highlights.push(triggerStage.triggerOff.id)
tradingSystem.highlights.push(triggerStage.id)
tradingEngine.tradingCurrent.tradingEpisode.distanceToTradingEvent.triggerOff.value = 1
outgoingTradingSignalsModuleObject.broadcastSignal(triggerStage.triggerOff)
announcementsModuleObject.makeAnnouncements(triggerStage.triggerOff)
changeStageStatus('Trigger Stage', 'Closed', 'Trigger Off Event')
tradingStrategyModuleObject.closeStrategy('Trigger Off')
@@ -204,7 +216,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
}
}
function checkTakePosition() {
async function checkTakePosition() {
if (
tradingEngine.tradingCurrent.strategyTriggerStage.status.value === 'Open'
) {
@@ -212,7 +224,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
let triggerStage = strategy.triggerStage
tradingSystem.evalConditions(strategy, 'Take Position Event')
tradingSystem.evalFormulas(strategy, 'Take Position Event')
await tradingSystem.evalFormulas(strategy, 'Take Position Event')
if (triggerStage !== undefined) {
if (triggerStage.takePosition !== undefined) {
@@ -226,6 +238,10 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
passed = tradingSystem.checkConditions(situation, passed)
tradingSystem.values.push([situation.id, passed])
let response = await portfolioManagerClient.askPortfolioEventsManager(triggerStage.takePosition, passed)
passed = response.raiseEvent
if (passed) {
tradingSystem.highlights.push(situation.id)
tradingSystem.highlights.push(triggerStage.takePosition.id)
@@ -233,6 +249,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
tradingPositionModuleObject.openPosition(situation.name)
outgoingTradingSignalsModuleObject.broadcastSignal(triggerStage.takePosition)
announcementsModuleObject.makeAnnouncements(triggerStage.takePosition)
if (TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.type === 'Backtesting Session') {
@@ -259,14 +276,14 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
async function runOpenStage() {
checkIfWeNeedToAbortTheStage()
runWhenStatusIsOpening()
await runWhenStatusIsOpening()
await runWhenStatusIsOpen()
await runWhenStatusIsClosing()
function checkIfWeNeedToAbortTheStage() {
/* Abort Open Stage Check */
if (tradingEngine.tradingCurrent.strategyOpenStage.status.value === 'Open' &&
(tradingEngine.tradingCurrent.strategyCloseStage.status.value === 'Opening' || tradingEngine.tradingCurrent.strategyCloseStage.status.value === 'Open') ){
(tradingEngine.tradingCurrent.strategyCloseStage.status.value === 'Opening' || tradingEngine.tradingCurrent.strategyCloseStage.status.value === 'Open')) {
/*
if the Close stage is opened while the open stage is still open that means that
we need to stop placing orders, check what happened to the orders already placed,
@@ -276,7 +293,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
}
}
function runWhenStatusIsOpening() {
async function runWhenStatusIsOpening() {
/* Opening Status Procedure */
if (tradingEngine.tradingCurrent.strategyOpenStage.status.value === 'Opening') {
/*
@@ -298,7 +315,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(tradingEngine.exchangeOrders)
/* Entry Position size and rate */
tradingSystem.evalFormulas(tradingSystemStage, 'Initial Targets')
await tradingSystem.evalFormulas(tradingSystemStage, 'Initial Targets')
tradingPositionModuleObject.initialTargets(tradingSystemStage, tradingEngineStage)
initializeStageTargetSize()
@@ -321,7 +338,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
/* Evaluate conditions and formulas so they are ready during the execution run */
tradingSystem.evalConditions(executionNode, 'Open Execution')
tradingSystem.evalFormulas(executionNode, 'Open Execution')
await tradingSystem.evalFormulas(executionNode, 'Open Execution')
await tradingExecutionModuleObject.runExecution(
executionNode,
@@ -331,7 +348,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
/* User Defined Code if runWhileAtStage==true */
if (tradingEngine.tradingCurrent.strategyOpenStage.status.value === 'Open') {
checkUserDefinedCode('Open Stage', 'Running', 'last');
checkUserDefinedCode('Open Stage', 'Running', 'last');
}
}
}
@@ -351,7 +368,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
and cancel the ones that were not.
*/
tradingSystem.evalConditions(tradingSystemStage, 'Open Execution')
tradingSystem.evalFormulas(tradingSystemStage, 'Open Execution')
await tradingSystem.evalFormulas(tradingSystemStage, 'Open Execution')
await tradingExecutionModuleObject.runExecution(
executionNode,
@@ -407,12 +424,12 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
}
}
function runManageStage() {
async function runManageStage() {
if (tradingEngine.tradingCurrent.tradingEpisode.cycle.value !== 'First') { return }
runWhenStatusIsOpening()
runWhenStatusIsOpen()
await runWhenStatusIsOpen()
function runWhenStatusIsOpening() {
/* Opening Status Procedure */
@@ -438,7 +455,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
}
}
function runWhenStatusIsOpen() {
async function runWhenStatusIsOpen() {
/* Open Status Procedure */
if (tradingEngine.tradingCurrent.strategyManageStage.status.value === 'Open') {
checkUserDefinedCode('Manage Stage', 'Running', 'first');
@@ -447,7 +464,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
/* Evaluate all the stage conditions and formulas to have them ready */
tradingSystem.evalConditions(manageStage, 'Manage Stage')
tradingSystem.evalFormulas(manageStage, 'Manage Stage')
await tradingSystem.evalFormulas(manageStage, 'Manage Stage')
/* Stop Loss Management */
checkStopPhasesEvents()
@@ -464,7 +481,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
/* If User Defined Code exists check for runWhileAtStage */
if (tradingEngine.tradingCurrent.strategyManageStage.status.value === 'Open') {
checkUserDefinedCode('Manage Stage', 'Running', 'last');
checkUserDefinedCode('Manage Stage', 'Running', 'last');
}
}
@@ -696,6 +713,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
tradingPositionModuleObject.updateTakeProfit(tradingEngine.tradingCurrent.position.takeProfit.takeProfitPhase.value + 1)
outgoingTradingSignalsModuleObject.broadcastSignal(nextPhaseEvent)
announcementsModuleObject.makeAnnouncements(nextPhaseEvent)
/* Reset this counter */
@@ -747,6 +765,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
continue
}
outgoingTradingSignalsModuleObject.broadcastSignal(moveToPhaseEvent)
announcementsModuleObject.makeAnnouncements(moveToPhaseEvent)
/* Reset this counter */
@@ -810,11 +829,11 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
async function runCloseStage() {
runWhenStatusIsOpening()
await runWhenStatusIsOpening()
await runWhenStatusIsOpen()
await runWhenStatusIsClosing()
function runWhenStatusIsOpening() {
async function runWhenStatusIsOpening() {
/* Opening Status Procedure */
if (tradingEngine.tradingCurrent.strategyCloseStage.status.value === 'Opening') {
@@ -834,7 +853,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
let tradingSystemStage = tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].closeStage
/* Exit Position size and rate */
tradingSystem.evalFormulas(tradingSystemStage, 'Initial Targets')
await tradingSystem.evalFormulas(tradingSystemStage, 'Initial Targets')
if (tradingPositionModuleObject.initialTargets(tradingSystemStage, tradingEngine.tradingCurrent.strategyCloseStage, 'Close Stage') === false) {
//console.log("No Close-Stage Target Asset to Trade: Strategy Closing.");
}
@@ -866,7 +885,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
let executionNode = tradingSystemStage.closeExecution
tradingSystem.evalConditions(tradingSystemStage, 'Close Execution')
tradingSystem.evalFormulas(tradingSystemStage, 'Close Execution')
await tradingSystem.evalFormulas(tradingSystemStage, 'Close Execution')
await tradingExecutionModuleObject.runExecution(
executionNode,
@@ -876,7 +895,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
checkIfStageNeedsToBeClosed(tradingEngineStage, tradingSystemStage, 'Close Stage')
/* If User Defined Code exists check for runWhileAtStage */
if (tradingEngine.tradingCurrent.strategyCloseStage.status.value === 'Open') {
checkUserDefinedCode('Close Stage', 'Running', 'last');
checkUserDefinedCode('Close Stage', 'Running', 'last');
}
}
}
@@ -896,7 +915,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
and cancel the ones that were not.
*/
tradingSystem.evalConditions(tradingSystemStage, 'Close Execution')
tradingSystem.evalFormulas(tradingSystemStage, 'Close Execution')
await tradingSystem.evalFormulas(tradingSystemStage, 'Close Execution')
await tradingExecutionModuleObject.runExecution(
executionNode,
@@ -1108,6 +1127,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
tradingSystem.highlights.push(closeStageEvent.id)
tradingSystem.highlights.push(stage.id)
outgoingTradingSignalsModuleObject.broadcastSignal(closeStageEvent)
announcementsModuleObject.makeAnnouncements(closeStageEvent)
return true
}
@@ -1172,7 +1192,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
/* Recording the closing at the Trading Engine Data Structure */
stage.end.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.lastEnd.value
stage.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
if (stageName === 'Open Stage') {
if (tradingEngine.tradingCurrent.strategyCloseStage.status.value !== 'Opening' && tradingEngine.tradingCurrent.strategyCloseStage.status.value !== 'Open' &&
tradingEngine.tradingCurrent.strategyManageStage.status.value !== 'Opening' && tradingEngine.tradingCurrent.strategyManageStage.status.value !== 'Open') {
@@ -1272,20 +1292,20 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
tradingSystemStage.userDefinedCode !== undefined) {
if (status === 'Running' && when !== tradingSystemStage.userDefinedCode.config.whileAtStageWhenToRun) { return; }
switch(status) {
case 'Open' : {
switch (status) {
case 'Open': {
if (tradingSystemStage.userDefinedCode.config.runWhenEnteringStage) {
tradingSystem.evalUserCode(tradingSystemStage, 'User Defined Code');
}
break;
}
case 'Running' : {
case 'Running': {
if (tradingSystemStage.userDefinedCode.config.runWhileAtStage) {
tradingSystem.evalUserCode(tradingSystemStage, 'User Defined Code');
}
break;
}
case 'Closed' : {
case 'Closed': {
if (tradingSystemStage.userDefinedCode.config.runWhenExitingStage) {
tradingSystem.evalUserCode(tradingSystemStage, 'User Defined Code');
}
@@ -1305,23 +1325,23 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
/* getTradingSystemStage(): takes stage name returns stage object. */
function getTradingSystemStage(stage) {
switch(stage) {
case 'Trigger Stage' : {
return tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].triggerStage;
break;
switch (stage) {
case 'Trigger Stage': {
return tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].triggerStage;
break;
}
case 'Open Stage': {
return tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].openStage;
break;
}
case 'Manage Stage': {
return tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].manageStage;
break
}
case 'Close Stage': {
return tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].closeStage;
break;
}
}
case 'Open Stage' : {
return tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].openStage;
break;
}
case 'Manage Stage' : {
return tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].manageStage;
break
}
case 'Close Stage' : {
return tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].closeStage;
break;
}
}
}
}
@@ -27,6 +27,7 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
let dynamicIndicators
let tradingStagesModuleObject = TS.projects.algorithmicTrading.botModules.tradingStages.newAlgorithmicTradingBotModulesTradingStages(processIndex)
let portfolioManagerClient = TS.projects.portfolioManagement.modules.portfolioManagerClient.newPortfolioManagementModulesPortfolioManagerClient(processIndex)
let taskParameters = {
market: TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName +
@@ -70,12 +71,12 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
evalNode(startingNode, 'Conditions', descendentOfNodeType)
}
tradingSystem.evalFormulas = function (startingNode, descendentOfNodeType) {
evalNode(startingNode, 'Formulas', descendentOfNodeType)
tradingSystem.evalFormulas = async function (startingNode, descendentOfNodeType) {
await evalNode(startingNode, 'Formulas', descendentOfNodeType)
}
tradingSystem.evalUserCode = function (startingNode, descendentOfNodeType) {
evalNode(startingNode, 'User Codes', descendentOfNodeType);
evalNode(startingNode, 'User Codes', descendentOfNodeType);
}
tradingSystem.addError = function (errorDataArray) {
@@ -203,13 +204,13 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
buildDynamicIndicators()
/* Run the Trigger Stage */
tradingStagesModuleObject.runTriggerStage()
await tradingStagesModuleObject.runTriggerStage()
/* Run the Open Stage */
await tradingStagesModuleObject.runOpenStage()
/* Run the Manage Stage */
tradingStagesModuleObject.runManageStage()
await tradingStagesModuleObject.runManageStage()
/* Run the Close Stage */
await tradingStagesModuleObject.runCloseStage()
@@ -234,7 +235,7 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
}
}
function evalNode(node, evaluating, descendentOfNodeType, isDescendent) {
async function evalNode(node, evaluating, descendentOfNodeType, isDescendent, parentNode) {
if (node === undefined) { return }
/* Verify if this node is descendent of the specified node type */
@@ -257,18 +258,18 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
if (node.code !== undefined) {
/* We will eval this formula */
if (isDescendent === true) {
evalFormula(node)
await evalFormula(node, parentNode)
}
}
}
/* Here we check if there is a User Defined-Javascript Code to be evaluated: */
if (node.type === 'Javascript Code' && evaluating === 'User Codes') {
if (node.code !== undefined) {
if (isDescendent === true) {
evalJSCode(node);
if (node.code !== undefined) {
if (isDescendent === true) {
evalJSCode(node);
}
}
}
}
/* Now we go down through all this node children */
@@ -284,7 +285,7 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
case 'node': {
if (property.name !== previousPropertyName) {
if (node[property.name] !== undefined) {
evalNode(node[property.name], evaluating, descendentOfNodeType, isDescendent)
await evalNode(node[property.name], evaluating, descendentOfNodeType, isDescendent, node)
}
previousPropertyName = property.name
}
@@ -294,7 +295,7 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
if (node[property.name] !== undefined) {
let nodePropertyArray = node[property.name]
for (let m = 0; m < nodePropertyArray.length; m++) {
evalNode(nodePropertyArray[m], evaluating, descendentOfNodeType, isDescendent)
await evalNode(nodePropertyArray[m], evaluating, descendentOfNodeType, isDescendent, node)
}
}
break
@@ -357,7 +358,7 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[INFO] evalCondition -> value = ' + value)
}
function evalFormula(node) {
async function evalFormula(node, parentNode) {
let value
let errorMessage
let docs
@@ -365,6 +366,10 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
try {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[INFO] evalFormula -> ' + node.name + ' -> code = ' + node.code)
value = eval(node.code)
let response = await portfolioManagerClient.askPortfolioFormulaManager(parentNode, value)
value = response.value
} catch (err) {
/*
One possible error is that the formula references a .previous that is undefined. This
@@ -423,29 +428,29 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
}
function evalJSCode(node) {
let value
let errorMessage
let docs
let value
let errorMessage
let docs
try {
value = eval(node.code);
try {
value = eval(node.code);
} catch (err) {
value = 0
errorMessage = err.message
docs = {
project: 'Foundations',
category: 'Topic',
type: 'TS LF Trading Bot Error - Evaluating User Code Error',
placeholder: {}
} catch (err) {
value = 0
errorMessage = err.message
docs = {
project: 'Foundations',
category: 'Topic',
type: 'TS LF Trading Bot Error - Evaluating User Code Error',
placeholder: {}
}
TS.projects.education.utilities.docsFunctions.buildPlaceholder(docs, err, node.name, node.code, undefined)
}
TS.projects.education.utilities.docsFunctions.buildPlaceholder(docs, err, node.name, node.code, undefined)
}
if (errorMessage !== undefined) {
tradingSystem.addError([node.id, errorMessage, docs])
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[INFO] evalFormula -> errorMessage = ' + errorMessage)
return
}
if (errorMessage !== undefined) {
tradingSystem.addError([node.id, errorMessage, docs])
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[INFO] evalFormula -> errorMessage = ' + errorMessage)
return
}
}
}
@@ -0,0 +1,45 @@
/* PMCommunicationModule - Trading Bot's Version.
* Fascilitates communications between the Portfolio Manager and its managed sessions.
* Session Key naming convention: name + type + id
*/
exports.newPMCommunicationModule_Trading = function (callerId) {
const MODULE_NAME = 'PM Communication Module - Trading';
moduleObj = {
beginListening: beginListening,
getQuoteAssetBalance: getQuoteAssetBalance
}
const SESSION_ID = callerId;
return moduleObj;
/* Listeners Section: */
function beginListening() {
TS.projects.foundations.globals.taskConstants.EVENT_SERVER_CLIENT_MODULE_OBJECT.listenToEvent(
SESSION_ID,
'Quote Asset Balance Reply',
undefined,
SESSION_ID,
undefined,
gotQuoteAssetBalance)
}
/* eventsCallBack Section: */
function getQuoteAssetBalance() {
TS.projects.foundations.globals.taskConstants.EVENT_SERVER_CLIENT_MODULE_OBJECT.raiseEvent(
SESSION_ID,
'Quote Asset Balance',
undefined
)
}
function gotQuoteAssetBalance() {
let ret = arguments[0].event;
console.log("Quote Asset Balance=>" + ret);
}
}
@@ -47,6 +47,9 @@
TS.projects.foundations.globals.taskVariables.SESSION_MAP.set(
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_KEY,
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_KEY)
/* We will store the PMCommunicationModule Object: */
TS.projects.foundations.globals.processVariables.PM_COMMUNICATION_MODULE = TS.projects.algorithmicTrading.botModules.PMCommunicationModule_Trading.newPMCommunicationModule_Trading(VARIABLES_BY_PROCESS_INDEX.SESSION_KEY);
/* Listen to event to start or stop the session. */
TS.projects.foundations.globals.taskConstants.EVENT_SERVER_CLIENT_MODULE_OBJECT.listenToEvent(
@@ -512,6 +515,7 @@
}
function startBackTesting(message) {
return true
}
@@ -580,6 +584,9 @@
}
function startLiveTrading() {
// Testing:
TS.projects.foundations.globals.processVariables.PM_COMMUNICATION_MODULE.beginListening();
TS.projects.foundations.globals.processVariables.PM_COMMUNICATION_MODULE.getQuoteAssetBalance();
return checkKey()
}
@@ -33,7 +33,6 @@ function newAlgorithmicTradingActionSwitch() {
UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.stopSession(action.node, action.callBackFunction)
}
break
default: {
console.log("[WARN] Action sent to Algorithmic-Trading Action Switch does not belong here. Verify at the App Schema file of the node that triggered this action that the actionProject is pointing to the right project. -> Action = " + action.name + " -> Action Node Name = " + action.node.name)
}
@@ -1,13 +1,13 @@
function newAlgorithmicTradingFunctionLibraryTradingSessionFunctions() {
let thisObject = {
syncronizeSessionWithBackEnd: syncronizeSessionWithBackEnd,
synchronizeSessionWithBackEnd: synchronizeSessionWithBackEnd,
runSession: runSession,
stopSession: stopSession
}
return thisObject
function syncronizeSessionWithBackEnd(node) {
function synchronizeSessionWithBackEnd(node) {
let validationsResult = validations(node)
if (validationsResult === undefined) {
/* If something fails at validations we just quit. */
@@ -105,6 +105,9 @@ function newAlgorithmicTradingFunctionLibraryTradingSessionFunctions() {
'Managed Stop Loss->Managed Take Profit->' +
'Phase->Formula->Next Phase Event->Move To Phase Event->Phase->' +
'Situation->Condition->Javascript Code->' +
'Outgoing Signals->Incoming Signals->Signal Reference->' +
'Trigger On Signal->Trigger Off Signal->Take Position Signal->' +
'Create Order Signal->Cancel Order Signal->' +
'Close Stage->' +
'Initial Targets->Target Size In Base Asset->Target Size In Quoted Asset->Target Rate->Formula->' +
'Open Execution->Close Execution->' +
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@@ -0,0 +1,41 @@
{
"type": "Plugin Portfolio Engines",
"menuItems": [
{
"action": "Add Missing Plugin Portfolio Engines",
"label": "Add Missing Portfolio Engines",
"askConfirmation": true,
"confirmationLabel": "Confirm to Proceed",
"workDoneLabel": "Done",
"iconPathOn": "portfolio-engine",
"iconPathOff": "portfolio-engine",
"iconProject": "Portfolio-Management",
"actionFunction": "payload.executeAction",
"actionProject": "Community-Plugins"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"addLeftIcons": true,
"level": 1,
"propertyNameAtParent": "pluginPortfolioEngines",
"attachingRules": {
"compatibleTypes": "->Plugin Project->"
},
"childrenNodesProperties": [
{
"name": "pluginFiles",
"type": "array",
"childType": "Plugin File",
"autoAdd": false
}
]
}
@@ -0,0 +1,41 @@
{
"type": "Plugin Portfolio Mines",
"menuItems": [
{
"action": "Add Missing Plugin Portfolio Mines",
"label": "Add Missing Portfolio Mines",
"askConfirmation": true,
"confirmationLabel": "Confirm to Proceed",
"workDoneLabel": "Done",
"iconPathOn": "portfolio-mine",
"iconPathOff": "portfolio-mine",
"iconProject": "Portfolio-Management",
"actionFunction": "payload.executeAction",
"actionProject": "Community-Plugins"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"addLeftIcons": true,
"level": 1,
"propertyNameAtParent": "pluginPortfolioMines",
"attachingRules": {
"compatibleTypes": "->Plugin Project->"
},
"childrenNodesProperties": [
{
"name": "pluginFiles",
"type": "array",
"childType": "Plugin File",
"autoAdd": false
}
]
}
@@ -0,0 +1,41 @@
{
"type": "Plugin Portfolio Systems",
"menuItems": [
{
"action": "Add Missing Plugin Portfolio Systems",
"label": "Add Missing Portfolio Systems",
"askConfirmation": true,
"confirmationLabel": "Confirm to Proceed",
"workDoneLabel": "Done",
"iconPathOn": "portfolio-system",
"iconPathOff": "portfolio-system",
"iconProject": "Portfolio-Management",
"actionFunction": "payload.executeAction",
"actionProject": "Community-Plugins"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"addLeftIcons": true,
"level": 1,
"propertyNameAtParent": "pluginPortfolioSystems",
"attachingRules": {
"compatibleTypes": "->Plugin Project->"
},
"childrenNodesProperties": [
{
"name": "pluginFiles",
"type": "array",
"childType": "Plugin File",
"autoAdd": false
}
]
}
@@ -53,6 +53,12 @@
"childType": "Plugin Trading Mines",
"autoAdd": false
},
{
"name": "pluginPortfolioMines",
"type": "node",
"childType": "Plugin Portfolio Mines",
"autoAdd": false
},
{
"name": "pluginLearningMines",
"type": "node",
@@ -65,6 +71,12 @@
"childType": "Plugin Trading Systems",
"autoAdd": false
},
{
"name": "pluginPortfolioSystems",
"type": "node",
"childType": "Plugin Portfolio Systems",
"autoAdd": false
},
{
"name": "pluginLearningSystems",
"type": "node",
@@ -77,6 +89,12 @@
"childType": "Plugin Trading Engines",
"autoAdd": false
},
{
"name": "pluginPortfolioEngines",
"type": "node",
"childType": "Plugin Portfolio Engines",
"autoAdd": false
},
{
"name": "pluginLearningEngines",
"type": "node",
@@ -58,6 +58,21 @@ function newCommunityPluginsActionSwitch() {
UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes)
}
break
case 'Add Missing Plugin Portfolio Mines':
{
UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginPortfolioMines(action.node, action.rootNodes)
}
break
case 'Add Missing Plugin Portfolio Systems':
{
UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginPortfolioSystems(action.node, action.rootNodes)
}
break
case 'Add Missing Plugin Portfolio Engines':
{
UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginPortfolioEngines(action.node, action.rootNodes)
}
break
case 'Add Missing Plugin Learning Mines':
{
UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginLearningMines(action.node, action.rootNodes)
@@ -7,6 +7,9 @@ function newPluginsFunctionLibraryPluginsFunctions() {
addMissingPluginTradingMines: addMissingPluginTradingMines,
addMissingPluginTradingSystems: addMissingPluginTradingSystems,
addMissingPluginTradingEngines: addMissingPluginTradingEngines,
addMissingPluginPortfolioMines: addMissingPluginPortfolioMines,
addMissingPluginPortfolioSystems: addMissingPluginPortfolioSystems,
addMissingPluginPortfolioEngines: addMissingPluginPortfolioEngines,
addMissingPluginLearningMines: addMissingPluginLearningMines,
addMissingPluginLearningSystems: addMissingPluginLearningSystems,
addMissingPluginLearningEngines: addMissingPluginLearningEngines,
@@ -140,6 +143,54 @@ function newPluginsFunctionLibraryPluginsFunctions() {
}
}
function addMissingPluginPortfolioMines(node, rootNodes) {
let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node)
if (projectName === "" || projectName === undefined) {
if (node.payload.parentNode !== undefined) {
node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.")
return
}
}
UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Portfolio-Mines', onNamesArrived)
function onNamesArrived(fileNames) {
UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Portfolio-Mines', 'Portfolio Mine', 'Portfolio-Management')
}
}
function addMissingPluginPortfolioSystems(node, rootNodes) {
let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node)
if (projectName === "" || projectName === undefined) {
if (node.payload.parentNode !== undefined) {
node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.")
return
}
}
UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Portfolio-Systems', onNamesArrived)
function onNamesArrived(fileNames) {
UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Portfolio-Systems', 'Portfolio System', 'Portfolio-Management')
}
}
function addMissingPluginPortfolioEngines(node, rootNodes) {
let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node)
if (projectName === "" || projectName === undefined) {
if (node.payload.parentNode !== undefined) {
node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.")
return
}
}
UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Portfolio-Engines', onNamesArrived)
function onNamesArrived(fileNames) {
UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Portfolio-Engines', 'Portfolio Engine', 'Portfolio-Management')
}
}
function addMissingPluginLearningMines(node, rootNodes) {
let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node)
if (projectName === "" || projectName === undefined) {
@@ -73,6 +73,15 @@ function newPluginsUtilitiesPlugins() {
case 'Trading System': {
return 'Trading-Systems'
}
case 'Portfolio Engine': {
return 'Portfolio-Engines'
}
case 'Portfolio Mine': {
return 'Portfolio-Mines'
}
case 'Portfolio System': {
return 'Portfolio-Systems'
}
case 'Assets': {
return 'Assets'
}
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -68,6 +68,7 @@ function newDataMiningFunctionLibraryMineFunctions() {
scanBotArray(dataMine.apiDataFetcherBots)
scanBotArray(dataMine.indicatorBots)
scanBotArray(dataMine.tradingBots)
scanBotArray(dataMine.portfolioBots)
scanBotArray(dataMine.learningBots)
function scanBotArray(botArray) {
Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode Statistics->Episode Base Asset->Episode Quoted Asset->"
"compatibleTypes": "->Trading Episode Statistics->Portfolio Episode Statistics->Position Statistics->Episode Base Asset->Episode Quoted Asset->"
},
"propertyNameAtParent": "annualizedRateOfReturn"
}
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode->Learning Episode->Strategy->Position->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
"compatibleTypes": "->Trading Episode->Portfolio Episode->Learning Episode->Strategy->Position->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
},
"propertyNameAtParent": "beginRate"
}
}
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode->Learning Episode->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->Prediction->"
"compatibleTypes": "->Trading Episode->Portfolio Episode->Learning Episode->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->Prediction->"
},
"propertyNameAtParent": "begin"
}
}
@@ -31,7 +31,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Data Mine Products->Trading Mine Products->Learning Mine Products->"
"compatibleTypes": "->Data Mine Products->Trading Mine Products->Portfolio Mine Products->Learning Mine Products->"
},
"propertyNameAtParent": "botProducts",
"childrenNodesProperties": [
@@ -9,6 +9,16 @@
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add UI Object",
"label": "Add Cancel Order Portfolio Event",
"disableIfPropertyIsDefined": true,
"propertyToCheckFor": "cancelOrderPMEvent",
"relatedUiObject": "Cancel Order PM Event",
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Foundations",
"actionProject": "Visual-Scripting"
},
{
"action": "Add UI Object",
"label": "Add Announcement",
@@ -40,6 +50,11 @@
"childType": "Situation",
"autoAdd": true
},
{
"name": "cancelOrderPMEvent",
"type": "node",
"childType": "Cancel Order PM Event"
},
{
"name": "announcements",
"type": "array",
@@ -0,0 +1,29 @@
{
"type": "Cancel Order PM Event",
"menuItems": [
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"addLeftIcons": true,
"initialValues": {
"config": "{}"
},
"editors": {
"config": true
},
"level": 4,
"attachingRules": {
"compatibleTypes": "->Cancel Order Event->"
},
"childrenNodesProperties": [
],
"propertyNameAtParent": "cancelOrderPMEvent"
}
@@ -9,6 +9,14 @@
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add Missing Children",
"label": "Add Missing Children",
"relatedUiObject": "Portfolio Parameters",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
@@ -23,7 +31,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode->Learning Episode->"
"compatibleTypes": "->Trading Episode->Portfolio Episode->Learning Episode->"
},
"propertyNameAtParent": "candle",
"childrenNodesProperties": [
@@ -9,6 +9,16 @@
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add UI Object",
"label": "Add Close Stage Portfolio Event",
"disableIfPropertyIsDefined": true,
"propertyToCheckFor": "closeStagePMEvent",
"relatedUiObject": "Close Stage PM Event",
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Foundations",
"actionProject": "Visual-Scripting"
},
{
"action": "Add UI Object",
"label": "Add Announcement",
@@ -40,6 +50,11 @@
"childType": "Situation",
"autoAdd": true
},
{
"name": "closeStagePMEvent",
"type": "node",
"childType": "Close Stage PM Event"
},
{
"name": "announcements",
"type": "array",
@@ -0,0 +1,29 @@
{
"type": "Close Stage PM Event",
"menuItems": [
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"addLeftIcons": true,
"initialValues": {
"config": "{}"
},
"editors": {
"config": true
},
"level": 2,
"attachingRules": {
"compatibleTypes": "->Close Stage Event->"
},
"childrenNodesProperties": [
],
"propertyNameAtParent": "closeStagePMEvent"
}
@@ -44,7 +44,7 @@
"addLeftIcons": true,
"level": 2,
"attachingRules": {
"compatibleTypes": "->Trading Strategy->"
"compatibleTypes": "->Trading Strategy->Portfolio Strategy->"
},
"childrenNodesProperties": [
{
@@ -9,6 +9,16 @@
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add UI Object",
"label": "Add Create Order Portfolio Event",
"disableIfPropertyIsDefined": true,
"propertyToCheckFor": "createOrderPMEvent",
"relatedUiObject": "Create Order PM Event",
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Foundations",
"actionProject": "Visual-Scripting"
},
{
"action": "Add UI Object",
"label": "Add Announcement",
@@ -40,6 +50,11 @@
"childType": "Situation",
"autoAdd": true
},
{
"name": "createOrderPMEvent",
"type": "node",
"childType": "Create Order PM Event"
},
{
"name": "announcements",
"type": "array",
@@ -0,0 +1,29 @@
{
"type": "Create Order PM Event",
"menuItems": [
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"addLeftIcons": true,
"initialValues": {
"config": "{}"
},
"editors": {
"config": true
},
"level": 2,
"attachingRules": {
"compatibleTypes": "->Create Order Event->"
},
"childrenNodesProperties": [
],
"propertyNameAtParent": "createOrderPMEvent"
}
@@ -22,7 +22,7 @@
"compatibleTypes": "->Product Definition->"
},
"attachingRules": {
"compatibleTypes": "->Market Data Products->Data Product Folder->Bot Products->Trading Session Reference->"
"compatibleTypes": "->Market Data Products->Data Product Folder->Bot Products->Trading Session Reference->Portfolio Session Reference->"
},
"propertyNameAtParent": "dataProducts",
"childrenNodesProperties": []
@@ -21,6 +21,16 @@
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add UI Object",
"disableIfPropertyIsDefined": true,
"propertyToCheckFor": "portfolioMinesData",
"label": "Add Portfolio Mines Data",
"relatedUiObject": "Portfolio Mines Data",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add UI Object",
"disableIfPropertyIsDefined": true,
@@ -61,6 +71,12 @@
"childType": "Trading Mines Data",
"autoAdd": true
},
{
"name": "portfolioMinesData",
"type": "node",
"childType": "Portfolio Mines Data",
"autoAdd": true
},
{
"name": "learningMinesData",
"type": "node",
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode Statistics->Learning Episode Statistics->Position Statistics->Order Statistics->"
"compatibleTypes": "->Trading Episode Statistics->Portfolio Episode Statistics->Position Statistics->Learning Episode Statistics->Position Statistics->Order Statistics->"
},
"propertyNameAtParent": "days"
}
@@ -0,0 +1,85 @@
{
"type": "Distance To Portfolio Event",
"menuItems": [
{
"action": "Add Missing Children",
"label": "Add Missing Children",
"relatedUiObject": "Portfolio Parameters",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Portfolio Episode->"
},
"propertyNameAtParent": "distanceToPortfolioEvent",
"childrenNodesProperties": [
{
"name": "triggerOn",
"type": "node",
"childType": "Trigger On",
"autoAdd": true
},
{
"name": "triggerOff",
"type": "node",
"childType": "Trigger Off",
"autoAdd": true
},
{
"name": "takePosition",
"type": "node",
"childType": "Take Position",
"autoAdd": true
},
{
"name": "closePosition",
"type": "node",
"childType": "Close Position",
"autoAdd": true
},
{
"name": "nextPhase",
"type": "node",
"childType": "Next Phase",
"autoAdd": true
},
{
"name": "moveToPhase",
"type": "node",
"childType": "Move To Phase",
"autoAdd": true
},
{
"name": "createOrder",
"type": "node",
"childType": "Create Order",
"autoAdd": true
},
{
"name": "cancelOrder",
"type": "node",
"childType": "Cancel Order",
"autoAdd": true
},
{
"name": "closeOrder",
"type": "node",
"childType": "Close Order",
"autoAdd": true
}
]
}
@@ -23,7 +23,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading System->"
"compatibleTypes": "->Trading System->Portfolio System->"
},
"propertyNameAtParent": "dynamicIndicators",
"childrenNodesProperties": [
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode->Learning Episode->Strategy->Position->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
"compatibleTypes": "->Trading Episode->Portfolio Episode->Learning Episode->Strategy->Position->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
},
"propertyNameAtParent": "endRate"
}
}
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode->Learning Episode->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->Prediction->"
"compatibleTypes": "->Trading Episode->Portfolio Episode->Learning Episode->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->Prediction->"
},
"propertyNameAtParent": "end"
}
}
@@ -9,6 +9,14 @@
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add Missing Children",
"label": "Add Missing Children",
"relatedUiObject": "Portfolio Parameters",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
@@ -23,7 +31,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode->"
"compatibleTypes": "->Trading Episode->Portfolio Episode->"
},
"propertyNameAtParent": "episodeBaseAsset",
"childrenNodesProperties": [
@@ -88,4 +96,4 @@
"autoAdd": true
}
]
}
}
@@ -9,6 +9,14 @@
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add Missing Children",
"label": "Add Missing Children",
"relatedUiObject": "Portfolio Parameters",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
@@ -23,7 +31,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode->"
"compatibleTypes": "->Trading Episode->Portfolio Episode->"
},
"propertyNameAtParent": "episodeQuotedAsset",
"childrenNodesProperties": [
@@ -88,4 +96,4 @@
"autoAdd": true
}
]
}
}
@@ -55,7 +55,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Engine->"
"compatibleTypes": "->Trading Engine->Portfolio Engine->"
},
"propertyNameAtParent": "exchangeOrders",
"childrenNodesProperties": [
@@ -0,0 +1,55 @@
{
"type": "Exchange Portfolio Products",
"menuItems": [
{
"action": "Add UI Object",
"label": "Add Market Portfolio Products",
"relatedUiObject": "Market Portfolio Products",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add Missing Market Portfolio Products",
"label": "Add Missing Markets",
"askConfirmation": true,
"confirmationLabel": "Confirm to Proceed",
"workDoneLabel": "Done",
"relatedUiObject": "Market Portfolio Products",
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"alternativeIcons": "Use Reference Parent",
"title": [
"Use Reference Parent"
],
"isTitleAllwaysVisible": true,
"addLeftIcons": true,
"level": 3,
"referencingRules": {
"compatibleTypes": "->Crypto Exchange->"
},
"attachingRules": {
"compatibleTypes": "->Project Portfolio Products->"
},
"propertyNameAtParent": "exchangePortfolioProducts",
"childrenNodesProperties": [
{
"name": "marketPortfolioProducts",
"type": "array",
"childType": "Market Portfolio Products",
"autoAdd": false
}
]
}
@@ -0,0 +1,75 @@
{
"type": "Exchange Portfolio Tasks",
"menuItems": [
{
"action": "Run All Market Portfolio Tasks",
"label": "Run All Market Portfolio Tasks",
"askConfirmation": true,
"confirmationLabel": "Confirm to Run",
"workDoneLabel": "Run Request Sent",
"iconPathOn": "run",
"iconPathOff": "run",
"actionFunction": "payload.executeAction"
},
{
"action": "Stop All Market Portfolio Tasks",
"label": "Stop All Market Portfolio Tasks",
"askConfirmation": true,
"confirmationLabel": "Confirm to Stop",
"workDoneLabel": "Stop Request Sent",
"iconPathOn": "stop",
"iconPathOff": "stop",
"actionFunction": "payload.executeAction"
},
{
"action": "Add UI Object",
"label": "Add Market Portfolio Tasks",
"relatedUiObject": "Market Portfolio Tasks",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add Missing Market Portfolio Tasks",
"label": "Add Missing Markets",
"askConfirmation": true,
"confirmationLabel": "Confirm to Proceed",
"workDoneLabel": "Done",
"relatedUiObject": "Market Portfolio Tasks",
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"addLeftIcons": true,
"level": 2,
"referencingRules": {
"compatibleTypes": "->Crypto Exchange->"
},
"attachingRules": {
"compatibleTypes": "->Project Portfolio Tasks->"
},
"alternativeIcons": "Use Reference Parent",
"title": [
"Use Reference Parent"
],
"isTitleAllwaysVisible": true,
"propertyNameAtParent": "exchangePortfolioTasks",
"childrenNodesProperties": [
{
"name": "marketPortfolioTasks",
"type": "array",
"childType": "Market Portfolio Tasks",
"monitorChildrenRunning": true
}
]
}
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode->Learning Episode->Strategy->->Position->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
"compatibleTypes": "->Trading Episode->Portfolio Episode->Learning Episode->Strategy->->Position->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
},
"propertyNameAtParent": "exitType"
}
}
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode Counters->Learning Episode Counters->Episode Base Asset->Episode Quoted Asset->"
"compatibleTypes": "->Trading Episode Counters->Portfolio Episode Counters->Learning Episode Counters->Episode Base Asset->Episode Quoted Asset->"
},
"propertyNameAtParent": "fails"
}
@@ -28,7 +28,7 @@
},
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Parameters->"
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->"
},
"propertyNameAtParent": "feeStructure"
}
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode->Learning Episode->"
"compatibleTypes": "->Trading Episode->Portfolio Episode->Learning Episode->"
},
"propertyNameAtParent": "headOfTheMarket"
}
}
@@ -28,7 +28,7 @@
},
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Parameters->Learning Parameters->"
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->Learning Parameters->"
},
"propertyNameAtParent": "heartbeats"
}
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode Statistics->Learning Episode Statistics->Position Statistics->Position Base Asset->Position Quoted Asset->Episode Base Asset->Episode Quoted Asset->"
"compatibleTypes": "->Trading Episode Statistics->Portfolio Episode Statistics->Position Statistics->Learning Episode Statistics->Position Statistics->Position Base Asset->Position Quoted Asset->Episode Base Asset->Episode Quoted Asset->"
},
"propertyNameAtParent": "hitFail"
}
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode Counters->Learning Episode Counters->Episode Base Asset->Episode Quoted Asset->"
"compatibleTypes": "->Trading Episode Counters->Portfolio Episode Counters->Learning Episode Counters->Episode Base Asset->Episode Quoted Asset->"
},
"propertyNameAtParent": "hits"
}
@@ -52,7 +52,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode->Learning Episode->Strategy->Position->Market Order->Limit Order->"
"compatibleTypes": "->Trading Episode->Portfolio Episode->Learning Episode->Strategy->Position->Market Order->Limit Order->"
},
"propertyNameAtParent": "identifier"
}
}
@@ -18,7 +18,7 @@
"addLeftIcons": true,
"level": 4,
"attachingRules": {
"compatibleTypes": "->Task->"
"compatibleTypes": "->Task->Portfolio Task->"
},
"referencingRules": {
"compatibleTypes": "->Exchange Account Key->"
@@ -49,6 +49,16 @@
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add UI Object",
"disableIfPropertyIsDefined": true,
"propertyToCheckFor": "productionPortfolioTasks",
"label": "Add Production Portfolio Tasks",
"relatedUiObject": "Production Portfolio Tasks",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add UI Object",
"disableIfPropertyIsDefined": true,
@@ -107,6 +117,12 @@
"childType": "Production Trading Tasks",
"autoAdd": true
},
{
"name": "productionPortfolioTasks",
"type": "node",
"childType": "Production Portfolio Tasks",
"autoAdd": true
},
{
"name": "dataStorage",
"type": "node",
@@ -23,7 +23,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Limit Buy Orders->Limit Sell Orders->Trading Last->"
"compatibleTypes": "->Limit Buy Orders->Limit Sell Orders->Trading Last->Portfolio Last->"
},
"propertyNameAtParent": "limitOrders",
"childrenNodesProperties": [
@@ -0,0 +1,130 @@
{
"type": "Live Portfolio Session",
"menuItems": [
{
"action": "Run Portfolio Session",
"label": "Run",
"workingLabel": "Run Request Sent",
"workDoneLabel": "Session Running",
"workFailedLabel": "Session Cannot be Run",
"secondaryAction": "Stop Portfolio Session",
"secondaryLabel": "Stop",
"secondaryWorkingLabel": "Stopping...",
"secondaryWorkDoneLabel": "Session Stopped",
"secondaryWorkFailedLabel": "Session Cannot be Stopped",
"secondaryIcon": "stop",
"iconPathOn": "run",
"iconPathOff": "run",
"actionFunction": "payload.executeAction",
"actionProject": "Portfolio-Management"
},
{
"action": "Resume Portfolio Session",
"label": "Resume",
"workingLabel": "Resume Request Sent",
"workDoneLabel": "Session Running",
"workFailedLabel": "Session Cannot be Resumed",
"secondaryAction": "Stop Portfolio Session",
"secondaryLabel": "Stop",
"secondaryWorkingLabel": "Stopping...",
"secondaryWorkDoneLabel": "Session Stopped",
"secondaryWorkFailedLabel": "Session Cannot be Stopped",
"secondaryIcon": "stop",
"iconPathOn": "resume",
"iconPathOff": "resume",
"actionFunction": "payload.executeAction",
"actionProject": "Portfolio-Management"
},
{
"action": "Configure",
"label": "Configure",
"iconPathOn": "configuration",
"iconPathOff": "configuration",
"dontShowAtFullscreen": true,
"actionFunction": "uiObject.configEditor.activate"
},
{
"action": "Add UI Object",
"label": "Add Social Bots",
"relatedUiObject": "Social Bots",
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots",
"actionProject": "Visual-Scripting"
},
{
"action": "Add UI Object",
"disableIfPropertyIsDefined": true,
"propertyToCheckFor": "managedSessions",
"label": "Add Managed Sessions",
"relatedUiObject": "Managed Sessions",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Add Missing Children",
"label": "Add Missing Children",
"relatedUiObject": "Portfolio Parameters",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"isTitleAllwaysVisible": true,
"addLeftIcons": true,
"editors": {
"config": true
},
"initialValues": {
"config": "{ \n\"folderName\": \"Your-Session-Folder-Name\"\n}"
},
"level": 2,
"referencingRules": {
"compatibleTypes": "->Portfolio System->"
},
"attachingRules": {
"compatibleTypes": "->Portfolio Process Instance->"
},
"childrenNodesProperties": [
{
"name": "portfolioParameters",
"type": "node",
"childType": "Portfolio Parameters",
"autoAdd": true
},
{
"name": "portfolioSystemReference",
"type": "node",
"childType": "Portfolio System Reference",
"autoAdd": true
},
{
"name": "portfolioEngineReference",
"type": "node",
"childType": "Portfolio Engine Reference",
"autoAdd": true
},
{
"name": "socialBots",
"type": "node",
"childType": "Social Bots",
"project": "Social-Bots"
},
{
"name": "managedSessions",
"type": "node",
"childType": "Managed Sessions"
}
],
"propertyNameAtParent": "session"
}
@@ -31,7 +31,7 @@
"addLeftIcons": true,
"level": 1,
"attachingRules": {
"compatibleTypes": "->Trading Strategy->"
"compatibleTypes": "->Trading Strategy->Portfolio Strategy->"
},
"childrenNodesProperties": [
{
@@ -0,0 +1,60 @@
{
"type": "Managed Sessions",
"menuItems": [
{
"action": "Run Managed Sessions",
"label": "Run Managed Sessions",
"askConfirmation": true,
"confirmationLabel": "Confirm to Run",
"workDoneLabel": "Run Request Sent",
"iconPathOn": "run",
"iconPathOff": "run",
"actionFunction": "payload.executeAction",
"actionProject": "Portfolio-Management"
},
{
"action": "Stop Managed Sessions",
"label": "Stop Managed Sessions",
"askConfirmation": true,
"confirmationLabel": "Confirm to Stop",
"workDoneLabel": "Stop Request Sent",
"iconPathOn": "stop",
"iconPathOff": "stop",
"actionFunction": "payload.executeAction",
"actionProject": "Portfolio-Management"
},
{
"action": "Add UI Object",
"label": "Add Session Reference",
"relatedUiObject": "Session Reference",
"actionFunction": "payload.executeAction",
"actionProject": "Visual-Scripting",
"relatedUiObjectProject": "Foundations"
},
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"addLeftIcons": true,
"level": 2,
"attachingRules": {
"compatibleTypes": "->Live Portfolio Session->"
},
"childrenNodesProperties": [
{
"name": "sessionReference",
"type": "array",
"childType": "Session Reference",
"autoAdd": false,
"monitorChildrenRunning": true
}
],
"propertyNameAtParent": "managedSessions"
}
@@ -0,0 +1,29 @@
{
"type": "Managed Stop Loss PM Formula",
"menuItems": [
{
"action": "Delete UI Object",
"actionProject": "Visual-Scripting",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
}
],
"addLeftIcons": true,
"initialValues": {
"config": "{}"
},
"editors": {
"config": true
},
"level": 4,
"attachingRules": {
"compatibleTypes": "->Managed Stop Loss->"
},
"childrenNodesProperties": [
],
"propertyNameAtParent": "managedStopLossPMFormula"
}
Loaded 100 of 350 files, more files were not shown because too many files have changed in this diff. Show more