Merge pull request #333 from Luis-Fernando-Molina/in-app-documentation
Tutorials Version 2 - Integrated to the Docs Version 2
This commit is contained in:
384 files changed
+9855
-367
No files matched your search
@@ -18,4 +18,9 @@
|
||||
color: #e3493c;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.credits-yellow {
|
||||
color: #dfbe00fb;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
style="overflow:hidden; background: url(Images/superalgos-platform.jpg); background-size: cover;"
|
||||
onresize="onResize()">
|
||||
<div id="contributors" class="credits">
|
||||
<p id="credits-page-status-paragraph" class="credits-yellow">The UI is loading...</p>
|
||||
<p>Superalgos is <span class="credits-red">free</span> and <span class="credits-red">open-source</span>, and is
|
||||
<span class="credits-red">constantly improving</span> thanks to the involvement of contributors:</p>
|
||||
<p>Luis Fernando Molina, Julian Molina, Andreja Cobeljic, Matías Benitez, Ira Miller, Eduardo Remis,
|
||||
|
||||
+28
-16
@@ -333,7 +333,7 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
|
||||
let fileContent = JSON.stringify(schemaDocument, undefined, 4)
|
||||
let fileName = schemaDocument.type.toLowerCase()
|
||||
for (let j = 0; j < 10; j++) {
|
||||
fileName = fileName.replace(' ', '-')
|
||||
fileName = cleanFileName(fileName)
|
||||
}
|
||||
fileName = fileName + '.json'
|
||||
|
||||
@@ -385,9 +385,7 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
|
||||
let schemaDocument = docsSchema[i]
|
||||
let fileContent = JSON.stringify(schemaDocument, undefined, 4)
|
||||
let fileName = schemaDocument.type.toLowerCase()
|
||||
for (let j = 0; j < 10; j++) {
|
||||
fileName = fileName.replace(' ', '-')
|
||||
}
|
||||
fileName = cleanFileName(fileName)
|
||||
fileName = fileName + '.json'
|
||||
|
||||
fs.writeFileSync(filePath + '/' + fileName, fileContent)
|
||||
@@ -439,9 +437,7 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
|
||||
let fileContent = JSON.stringify(schemaDocument, undefined, 4)
|
||||
let pageNumber = '00' + schemaDocument.pageNumber
|
||||
let fileName = schemaDocument.topic.toLowerCase() + '-' + pageNumber.substring(pageNumber.length - 3, pageNumber.length) + '-' + schemaDocument.type.toLowerCase()
|
||||
for (let j = 0; j < 10; j++) {
|
||||
fileName = fileName.replace(' ', '-')
|
||||
}
|
||||
fileName = cleanFileName(fileName)
|
||||
fileName = fileName + '.json'
|
||||
|
||||
fs.writeFileSync(filePath + '/' + fileName, fileContent)
|
||||
@@ -493,9 +489,7 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
|
||||
let fileContent = JSON.stringify(schemaDocument, undefined, 4)
|
||||
let pageNumber = '00' + schemaDocument.pageNumber
|
||||
let fileName = schemaDocument.tutorial.toLowerCase() + '-' + pageNumber.substring(pageNumber.length - 3, pageNumber.length) + '-' + schemaDocument.type.toLowerCase()
|
||||
for (let j = 0; j < 10; j++) {
|
||||
fileName = fileName.replace(' ', '-')
|
||||
}
|
||||
fileName = cleanFileName(fileName)
|
||||
fileName = fileName + '.json'
|
||||
|
||||
fs.writeFileSync(filePath + '/' + fileName, fileContent)
|
||||
@@ -546,9 +540,7 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
|
||||
let schemaDocument = docsSchema[i]
|
||||
let fileContent = JSON.stringify(schemaDocument, undefined, 4)
|
||||
let fileName = schemaDocument.type.toLowerCase()
|
||||
for (let j = 0; j < 10; j++) {
|
||||
fileName = fileName.replace(' ', '-')
|
||||
}
|
||||
fileName = cleanFileName(fileName)
|
||||
fileName = fileName + '.json'
|
||||
|
||||
fs.writeFileSync(filePath + '/' + fileName, fileContent)
|
||||
@@ -572,7 +564,27 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
|
||||
break
|
||||
}
|
||||
}
|
||||
break
|
||||
function cleanFileName(fileName) {
|
||||
for (let i = 0; i < 10; i++) {
|
||||
fileName = fileName
|
||||
.replace(' ', '-')
|
||||
.replace('--', '-')
|
||||
.replace('?', '')
|
||||
.replace('#', '')
|
||||
.replace('$', '')
|
||||
.replace('%', '')
|
||||
.replace('^', '')
|
||||
.replace('&', '')
|
||||
.replace('*', '')
|
||||
.replace('(', '')
|
||||
.replace(')', '')
|
||||
.replace('!', '')
|
||||
.replace('..', '.')
|
||||
.replace(',', '')
|
||||
.replace('\'', '')
|
||||
}
|
||||
return fileName
|
||||
}
|
||||
}
|
||||
break
|
||||
|
||||
@@ -630,8 +642,8 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
|
||||
base,
|
||||
});
|
||||
} catch (err) {
|
||||
if (err.stack.indexOf('A pull request already exists') <0) {
|
||||
throw(err)
|
||||
if (err.stack.indexOf('A pull request already exists') < 0) {
|
||||
throw (err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,6 +212,11 @@
|
||||
"name": "Docs",
|
||||
"propertyName": "docs",
|
||||
"functionName": "newSuperalgosUtilitiesDocs"
|
||||
},
|
||||
{
|
||||
"name": "Credits Page",
|
||||
"propertyName": "creditsPage",
|
||||
"functionName": "newSuperalgosUtilitiesCreditsPage"
|
||||
}
|
||||
],
|
||||
"spaces": [
|
||||
|
||||
File renamed without changes.
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Getting Started","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d244c564-4e86-43c7-9796-dc3b6294ec8b","savedPayload":{"position":{"x":23490.023749611923,"y":29239.135911211026},"targetPosition":{"x":23779.801497498644,"y":29316.781624741783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"343313ae-5705-484d-8bf8-aed25ba61cfa","savedPayload":{"position":{"x":23779.801497498644,"y":29316.781624741783},"targetPosition":{"x":24069.579245385365,"y":29394.42733827254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a8f38508-1cac-4ab1-815f-d338fc813377","savedPayload":{"position":{"x":24069.579245385365,"y":29394.42733827254},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"f0ef12ed-f0fd-4b88-8e15-27cf24265a5f","savedPayload":{"position":{"x":23799.549372136753,"y":28802.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"7c8b312c-09bf-4c59-853f-1592391a9c57","savedPayload":{"position":{"x":24059.356993272086,"y":28652.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"8d58e84b-d7ef-464f-8079-0ec0887e3da3","savedPayload":{"position":{"x":24059.356993272086,"y":28952.457809532632},"targetPosition":{"x":24209.356993272086,"y":29212.265430667965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bf29e3bd-9386-408b-9091-042da0c53e81","savedPayload":{"position":{"x":24209.356993272086,"y":29212.265430667965},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Resistances and Supports","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Resistances and Supports","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Market","project":"Superalgos","id":"a707814e-b81b-4102-9b5b-4e2fe969324f","savedPayload":{"position":{"x":24437.002706802843,"y":28602.739808143135},"targetPosition":{"x":24514.6484203336,"y":28892.517556029856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"refeLine truncated
|
||||
{"type":"Workspace","name":"Getting Started","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d244c564-4e86-43c7-9796-dc3b6294ec8b","savedPayload":{"position":{"x":23490.023749611923,"y":29239.135911211026},"targetPosition":{"x":23779.801497498644,"y":29316.781624741783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"343313ae-5705-484d-8bf8-aed25ba61cfa","savedPayload":{"position":{"x":23779.801497498644,"y":29316.781624741783},"targetPosition":{"x":24069.579245385365,"y":29394.42733827254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a8f38508-1cac-4ab1-815f-d338fc813377","savedPayload":{"position":{"x":24069.579245385365,"y":29394.42733827254},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"f0ef12ed-f0fd-4b88-8e15-27cf24265a5f","savedPayload":{"position":{"x":23799.549372136753,"y":28802.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"7c8b312c-09bf-4c59-853f-1592391a9c57","savedPayload":{"position":{"x":24059.356993272086,"y":28652.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"8d58e84b-d7ef-464f-8079-0ec0887e3da3","savedPayload":{"position":{"x":24059.356993272086,"y":28952.457809532632},"targetPosition":{"x":24209.356993272086,"y":29212.265430667965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bf29e3bd-9386-408b-9091-042da0c53e81","savedPayload":{"position":{"x":24209.356993272086,"y":29212.265430667965},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Resistances and Supports","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Resistances and Supports","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Market","project":"Superalgos","id":"a707814e-b81b-4102-9b5b-4e2fe969324f","savedPayload":{"position":{"x":24437.002706802843,"y":28602.739808143135},"targetPosition":{"x":24514.6484203336,"y":28892.517556029856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"refeLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Trading System Design Tutorials","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d0ff77d8-76de-4d50-840a-e50a55ad7d1b","savedPayload":{"position":{"x":23464.287287440642,"y":29377.997434862405},"targetPosition":{"x":23762.643856051123,"y":29409.355973842703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"b4e33f51-f9ff-4ef3-a9b7-ccb904163cae","savedPayload":{"position":{"x":23762.643856051123,"y":29409.355973842703},"targetPosition":{"x":24061.000424661604,"y":29440.714512823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"23ae53f9-b478-4eb4-96e7-12d07d7ae4f0","savedPayload":{"position":{"x":24061.000424661604,"y":29440.714512823},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"dcf3d790-5362-4a95-b977-82d0cf0e07f1","savedPayload":{"position":{"x":23646.16814072914,"y":28934.397538066118},"targetPosition":{"x":23913.47009798565,"y":29070.59468798798},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"775fadbd-5b55-41b2-81ac-454f5e52dca6","savedPayload":{"position":{"x":23750.078387481142,"y":28818.993517604355},"targetPosition":{"x":23913.47009798565,"y":29070.59468798798},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"fc478301-77ac-4396-bd3b-915b4c681fa0","savedPayload":{"position":{"x":23913.47009798565,"y":29070.59468798798},"targetPosition":{"x":24136.413545628868,"y":29271.33386989564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"30054a4b-7c93-4a3a-a6db-2e0d38507b2e","savedPayload":{"position":{"x":24136.413545628868,"y":29271.33386989564},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Bands","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Bands","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"bf0f739f-98b7-4c73-ae06-8d3fe83147ce","savedPayload":{"position":{"x":24098.412828859568,"y":28617.882534106506},"targetPosition":{"x":24234.60997878143,"y":28885.184491363016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"PLine truncated
|
||||
{"type":"Workspace","name":"Trading System Design Tutorials","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d0ff77d8-76de-4d50-840a-e50a55ad7d1b","savedPayload":{"position":{"x":23464.287287440642,"y":29377.997434862405},"targetPosition":{"x":23762.643856051123,"y":29409.355973842703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"b4e33f51-f9ff-4ef3-a9b7-ccb904163cae","savedPayload":{"position":{"x":23762.643856051123,"y":29409.355973842703},"targetPosition":{"x":24061.000424661604,"y":29440.714512823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"23ae53f9-b478-4eb4-96e7-12d07d7ae4f0","savedPayload":{"position":{"x":24061.000424661604,"y":29440.714512823},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"dcf3d790-5362-4a95-b977-82d0cf0e07f1","savedPayload":{"position":{"x":23646.16814072914,"y":28934.397538066118},"targetPosition":{"x":23913.47009798565,"y":29070.59468798798},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"775fadbd-5b55-41b2-81ac-454f5e52dca6","savedPayload":{"position":{"x":23750.078387481142,"y":28818.993517604355},"targetPosition":{"x":23913.47009798565,"y":29070.59468798798},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"fc478301-77ac-4396-bd3b-915b4c681fa0","savedPayload":{"position":{"x":23913.47009798565,"y":29070.59468798798},"targetPosition":{"x":24136.413545628868,"y":29271.33386989564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"30054a4b-7c93-4a3a-a6db-2e0d38507b2e","savedPayload":{"position":{"x":24136.413545628868,"y":29271.33386989564},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Bands","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Bands","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"bf0f739f-98b7-4c73-ae06-8d3fe83147ce","savedPayload":{"position":{"x":24098.412828859568,"y":28617.882534106506},"targetPosition":{"x":24234.60997878143,"y":28885.184491363016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"PLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Weak-hands Buster v2","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Sparta","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Sparta","project":"Superalgos","tasks":[{"type":"Task","name":"EMA","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"EMA","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Market","project":"Superalgos","id":"9adffd60-8756-44f0-9290-692711f43349","savedPayload":{"position":{"x":23320.126508730755,"y":29392.688294073963},"targetPosition":{"x":23620.126508730755,"y":29392.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"278c34a7-199d-400e-8a06-087149e3d391"}}},{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Daily","project":"Superalgos","id":"559fc728-018a-4e8e-a5fa-1e37958e4f6c","savedPayload":{"position":{"x":23470.126508730755,"y":29132.88067293863},"targetPosition":{"x":23620.126508730755,"y":29392.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"943ea24f-ee24-4eae-9b4b-e8a73122b1c2"}}}],"id":"82a8c05f-a6f6-4728-8271-7b327c2b72ee","savedPayload":{"position":{"x":23620.126508730755,"y":29392.688294073963},"targetPosition":{"x":23879.934129866087,"y":29542.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8ae4fc50-8c1f-4e45-9ffd-fad368816b9a","savedPayload":{"position":{"x":23879.934129866087,"y":29542.688294073963},"targetPosition":{"x":24139.74175100142,"y":29692.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51b49b9d-cb97-4d98-ad8f-9f691320bac2","savedPayload":{"position":{"x":24139.74175100142,"y":29692.688294073963},"targetPosition":{"x":24399.549372136753,"y":29842.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"63728769-73e4-474e-8aa3-0d82bedca08e","savedPayload":{"position":{"x":24399.549372136753,"y":29842.688294073963},"targetPosition":{"x":24659.356993272086,"y":29992.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Sparta","id":"9cfffc48-486a-48cb-b641-98c82e314d3a"}}},{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"149bc037-9762-4737-b1b8-945b5ccee230","savedPayload":{"position":{"x":23931.241698334637,"y":28863.681567010735},"targetPosition":{"x":24173.94679664712,"y":29040.017142698478},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"507bc325-1cbd-40f4-85eb-cfe77b78000e","savedPayload":{"position":{"x":24173.94679664712,"y":29040.017142698478},"targetPosition":{"x":24416.651894959603,"y":29216.35271838622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7c28a4a4-86da-43be-9e89-d01b202f27eb","sLine truncated
|
||||
{"type":"Workspace","name":"Weak-hands Buster v2","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Sparta","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Sparta","project":"Superalgos","tasks":[{"type":"Task","name":"EMA","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"EMA","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Market","project":"Superalgos","id":"9adffd60-8756-44f0-9290-692711f43349","savedPayload":{"position":{"x":23320.126508730755,"y":29392.688294073963},"targetPosition":{"x":23620.126508730755,"y":29392.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"278c34a7-199d-400e-8a06-087149e3d391"}}},{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Daily","project":"Superalgos","id":"559fc728-018a-4e8e-a5fa-1e37958e4f6c","savedPayload":{"position":{"x":23470.126508730755,"y":29132.88067293863},"targetPosition":{"x":23620.126508730755,"y":29392.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"943ea24f-ee24-4eae-9b4b-e8a73122b1c2"}}}],"id":"82a8c05f-a6f6-4728-8271-7b327c2b72ee","savedPayload":{"position":{"x":23620.126508730755,"y":29392.688294073963},"targetPosition":{"x":23879.934129866087,"y":29542.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8ae4fc50-8c1f-4e45-9ffd-fad368816b9a","savedPayload":{"position":{"x":23879.934129866087,"y":29542.688294073963},"targetPosition":{"x":24139.74175100142,"y":29692.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51b49b9d-cb97-4d98-ad8f-9f691320bac2","savedPayload":{"position":{"x":24139.74175100142,"y":29692.688294073963},"targetPosition":{"x":24399.549372136753,"y":29842.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"63728769-73e4-474e-8aa3-0d82bedca08e","savedPayload":{"position":{"x":24399.549372136753,"y":29842.688294073963},"targetPosition":{"x":24659.356993272086,"y":29992.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Sparta","id":"9cfffc48-486a-48cb-b641-98c82e314d3a"}}},{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"149bc037-9762-4737-b1b8-945b5ccee230","savedPayload":{"position":{"x":23931.241698334637,"y":28863.681567010735},"targetPosition":{"x":24173.94679664712,"y":29040.017142698478},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"507bc325-1cbd-40f4-85eb-cfe77b78000e","savedPayload":{"position":{"x":24173.94679664712,"y":29040.017142698478},"targetPosition":{"x":24416.651894959603,"y":29216.35271838622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7c28a4a4-86da-43be-9e89-d01b202f27eb","sLine truncated
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 1,
|
||||
"type": "Tutorial - Intro to Trading Systems",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "Trading systems are the heart and soul of systematic trading, as they concentrate the biggest chunk of trading intelligence."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The rest of the infrastructure built into Superalgos—data mining and visualization, the trading bot and trading engine, the visual strategy designer and debugger—all have significant equity in the intelligence pie, but it's fair to argue that were developed to support the design, testing, and deployment of trading systems!"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "This first tutorial explains how Superalgos views and handles a Trading System. The rest of the tutorials in the series teach you how to build them!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 2,
|
||||
"type": "Tutorial Topic - Frame It Flexibly!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "A Trading System governs trading strategies, and provides a flexible—but structured— framework to build them."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Please, read this page to get up to speed with how trading systems work!"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "There is no substitute for knowledge, so you will need to do some reading before I get your hands dirty with good ol' trading logic!"
|
||||
},
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "Skipping the reading may result in permanent neurological impairment. Your call!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 3,
|
||||
"type": "Tutorial Step - Points to Take Home...",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "There are some key learnings in the previous reading: multiple strategies, single positions, and precedence."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let's take some mental notes for what comes next:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Multiple strategies may coexist within a trading system—as many as you wish."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "One active strategy with one open position at any given moment is allowed only."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Precedence is given by the order in which strategies are defined around the Trading System node. You may change the order, of course!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You are probably asking why? Do these rules sound arbitrary? They are, for good reason!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 4,
|
||||
"type": "Tutorial Step - But... But... Why?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "Why would I want to have multiple strategies within a trading system, when only one of them may trade at any point?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Before answering the burning question, let's take a look at a couple of examples. Take a look at the two strategies within the Weak-hands Buster (WHB v2) trading system!"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Explore the definitions of the Trigger On Event on the Trigger Stage and see if you notice the difference between the two."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "There's a hint in the name of each strategy!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 5,
|
||||
"type": "Tutorial Step - Steep Vs. Extreme",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "condition"
|
||||
},
|
||||
"text": "Did you find the difference? Don't worry if you didn't! There are lots of conditions! I'll give you another hint!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Look again and notice that the first seven conditions of the Trigger On Event are the same on both strategies! The remaining conditions are different, though!"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "You may drag the Trigger On Event of a strategy and pin it closer to the event of the other strategy for easier comparison!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 6,
|
||||
"type": "Tutorial Step - A Particular Case...",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-strategy"
|
||||
},
|
||||
"text": "Both strategies are virtually the same in that they share the same base rules for triggering... with minor differences..."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Beyond the seven conditions in common, the Steep strategy has one additional Condition while the Xtreme strategy has three. We won't analyze those differences one by one, although you may if you wish! Let's instead reveal the underlying concept behind the differences:"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Within the market Situation defined by the first seven conditions, the Steep strategy deals with a certain type of price action—price falling on a steep curve—while the Xtreme strategy deals with price falling on an extremely steep curve!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 7,
|
||||
"type": "Tutorial Step - Another Example?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "Let's take a look at another example! This is BB Top Bounce, a Trading System based on the bounce off the upper Bollinger Band trading idea."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Expand the trading system node... Let's see what it may teach us!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "I told you! You may have as many strategies as you wish under the same trading system! Well... there your are!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 8,
|
||||
"type": "Tutorial Step - At The Count of Three!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "condition"
|
||||
},
|
||||
"text": "BB Top Bounce features an interesting approach: it defines the trading idea with three simple conditions."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You are looking at the Trigger On Event of the first strategy. Notice the first three conditions defined..."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Now go and look at the trigger on event of any of the other strategies... What do you see?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Eaxctly! All strategies feature the same first three conditions on the trigger on event. This shows that all strategies are based on the same trading idea. Now... how are they different?"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 9,
|
||||
"type": "Tutorial Step - Time Frame Analysys",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "time-frame"
|
||||
},
|
||||
"text": "Each strategy specializes in specific market conditions by analyzing the state of the market on different time frames!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Take a look at the name of each strategy... 3H Down, 2H Down, 4H Up..."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you study the conditions that define the trigger on event, you will notice that 3H Down referes to the fact that the particular strategy is triggered when the 3-hour time frame is in a downwtrend."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Each of the strategies speciallizes on a certain time frame and trend!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 10,
|
||||
"type": "Tutorial Step - Unpacking These Lessons",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "We've covered two examples of trading systems featuring multiple strategies... what can we learn from them?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the case of Weak-hands Buster, each strategy represents a particular case of the same trading idea. In the case of BB Top Bounce, each strategy specializes in specific market conditions."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "In the next few steps, we will unpack the implications of using multiple strategies within the same trading system and—finally—answer the burning question: why would we want to use such a setup?"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 11,
|
||||
"type": "Tutorial Step - Granularity!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "I mentioned the concept of granularity during the Welcome tutorial... remember?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Granularity is a device the helps in handling complexity. Instead of letting strategies grow into a complex web of rules and definitions, it is always preferable to split complex logic in pieces and deal with smaller units."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Splitting complex logic into multiple strategies helps in keeping strategies simple and understandable. It makes strategies easier to debug and to maintain!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Whenever you can, keep it simple!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 12,
|
||||
"type": "Tutorial Step - Hyper Specialization!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "Specialization is a very interesting concept that may lead to designing more efficient trading systems!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It is a well-known fact that most strategies perform better on certain market conditions."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Like with BB Top Bounce, a single trading system may feature multiple strategies, each specializing in specific trends, volatility ranges, or any other market parameter."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Instead of designing a strategy to evaluate a range of market conditions, keep them focused!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 13,
|
||||
"type": "Tutorial Step - Fine-Grain Management!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "When complex trading logic is split into multiple strategies, you gain the opportunity to manage the resulting trades differently!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We haven't yet got into how strategies are defined, but you do know that Superalgos allows managing the take profit and stop loss targets..."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Each strategy in a trading system may have its own logic for managing positions!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you handle multiple variations of the same logic for example, to take a position, then you will likely need to handle multiple variations for managing the position. It is easier and cleaner to do both on separate strategies."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 14,
|
||||
"type": "Tutorial Step - Going Long & Short",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "We covered the three main reasons why it's a good idea to split complex logic into more than one strategy..."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We also covered a couple of examples of trading systems doing just that. There is another example that comes to mind:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Going long and short: designing a strategy that goes both long and short is probably not a good idea. Split the logic and build one strategy for going long and another for going short!"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Remember the KISS principle!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "1. Intro to Trading Systems",
|
||||
"pageNumber": 15,
|
||||
"type": "Tutorial Step - Are You Ready For The Next One?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "tutorial"
|
||||
},
|
||||
"text": "Congratulations! You now know as much about trading systems as I do! Coming next, Defining a Trading Idea."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "The next tutorial in the series is about framing trading ideas into a formal hypothesis so that the trading idea may be tested. Testing a trading idea is the first step in the process of building a Trading Strategy!"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Click Next to finish this tutorial, and select Play in the next one when you are ready!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 1,
|
||||
"type": "Tutorial - Defining a Trading Idea",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-strategy"
|
||||
},
|
||||
"text": "Before you may build a Trading Strategy, you first need to come up with a clear and testable trading idea."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "A trading idea is a precursor to a trading strategy. While a complete strategy entails the rules for taking, managing and exiting a position, a trading idea is concerned with the first of those issues only."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Testing a trading idea before committing to building a complete strategy is the logical approach because managing and exiting failed entries is not what you should be aiming for!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This tutorial explains how to properly formulate a trading idea that may later be tested."
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 2,
|
||||
"type": "Tutorial Step - Before we start...",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bullet-warning"
|
||||
},
|
||||
"text": "Let me give you the heads up on a few matters you should consider before we start!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Take any trading-related information for what it's worth! When I share trading concepts, take them with a grain of salt! I'm just a tutorial, not your financial advisor! I'm here to teach you Superalgos, not to tell you how to trade! If you are not a trader, you may pick up something of value, but always make sure you do your own research!"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "This tutorial is aimed at a wide audience! I'll take it easy and lay out concepts so that everyone may understand them. If you are a seasoned trader you may feel some explanations are too basic. In that case, feel free to skip this tutorial and go to the next one in the series."
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 3,
|
||||
"type": "Tutorial Step - Ready to Mine..?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "data-tasks"
|
||||
},
|
||||
"text": "We'll mine some data to analyze a few events over the charts. We'll use the same data to test the trading idea in the next tutorial!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The sensor bot will run on the BTC/USDT market (Binance) from January 1st, 2020, along with the following indicators from the Masters data mine: Candles Volumes, Bollinger Bands, and Bollinger Channels."
|
||||
},
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "If you have data on this market/exchange but on a different time range, this may affect your data! Read the sensor bot documentation to learn how! If the data you have is not important, feel free to keep going!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 4,
|
||||
"type": "Tutorial Step - Let's Mine Some Data..!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "run"
|
||||
},
|
||||
"text": "Now that you understand the implications of running this data mining operation, let's get on with it!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Select Run All Project Data Tasks on the Data Tasks node menu!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "If you are doing this tutorial after doing other tutorials, chances are you may already have part of the data required, which may make things faster! Either way, no need to wait for the data mining to get to the present time... you may keep going with the tutorial!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 5,
|
||||
"type": "Tutorial Step - Why Test Trading Ideas..?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "help"
|
||||
},
|
||||
"text": "Setting up, testing, and deploying a trading strategy requires time and effort. We test trading ideas to avoid wasting resources."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "To test a trading idea, we need to formalize it into a hypothesis that:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "proposes a trading process, "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "selects the appropriate context; "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "defines the main entry rules; "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "predicts a specific outcome; "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "offers a specific testing mechanism. "
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Let's expand on each of these topics so that we can set clear goals for defining a trading idea."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 6,
|
||||
"type": "Tutorial Step - The Trading Process",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "The first dimension we should define is what type of strategy the hypothesis is aimed at."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "A simple rule-of-thumb is determining if it is a scalping, day-trading, swing trading, or position trading strategy."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "This definition provides a notion of the expected holding period, that is, the average time range expected for each position to be open."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The value of such a definition is that it provides a guideline as to what time frames to analyze to determine the existence of trends."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 7,
|
||||
"type": "Tutorial Step - The Appropriate Context",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-trends"
|
||||
},
|
||||
"text": "The second important dimension to define is the general context that the hypothesis is aimed at."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Few—if any—technical analysis-based strategies perform consistently on undefined market situations."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "The minimum required definition is as to whether the hypothesis targets downtrends, uptrends, or sideways markets."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The usual resource is a multi-time frame analysis based on one or more indicators that determine what the existing trend is at different time frames, and any other factors that may be of importance to the specific strategy, for example, volume or volatility."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 8,
|
||||
"type": "Tutorial Step - The Entry Rules",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "take-position-event"
|
||||
},
|
||||
"text": "The third aspect to be defined are the rules for triggering the strategy and taking a position."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Many times, the rules to trigger the strategy derive from the analysis of the context. For example, you wish the strategy to be active when a specific trend is detected by some specific method."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "The rules to take a position are usually referred to as the signal and the signal confirmation."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Those rules are the description of the specific event that determines when to enter a position. For example, the crossover of two specific lines, or a certain value on a specific indicator."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 9,
|
||||
"type": "Tutorial Step - The Prediction",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "hit-ratio"
|
||||
},
|
||||
"text": "The fourth aspect to consider is what we expect from this idea, and this is highly dependent on the type of strategy."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, for a swing strategy, taking a position twice per month with a 50% hit ratio may be acceptable, but not for a scalping strategy."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Defining what we expect from the strategy in terms of trading frequency and hit ratio helps to determine if the strategy is worth pursuing or not."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the tests show that the idea doesn't produce as many trades or as many good entries as is desirable, you may want to come up with a new idea."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 10,
|
||||
"type": "Tutorial Step - The Testing Mechanism",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "backtesting-session"
|
||||
},
|
||||
"text": "The final concern is defining how the idea is to be tested. This too is dependent on the type of strategy!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The focus of the trading idea is the entry point, not the management of the trade or the exit. However..."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "How do we measure if the entry points are good or bad? What period do we use for testing?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The first question leads us to acknowledge that we may need to define some arbitrary stop loss and take profit targets so that we can determine if the resulting entry points are likely to be hits or fails. We will deal with the second question in the next tutorial."
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 11,
|
||||
"type": "Tutorial Step - Let's Go On a Field Trip!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "tutorial"
|
||||
},
|
||||
"text": "The rest of this tutorial is about putting into practice what we just discussed!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "We'll take a deep dive into the charts, learn a thing or two about a specific indicator, and try to come up with a proper trading idea that we can test in the next tutorial!"
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Buckle up! I foresee a few sharp turns ahead!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 12,
|
||||
"type": "Tutorial Step - Are We Up to Date..?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "indicator-process-instance"
|
||||
},
|
||||
"text": "By now, all processes should be at 100%. We need the data to be ready so that we can go and do some work on the charts!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Look around and see if all processes are at 100%. If all of them are, then stop the data mining!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Wait until all processes reach the 100% mark before continuing!"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "In the next step we are going to the charts to check the Bollinger Bands so that we can discuss the trading idea we will test!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 13,
|
||||
"type": "Tutorial Step - BB On the Charts!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-bands"
|
||||
},
|
||||
"text": "Let's take a look at the Bollinger Bands! If it's not on already, find the Bollinger Bands layer in the Masters layer manager."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The indicator features a 20-period moving average in the center. It features a line on top located two standard deviations above the moving average. We call this line the upper band. And it also features a line two standard deviations below the moving average. We call this one the lower band. Together, they are the Bollinger Bands."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Notice how the price ranges sideways bouncing off the upper and the lower bands. Sometimes it may go out of the boundaries of the bands, either higher or lower, but most of the time it stays within the range of the bands."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 14,
|
||||
"type": "Tutorial Step - Bollinger Bands Rules",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-bands"
|
||||
},
|
||||
"text": "Now that you've seen the bands on the charts, let's go through the rules that teach us how to interpret and use them!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you are not familiar with this indicator, it's definitely worth spending a few minutes reading these rules directly from the horse's mouth!"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Please, read what John Bollinger has to say about how to interpret this popular indicator!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Rules 6 to 8 are of particular significance to what we will be attempting later on!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 15,
|
||||
"type": "Tutorial Step - Can You Think of Any Ideas?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "help"
|
||||
},
|
||||
"text": "You've seen the Bollinger Bands and you know how to read them... Can you think of a trading idea to build a strategy with?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Take a few minutes roaming around this chart and see if you can come up with something!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Indicators are usually built by analysts and traders to mathematically describe trading ideas."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "The idea we will discuss next has to do with breakouts! But that is just one of the four or five popular ideas using this indicator!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 16,
|
||||
"type": "Tutorial Step - Breakdown of the BBs",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-candles"
|
||||
},
|
||||
"text": "Weak-hands Buster is based on the idea that a breakdown of the BB may predict a deepening of a downtrend and some reversals."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "I just brought you to April 10th, 2020 to check a case of a breakdown of the bands. See what happens at the following candles:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "04 hs: A candle closes below the lower band at 7.176 USDT."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "05 hs: A second candle closes below the band at 7.140 USDT."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "06 hs: A more serious drop follows, accentuating the price action seen earlier."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "16 hs: Ten hours after the first breakdown, the lowest hourly close of the day marks 6.766 USDT, more than 6% below."
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 17,
|
||||
"type": "Tutorial Step - What Else is Going On?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-candles"
|
||||
},
|
||||
"text": "We just took note of what happened after this breakdown of the bands on the 1H chart... What else is going on with the market?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Take a look at the price action a few candles earlier!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "There were two breakdowns previous to the one we checked, one on April 9th at 12 hs, and before that, another one on April 7th at 21 hs. Both breakdowns were significant, in the sense that the candles closed way lower than the lower band. However, in both cases price bounced back into the bands."
|
||||
}
|
||||
]
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 18,
|
||||
"type": "Tutorial Step - Let's Zoom Out!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "time-frame"
|
||||
},
|
||||
"text": "We've got an idea of what's going on in the 1H time frame. Let's zoom out a bit and take a look at the intermediate-term."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "I just brought you to the 4H chart, on the same dates. Notice the following:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Breakdown: The breakdown we saw in the 1H chart is evident in the 4H chart too."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Immediate past: Before the breakdown on April 10th, the market had been ranging for a while."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Before that: The market was trending upwards—that is, the intermediate-term was in an uptrend."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Downtrend: The breakdown on April 10th marked the start of a downtrend in the intermediate-term."
|
||||
}
|
||||
]
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 19,
|
||||
"type": "Tutorial Step - The Big Picture!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "time-frame"
|
||||
},
|
||||
"text": "The 4H chart showed a clear shift in the trend after the breakdown, but... what about the long-term? Let's check the daily chart!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Find the April 10th candle and take a minute to think of what it meant—in the big picture—what we just analyzed in the lower time frames. This is what I see:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "The walk: The ranging period we saw from the 7th until the 10th of April was in fact a little walk on the daily upper band. By the BB rules, this means that price is relatively high in this time frame."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Pullback: The breakdown in the lower time frames marked the pullback from the daily upper band."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Continuation: The price action in the larger time frame ended up being a normal pullback and continuation, barely crossing the moving average."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 20,
|
||||
"type": "Tutorial Step - What Do We Make of This?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "help"
|
||||
},
|
||||
"text": "We can't arrive at universal conclusions by analyzing a single case, but we can propose a hypothesis to test!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "At this point, a reasonable hypothesis would be:"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "In the context of an uptrend in the daily chart, a breakdown of the Bollinger Bands in the 1H chart may predict a reversal in the intermediate trend."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Let's save this hypothesis for later and look into one other case!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 21,
|
||||
"type": "Tutorial Step - Look to Your Left!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-candles"
|
||||
},
|
||||
"text": "Does the price action to your left ring a bell? Do you recognize this major market crash?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "You're looking at the March 12-13th, 2020 ~50% pandemic market crash! Spend a few minutes analyzing the daily chart!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In short, we can see that the market was in a downtrend since February 25th—if we take the turning south of the moving average and the breakdown of the bands as an indication of the beginning of the trend."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Take a look at the lower time frames too!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 22,
|
||||
"type": "Tutorial Step - Wouldn't It Be Nice?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-candles"
|
||||
},
|
||||
"text": "How cool would it be to be able to predict the continuation of a downturn once the trend is already established?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Predicting the reversal of a well-established trend is a very tricky task. The analysis we just did for April 10th is a good example: while the breakdown in the 1H and 4H time frames marked a trend reversal in the intermediate-term, the long-term trend remained intact."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "A safer approach to trading is predicting the continuation of a trend that is already established! <br/><br/>Remember Rule 8? Closes outside the Bollinger Bands are initially continuation signals!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 23,
|
||||
"type": "Tutorial Step - March 7th to March 12th",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-bands"
|
||||
},
|
||||
"text": "Back in the 1H time frame, let's take a look at what happened between these dates in the context of a daily downtrend."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "March 7th, 17 hs: A breakdown after a two-day-long volatility squeeze triggers a downtrend."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "March 8th, 15 hs: Further breakdowns accelerate the downturn."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "March 12th, 07 hs: Five hours before the biggest market crash in recent history, a series of breakdowns trigger a new downturn after three days of ranging price action."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Do you see the pattern? Can you formulate a hypothesis that we can test?"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 24,
|
||||
"type": "Tutorial Step - We've got Two Hypotheses!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "nodes-highlights"
|
||||
},
|
||||
"text": "Let's recover our previous hypothesis and come up with a new one for the most recent observations!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Hypothesis 1: In the context of an uptrend in the daily chart, a breakdown of the Bollinger Bands in the 1H chart may predict a reversal in the intermediate trend."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Hypothesis 2: In the context of a downtrend in the daily chart, a breakdown of the Bollinger Bands in the 1H chart may predict an acceleration of the downtrend."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "We may think of these two as the core of two different trading ideas! But that is not all, right?"
|
||||
}
|
||||
]
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 25,
|
||||
"type": "Tutorial Step - What Is Missing?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "help"
|
||||
},
|
||||
"text": "What we've got is a vague definition of the context and the entry point rules! We still need to formalize our hypothesis!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Remember, our trading idea should:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "propose a trading process, "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "select the appropriate context; "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "define the main entry rules; "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "predict a specific outcome; "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "offer a specific testing mechanism! "
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Let's proceed with fulfilling those requirements!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 26,
|
||||
"type": "Tutorial Step - Let's Define the First Two!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-trends"
|
||||
},
|
||||
"text": "Let's advance with the definition of the trading process and the context in which these ideas should operate."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading process: Since we rely on trends in the 24H charts, this will be a swing strategy, with positions open—potentially—for several days."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Context: The first hypothesis is for uptrends in the 24H chart. The second, for downtrends and likely for ranging markets as well. We will leave the definition as of how the trends are to be determined for later on, once you become familiar with the tools available in Superalgos."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The goal of the idea is to accumulate bitcoin selling BTC to rebuy at a cheaper price."
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 27,
|
||||
"type": "Tutorial Step - Entry Rules",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trigger-on-event"
|
||||
},
|
||||
"text": "The main entry rules were the focus of the analysis we did on the charts, but let's add a couple more considerations."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We found that a breakdown in the 1H chart may predict an intermediate-term reversal when on a daily uptrend, and—when on a daily downtrend—an acceleration of the downturn. However, we also noticed several breakdowns that didn't produce either. This means that we should take a breakdown as a signal, not as a confirmation in and of itself."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Our confirmation is a second consecutive breakdown in the 1H chart!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 28,
|
||||
"type": "Tutorial Step - Predictions and Testing",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "user-defined-statistic"
|
||||
},
|
||||
"text": "It's not like we're trying to divine the future and will get graded on our accuracy! The prediction is more like an expectation!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Prediction: We expect either of these ideas to trade at least twice per month, with a 50% hit ratio."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Testing: For uptrends, we will set these targets: stop loss at 3% and take profit at 5%. For downtrends we should be more optimistic as the strategy aims to capture big market moves: we will set a 3% stop loss and 10% take profit targets."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Remember! This doesn't mean that is how we would manage the positions! It's just to evaluate the entry points!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 29,
|
||||
"type": "Tutorial Step - Et Voilà..!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "nodes-highlights"
|
||||
},
|
||||
"text": "That's it! We finally have a proper hypothesis that we can test to decide if the idea is worth pursuing or not!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "We'll take it from there in the next tutorial!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "In the next tutorial in the series, we will dive into how Superalgos guides you through the process of setting up the trading idea to be tested on historical data. We'll learn about the syntax to write conditions and formulas, about how to use indicators from within strategies, and whatever else we may need along the way!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "2. Defining a Trading Idea",
|
||||
"pageNumber": 30,
|
||||
"type": "Tutorial Step - Ready For The Next One..?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "tutorial"
|
||||
},
|
||||
"text": "The tutorial to the right is the next in the series about designing trading systems. Shall we keep going?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "The next tutorial in the series is about implementing the ideas we just came up with on a Trading System so that they may be tested."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Click Next to finish this tutorial, and select Play in the next one when you are ready!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 1,
|
||||
"type": "Tutorial - Testing a Trading Idea",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-strategy"
|
||||
},
|
||||
"text": "We got to the point where we can finally put the theory in practice, so let's get on with it!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the second tutorial in the series we covered how to properly define a trading idea so that it is testable. We also went on a field trip and came back with a proper formalized hypothesis to test."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "In this tutorial, we will test the hypothesis!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "I highly recommend you do the first and second tutorials in the series before doing this one! The story is carried from one to the next!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 2,
|
||||
"type": "Tutorial Step - The Pipeline",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "dataset-definition"
|
||||
},
|
||||
"text": "We will cover several topics! Let's make a quick list to use as a guide along the way!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "The Trigger Stage with it's three events: Trigger On Event, Trigger Off Event, and Take Position Event."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Basic definitions including what is a Situation, a Condition, and a Formula."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Syntax, or how to write conditions and formulas."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Indicator properties and how to use them."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Open, Manage, and Close Stages basics."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Have you read about these topics? No worries... you will!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 3,
|
||||
"type": "Tutorial Step - Do You Have The Data?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "data-tasks"
|
||||
},
|
||||
"text": "If you didn't do the second tutorial in the series, chances are you are missing the data you need to do this one!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "If you did the second tutorial, you can skip the data mining! If you didn't, then proceed!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The sensor bot will run on the BTC/USDT market (Binance) from January 1st, 2020."
|
||||
},
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "If you have data on this market but on a different time range, this may affect your data! Read the sensor bot documentation to learn how!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 4,
|
||||
"type": "Tutorial Step - Let's Mine Some Data...",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "run"
|
||||
},
|
||||
"text": "Now that you understand the implications of running this data mining operation, let's get on with it!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "If you didn't do the second tutorial in the series, select Run All Project Data Tasks on the Data Tasks node menu!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "If you are doing this tutorial after doing other tutorials, chances are you may already have part of the data required, which may make things faster! Either way, no need to wait for the data mining to get to the present time... you may keep going with the tutorial!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 5,
|
||||
"type": "Tutorial Step - Let's Start With the Basics!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-strategy"
|
||||
},
|
||||
"text": "You define trading strategies following the Superalgos Protocol!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Please, read this page about trading strategies. It is the base of everything we will be discussing!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The last paragraph in the page states that the framework is flexible enough to accept definitions that bend the rigid interpretation of what a position is. In this tutorial, we will focus on a typical by-the-book definition of a strategy, that is, the case for which the framework is optimized. We will cover other cases in other tutorials!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 6,
|
||||
"type": "Tutorial Step - Trading Systems",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "New trading systems are created from the Superalgos Project hierarchy, in particular, from the Other Hierarchies node."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "But... you know what? We'll use one I created already!"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Feel free to add a trading system if you wish, but delete it afterwards, as we are not going to use it!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "I set up a trading system while you weren't watching so that I can reference existing nodes and take you to specific places while we move along this tutorial! Merely for technical reasons, if you must know!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 7,
|
||||
"type": "Tutorial Step - Right Out of the Box!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trading-system"
|
||||
},
|
||||
"text": "This is the trading system we will use, virtually as it comes right out of the box!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "All I've done with it is organize the hierarchy the way I like it, and give it a name: BB Breakdown."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Expand the hierarchy and look around! Notice the Downtrends strategy... Expand each of the nodes corresponding to the four stages, one by one, and take a good look inside!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The nodes you see within each of these stages make up the definitions of a strategy..."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 8,
|
||||
"type": "Tutorial Step - Why Downtrends?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "help"
|
||||
},
|
||||
"text": "If you paid attention to the first tutorial in the series on trading systems, you must know the answer to the above question!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the second tutorial in the series, we came up with two similar hypotheses: one involves trading during uptrends and the second, in downtrends."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Those are two distinct ideas and should be treated as different strategies because they will handle similar logic, but not the same!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "We'll focus in the Downtrend strategy first, because I feel it's the most promising one!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 9,
|
||||
"type": "Tutorial Step - Trigger Stage Events",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trigger-stage"
|
||||
},
|
||||
"text": "In a way, strategies are defined as a collection of events. The events that trigger a Trading Strategy are the first to consider!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the next few steps, we will define the..."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trigger On Event "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trigger Off Event "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Take Position Event "
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "If you haven't yet, please read this page to get up to speed with these concepts!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 10,
|
||||
"type": "Tutorial Step - Trigger On Event",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trigger-on-event"
|
||||
},
|
||||
"text": "The Trigger On Event defines the market Situation in which the strategy shall be triggered."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let's refresh the basic concepts! The triggering of a strategy has two main implications:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "The strategy is selected among other strategies in the trading system and is assigned the capital available for the trading session. This is important because we'll eventually have two strategies in the trading system!"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Once a strategy is triggered, the trading bot starts evaluating the Take Position Event and the Trigger Off Event. When any of those two validate true, the strategy exits the Trigger Stage!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 11,
|
||||
"type": "Tutorial Step - Situations, Conditions, and Formulas in Superalgos",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "situation"
|
||||
},
|
||||
"text": "Before we get to write definitions for the trigger on event, you need to get the basic education on these fundamental topics!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "If you haven't yet, please read this page outlining the concepts of situations, conditions, and formulas. These are the key concepts that make up most definitions in a strategy!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Don't worry about the syntax in the examples. We will get to that soon! If you are not a developer, focus on the simple examples."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 12,
|
||||
"type": "Tutorial Step - Remember the Context?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-trends"
|
||||
},
|
||||
"text": "Now that you understand what conditions and situations are, let's pose a question: how do we define the Trigger On Event?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Because the trigger on event determines which strategy is selected to trade, the definition of the context of our hypothesis should be the main thing to consider!"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "The strategy should trade when there is a downtrend in the 24H time frame."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Our job is to write a set of conditions that mathematically describe the market situation of a downtrend in the 24H chart!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 13,
|
||||
"type": "Tutorial Step - Let's Study the Syntax!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "text"
|
||||
},
|
||||
"text": "The syntax to write conditions and formulas follows a few basic rules that will soon seem obvious!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It may take some time to master the syntax, particularly if you are not a technical person, but experience shows that Superalgos users get used to it while building their first strategy!"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Please, read this page carefully!"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Don't worry if it seems hard to grasp... We'll practice a lot along with this tutorial series!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 14,
|
||||
"type": "Tutorial Step - Reinforce The Learning!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "learning-bot"
|
||||
},
|
||||
"text": "Let's do a quick recap on the matter of the syntax! I'll push this until you learn it!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "FIRST: The time frame! (i.e.: chart.at24hs)"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "SECOND: Each segment of the instruction is separated by dots! (i.e.: like.this)"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "THIRD: Product name and property name are determined by the indicator you are using. No need to memorize them, as you may copy and paste them from the docs when you need them!"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "FOURTH: Compound words in the product and property name are written altogether, with the first word in lowercase and the rest of the words capitalized! (i.e.: forExampleLikeThis)"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 15,
|
||||
"type": "Tutorial Step - We Need Data",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "indicator-process-instance"
|
||||
},
|
||||
"text": "By now, all processes should be at 100%. We need the data to be ready so that we can go and do some work on the charts!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "If you are mining data because you didn't do it in the previous tutorial, look around and see if all processes are at 100%. If all of them are, then stop the data mining!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Wait until all processes reach the 100% mark before continuing!"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Let's go to the charts!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 16,
|
||||
"type": "Tutorial Step - Time to Work the Charts!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trigger-on-event"
|
||||
},
|
||||
"text": "We are going to do some work on the charts, placing the focus on the Trigger On Event!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Bear in mind that the trigger on event on each strategy within a trading system is what determines which of the strategies is going to trade in the current context. In our case, we'll eventually have at least two strategies, and we want each of them to specialize on different trends."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "The first concern is with determining the trend! How to we go about this?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We'll work on something around the Bollinger Bands, as you may imagine!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 17,
|
||||
"type": "Tutorial Step - Determining the Trend",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-trends"
|
||||
},
|
||||
"text": "There are probably as many ways to determine a trend as traders inhabit planet Earth! It's a matter of style and mostly subjective!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We'll take an arbitrary and rather simple approach based on the 20-periods moving average (MA) built in the Bollinger Bands."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Go to the Masters Layer Manager and turn on the Bollinger Channels Objects Layer!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "This indicator derives the direction of the MA and draws a green channel when the MA is going Up and a red channel when it's going Down."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 18,
|
||||
"type": "Tutorial Step - Is That Good Enough?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "help"
|
||||
},
|
||||
"text": "This seems to work well for the reversals of February 25th and April 1st, right?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Pan the chart to the right and check the period between May 24th and July 16th!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The market is clearly moving sideways in a narrowing range, and the indicator switches back and forth between Up and Down directions erratically."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "This is not the ultimate solution to determine the trend!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 19,
|
||||
"type": "Tutorial Step - An Extra Dimension!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-trends"
|
||||
},
|
||||
"text": "Let's try an indicator that brings an additional dimension to the information we are getting from this one!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Turn off the Bollinger Channels Objects layer! Now turn on the Bollinger SubChannels Objects layer!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "There's still a lot of back and forth with the Up and Down directions... but!"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Slide the mouse pointer over the chart and look at the Slope property in the plotter panel of the indicator! Switch it on in case it's off!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 20,
|
||||
"type": "Tutorial Step - Bollinger Subchannels",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-trends"
|
||||
},
|
||||
"text": "The slope provides an indication of how steep the MA curve is... that is, how pronounced is the decline or ascent of the MA!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Read the description of the indicator in the documentation. Then scroll down and get to the Bollinger SubChannels Products & Properties section."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "The kind of information you find on this page is available for every indicator shipping with the system."
|
||||
}
|
||||
]
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 21,
|
||||
"type": "Tutorial Step - Products & Properties",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "record-property"
|
||||
},
|
||||
"text": "This section of the documentation of each indicator features the information you need to use the indicator in conditions and formulas!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The bollingerSubChannel product features three different properties:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "direction: Up, Down"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "period: 1 to n."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "slope: Side, Gentle, Medium, Steep, Extreme."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Read this section carefully so that we can go back to the charts and decide how we are going to use the slope property!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 22,
|
||||
"type": "Tutorial Step - Let's Check Those Slopes",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-trends"
|
||||
},
|
||||
"text": "We will use the slope property of the Bollinger Subchannels indicator to confirm that a trend is a trend!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Slide the pointer of the mouse over different subchannels and notice their reported slope in the plotter panel."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Notice that when the market is trending, the subchannel slope is almost never Side. And that's to be expected, as the Side slope represents the shallower slope possible in the MA. On the other hand, the periods on which the market is ranging, although the direction may go back and forth between Up and Down, the slope is mostly Side."
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 23,
|
||||
"type": "Tutorial Step - We Have Our Conditions!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "condition"
|
||||
},
|
||||
"text": "It seems like we have finally come up with a way to define a downtrend... let's set it up as two conditions!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Condition 1: The direction property of the bollingerSubChannel product is Down in the 24H chart. Put in proper syntax:<br/><br/>chart.at24hs.bollingerSubChannel.direction === 'Down'<br/><br/>"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Condition 2: The slope property of the bollingerSubChannel product is <strong>not</strong> Side in the 24H chart. Put in proper syntax:<br/><br/>chart.at24hs.bollingerSubChannel.slope != 'Side'"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 24,
|
||||
"type": "Tutorial Step - Set Up the First Condition!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "javascript-code"
|
||||
},
|
||||
"text": "I brought you to the definition of the Trigger On Event so that you may set up the first condition!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Paste the condition on the Javascript Code node!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Follow the structure of nodes under the Situation and get to the Javascript Code node under the Condition node. Click Edit on the menu, select and delete the placeholder text, and paste the below condition:<br/><br/>chart.at24hs.bollingerSubChannel.direction === 'Down'<br/><br/><strong>Label the condition node 24H Down to have a quick reference of what the condition is about.</strong>"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 25,
|
||||
"type": "Tutorial Step - Now the Second Condition!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "javascript-code"
|
||||
},
|
||||
"text": "Select Add Condition on the situation's menu and paste the code in the Javascript Code node!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "chart.at24hs.bollingerSubChannel.slope != 'Side'"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Label the condition node 24H Not Side and label the situation as Downtrend to keep things tidy!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "We could have chosen to write the two conditions in one by using the && operator. After all, we want the Trigger On Event to validate true when both conditions are true, right? I'll tell you why that is not a good idea in the next step!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 26,
|
||||
"type": "Tutorial Step - Never Forget Granularity!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "situation"
|
||||
},
|
||||
"text": "Superalgos strives to keep things simple, and so should you, as it is the best way to handle mounting complexity!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Conditions should be as granular as possible because:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "It makes it easier to debug the syntax: when you pile up logic in a single condition, it's hard to find bugs you may have introduced."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "It makes it easier to debug the strategy: if you keep logic segregated in different conditions, you will then be able to see precisely what part of the logic validates true or false."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "It makes the strategy easier to maintain and upgrade: granular conditions make everything easier to undertand and follow."
|
||||
}
|
||||
]
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 27,
|
||||
"type": "Tutorial Step - Trigger Off Event",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trigger-off-event"
|
||||
},
|
||||
"text": "Now that we have defined when the strategy should be triggered on, let's consider when the idea should be invalidated."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Well... this is a bit of a no-brainer right? We don't want to trade with this strategy when there is no downtrend. So, we'll reverse the logic of the trigger on event!"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Condition 1: chart.at24hs.bollingerSubChannel.direction === 'Up'"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Condition 2: chart.at24hs.bollingerSubChannel.slope === 'Side'"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We should trigger off the stategy when either of these conditions validate true. How?"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 28,
|
||||
"type": "Tutorial Step - The Workings of Situations",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "situation"
|
||||
},
|
||||
"text": "This is a key concept that you must understand so that you may organize logic in the proper manner!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "A situation validates true when all conditions within validate true. Think of this as if conditions within a situation were bound by the && (and) operator. If all of them are true at the same time, then the situation is true as well."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "An event validates true when either of the situations within validates true. It is as if situations within an event were bound by the || (or) operator! If any of the situations is true at a certain point in time, then the event is triggered!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Can you figure out how to set up this definition?"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 29,
|
||||
"type": "Tutorial Step - Separate Situations!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "situation"
|
||||
},
|
||||
"text": "Think of it in this way: we have identified two different market situations that would invalidate this idea!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We will set up each of the conditions in separate situations!"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Set up the first condition in the existing situation, and the second condition in a new situation!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "<strong>Condition 1:</strong><br/>chart.at24hs.bollingerSubChannel.direction === 'Up'<br/><strong>Condition 2:</strong><br/>chart.at24hs.bollingerSubChannel.slope === 'Side'"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 30,
|
||||
"type": "Tutorial Step - Keep the Definitions Tidy!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "situation-name"
|
||||
},
|
||||
"text": "Try to keep up with the good practice of giving relevant names or labels to the nodes holding definitions!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Consider that the strategy will grow in complexity as we advance! It's good to be able to identify conditions and situations without checking the code!"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "You'll also be able to identify which situation triggered the event directly from the charts!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You may label the first situation and the first condition with the same name, 24H Up, and the second with the following: 24H Side."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 31,
|
||||
"type": "Tutorial Step - First Backtest...",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "backtesting-session"
|
||||
},
|
||||
"text": "Now that we have these basic definitions in place, we may do a first backtest."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We are not ready to the test the idea as we've only defined the trigger on and trigger off events. We just want to make sure we got the definitions right."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Although the strategy will eventually include logic relating to the 1H chart, the current definitions involve the 24H chart only."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We are going to run a backtesting session between January 1st and October 1st, 2020, on the 24H time frame. Take a look at the Time Range and Time Frame parameters and make sure they match the above!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 32,
|
||||
"type": "Tutorial Step - A Bit About Backtesting!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "backtesting-session"
|
||||
},
|
||||
"text": "Before we get to run this first backtest, I need to acknowledge something of great importance!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Backtesting is a science in and of itself! There are entire books written on backtesting alone. It is a deep and complex subject mainly because humans designing and testing strategies are prone to introducing biases that may lead to overfitting, that is, adjusting the rules of the trading system to fit the data set in the quest to get good backtesting results. Superalgos offers tools to flexibly handle the data set to avoid spoiling it, like the time range parameter that allows splitting the data set as required, or setting up and running multiple sessions in parallel. That said, we are not going to cover the topic in this tutorial! The current focus is on creating the definitions of a trading idea, not backtesting per se."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 33,
|
||||
"type": "Tutorial Step - Let's Do This...",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "task"
|
||||
},
|
||||
"text": "This is going to be quick as we are testing a few months on the 24H time frame."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Remember that running a trading task is similar to running a data task. The difference is that after running the task you also need to run the trading session."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Select Run on the Task menu and then select Run on the Backtesting Session menu."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "When the progress notice of the Trading Process Instance get's to the 100% mark, stop the task and click Next."
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 34,
|
||||
"type": "Tutorial Step - Let's See What We've Got!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "trigger-stage"
|
||||
},
|
||||
"text": "We are going to go through the simulation and see if the definition we came up with has the expected results!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Go to the Simulation Objects layer manager and turn on the Strategies and Trigger Stages layers."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Do you see the two instances of strategies triggered between February 26th and April 2nd? Now, pan the charts to the right... You should see another two triggered between September 3rd - 23rd! The following step features a video of what you should see on the screen, just to make sure we're on the same page!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 35,
|
||||
"type": "Tutorial Step - Trading Systems Trigger Stage Test",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos"
|
||||
},
|
||||
"text": "This step will play a video in full screen mode."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Tutorials/trading-systems-trigger-stage-test.gif"
|
||||
}
|
||||
]
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 36,
|
||||
"type": "Tutorial Step - Can't See What's Expected?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bullet-error"
|
||||
},
|
||||
"text": "If you can't see what I showed in the video, chances are you skipped one or more of my previous instructions!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "I will cover some troubleshooting tactics later on, but for the time being, the solution is to go back in the tutorial and make sure you did everything I told you to do!"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Did you turn on the right layers? "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Did you run the backtest? "
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Did you set up the definitions as instructed? "
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Go backwards in the tutorial, step by step, and make sure you didn't skip any steps!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 37,
|
||||
"type": "Tutorial Step - Visual Verification",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bot-data-dependencies"
|
||||
},
|
||||
"text": "Let's do a quick visual check on the simulation to understand if the strategy was triggered on and off as expected!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Make sure the Bollinger SubChannels Object layer is on along with the layer's panel!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Place the mouse pointer on the Feb 25th candle. This is the first candle that closed with the MA going down. You can tell by the red color of the subchannel, and also looking at the direction property in the panel. However, the slope on this candle is Side, and that is the reason why the strategy wasn't triggered on the 25th. Remember, the conditions are that the direction should be Down and the slope should be different than Side."
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 38,
|
||||
"type": "Tutorial Step - Look at the 26th!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bot-data-dependencies"
|
||||
},
|
||||
"text": "Let's shift the mouse pointer to the next candle, on February 26th!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "On the 26th the direction is Down and the slope is Gentle. Both conditions are met, so the strategy is triggered as soon as the candle closes."
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Remember, each candle is evaluated only after it has closed! Every property of every product of every indicator refers to closed candles! This is crucial information, in particular when you are working with multiple time frames. I'll expand on this later on, but keep it in mind at all times!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 39,
|
||||
"type": "Tutorial Step - Keep Looking!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bot-data-dependencies"
|
||||
},
|
||||
"text": "This visual check helps you mentally connect the dots of what you see on a simulation with the definitions you produce!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Take a few more minutes to explore the trigger off event of the strategy, as well as the rest of the triggers ocurring over the period tested."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Take a moment to internalize the fact that events are triggered only once all the conditions in a given situation are met, and that conditions are evaluated over closed candles only!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 40,
|
||||
"type": "Tutorial Step - Troubleshooting 101",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bullet-error"
|
||||
},
|
||||
"text": "Whenever you are working on and testing definitions in a trading system, you should be in troubleshooting mode!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "There are so many things involved in running a trading session that errors may occur for a wide assortment of reasons. The trading bot evaluates the definitions in the trading system and applies them by evaluating the data sets referenced in the definitions."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Errors in the data or the definitions are common."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It's not likely that a data set is calculated with errors. However, if you haven't calculated the data set by running the corresponding data task, you will get errors!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 41,
|
||||
"type": "Tutorial Step - Let's Hunt For Errors!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bullet-error"
|
||||
},
|
||||
"text": "Even when you are getting the results you expect, you may still have errors lurking around!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Some errors may be innocuous, and some may have hard-to-notice consequences."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Go to the Trading System layer manager and turn on the Trading System Errors layer!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Pan the charts to the left until you get to the first days of January. Do you see the error bullets at the bottom?"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Feel free to turn off some layers if needed."
|
||||
}
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 42,
|
||||
"type": "Tutorial Step - Errors & Time",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bullet-error"
|
||||
},
|
||||
"text": "Errors are always tied to a specific point in time, that is, to a specific candle!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When the Trading Bot runs a trading session, it applies the definitions in the trading system candle by candle, one at a time. The bot doesn't know what lies ahead... it only knows the current candle, that is, the candle that is being evaluated."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "When an error occurs, it is handled by the trading bot, and the error is saved with the timestamp of the candle where it happened. This is how you get to know exactly what errors happened when."
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 43,
|
||||
"type": "Tutorial Step - Errors & Nodes",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bullet-error"
|
||||
},
|
||||
"text": "When errors happen due to definitions in the trading system, that is where you will find the corresponding error messages!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Trading System Errors layer interacts with the design space so that you may track and find error messages. Messages are tied to the node responsible for producing the error!"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Place the mouse pointer over one of the error bullets in the charting space and use the design space map to find the source of the red circle."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The video next shows what I found!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 44,
|
||||
"type": "Tutorial Step - Trading Systems Tracking Errors",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos"
|
||||
},
|
||||
"text": "This step will play a video in full screen mode."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Tutorials/trading-systems-tracking-errors.gif"
|
||||
}
|
||||
]
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 45,
|
||||
"type": "Tutorial Step - Deciphering Errors",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bullet-error"
|
||||
},
|
||||
"text": "Can not read property 'direction' of undefined. What is that all about?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is the proper procedure to unpack an error message and understand what it is about:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "You know when the error happened. Keep that in mind, as the error is solely related to the candle where it happened!"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "You know which node caused the error. It is likely the definition in the node that caused the error, either due to the code in the associated Javascript Node (if it's a condition), the formula (if it's a Formula node), or the node's configuration."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "You know the error message. Read it carefully and make the connection with the two previous clues!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 46,
|
||||
"type": "Tutorial Step - Let's Unpack This Error",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "bullet-error"
|
||||
},
|
||||
"text": "The error is associated with one of our conditions, so we must check the Javascript Code we used!"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is the code in our condition:<br/>chart.at24hs.bollingerSubChannel.direction === 'Down'"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "The error says that the direction property of an object that is 'undefined' cannot be read."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The object the error refers to is the bollingerSubChannel product. That object is 'undefined'. Why? There is one last piece to fit in the puzzle: the error happens at the beginning of the data set. Do you see the problem?"
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"tutorial": "3. Testing a Trading Idea - The Trigger Stage",
|
||||
"pageNumber": 47,
|
||||
"type": "Tutorial Step - Counting Candles!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "layer-candles"
|
||||
},
|
||||
"text": "Take a good look at the first few candles in the data set. Do you see anything unusual?"
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "The Bollinger SubChannels does not exist for the first 19 candles! Hence, the object is undefined!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The indicator derives from the Bollinger Bands, and the bands require at least 20 periods of historic data to be calculated. That is why it's undefined for 19 candles."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "If we want to test a certain time range, we must make sure that all indicators we use in our trading system are calculated for the full range!"
|
||||
}
|
||||
]
|
||||
}
|
||||
Loaded 100 of 384 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user