Fixing Implementation Bugs

This commit is contained in:
Luis Fernando Molina committed 2021-02-08 19:00:16 +01:00
1 parent 5ceb1a8265
commit d70422593d
7 files changed
+34 -219

No files matched your search

@@ -1 +1 @@
{"type":"Learning Engine","name":"Low-Frequency","project":"Superalgos","learningCurrent":{"type":"Learning Current","name":"New Learning Current","project":"Superalgos","learningEpisode":{"type":"Learning Episode","name":"New Learning Episode","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2cc4ea2e-0c49-4dc4-be14-5c37dba3d4a3","savedPayload":{"position":{"x":11579.353376181454,"y":11483.233023771927},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"5e87e4cf-d3cf-4ca3-90d0-bcc215ff32df","savedPayload":{"position":{"x":11553.745789630078,"y":11567.649923428959},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7073b390-c791-428b-b75d-11d7bef076ee","savedPayload":{"position":{"x":11512.161325536144,"y":11645.44898372349},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f5dc8eea-94d7-41d7-9c44-3b044fa5cbb7","savedPayload":{"position":{"x":11456.198051533946,"y":11713.640430398615},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f36a352e-9711-490f-9020-84bf3731f93c","savedPayload":{"position":{"x":11388.006604858821,"y":11769.603704400815},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0cd1e3ea-f314-4777-9988-bbde66dd2688","savedPayload":{"position":{"x":11310.207544564291,"y":11811.188168494748},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"1961b061-f041-494f-8c47-004c672c23f3","savedPayload":{"position":{"x":11225.790644907258,"y":11836.795755046123},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"9ffc4653-3d13-4036-b8aa-98e34ea6e497","savedPayload":{"position":{"x":11138,"y":11845.442378864669},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"headOfTheMarket":{"type":"Head Of The Market","name":"New Head Of The Market","config":"{\n\"initialValue\": false\n}","project":"Superalgos","id":"dc3294b4-3754-4154-808a-6531410f6378","savedPayload":{"position":{"x":11050.209355092742,"y":11836.795755046123},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"processDate":{"type":"Process Date","name":"New Process Date","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a009dbfb-9fce-4787-9461-dc63cb0cdf03","savedPayload":{"position":{"x":10965.79245543571,"y":11811.188168494748},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"learningEpisodeCounters":{"type":"Learning Episode Counters","name":"New Learning Episode Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"74d652d9-7439-4a8f-a66e-588f1cb24686","savedPayload":{"position":{"x":10975.784040048437,"y":12210.957080582268},"targetPositLine truncated
{"type":"Learning Engine","name":"Low-Frequency","project":"Superalgos","learningCurrent":{"type":"Learning Current","name":"New Learning Current","project":"Superalgos","learningEpisode":{"type":"Learning Episode","name":"New Learning Episode","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2cc4ea2e-0c49-4dc4-be14-5c37dba3d4a3","savedPayload":{"position":{"x":11579.353376181454,"y":11483.233023771927},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"5e87e4cf-d3cf-4ca3-90d0-bcc215ff32df","savedPayload":{"position":{"x":11553.745789630078,"y":11567.649923428959},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7073b390-c791-428b-b75d-11d7bef076ee","savedPayload":{"position":{"x":11512.161325536144,"y":11645.44898372349},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f5dc8eea-94d7-41d7-9c44-3b044fa5cbb7","savedPayload":{"position":{"x":11456.198051533946,"y":11713.640430398615},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f36a352e-9711-490f-9020-84bf3731f93c","savedPayload":{"position":{"x":11388.006604858821,"y":11769.603704400815},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0cd1e3ea-f314-4777-9988-bbde66dd2688","savedPayload":{"position":{"x":11310.207544564291,"y":11811.188168494748},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"1961b061-f041-494f-8c47-004c672c23f3","savedPayload":{"position":{"x":11225.790644907258,"y":11836.795755046123},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"9ffc4653-3d13-4036-b8aa-98e34ea6e497","savedPayload":{"position":{"x":11138,"y":11845.442378864669},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"headOfTheMarket":{"type":"Head Of The Market","name":"New Head Of The Market","config":"{\n\"initialValue\": false\n}","project":"Superalgos","id":"dc3294b4-3754-4154-808a-6531410f6378","savedPayload":{"position":{"x":11050.209355092742,"y":11836.795755046123},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"processDate":{"type":"Process Date","name":"New Process Date","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a009dbfb-9fce-4787-9461-dc63cb0cdf03","savedPayload":{"position":{"x":10965.79245543571,"y":11811.188168494748},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"learningEpisodeCounters":{"type":"Learning Episode Counters","name":"New Learning Episode Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"74d652d9-7439-4a8f-a66e-588f1cb24686","savedPayload":{"position":{"x":10975.784040048437,"y":12210.957080582268},"targetPositLine truncated
+14 -2
View File
@@ -4067,6 +4067,18 @@
},
"propertyNameAtParent": "learningEpisodeStatistics",
"childrenNodesProperties": [
{
"name": "hitFail",
"type": "node",
"childType": "Hit Fail",
"autoAdd": true
},
{
"name": "days",
"type": "node",
"childType": "Days",
"autoAdd": true
},
{
"name": "userDefinedStatistics",
"type": "array",
@@ -5592,7 +5604,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode Statistics->Position Statistics->Order Statistics->"
"compatibleTypes": "->Trading Episode Statistics->Learning Episode Statistics->Position Statistics->Order Statistics->"
},
"propertyNameAtParent": "days"
},
@@ -5970,7 +5982,7 @@
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Trading Episode Statistics->Position Statistics->Position Base Asset->Position Quoted Asset->Episode Base Asset->Episode Quoted Asset->"
"compatibleTypes": "->Trading Episode Statistics->Learning Episode Statistics->Position Statistics->Position Base Asset->Position Quoted Asset->Episode Base Asset->Episode Quoted Asset->"
},
"propertyNameAtParent": "hitFail"
},
@@ -55,14 +55,6 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
learningEngine.learningCurrent.learningEpisode.begin.value = learningEngine.learningCurrent.learningEpisode.candle.begin.value
learningEngine.learningCurrent.learningEpisode.end.value = learningEngine.learningCurrent.learningEpisode.candle.end.value
/* Getting the begin Balance from the session configuration */
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value = sessionParameters.sessionBaseAsset.config.initialBalance
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value = sessionParameters.sessionQuotedAsset.config.initialBalance
/* The current balance is also the begin balance, that is how this starts. */
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value = sessionParameters.sessionBaseAsset.config.initialBalance
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value = sessionParameters.sessionQuotedAsset.config.initialBalance
/* Recording the opening at the Learning Engine Data Structure */
learningEngine.learningCurrent.learningEpisode.status.value = 'Open'
learningEngine.learningCurrent.learningEpisode.serialNumber.value = 1
@@ -78,8 +70,6 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
learningEngine.learningCurrent.learningEpisode.status.value = 'Closed'
learningEngine.learningCurrent.learningEpisode.end.value = learningEngine.learningCurrent.learningEpisode.candle.end.value
learningEngine.learningCurrent.learningEpisode.endRate.value = learningEngine.learningCurrent.learningEpisode.candle.close.value
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.endBalance.value = learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.endBalance.value = learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value
}
function resetEpisode() {
@@ -90,8 +80,6 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
if (learningEngine.learningCurrent.learningEpisode.status.value === 'Open') {
learningEngine.learningCurrent.learningEpisode.end.value = learningEngine.learningCurrent.learningEpisode.end.value + sessionParameters.timeFrame.config.value
learningEngine.learningCurrent.learningEpisode.endRate.value = learningEngine.learningCurrent.learningEpisode.candle.close.value
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.endBalance.value = learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.endBalance.value = learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value
}
}
@@ -109,7 +97,7 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
function updateStatistics() {
/* Daus Calculation */
/* Days Calculation */
learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.days.value =
learningEngine.learningCurrent.learningEpisode.learningEpisodeCounters.periods.value *
sessionParameters.timeFrame.config.value /
@@ -122,75 +110,6 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
calculateEpisodeStatistics()
function calculateAssetsStatistics() {
/* Updating Profit Loss */
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value =
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value -
sessionParameters.sessionBaseAsset.config.initialBalance
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value =
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value -
sessionParameters.sessionQuotedAsset.config.initialBalance
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value, 10)
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value, 10)
/*
Updating ROI
https://www.investopedia.com/articles/basics/10/guide-to-calculating-roi.asp
*/
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.ROI.value =
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value /
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value * 100
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.ROI.value =
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value /
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value * 100
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.ROI.value, 10)
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.ROI.value, 10)
/* Updating Hit Ratio */
if (learningEngine.learningCurrent.learningEpisode.learningEpisodeCounters.positions.value > 0) {
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.hitRatio.value =
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.hits.value /
learningEngine.learningCurrent.learningEpisode.learningEpisodeCounters.positions.value
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.hitRatio.value =
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.hits.value /
learningEngine.learningCurrent.learningEpisode.learningEpisodeCounters.positions.value
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.hitRatio.value, 10)
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.hitRatio.value, 10)
}
/*
Updating Annualized Rate Of Return
https://www.investopedia.com/terms/a/annualized-rate.asp
*/
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.annualizedRateOfReturn.value =
Math.pow(
(
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value +
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value
) / learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value
,
(365 / learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.days.value)
) - 1
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.annualizedRateOfReturn.value =
Math.pow(
(
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value +
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value
) / learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value
,
(365 / learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.days.value)
) - 1
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.annualizedRateOfReturn.value, 10)
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.annualizedRateOfReturn.value, 10)
/* Updating Hit or Fail */
if (learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value > 0) {
@@ -206,52 +125,6 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
}
function calculateEpisodeStatistics() {
/* Updating Profit Loss */
learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.profitLoss.value =
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value * learningEngine.learningCurrent.learningEpisode.candle.close.value +
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value
learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.profitLoss.value, 10)
/*
Updating ROI
https://www.investopedia.com/articles/basics/10/guide-to-calculating-roi.asp
*/
learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.ROI.value =
(
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value * learningEngine.learningCurrent.learningEpisode.endRate.value +
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value
) / (
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value * learningEngine.learningCurrent.learningEpisode.beginRate.value +
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value
) * 100
learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.ROI.value, 10)
/*
Updating Annualized Rate Of Return
https://www.investopedia.com/terms/a/annualized-rate.asp
*/
learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.annualizedRateOfReturn.value =
Math.pow(
(
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value * learningEngine.learningCurrent.learningEpisode.beginRate.value +
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value +
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value +
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value
) /
(
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value * learningEngine.learningCurrent.learningEpisode.beginRate.value +
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value
)
,
(365 / learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.days.value)
) - 1
learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.annualizedRateOfReturn.value, 10)
/* Updating Hit or Fail */
if (learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.profitLoss.value > 0) {
learningEngine.learningCurrent.learningEpisode.learningEpisodeStatistics.hitFail.value = 'Hit'
@@ -263,58 +136,12 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
function updatedistanceToLearningEventsCounters() {
/* Keeping Distance Counters Up-to-date while avoinding counting before the first event happens. */
/*
if (
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.triggerOn.value > 0
) {
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.triggerOn.value++
}
if (
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.triggerOff.value > 0
) {
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.triggerOff.value++
}
if (
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.takePosition.value > 0
) {
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.takePosition.value++
}
if (
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.closePosition.value > 0
) {
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.closePosition.value++
}
if (
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.nextPhase.value > 0
) {
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.nextPhase.value++
}
if (
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.moveToPhase.value > 0
) {
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.moveToPhase.value++
}
if (
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.createOrder.value > 0
) {
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.createOrder.value++
}
if (
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.cancelOrder.value > 0
) {
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.cancelOrder.value++
}
if (
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.closeOrder.value > 0
) {
learningEngine.learningCurrent.learningEpisode.distanceToLearningEvent.closeOrder.value++
}
*/
}
}
@@ -41,7 +41,7 @@ exports.newSuperalgosBotModulesLearningOutput = function (processIndex) {
timeFrameLabel,
learningProcessDate,
fileStorage,
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.tradingCurrent.learningEpisode.headOfTheMarket.value
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.learningEpisode.headOfTheMarket.value
)
await learningSimulationModuleObject.runSimulation(
@@ -26,8 +26,6 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
let sessionParameters
let dynamicIndicators
let learningStagesModuleObject = TS.projects.superalgos.botModules.learningStages.newSuperalgosBotModulesLearningStages(processIndex)
return thisObject
function initialize() {
@@ -38,8 +36,6 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
learningSystem.conditions = new Map()
learningSystem.formulas = new Map()
learningStagesModuleObject.initialize()
/* Adding Functions used elsewhere to Learning System Definition */
learningSystem.checkConditions = function (situation, passed) {
/* Given a Situation, we check if all children conditions are true or not */
@@ -118,8 +114,6 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
}
function finalize() {
learningStagesModuleObject.finalize()
learningStagesModuleObject = undefined
chart = undefined
exchange = undefined
@@ -143,11 +137,10 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
}
function mantain() {
learningStagesModuleObject.mantain()
}
function reset() {
learningStagesModuleObject.reset()
learningSystem.highlights = []
learningSystem.errors = []
@@ -168,8 +161,6 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
chart = pChart
exchange = pExchange
market = pMarket
learningStagesModuleObject.updateChart(pChart, pExchange, pMarket)
}
function buildDynamicIndicators() {
@@ -192,23 +183,6 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
/* Dynamic Indicators */
buildDynamicIndicators()
/* Run the Trigger Stage */
learningStagesModuleObject.runTriggerStage()
/* Run the Open Stage */
await learningStagesModuleObject.runOpenStage()
/* Run the Manage Stage */
learningStagesModuleObject.runManageStage()
/* Run the Close Stage */
await learningStagesModuleObject.runCloseStage()
/* Validation if we need to exit the position */
learningStagesModuleObject.exitPositionValidation()
learningStagesModuleObject.cycleBasedStatistics()
} catch (err) {
/*
If an error ocurred during execution, it was alreeady logged and
@@ -120,7 +120,7 @@
callBackFunction(TS.projects.superalgos.globals.standardResponses.DEFAULT_FAIL_RESPONSE);
return
} else {
if (tradingMineNode.config.codeName === undefined) {
if (learningMineNode.config.codeName === undefined) {
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[ERROR] start -> Learning Mine witn no codeName defined.");
callBackFunction(TS.projects.superalgos.globals.standardResponses.DEFAULT_FAIL_RESPONSE);
return
@@ -107,17 +107,19 @@
map.set(key, true)
}
}
} else {
/*
If we did not receive any filters, like in the case of Indicators and Sensors,
we need to add the default exchange and market to these maps in order
for the following sections to work.
*/
thisObject.filters.market.list.set(thisObject.defaultMarket, true)
thisObject.filters.exchange.list.set(thisObject.defaultExchange, true)
thisObject.filters.exchange.markets.set(thisObject.defaultExchange + '-' + thisObject.defaultMarket, true)
}
/*
In case we do not receive any filters, like in the case of Indicators and Sensors,
or simply because the Learning System is still empty,
we need to add the default exchange and market to these maps in order
for the following sections to work, and later we at least have candles at the
Learning Simulation.
*/
thisObject.filters.market.list.set(thisObject.defaultMarket, true)
thisObject.filters.exchange.list.set(thisObject.defaultExchange, true)
thisObject.filters.exchange.markets.set(thisObject.defaultExchange + '-' + thisObject.defaultMarket, true)
/*
For each dependency declared at the curatedDependencyNodeArray, we will initialize a
DataSet as part of this initialization process.
@@ -204,7 +206,7 @@
*/
if (dataDependency.referenceParent.parentNode.config.codeName !== 'Candles') {
continue
}
}
}
addDataSet(exchange, market)
} else {