Fixing Implementation Bugs
This commit is contained in:
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
|
||||
@@ -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"
|
||||
},
|
||||
|
||||
+3
-176
@@ -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++
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -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(
|
||||
|
||||
+1
-27
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user