From d633fb1ef3d28b6d80d65895780215435f5eb426 Mon Sep 17 00:00:00 2001 From: Philip Love Date: Thu, 27 May 2021 21:11:33 -0400 Subject: [PATCH] Fix: Close-Stage not closing strategy in event no Target Asset available to be traded; Open-Stage force to closing when Close-Stage in Opening --- .../Low-Frequency-Trading/TradingPosition.js | 9 ++++++--- .../Trading-Bot/Low-Frequency-Trading/TradingStages.js | 10 +++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js b/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js index 88d21cf76..d60920629 100644 --- a/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js +++ b/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js @@ -178,7 +178,7 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) { tradingEngine.tradingCurrent.position.takeProfit.takeProfitPhase.value = phase } - function initialTargets(tradingSystemStageNode, tradingEngineStageNode) { + function initialTargets(tradingSystemStageNode, tradingEngineStageNode, stageName) { if (tradingSystemStageNode.initialTargets === undefined) { const message = 'Initial Targets Node Missing' @@ -194,7 +194,7 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) { } setTargetRate() - setTargetSize() + return setTargetSize(stageName) function setTargetRate() { if (tradingSystemStageNode.initialTargets.targetRate === undefined) { @@ -262,7 +262,7 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) { } } - function setTargetSize() { + function setTargetSize(stageName) { /* Basic Validation */ if ( tradingSystemStageNode.initialTargets.targetSizeInBaseAsset !== undefined && @@ -298,6 +298,9 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) { badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets.targetSizeInBaseAsset, docs) } if (value === 0) { + if (stageName === 'Close Stage') { + return false; + } const message = 'Target Size Value Zero' let docs = { diff --git a/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js b/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js index 7c7be8a3e..ffdf1911e 100644 --- a/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js +++ b/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js @@ -266,7 +266,8 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) { function checkIfWeNeedToAbortTheStage() { /* Abort Open Stage Check */ - if (tradingEngine.tradingCurrent.strategyOpenStage.status.value === 'Open' && tradingEngine.tradingCurrent.strategyCloseStage.status.value === 'Open') { + if (tradingEngine.tradingCurrent.strategyOpenStage.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, @@ -768,7 +769,7 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) { or our Take Profit were hit. */ - /* Stop Loss condition: Here we verify if the Stop Loss was hitted or not. */ + /* Stop Loss condition: Here we verify if the Stop Loss was hit or not. */ if ( ( tradingEngine.tradingCurrent.position.stopLoss.stopLossPosition.value === 'Above' && @@ -840,7 +841,9 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) { /* Exit Position size and rate */ tradingSystem.evalFormulas(tradingSystemStage, 'Initial Targets') - tradingPositionModuleObject.initialTargets(tradingSystemStage, tradingEngine.tradingCurrent.strategyCloseStage) + if (tradingPositionModuleObject.initialTargets(tradingSystemStage, tradingEngine.tradingCurrent.strategyCloseStage, 'Close Stage') === false) { + //console.log("No Close-Stage Target Asset to Trade: Strategy Closing."); + } initializeStageTargetSize() changeStageStatus('Close Stage', 'Open') @@ -1173,6 +1176,7 @@ exports.newSuperalgosBotModulesTradingStages = 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') {