Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop
No files matched your search
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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' {} \;
|
||||
|
||||
@@ -331,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,
|
||||
|
||||
@@ -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. */
|
||||
|
||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
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'
|
||||
}
|
||||
|
||||
@@ -23,11 +23,25 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In a way, data mines are catalogs of bots that anyone may create. This hierarchy provides all the tools required to create sensors, indicators, and plotters, with minimal coding required."
|
||||
"text": "In a way, data mines are catalogs of bots that anyone may create. This hierarchy provides all the tools required to create sensors, indicators, and plotters, with minimal coding required.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "En cierto modo, los Data Mines son listas de bots que pueden ser creados por cualquier usuario. Esta jerarquía provee todas las herramientas necesarias para crear sensores, indicadores y gráficos, con un mínimo requerimiento de código.",
|
||||
"updated": 1638150280351
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Because the hierarchy provides definitions, it does not intervene in the execution of bots. Instead, the definitions in data mines are instantiated from the network hierarchy by bot instances. Bot instances and process instances are the ones running the code according to the definitions in the corresponding data mine."
|
||||
"text": "Because the hierarchy provides definitions, it does not intervene in the execution of bots. Instead, the definitions in data mines are instantiated from the network hierarchy by bot instances. Bot instances and process instances are the ones running the code according to the definitions in the corresponding data mine.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Debido a que la jerarquía solo proporciona definiciones, no interfiere en la ejecución de Bots. Sino que las definiciones en los Data Mines son instanciados desde la jerarquía Network por las instancias de los Bots. Las instancias de los Bots y las instancias de procesos son las encargadas de ejecutar el código acorde a las definiciones del Data Mine correspondiente.",
|
||||
"updated": 1638150294294
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Block",
|
||||
|
||||
@@ -68,6 +68,7 @@ function newDataMiningFunctionLibraryMineFunctions() {
|
||||
scanBotArray(dataMine.apiDataFetcherBots)
|
||||
scanBotArray(dataMine.indicatorBots)
|
||||
scanBotArray(dataMine.tradingBots)
|
||||
scanBotArray(dataMine.portfolioBots)
|
||||
scanBotArray(dataMine.learningBots)
|
||||
|
||||
function scanBotArray(botArray) {
|
||||
|
||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
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"
|
||||
}
|
||||
@@ -9,6 +9,16 @@
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Manged SL Portfolio Formula",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "managedStopLossPMFormula",
|
||||
"relatedUiObject": "Managed Stop Loss PM Formula",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"relatedUiObjectProject": "Foundations",
|
||||
"actionProject": "Visual-Scripting"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
@@ -31,6 +41,11 @@
|
||||
"type": "array",
|
||||
"childType": "Phase",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "managedStopLossPMFormula",
|
||||
"type": "node",
|
||||
"childType": "Managed Stop Loss PM Formula"
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "managedStopLoss"
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"type": "Managed Take Profit 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 Take Profit->"
|
||||
},
|
||||
"childrenNodesProperties": [
|
||||
],
|
||||
"propertyNameAtParent": "managedTakeProfitPMFormula"
|
||||
}
|
||||
@@ -9,6 +9,16 @@
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Manged TP Portfolio Formula",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "managedTakeProfitPMFormula",
|
||||
"relatedUiObject": "Managed Take Profit PM Formula",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"relatedUiObjectProject": "Foundations",
|
||||
"actionProject": "Visual-Scripting"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
@@ -31,6 +41,11 @@
|
||||
"type": "array",
|
||||
"childType": "Phase",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "managedTakeProfitPMFormula",
|
||||
"type": "node",
|
||||
"childType": "Managed Take Profit PM Formula"
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "managedTakeProfit"
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"type": "Managed Tasks",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Run All Managed Tasks",
|
||||
"label": "Run All Managed Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Run",
|
||||
"workDoneLabel": "Run Request Sent",
|
||||
"iconPathOn": "run",
|
||||
"iconPathOff": "run",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Stop All Managed Tasks",
|
||||
"label": "Stop All Managed Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Stop",
|
||||
"workDoneLabel": "Stop Request Sent",
|
||||
"iconPathOn": "stop",
|
||||
"iconPathOff": "stop",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Task Reference",
|
||||
"relatedUiObject": "Task 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": "->Portfolio Task->"
|
||||
},
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "taskReference",
|
||||
"type": "array",
|
||||
"childType": "Task Reference",
|
||||
"autoAdd": false,
|
||||
"monitorChildrenRunning": true
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "managedTasks"
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Market Buy Orders->Market Sell Orders->Trading Last->"
|
||||
"compatibleTypes": "->Market Buy Orders->Market Sell Orders->Trading Last->Portfolio Last->"
|
||||
},
|
||||
"propertyNameAtParent": "marketOrders",
|
||||
"childrenNodesProperties": [
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"type": "Market Portfolio Products",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Portfolio Session Reference",
|
||||
"relatedUiObject": "Portfolio Session Reference",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Portfolio Session References",
|
||||
"label": "Add Missing Sessions",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Portfolio Session Reference",
|
||||
"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": 3,
|
||||
"isTitleAllwaysVisible": true,
|
||||
"title": [
|
||||
"Use Reference Parent Parent Parent",
|
||||
"Use Reference Parent"
|
||||
],
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Market->"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Exchange Portfolio Products->"
|
||||
},
|
||||
"propertyNameAtParent": "marketPortfolioProducts",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "portfolioSessionReferences",
|
||||
"type": "array",
|
||||
"childType": "Portfolio Session Reference"
|
||||
}
|
||||
]
|
||||
}
|
||||