episode balance

This commit is contained in:
Luis Fernando Molina committed 2020-08-08 09:40:59 +02:00
1 parent ce5277bfe4
commit 6f7727164c
7 files changed
+66 -49

No files matched your search

+4 -3
View File
@@ -20,15 +20,16 @@ exports.newTradingEngine = function newTradingEngine(bot, logger) {
return thisObject
function initialize() {
/* Here we will go through all the nodes in the Trading Engine hiriarchy and apply the initial value to the value property when needed */
tradingEngine = bot.simulationState.tradingEngine
sessionParameters = bot.SESSION.parameters
if (bot.FIRST_EXECUTION === true) {
/*
Here we will go through all the nodes in the Trading Engine hiriarchy and
apply the initial value to the value property when needed
*/
initializeNode(tradingEngine)
tradingEngine.current.balance.baseAsset.value = sessionParameters.sessionBaseAsset.config.initialBalance
tradingEngine.current.balance.quotedAsset.value = sessionParameters.sessionQuotedAsset.config.initialBalance
}
}
+26 -8
View File
@@ -36,13 +36,27 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger) {
}
function openEpisode() {
/*
This function is called each time the simulation starts. That does not mean the Episode
must be opened there, since it might happen that it is looping at the end of the market
or the task / session was restarted.
*/
if (bot.FIRST_EXECUTION === true) {
/* Getting the begin Balance from the session configuration */
tradingEngine.current.episode.beginBalance.baseAsset.value = sessionParameters.sessionBaseAsset.config.initialBalance
tradingEngine.current.episode.beginBalance.quotedAsset.value = sessionParameters.sessionQuotedAsset.config.initialBalance
/* Recording the opening at the Trading Engine Data Structure */
tradingEngine.current.episode.status.value = 'Open'
tradingEngine.current.episode.serialNumber.value = 1
tradingEngine.current.episode.identifier.value = global.UNIQUE_ID()
tradingEngine.current.episode.begin.value = tradingEngine.current.candle.begin.value
tradingEngine.current.episode.beginRate.value = tradingEngine.current.candle.close.value
/* The current balance is also the begin balance, that is how this starts. */
tradingEngine.current.episode.balance.baseAsset.value = sessionParameters.sessionBaseAsset.config.initialBalance
tradingEngine.current.episode.balance.quotedAsset.value = sessionParameters.sessionQuotedAsset.config.initialBalance
/* Recording the opening at the Trading Engine Data Structure */
tradingEngine.current.episode.status.value = 'Open'
tradingEngine.current.episode.serialNumber.value = 1
tradingEngine.current.episode.identifier.value = global.UNIQUE_ID()
tradingEngine.current.episode.begin.value = tradingEngine.current.candle.begin.value
tradingEngine.current.episode.beginRate.value = tradingEngine.current.candle.close.value
}
}
function updateExitType(exitType) {
@@ -53,6 +67,8 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger) {
tradingEngine.current.episode.status.value = 'Closed'
tradingEngine.current.episode.end.value = tradingEngine.current.candle.end.value
tradingEngine.current.episode.endRate.value = tradingEngine.current.candle.close.value
tradingEngine.current.episode.endBalance.baseAsset.value = tradingEngine.current.episode.balance.baseAsset.value
tradingEngine.current.episode.endBalance.quotedAsset.value = tradingEngine.current.episode.balance.quotedAsset.value
}
function resetEpisode() {
@@ -63,6 +79,8 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger) {
if (tradingEngine.current.episode.status.value === 'Open') {
tradingEngine.current.episode.end.value = tradingEngine.current.candle.end.value
tradingEngine.current.episode.endRate.value = tradingEngine.current.candle.close.value
tradingEngine.current.episode.endBalance.baseAsset.value = tradingEngine.current.episode.balance.baseAsset.value
tradingEngine.current.episode.endBalance.quotedAsset.value = tradingEngine.current.episode.balance.quotedAsset.value
}
}
@@ -141,11 +159,11 @@ exports.newTradingEpisode = function newTradingEpisode(bot, logger) {
/* Updating Profit Loss */
tradingEngine.current.episode.episodeBaseAsset.profitLoss.value =
tradingEngine.current.balance.baseAsset.value -
tradingEngine.current.episode.balance.baseAsset.value -
sessionParameters.sessionBaseAsset.config.initialBalance
tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value =
tradingEngine.current.balance.quotedAsset.value -
tradingEngine.current.episode.balance.quotedAsset.value -
sessionParameters.sessionQuotedAsset.config.initialBalance
tradingEngine.current.episode.episodeBaseAsset.profitLoss.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.profitLoss.value, 10)
+18 -18
View File
@@ -657,24 +657,24 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE
case tradingSystemOrder.type === 'Market Buy Order' || tradingSystemOrder.type === 'Limit Buy Order': {
/* Balance Base Asset: Undo the previous accounting */
tradingEngine.current.balance.baseAsset.value =
tradingEngine.current.balance.baseAsset.value -
tradingEngine.current.episode.balance.baseAsset.value =
tradingEngine.current.episode.balance.baseAsset.value -
previousBaseAssetSizeFilled
/* Balance Base Asset: Account the current filling and fees */
tradingEngine.current.balance.baseAsset.value =
tradingEngine.current.balance.baseAsset.value +
tradingEngine.current.episode.balance.baseAsset.value =
tradingEngine.current.episode.balance.baseAsset.value +
tradingEngineOrder.orderBaseAsset.sizeFilled.value
/* Balance Quoted Asset: Undo the previous accounting */
tradingEngine.current.balance.quotedAsset.value =
tradingEngine.current.balance.quotedAsset.value +
tradingEngine.current.episode.balance.quotedAsset.value =
tradingEngine.current.episode.balance.quotedAsset.value +
previousQuotedAssetSizeFilled +
previousQuotedAssetFeesPaid
/* Balance Quoted Asset: Account the current filling and fees */
tradingEngine.current.balance.quotedAsset.value =
tradingEngine.current.balance.quotedAsset.value -
tradingEngine.current.episode.balance.quotedAsset.value =
tradingEngine.current.episode.balance.quotedAsset.value -
tradingEngineOrder.orderQuotedAsset.sizeFilled.value -
tradingEngineOrder.orderQuotedAsset.feesPaid.value
break
@@ -682,31 +682,31 @@ exports.newTradingExecution = function newTradingExecution(bot, logger, tradingE
case tradingSystemOrder.type === 'Market Sell Order' || tradingSystemOrder.type === 'Limit Sell Order': {
/* Balance Base Asset: Undo the previous accounting */
tradingEngine.current.balance.baseAsset.value =
tradingEngine.current.balance.baseAsset.value +
tradingEngine.current.episode.balance.baseAsset.value =
tradingEngine.current.episode.balance.baseAsset.value +
previousBaseAssetSizeFilled +
previousBaseAssetFeesPaid
/* Balance Base Asset: Account the current filling and fees */
tradingEngine.current.balance.baseAsset.value =
tradingEngine.current.balance.baseAsset.value -
tradingEngine.current.episode.balance.baseAsset.value =
tradingEngine.current.episode.balance.baseAsset.value -
tradingEngineOrder.orderBaseAsset.sizeFilled.value -
tradingEngineOrder.orderBaseAsset.feesPaid.value
/* Balance Quoted Asset: Undo the previous accounting */
tradingEngine.current.balance.quotedAsset.value =
tradingEngine.current.balance.quotedAsset.value -
tradingEngine.current.episode.balance.quotedAsset.value =
tradingEngine.current.episode.balance.quotedAsset.value -
previousQuotedAssetSizeFilled
/* Balance Quoted Asset: Account the current filling and fees */
tradingEngine.current.balance.quotedAsset.value =
tradingEngine.current.balance.quotedAsset.value +
tradingEngine.current.episode.balance.quotedAsset.value =
tradingEngine.current.episode.balance.quotedAsset.value +
tradingEngineOrder.orderQuotedAsset.sizeFilled.value
break
}
}
tradingEngine.current.balance.baseAsset.value = global.PRECISE(tradingEngine.current.balance.baseAsset.value, 10)
tradingEngine.current.balance.quotedAsset.value = global.PRECISE(tradingEngine.current.balance.quotedAsset.value, 10)
tradingEngine.current.episode.balance.baseAsset.value = global.PRECISE(tradingEngine.current.episode.balance.baseAsset.value, 10)
tradingEngine.current.episode.balance.quotedAsset.value = global.PRECISE(tradingEngine.current.episode.balance.quotedAsset.value, 10)
}
}
+4 -4
View File
@@ -240,8 +240,8 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng
/* Profit Loss Calculation */
tradingEngine.current.position.positionStatistics.profitLoss.value =
(
tradingEngine.current.balance.baseAsset.value * tradingEngine.current.position.endRate.value +
tradingEngine.current.balance.quotedAsset.value
tradingEngine.current.episode.balance.baseAsset.value * tradingEngine.current.position.endRate.value +
tradingEngine.current.episode.balance.quotedAsset.value
) -
(
tradingEngine.previous.balance.baseAsset.value * tradingEngine.current.position.beginRate.value +
@@ -279,11 +279,11 @@ exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEng
function updateResults() {
/* Profit Loss Calculation */
tradingEngine.current.position.positionBaseAsset.profitLoss.value =
tradingEngine.current.balance.baseAsset.value -
tradingEngine.current.episode.balance.baseAsset.value -
tradingEngine.previous.balance.baseAsset.value
tradingEngine.current.position.positionQuotedAsset.profitLoss.value =
tradingEngine.current.balance.quotedAsset.value -
tradingEngine.current.episode.balance.quotedAsset.value -
tradingEngine.previous.balance.quotedAsset.value
tradingEngine.current.position.positionBaseAsset.profitLoss.value = global.PRECISE(tradingEngine.current.position.positionBaseAsset.profitLoss.value, 10)
+4 -4
View File
@@ -390,7 +390,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT
let stopRunningDate = (new Date(tradingEngine.current.candle.begin.value)).toLocaleString()
if (sessionParameters.sessionBaseAsset.config.minimumBalance !== undefined) {
if (tradingEngine.current.balance.baseAsset.value <= sessionParameters.sessionBaseAsset.config.minimumBalance) {
if (tradingEngine.current.episode.balance.baseAsset.value <= sessionParameters.sessionBaseAsset.config.minimumBalance) {
const errorMessage = 'Min Balance reached @ ' + stopRunningDate
tradingSystem.errors.push([tradingSystem.id, errorMessage])
if (FULL_LOG === true) { logger.write(MODULE_NAME, '[WARN] runSimulation -> checkMinimunAndMaximunBalance -> ' + errorMessage) }
@@ -399,7 +399,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT
}
if (sessionParameters.sessionBaseAsset.config.maximumBalance !== undefined) {
if (tradingEngine.current.balance.baseAsset.value >= sessionParameters.sessionBaseAsset.config.maximumBalance) {
if (tradingEngine.current.episode.balance.baseAsset.value >= sessionParameters.sessionBaseAsset.config.maximumBalance) {
const errorMessage = 'Max Balance reached @ ' + stopRunningDate
tradingSystem.errors.push([tradingSystem.id, errorMessage])
if (FULL_LOG === true) { logger.write(MODULE_NAME, '[WARN] runSimulation -> checkMinimunAndMaximunBalance -> ' + errorMessage) }
@@ -408,7 +408,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT
}
if (sessionParameters.sessionQuotedAsset.config.minimumBalance !== undefined) {
if (tradingEngine.current.balance.quotedAsset.value <= sessionParameters.sessionQuotedAsset.config.minimumBalance) {
if (tradingEngine.current.episode.balance.quotedAsset.value <= sessionParameters.sessionQuotedAsset.config.minimumBalance) {
const errorMessage = 'Min Balance reached @ ' + stopRunningDate
tradingSystem.errors.push([tradingSystem.id, errorMessage])
if (FULL_LOG === true) { logger.write(MODULE_NAME, '[WARN] runSimulation -> checkMinimunAndMaximunBalance -> ' + errorMessage) }
@@ -417,7 +417,7 @@ exports.newTradingSimulation = function newTradingSimulation(bot, logger, UTILIT
}
if (sessionParameters.sessionQuotedAsset.config.maximumBalance !== undefined) {
if (tradingEngine.current.balance.quotedAsset.value >= sessionParameters.sessionQuotedAsset.config.maximumBalance) {
if (tradingEngine.current.episode.balance.quotedAsset.value >= sessionParameters.sessionQuotedAsset.config.maximumBalance) {
const errorMessage = 'Max Balance reached @ ' + stopRunningDate
tradingSystem.errors.push([tradingSystem.id, errorMessage])
if (FULL_LOG === true) { logger.write(MODULE_NAME, '[WARN] runSimulation -> checkMinimunAndMaximunBalance -> ' + errorMessage) }
+3 -9
View File
@@ -85,16 +85,10 @@ exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineM
function mantain() {
mantainPositions()
mantainStrategies()
tradingStrategyModule.mantain()
mantainStages()
mantainOrders()
function mantainStrategies() {
tradingStrategyModule.resetTradingEngineDataStructure()
tradingStrategyModule.updateCounters()
tradingStrategyModule.updateEnds()
}
function mantainStages() {
resetTradingEngineDataStructure()
updateCounters()
@@ -342,8 +336,8 @@ exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineM
tradingSystem.evalFormulas(stageNode, 'Initial Definition')
/* Remember the balance we had before taking the position to later calculate profit or loss */
tradingEngine.previous.balance.baseAsset.value = tradingEngine.current.balance.baseAsset.value
tradingEngine.previous.balance.quotedAsset.value = tradingEngine.current.balance.quotedAsset.value
tradingEngine.previous.balance.baseAsset.value = tradingEngine.current.episode.balance.baseAsset.value
tradingEngine.previous.balance.quotedAsset.value = tradingEngine.current.episode.balance.quotedAsset.value
/* Entry Position size and rate */
tradingSystem.evalFormulas(stageNode, 'Initial Targets')
+7 -3
View File
@@ -4,11 +4,9 @@ exports.newTradingStrategy = function newTradingStrategy(bot, logger, tradingEng
*/
const MODULE_NAME = 'Trading Strategy'
let thisObject = {
mantain: mantain,
openStrategy: openStrategy,
closeStrategy: closeStrategy,
updateEnds: updateEnds,
resetTradingEngineDataStructure: resetTradingEngineDataStructure,
updateCounters: updateCounters,
initialize: initialize,
finalize: finalize
}
@@ -25,6 +23,12 @@ exports.newTradingStrategy = function newTradingStrategy(bot, logger, tradingEng
tradingEngine = undefined
}
function mantain() {
resetTradingEngineDataStructure()
updateCounters()
updateEnds()
}
function openStrategy(index, situationName, strategyName) {
tradingEngine.current.strategy.status.value = 'Open'
tradingEngine.current.strategy.serialNumber.value = tradingEngine.current.episode.episodeCounters.strategies.value