No files matched your search
@@ -0,0 +1,15 @@
|
||||
Data-Storage
|
||||
Log-Files
|
||||
My-Workspaces
|
||||
debug.log
|
||||
|
||||
*.db
|
||||
|
||||
.git*
|
||||
.vscode
|
||||
README.md
|
||||
LICENSE
|
||||
CONTRIBUITING.md
|
||||
CODE_OF_CONDUCT.md
|
||||
./**/.vscode
|
||||
Dockerfile
|
||||
@@ -0,0 +1,38 @@
|
||||
name: Publish Docker image
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master, develop]
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
name: Publish Image
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- id: repository
|
||||
uses: ASzc/change-string-case-action@v1
|
||||
with:
|
||||
string: "${{ github.repository }}/${{ github.event.repository.name }}"
|
||||
- uses: actions/checkout@v2
|
||||
- name: Preparation
|
||||
id: prep
|
||||
run: |
|
||||
REGISTRY="ghcr.io"
|
||||
IMAGE="${REGISTRY}/${{ steps.repository.outputs.lowercase }}"
|
||||
TAGS="${IMAGE}:${{ github.sha }}"
|
||||
if [[ $GITHUB_REF == ref/head/master ]]; then
|
||||
TAGS="${TAGS},${IMAGE}:latest"
|
||||
fi
|
||||
echo ::set-output name=tags::${TAGS}
|
||||
- name: Login in to registry
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ github.token }}
|
||||
- name: Push to registry
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
push: true
|
||||
file: ./Docker/Dockerfile
|
||||
tags: ${{ steps.prep.outputs.tags }}
|
||||
@@ -56,7 +56,7 @@
|
||||
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">forever free</span> and <span class="credits-red">open-source</span>, and it's
|
||||
<p>Superalgos is <span class="credits-red">open source</span> and <span class="credits-red">free</span>, for <span class="credits-red">everyone</span>, <span class="credits-red">forever</span>, and it's
|
||||
<span class="credits-red">relentlessly improving</span> thanks to the involvement of contributors:</p>
|
||||
<p>Luis Fernando Molina, Julian Molina, Andreja Cobeljic, Matías Benitez, Ira Miller, Eduardo Remis,
|
||||
Jeff Braun, rico4dev, 9808us, Barry Low, Nikola Bjelogrlic, Hirajin Koizuko, Francisco J. Santillán, Norman,
|
||||
@@ -203,4 +203,4 @@
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
||||
@@ -257,6 +257,9 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
|
||||
webhookMessages = []
|
||||
}
|
||||
|
||||
console.log('[INFO] httpInterface -> Webhook -> Fetch-Messages -> Exchange-Market = ' + exchange + '-' + market)
|
||||
console.log('[INFO] httpInterface -> Webhook -> Fetch-Messages -> Messeges Fetched by Webhooks Sensor Bot = ' + webhookMessages.length)
|
||||
|
||||
respondWithContent(JSON.stringify(webhookMessages), httpResponse)
|
||||
webhookMessages = []
|
||||
|
||||
@@ -299,6 +302,9 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
|
||||
webhookMessages.push([timestamp, source, messageReceived])
|
||||
webhook.set(key, webhookMessages)
|
||||
|
||||
console.log('[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = ' + exchange + '-' + market)
|
||||
console.log('[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = ' + messageReceived)
|
||||
console.log('[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = ' + webhookMessages.length)
|
||||
respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), httpResponse)
|
||||
}
|
||||
break
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
FROM node:15-alpine
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
RUN adduser --disabled-password --no-create-home superalgos
|
||||
RUN chown -R superalgos:superalgos /app
|
||||
USER superalgos
|
||||
EXPOSE 34248
|
||||
EXPOSE 18041
|
||||
ENTRYPOINT ["node", "run", "noBrowser"]
|
||||
@@ -0,0 +1,16 @@
|
||||
version: "3"
|
||||
services:
|
||||
superalgos:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: ./Docker/Dockerfile
|
||||
image: superalgos
|
||||
command: ["minMemo"]
|
||||
ports:
|
||||
- '34248:34248'
|
||||
- '18041:18041'
|
||||
volumes:
|
||||
- ../Data-Storage:/app/Data-Storage
|
||||
- ../Log-Files:/app/Log-Files
|
||||
- ../My-Workspaces:/app/My-Workspaces
|
||||
restart: on-failure
|
||||
|
Before Width: | Height: | Size: 3.5 MiB After Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 489 KiB After Width: | Height: | Size: 666 KiB |
|
Before Width: | Height: | Size: 602 KiB After Width: | Height: | Size: 371 KiB |
|
Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 864 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-703 270 512 512" style="enable-background:new -703 270 512 512;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#0295AA;}
|
||||
.st1{fill:#365558;}
|
||||
.st2{fill:none;stroke:#FFFFFF;stroke-width:13;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
|
||||
.st3{fill:#F0353D;}
|
||||
.st4{fill:#FD6A33;}
|
||||
.st5{fill:#FF8C29;}
|
||||
.st6{fill:#FFD1A9;}
|
||||
.st7{fill:#4ACFD9;}
|
||||
.st8{fill:#9BAAAB;}
|
||||
.st9{fill:#CDD4D5;}
|
||||
.st10{fill:#E6EAEA;}
|
||||
.st11{fill:#FFFFFF;}
|
||||
.st12{fill:#BCD643;}
|
||||
</style>
|
||||
<path class="st0" d="M-227.5,270H-447v512h219.5c20.1,0,36.5-16.4,36.5-36.5v-439C-191,286.4-207.4,270-227.5,270z"/>
|
||||
<path class="st1" d="M-666.5,270c-20.1,0-36.5,16.4-36.5,36.5v439c0,20.1,16.4,36.5,36.5,36.5H-447V270H-666.5z"/>
|
||||
<g>
|
||||
<path class="st2" d="M-664,477.4c0,0,0,22,0,50.1c0,28.1,17.7,44.9,31.5,44.9s32.4,0,32.4,0"/>
|
||||
<path class="st2" d="M-479.2,477.4c0,0,0,11.7,0,47.5s-20.3,49.7-40.6,49.7c-20.3,0-40.6-13.8-40.6-49.7s0-47.5,0-47.5"/>
|
||||
<path class="st2" d="M-351.4,574.6c0,0,0-11.7,0-47.5s-20.3-49.7-40.6-49.7c-20.3,0-40.6,13.8-40.6,49.7s0,47.5,0,47.5"/>
|
||||
<circle class="st2" cx="-258.5" cy="526" r="48.5"/>
|
||||
</g>
|
||||
<rect x="-1330.3" y="270" class="st3" width="128" height="128"/>
|
||||
<rect x="-1202.3" y="270" class="st4" width="128" height="128"/>
|
||||
<rect x="-1074.3" y="270" class="st5" width="128" height="128"/>
|
||||
<rect x="-946.3" y="270" class="st6" width="128" height="128"/>
|
||||
<rect x="-1330.3" y="398" class="st1" width="128" height="128"/>
|
||||
<rect x="-1202.3" y="398" class="st0" width="128" height="128"/>
|
||||
<rect x="-1074.3" y="398" class="st7" width="128" height="128"/>
|
||||
<rect x="-1330.3" y="526" class="st8" width="128" height="128"/>
|
||||
<rect x="-1202.3" y="526" class="st9" width="128" height="128"/>
|
||||
<rect x="-1074.3" y="526" class="st10" width="128" height="128"/>
|
||||
<rect x="-946.3" y="526" class="st11" width="128" height="128"/>
|
||||
<rect x="-1330.3" y="654" class="st12" width="128" height="128"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-703 270 512 512" style="enable-background:new -703 270 512 512;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{clip-path:url(#SVGID_2_);}
|
||||
.st1{fill:#007640;}
|
||||
.st2{fill:#FFFFFF;}
|
||||
.st3{fill:#002A8A;}
|
||||
.st4{fill:#D42422;}
|
||||
.st5{fill:#FCB612;}
|
||||
</style>
|
||||
<g>
|
||||
<defs>
|
||||
<circle id="SVGID_1_" cx="-447" cy="526" r="256"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g id="XMLID_1174_" class="st0">
|
||||
<rect id="XMLID_1181_" x="-741.4" y="270" class="st1" width="768" height="512"/>
|
||||
<polygon id="XMLID_1180_" class="st2" points="-649.2,782 -342,577.2 26.6,577.2 26.6,782 "/>
|
||||
<polygon id="XMLID_1179_" class="st2" points="-649.2,270 -342,474.8 26.6,474.8 26.6,270 "/>
|
||||
<polygon id="XMLID_1178_" class="st3" points="-587.8,782 -331.8,611.3 26.6,611.3 26.6,782 "/>
|
||||
<polygon id="XMLID_1177_" class="st4" points="-587.8,270 -331.8,440.7 26.6,440.7 26.6,270 "/>
|
||||
<polygon id="XMLID_1176_" class="st5" points="-741.4,720.6 -741.4,331.4 -449.6,526 "/>
|
||||
<polygon id="XMLID_1175_" points="-741.4,679.6 -741.4,372.4 -511,526 "/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1 @@
|
||||
{"type":"Data Mine","name":"Omega","config":"{\n \"codeName\": \"Omega\"\n}","project":"Superalgos","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"ARPS Fast","config":"{\n \"codeName\": \"ARPS-Fast\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\"\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market ARPS Fast","project":"Superalgos","id":"d3431f91-842e-459b-b969-e93269ab06ee","savedPayload":{"position":{"x":17451.72948123781,"y":40729.60591487127},"targetPosition":{"x":17509.963766385878,"y":40946.93922578631},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"5132afea-630c-455f-be7c-8d94469a239d"}}}],"outputDatasetFolders":[],"id":"81ac5c2c-7766-44ed-8e84-94b42ffbf7ab","savedPayload":{"position":{"x":17509.963766385878,"y":40946.93922578631},"targetPosition":{"x":17568.198051533946,"y":41164.27253670135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"ARPS Fast Multi-Period-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"dc491dd3-55ba-40ac-8f8e-0dd6d8e8e877","savedPayload":{"position":{"x":17570.18233668201,"y":40849.511367860556},"targetPosition":{"x":17626.43233668201,"y":40946.93922578631},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"5a92a4fb-51ab-4ac6-9e6c-834767b542b4"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"95097e44-2b3c-4368-84ad-73f5d6ca1d89","savedPayload":{"position":{"x":17655.549479256046,"y":40838.27257032879},"targetPosition":{"x":17626.43233668201,"y":40946.93922578631},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"0538007e-1eb0-4208-b848-4f7ff62588fa","savedPayload":{"position":{"x":17723.86019460776,"y":40890.68922578631},"targetPosition":{"x":17626.43233668201,"y":40946.93922578631},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"84ef19f0-4c0b-4cec-844c-e4b7b1758f64","savedPayload":{"position":{"x":17626.43233668201,"y":40946.93922578631},"targetPosition":{"x":17568.198051533946,"y":41164.27253670135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"5a92a4fb-51ab-4ac6-9e6c-834767b542b4","savedPayload":{"position":{"x":17886.39610306789,"y":40846.0744851674},"targetPosition":{"x":17568.198051533946,"y":41164.27253670135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"301b012f-4e33-4549-89c3-90bf2f992458","savedPayload":{"position":{"x":17785.531362448986,"y":41106.038251553284},"targetPosition":{"x":17568.198051533946,"y":41164.27253670135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"e226b09c-b34e-493e-a9cb-c6562faa8ad2","saLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Learning Engine","name":"Low-Frequency","project":"Superalgos","learningCurrent":{"type":"Learning Current","name":"New Learning Current","project":"Superalgos","learningEpisode":{"type":"Learning Episode","name":"New Learning Episode","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2cc4ea2e-0c49-4dc4-be14-5c37dba3d4a3","savedPayload":{"position":{"x":11825.790644907258,"y":10354.089002683215},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"5e87e4cf-d3cf-4ca3-90d0-bcc215ff32df","savedPayload":{"position":{"x":11910.207544564291,"y":10379.69658923459},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7073b390-c791-428b-b75d-11d7bef076ee","savedPayload":{"position":{"x":11988.006604858821,"y":10421.281053328523},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f5dc8eea-94d7-41d7-9c44-3b044fa5cbb7","savedPayload":{"position":{"x":12056.198051533946,"y":10477.244327330722},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f36a352e-9711-490f-9020-84bf3731f93c","savedPayload":{"position":{"x":12112.161325536144,"y":10545.435774005848},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0cd1e3ea-f314-4777-9988-bbde66dd2688","savedPayload":{"position":{"x":12153.745789630078,"y":10623.23483430038},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"1961b061-f041-494f-8c47-004c672c23f3","savedPayload":{"position":{"x":12179.353376181454,"y":10707.651733957411},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"9ffc4653-3d13-4036-b8aa-98e34ea6e497","savedPayload":{"position":{"x":12188,"y":10795.442378864669},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"headOfTheMarket":{"type":"Head Of The Market","name":"New Head Of The Market","config":"{\n\"initialValue\": false\n}","project":"Superalgos","id":"dc3294b4-3754-4154-808a-6531410f6378","savedPayload":{"position":{"x":12179.353376181454,"y":10883.233023771927},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"processDate":{"type":"Process Date","name":"New Process Date","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a009dbfb-9fce-4787-9461-dc63cb0cdf03","savedPayload":{"position":{"x":12153.745789630078,"y":10967.649923428959},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"learningEpisodeCounters":{"type":"Learning Episode Counters","name":"New Learning Episode Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"74d652d9-7439-4a8f-a66e-588f1cb24686","savedPayload":{"position":{"x":10975.784040048437,"y":12210.957080582268},"targetPositLine truncated
|
||||
{"type":"Learning Engine","name":"Low-Frequency","project":"Superalgos","learningCurrent":{"type":"Learning Current","name":"New Learning Current","project":"Superalgos","learningEpisode":{"type":"Learning Episode","name":"New Learning Episode","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2cc4ea2e-0c49-4dc4-be14-5c37dba3d4a3","savedPayload":{"position":{"x":11825.790644907258,"y":10354.089002683215},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"5e87e4cf-d3cf-4ca3-90d0-bcc215ff32df","savedPayload":{"position":{"x":11910.207544564291,"y":10379.69658923459},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7073b390-c791-428b-b75d-11d7bef076ee","savedPayload":{"position":{"x":11988.006604858821,"y":10421.281053328523},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f5dc8eea-94d7-41d7-9c44-3b044fa5cbb7","savedPayload":{"position":{"x":12056.198051533946,"y":10477.244327330722},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f36a352e-9711-490f-9020-84bf3731f93c","savedPayload":{"position":{"x":12112.161325536144,"y":10545.435774005848},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0cd1e3ea-f314-4777-9988-bbde66dd2688","savedPayload":{"position":{"x":12153.745789630078,"y":10623.23483430038},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"1961b061-f041-494f-8c47-004c672c23f3","savedPayload":{"position":{"x":12179.353376181454,"y":10707.651733957411},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"9ffc4653-3d13-4036-b8aa-98e34ea6e497","savedPayload":{"position":{"x":12188,"y":10795.442378864669},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"headOfTheMarket":{"type":"Head Of The Market","name":"New Head Of The Market","config":"{\n\"initialValue\": false\n}","project":"Superalgos","id":"dc3294b4-3754-4154-808a-6531410f6378","savedPayload":{"position":{"x":12179.353376181454,"y":10883.233023771927},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"processDate":{"type":"Process Date","name":"New Process Date","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a009dbfb-9fce-4787-9461-dc63cb0cdf03","savedPayload":{"position":{"x":12153.745789630078,"y":10967.649923428959},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"learningEpisodeCounters":{"type":"Learning Episode Counters","name":"New Learning Episode Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"74d652d9-7439-4a8f-a66e-588f1cb24686","savedPayload":{"position":{"x":10975.784040048437,"y":12210.957080582268},"targetPositLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Learning Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","learningBots":[{"type":"Learning Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Learning","config":"{\n \"codeName\": \"Learning\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Learning-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Learning Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Learning Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Learning Episode Counters","project":"Superalgos","id":"c0de6b69-60e2-4574-890a-35743f75c569","savedPayload":{"position":{"x":10770.578330127608,"y":18237.318563914418},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"ac1bc967-9c9f-47f0-8815-535abd7cb777"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Learning Episode Counters","project":"Superalgos","id":"da23a8ff-8b3d-4caa-a27c-f59352911212","savedPayload":{"position":{"x":10647.18050284652,"y":18202.991870096994},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"6881069e-a4d1-4b41-892f-557d2031adea"}}},{"type":"Output Dataset","name":"Multi-Period-Market Learning Episode Statistics","project":"Superalgos","id":"dfdcb71e-c123-429e-bc2d-cf33963378d6","savedPayload":{"position":{"x":10538.452101828116,"y":18135.29046318318},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"8408c316-e04d-4b0d-8c81-1bf3b4126894"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Learning Episode Statistics","project":"Superalgos","id":"fa9e000d-199c-4ed4-b10f-6c586bfc2fa5","savedPayload":{"position":{"x":10453.201655490207,"y":18039.69910852537},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"553a0b49-2a61-41c4-ac95-f762051c1cab"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"a9a7b1fe-ecff-4d08-bd3b-297e4263c703","savedPayload":{"position":{"x":10398.335647991167,"y":17923.962049174253},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"a08a3974-75ac-4a2b-bc09-f80547a61381"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"d80bea92-bca6-4826-aa32-34bc7c13f952","savedPayload":{"position":{"x":10378.298996957856,"y":17797.455613363665},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"46221186-fff7-4333-a087-a32a649e9ce8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Distance To Learning Event","project":"Superalgos","id":"0b8ef0c4-c7a9-48cf-9f9b-e48d32f5ed27","savedPayload":{"position":{"x":10394.71495269444,"y":17670.42860016024},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"0d746a41-6726-41fd-9312-862b6835b8ba"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Distance To Learning Event","project":"Superalgos","id":"a8951035-4bf1-4d0d-8666-879b2c481b6d","savedPayload":{"position":{"x":10446.25359209659,"y":17553.171982714983},"targetPosition":{"x":10828.2531163121,"y":177Line truncated
|
||||
{"type":"Learning Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","learningBots":[{"type":"Learning Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Learning","config":"{\n \"codeName\": \"Learning\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Learning-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Learning Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Learning Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Learning Episode Counters","project":"Superalgos","id":"c0de6b69-60e2-4574-890a-35743f75c569","savedPayload":{"position":{"x":10770.578330127608,"y":18237.318563914418},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"ac1bc967-9c9f-47f0-8815-535abd7cb777"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Learning Episode Counters","project":"Superalgos","id":"da23a8ff-8b3d-4caa-a27c-f59352911212","savedPayload":{"position":{"x":10647.18050284652,"y":18202.991870096994},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"6881069e-a4d1-4b41-892f-557d2031adea"}}},{"type":"Output Dataset","name":"Multi-Period-Market Learning Episode Statistics","project":"Superalgos","id":"dfdcb71e-c123-429e-bc2d-cf33963378d6","savedPayload":{"position":{"x":10538.452101828116,"y":18135.29046318318},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"8408c316-e04d-4b0d-8c81-1bf3b4126894"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Learning Episode Statistics","project":"Superalgos","id":"fa9e000d-199c-4ed4-b10f-6c586bfc2fa5","savedPayload":{"position":{"x":10453.201655490207,"y":18039.69910852537},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"553a0b49-2a61-41c4-ac95-f762051c1cab"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"a9a7b1fe-ecff-4d08-bd3b-297e4263c703","savedPayload":{"position":{"x":10398.335647991167,"y":17923.962049174253},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"a08a3974-75ac-4a2b-bc09-f80547a61381"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"d80bea92-bca6-4826-aa32-34bc7c13f952","savedPayload":{"position":{"x":10378.298996957856,"y":17797.455613363665},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"46221186-fff7-4333-a087-a32a649e9ce8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Distance To Learning Event","project":"Superalgos","id":"0b8ef0c4-c7a9-48cf-9f9b-e48d32f5ed27","savedPayload":{"position":{"x":10394.71495269444,"y":17670.42860016024},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"0d746a41-6726-41fd-9312-862b6835b8ba"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Distance To Learning Event","project":"Superalgos","id":"a8951035-4bf1-4d0d-8666-879b2c481b6d","savedPayload":{"position":{"x":10446.25359209659,"y":17553.171982714983},"targetPosition":{"x":10828.2531163121,"y":177Line truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Trading Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","tradingBots":[{"type":"Trading Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Trading","config":"{\n \"codeName\": \"Trading\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Trading-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Trading Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Trading Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Trading Episode Counters","project":"Superalgos","id":"739cf676-5ff9-4626-81bd-266b8e662ea7","savedPayload":{"position":{"x":24910.97457254189,"y":18457.46644293786},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"a57b7080-2b86-418d-88dc-8d8418f361e2"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading Episode Counters","project":"Superalgos","id":"a110cc47-5839-41a6-9022-20e1037db0b2","savedPayload":{"position":{"x":24834.601232363748,"y":18490.07023931273},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f66581e7-4401-4fa9-8f75-daeaa38c3365"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trading Episode Statistics","project":"Superalgos","id":"f175eae3-26fb-4f08-8b05-7b2679e9bc42","savedPayload":{"position":{"x":24753.53736157276,"y":18508.085329665024},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"0f4ae6fe-d330-42f4-b122-647372d738b4"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading Episode Statistics","project":"Superalgos","id":"4ea61d21-9c12-45b5-b3bf-7762ab7da3cb","savedPayload":{"position":{"x":24670.543493063306,"y":18510.89823169951},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"3eec72c3-2256-4270-8cf2-880e814d057f"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"b8876bc6-93f3-43b8-8b53-58fbe3f8ff54","savedPayload":{"position":{"x":24588.445883487308,"y":18498.413155411115},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"6cd81e99-8c92-4b63-975d-cbffeff47a06"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"06abb837-6c4d-4a62-b778-97039970816c","savedPayload":{"position":{"x":24510.040268473647,"y":18471.05526509864},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"ec83880d-bc04-4a7b-9fa4-9dd1759296ab"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Balances","project":"Superalgos","id":"2fa552d7-66bf-4750-ade4-2cab1f3178b3","savedPayload":{"position":{"x":24437.996657204443,"y":18429.756200904503},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"8cca405e-2e5a-4528-ae0d-a17777b67dd1"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Balances","project":"Superalgos","id":"6faa2af4-f239-4668-a0c4-5e2932c045af","savedPayload":{"position":{"x":24374.76840845468,"y":18375.922352927064},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"Line truncated
|
||||
{"type":"Trading Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","tradingBots":[{"type":"Trading Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Trading","config":"{\n \"codeName\": \"Trading\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Trading-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Trading Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Trading Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Trading Episode Counters","project":"Superalgos","id":"ec8d74ba-a4ad-417a-b479-6bae95b8a1fe","savedPayload":{"position":{"x":24910.97457254189,"y":18457.46644293786},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"3ed03a02-381d-43fe-9faa-761728c53bd8"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading Episode Counters","project":"Superalgos","id":"22b0af33-8c2f-4194-839b-affd18f298d5","savedPayload":{"position":{"x":24834.601232363748,"y":18490.07023931273},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"15f5b150-f1cf-403c-8cb9-2c7c4e1db8e8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trading Episode Statistics","project":"Superalgos","id":"23ab91ae-2e78-4993-bb69-855f69cef1ce","savedPayload":{"position":{"x":24753.53736157276,"y":18508.085329665024},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"fc9dc0f7-35e0-4548-bb91-f920825d694f"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading Episode Statistics","project":"Superalgos","id":"d0a4515a-279d-4c27-8de2-168108861242","savedPayload":{"position":{"x":24670.543493063306,"y":18510.89823169951},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"91953362-8751-4440-a898-21245cd47c15"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"7fc80977-5b37-413e-8107-0a89a16e08b0","savedPayload":{"position":{"x":24588.445883487308,"y":18498.413155411115},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"17fb41f5-61b5-4433-9a10-950ff8216a7e"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"a6888750-1043-420c-9253-633e1399c5e4","savedPayload":{"position":{"x":24510.040268473647,"y":18471.05526509864},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"bbc9467d-28bf-432b-9e49-582d1bcabfb9"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Balances","project":"Superalgos","id":"0ad114df-f076-4a86-8c62-4c4a146da73c","savedPayload":{"position":{"x":24437.996657204443,"y":18429.756200904503},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"acddff59-b51b-4b45-b58f-71d4077755ee"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Balances","project":"Superalgos","id":"04b51302-957d-4365-ad55-9f89d60e261c","savedPayload":{"position":{"x":24374.76840845468,"y":18375.922352927064},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"Line truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Trading System","name":"Lightning Strike","config":"{ \n\"codeName\": \"Lightning Strike\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"My Trading Strategy","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Inmediate Trigger On","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"e2ea7ded-2be1-43a3-a7fa-de3d9b8eeec4","savedPayload":{"position":{"x":29614.345537114667,"y":29686.264363248512},"targetPosition":{"x":30059.096259318965,"y":29912.85964671243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e693623c-e11f-49e3-99da-1897c7a47563","savedPayload":{"position":{"x":30059.096259318965,"y":29912.85964671243},"targetPosition":{"x":30503.948096117412,"y":30139.527093006473},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9135663f-deeb-4b3f-8855-91750810a406","savedPayload":{"position":{"x":30503.948096117412,"y":30139.527093006473},"targetPosition":{"x":30949.606420886405,"y":30366.48888962723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"05f2f6b7-15ab-4386-a299-91a949de634e","savedPayload":{"position":{"x":30949.606420886405,"y":30366.48888962723},"targetPosition":{"x":31395.222935590078,"y":30593.406010951592},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"Never Trigger Off","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Above MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"false","project":"Superalgos","id":"0eb59e3b-ccc8-4eab-a1f2-a7c8dea28949","savedPayload":{"position":{"x":30777.836612408217,"y":28692.647426362768},"targetPosition":{"x":30932.059454816794,"y":29167.31041310742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31ab47dd-fe2d-47ac-9a77-08ec8beee068","savedPayload":{"position":{"x":30932.059454816794,"y":29167.31041310742},"targetPosition":{"x":31086.31006690743,"y":29642.1636542021},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fa93a965-e836-42b3-9784-79acda1468dd","savedPayload":{"position":{"x":31086.31006690743,"y":29642.1636542021},"targetPosition":{"x":31240.740280232243,"y":30117.847206458973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8a46ebed-4ed4-4b70-882b-416ffa1b37f6","savedPayload":{"position":{"x":31240.740280232243,"y":30117.847206458973},"targetPosition":{"x":31395.222935590078,"y":30593.406010951592},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"Inmediate Take Position","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"90dda64b-17fd-469c-8066-3855596795ab","savedPayload":{"position":{"x":32310.303575265214,"y":28785.226973794255},"targetPosition":{"x":32083.882547130008,"y":29230.01160391372},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4054a522-7863-4ac2-9eab-26db2a6f037f","savedPayload":{"position":{"x":32083.882547130008,"y":29230.01160391372},"targetPosition":{"x":31848.83631252263,"y":29702.20922965271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0b8d71ab-6430-4e3f-840a-162745ab8d22","savedPayload":{"position":{"x":31848.83631252263,"y":29702.20922965271},"targetPosition":{"x":31622.00489673196,"y":30147.8015863614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollaLine truncated
|
||||
{"type":"Trading System","name":"Lightning Strike","config":"{ \n\"codeName\": \"Lightning Strike\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"My Trading Strategy","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Inmediate Trigger On","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"e2ea7ded-2be1-43a3-a7fa-de3d9b8eeec4","savedPayload":{"position":{"x":29614.345537114667,"y":29686.264363248512},"targetPosition":{"x":30059.096259318965,"y":29912.85964671243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e693623c-e11f-49e3-99da-1897c7a47563","savedPayload":{"position":{"x":30059.096259318965,"y":29912.85964671243},"targetPosition":{"x":30503.948096117412,"y":30139.527093006473},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9135663f-deeb-4b3f-8855-91750810a406","savedPayload":{"position":{"x":30503.948096117412,"y":30139.527093006473},"targetPosition":{"x":30949.606420886405,"y":30366.48888962723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"05f2f6b7-15ab-4386-a299-91a949de634e","savedPayload":{"position":{"x":30949.606420886405,"y":30366.48888962723},"targetPosition":{"x":31395.222935590078,"y":30593.406010951592},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"Never Trigger Off","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Above MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"false","project":"Superalgos","id":"0eb59e3b-ccc8-4eab-a1f2-a7c8dea28949","savedPayload":{"position":{"x":30777.836612408217,"y":28692.647426362768},"targetPosition":{"x":30932.059454816794,"y":29167.31041310742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31ab47dd-fe2d-47ac-9a77-08ec8beee068","savedPayload":{"position":{"x":30932.059454816794,"y":29167.31041310742},"targetPosition":{"x":31086.31006690743,"y":29642.1636542021},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fa93a965-e836-42b3-9784-79acda1468dd","savedPayload":{"position":{"x":31086.31006690743,"y":29642.1636542021},"targetPosition":{"x":31240.740280232243,"y":30117.847206458973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8a46ebed-4ed4-4b70-882b-416ffa1b37f6","savedPayload":{"position":{"x":31240.740280232243,"y":30117.847206458973},"targetPosition":{"x":31395.222935590078,"y":30593.406010951592},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"Inmediate Take Position","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"90dda64b-17fd-469c-8066-3855596795ab","savedPayload":{"position":{"x":32310.303575265214,"y":28785.226973794255},"targetPosition":{"x":32083.882547130008,"y":29230.01160391372},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4054a522-7863-4ac2-9eab-26db2a6f037f","savedPayload":{"position":{"x":32083.882547130008,"y":29230.01160391372},"targetPosition":{"x":31848.83631252263,"y":29702.20922965271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0b8d71ab-6430-4e3f-840a-162745ab8d22","savedPayload":{"position":{"x":31848.83631252263,"y":29702.20922965271},"targetPosition":{"x":31622.00489673196,"y":30147.8015863614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollaLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
{"type":"Workspace","name":"Tested Exchanges","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":[],"id":"40af91d9-431c-4b7d-addc-aed37bc2f3fe","savedPayload":{"position":{"x":25089.356993272086,"y":30767.11115747996},"targetPosition":{"x":25239.356993272086,"y":31026.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningTasks":{"type":"Learning Tasks","name":"New Learning Tasks","project":"Superalgos","projectLearningTasks":[],"id":"0818dfbe-61ea-40b8-8544-bee25d7f45be","savedPayload":{"position":{"x":25389.356993272086,"y":30767.11115747996},"targetPosition":{"x":25239.356993272086,"y":31026.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"testingTradingTasks":{"type":"Testing Trading Tasks","name":"New Testing Trading Tasks","project":"Superalgos","projectTradingTasks":[],"id":"8117db0a-e418-4f56-8fe4-fda2ddac1cbb","savedPayload":{"position":{"x":25539.356993272086,"y":31026.918778615294},"targetPosition":{"x":25239.356993272086,"y":31026.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"productionTradingTasks":{"type":"Production Trading Tasks","name":"New Production Trading Tasks","project":"Superalgos","projectTradingTasks":[],"id":"673caa5f-511d-4688-9305-e5f0f0f780cd","savedPayload":{"position":{"x":25389.356993272086,"y":31286.726399750627},"targetPosition":{"x":25239.356993272086,"y":31026.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataStorage":{"type":"Data Storage","name":"New Data Storage","project":"Superalgos","dataMinesData":{"type":"Data Mines Data","name":"New Data Mines Data","project":"Superalgos","projectDataProducts":[],"id":"32e7c122-fa5a-4d00-9d71-d54e890e32de","savedPayload":{"position":{"x":25070.19913560607,"y":31588.15985816277},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingMinesData":{"type":"Trading Mines Data","name":"New Trading Mines Data","project":"Superalgos","projectTradingProducts":[],"id":"e4e268f3-a677-4f90-90a1-d87244e647e5","savedPayload":{"position":{"x":24959.356993272086,"y":31550.53402088596},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMinesData":{"type":"Learning Mines Data","name":"New Learning Mines Data","project":"Superalgos","projectLearningProducts":[],"id":"2845a687-becc-4c3b-bc79-b2293ba876ba","savedPayload":{"position":{"x":24871.350991184714,"y":31473.354828453244},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e2697759-6038-4943-b90c-5a68651ff9a8","savedPayload":{"position":{"x":25089.356993272086,"y":31286.726399750627},"targetPosition":{"x":25239.356993272086,"y":31026.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"d"}}},"id":"e452cf65-2b2b-44f2-9e67-bdd9d3c008e4","savedPayload":{"position":{"x":25239.356993272086,"y":31026.918778615294},"targetPosition":{"x":24939.356993272086,"y":31026.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"3c165071-7558-4708-9999-8ffe71d346b1","savedPayload":{"position":{"x":24939.356993272086,"y":31026.918778615294},"targetPosition":{"x":24939.356993272086,"y":31026.918778615294},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},{"type":"Crypto Ecosystem","name":"My Crypto Ecosystem","project":"Superalgos","cryptoExchanges":[{"type":"Crypto Exchanges","name":"Tested","project":"Superalgos","exchanges":[Line truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Hello World Tutorial","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":"Simple Moving Average (SMA)","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Simple Moving Average (SMA)","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Simple Moving Average (SMA) Multi-Period-Market","project":"Superalgos","id":"fde9aeb6-2b65-4ba5-a8b3-07f2b189a9ec","savedPayload":{"position":{"x":23969.74175100142,"y":29687.688294073963},"targetPosition":{"x":24119.74175100142,"y":29687.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":"456269f6-9849-4d5f-9c8c-7cd7d1eef297"}}},{"type":"Indicator Process Instance","name":"Simple Moving Average (SMA) Multi-Period-Daily","project":"Superalgos","id":"17d24742-6026-4fe5-b400-69df5a057aa1","savedPayload":{"position":{"x":24044.74175100142,"y":29557.784483506297},"targetPosition":{"x":24119.74175100142,"y":29687.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":"333ae5d7-7ec1-4f08-b206-91e3b4f2c99f"}}}],"id":"a773898a-8b8f-4654-b907-a4f0b988d59e","savedPayload":{"position":{"x":24119.74175100142,"y":29687.688294073963},"targetPosition":{"x":24249.645561569087,"y":29762.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a98d1697-98c9-44dc-a4b2-b777917ca292","savedPayload":{"position":{"x":24249.645561569087,"y":29762.688294073963},"targetPosition":{"x":24379.549372136753,"y":29837.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"802f1ee2-1dba-4999-8b29-068b68aee9ef","savedPayload":{"position":{"x":24379.549372136753,"y":29837.688294073963},"targetPosition":{"x":24509.45318270442,"y":29912.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d24c01eb-3d21-430e-a965-cbf645bb7853","savedPayload":{"position":{"x":24509.45318270442,"y":29912.688294073963},"targetPosition":{"x":24639.356993272086,"y":29987.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"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":"9de8a5c8-7c2e-4625-afa4-176c43777eb3","savedPayload":{"position":{"x":24414.356993272086,"y":29297.976862370964},"targetPosition":{"x":24489.356993272086,"y":29427.88067293863},"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":"d96308e3-a9ae-4a87-ad7c-cf7948fe0939","savedPayload":{"position":{"x":24489.356993272086,"y":29427.88067293863},"targetPosition":{"x":24564.356993272086,"y":29557.784483506297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fa7991b3-e23e-4cLine truncated
|
||||
{"type":"Workspace","name":"Hello World Tutorial","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":"Simple Moving Average (SMA)","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Simple Moving Average (SMA)","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Simple Moving Average (SMA) Multi-Period-Market","project":"Superalgos","id":"fde9aeb6-2b65-4ba5-a8b3-07f2b189a9ec","savedPayload":{"position":{"x":23969.74175100142,"y":29687.688294073963},"targetPosition":{"x":24119.74175100142,"y":29687.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":"456269f6-9849-4d5f-9c8c-7cd7d1eef297"}}},{"type":"Indicator Process Instance","name":"Simple Moving Average (SMA) Multi-Period-Daily","project":"Superalgos","id":"17d24742-6026-4fe5-b400-69df5a057aa1","savedPayload":{"position":{"x":24044.74175100142,"y":29557.784483506297},"targetPosition":{"x":24119.74175100142,"y":29687.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":"333ae5d7-7ec1-4f08-b206-91e3b4f2c99f"}}}],"id":"a773898a-8b8f-4654-b907-a4f0b988d59e","savedPayload":{"position":{"x":24119.74175100142,"y":29687.688294073963},"targetPosition":{"x":24249.645561569087,"y":29762.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a98d1697-98c9-44dc-a4b2-b777917ca292","savedPayload":{"position":{"x":24249.645561569087,"y":29762.688294073963},"targetPosition":{"x":24379.549372136753,"y":29837.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"802f1ee2-1dba-4999-8b29-068b68aee9ef","savedPayload":{"position":{"x":24379.549372136753,"y":29837.688294073963},"targetPosition":{"x":24509.45318270442,"y":29912.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d24c01eb-3d21-430e-a965-cbf645bb7853","savedPayload":{"position":{"x":24509.45318270442,"y":29912.688294073963},"targetPosition":{"x":24639.356993272086,"y":29987.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"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":"9de8a5c8-7c2e-4625-afa4-176c43777eb3","savedPayload":{"position":{"x":24414.356993272086,"y":29297.976862370964},"targetPosition":{"x":24489.356993272086,"y":29427.88067293863},"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":"d96308e3-a9ae-4a87-ad7c-cf7948fe0939","savedPayload":{"position":{"x":24489.356993272086,"y":29427.88067293863},"targetPosition":{"x":24564.356993272086,"y":29557.784483506297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fa7991b3-e23e-4cLine truncated
|
||||
@@ -742,6 +742,12 @@
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Plotter Module->"
|
||||
},
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{\n\"codeName\": \"\", \n\"isLegacy\": false\n}"
|
||||
},
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "plotterPanelJavascriptCode",
|
||||
@@ -756,6 +762,13 @@
|
||||
}
|
||||
],
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
@@ -1735,7 +1748,7 @@
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n\"configuration\": \"Get the appropriate configuration from the documentation\"\n}"
|
||||
"config": " { \"default\": { \"opacity\": 0.2, \"lineWidth\": 1, \"lineDash\": [0,0], \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\" }, \"atMousePosition\": { \"opacity\": 0.3, \"lineWidth\": 2, \"lineDash\": [0,0], \"paletteColor\": \"UI_COLOR.RUSTED_RED\" }}"
|
||||
},
|
||||
"menuItems": [
|
||||
{
|
||||
@@ -3040,6 +3053,18 @@
|
||||
"childType": "Learning Current",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "features",
|
||||
"type": "node",
|
||||
"childType": "Features",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "labels",
|
||||
"type": "node",
|
||||
"childType": "Labels",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "predictions",
|
||||
"type": "node",
|
||||
@@ -3217,8 +3242,351 @@
|
||||
"compatibleTypes": "->Prediction->"
|
||||
},
|
||||
"propertyNameAtParent": "predictionValue",
|
||||
"childrenNodesProperties": [
|
||||
"childrenNodesProperties": [],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Features",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Feature",
|
||||
"relatedUiObject": "Feature",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Learning Engine->"
|
||||
},
|
||||
"propertyNameAtParent": "features",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "features",
|
||||
"type": "array",
|
||||
"childType": "Feature",
|
||||
"autoAdd": true
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Children",
|
||||
"label": "Add Missing Children",
|
||||
"relatedUiObject": "Learning Engine",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Path",
|
||||
"label": "Copy Node Path",
|
||||
"iconPathOn": "copy-path",
|
||||
"iconPathOff": "copy-path",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Value",
|
||||
"label": "Copy Node Value",
|
||||
"iconPathOn": "copy-value",
|
||||
"iconPathOff": "copy-value",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Type",
|
||||
"label": "Copy Node Type",
|
||||
"iconPathOn": "copy-type",
|
||||
"iconPathOff": "copy-type",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{\n\"initialValue\": 0\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Features->"
|
||||
},
|
||||
"propertyNameAtParent": "features",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "begin",
|
||||
"type": "node",
|
||||
"childType": "Begin",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "end",
|
||||
"type": "node",
|
||||
"childType": "End",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "featureValue",
|
||||
"type": "node",
|
||||
"childType": "Feature Value",
|
||||
"autoAdd": true
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Feature Value",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Path",
|
||||
"label": "Copy Node Path",
|
||||
"iconPathOn": "copy-path",
|
||||
"iconPathOff": "copy-path",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Value",
|
||||
"label": "Copy Node Value",
|
||||
"iconPathOn": "copy-value",
|
||||
"iconPathOff": "copy-value",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Type",
|
||||
"label": "Copy Node Type",
|
||||
"iconPathOn": "copy-type",
|
||||
"iconPathOff": "copy-type",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{\n\"initialValue\": 0\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Feature->"
|
||||
},
|
||||
"propertyNameAtParent": "featureValue",
|
||||
"childrenNodesProperties": [],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Labels",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Label",
|
||||
"relatedUiObject": "Label",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Learning Engine->"
|
||||
},
|
||||
"propertyNameAtParent": "labels",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "labels",
|
||||
"type": "array",
|
||||
"childType": "Label",
|
||||
"autoAdd": true
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Label",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Children",
|
||||
"label": "Add Missing Children",
|
||||
"relatedUiObject": "Learning Engine",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Path",
|
||||
"label": "Copy Node Path",
|
||||
"iconPathOn": "copy-path",
|
||||
"iconPathOff": "copy-path",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Value",
|
||||
"label": "Copy Node Value",
|
||||
"iconPathOn": "copy-value",
|
||||
"iconPathOff": "copy-value",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Type",
|
||||
"label": "Copy Node Type",
|
||||
"iconPathOn": "copy-type",
|
||||
"iconPathOff": "copy-type",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{\n\"initialValue\": 0\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Labels->"
|
||||
},
|
||||
"propertyNameAtParent": "labels",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "begin",
|
||||
"type": "node",
|
||||
"childType": "Begin",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "end",
|
||||
"type": "node",
|
||||
"childType": "End",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "labelValue",
|
||||
"type": "node",
|
||||
"childType": "Label Value",
|
||||
"autoAdd": true
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Label Value",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Path",
|
||||
"label": "Copy Node Path",
|
||||
"iconPathOn": "copy-path",
|
||||
"iconPathOff": "copy-path",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Value",
|
||||
"label": "Copy Node Value",
|
||||
"iconPathOn": "copy-value",
|
||||
"iconPathOff": "copy-value",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Type",
|
||||
"label": "Copy Node Type",
|
||||
"iconPathOn": "copy-type",
|
||||
"iconPathOff": "copy-type",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{\n\"initialValue\": 0\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Label->"
|
||||
},
|
||||
"propertyNameAtParent": "labelValue",
|
||||
"childrenNodesProperties": [],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
@@ -5590,7 +5958,7 @@
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "This",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
@@ -13075,6 +13443,13 @@
|
||||
{
|
||||
"type": "Open Stage",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Children",
|
||||
"label": "Add Missing Items",
|
||||
@@ -13097,6 +13472,12 @@
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"initialValues": {
|
||||
"config": "{\n\"roundingErrorCorrectionFactor\": 1.01, \n\"absoluteDustInBaseAsset\": 0,\n\"absoluteDustInQuotedAsset\": 0 \n}"
|
||||
},
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"attachingRules": {
|
||||
@@ -14337,6 +14718,13 @@
|
||||
{
|
||||
"type": "Close Stage",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Children",
|
||||
"label": "Add Missing Items",
|
||||
@@ -14359,6 +14747,12 @@
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"initialValues": {
|
||||
"config": "{\n\"roundingErrorCorrectionFactor\": 1.01, \n\"absoluteDustInBaseAsset\": 0,\n\"absoluteDustInQuotedAsset\": 0 \n}"
|
||||
},
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
@@ -14686,7 +15080,8 @@
|
||||
"childType": "Signals Provider",
|
||||
"autoAdd": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Signals Provider",
|
||||
@@ -14727,10 +15122,11 @@
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n\"webhookURL\": \"Webhook/New-Message/Trading-View/Binance/BTC-USDT\",\n\"testMessage\": \"\" \n}"
|
||||
"config": "{ \n\"webhookURL\": \"Webhook/New-Message/Trading-View/binance/BTC-USDT\",\n\"testMessage\": \"\" \n}"
|
||||
},
|
||||
"propertyNameAtParent": "signalsProviders",
|
||||
"childrenNodesProperties": []
|
||||
"childrenNodesProperties": [],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Crypto Exchanges",
|
||||
@@ -14893,6 +15289,10 @@
|
||||
{
|
||||
"codeName": "hitbtc",
|
||||
"iconName": "hitbtc"
|
||||
},
|
||||
{
|
||||
"codeName": "luno",
|
||||
"iconName": "luno"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -15048,6 +15448,10 @@
|
||||
{
|
||||
"codeName": "USD",
|
||||
"iconName": "us-dollar"
|
||||
},
|
||||
{
|
||||
"codeName": "ZAR",
|
||||
"iconName": "zar"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -15532,7 +15936,7 @@
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{\"node\":{\"distancePercentage\":60,\"radiusPercentage\":85,\"massPercentage\":100,\"animationSteps\":2,\"menuItem\":{\"widthPercentage\":100,\"heightPercentage\":60,\"radiusPercentage\":90}},\"physics\":false}"
|
||||
"config": "{\"node\":{\"distancePercentage\":60,\"radiusPercentage\":85,\"massPercentage\":100,\"animationSteps\":2,\"menuItem\":{\"widthPercentage\":100,\"heightPercentage\":60,\"radiusPercentage\":90}},\"physics\":false,\"detachUsingMouse\":false }"
|
||||
},
|
||||
"menuItems": [
|
||||
{
|
||||
@@ -19389,4 +19793,4 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"type": "Project Schema File",
|
||||
"definition": {
|
||||
"text": "It is the most basic and low level system-wide configuration file. You will find it at the Projects folder. It contains a list of all integrated projects and for each one the list of javascript modules organized in different categories, like Function Libraries, Utilities, Spaces, Globals, etc; in turn organized into the broather categories UI, TS and CL.",
|
||||
"updated": 1614939492529
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use doscs.save to save your changes and app.contribute to send it to the main repository."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"type": "References",
|
||||
"definition": {
|
||||
"text": "Write the definition for this Concept."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and select the pencil button to enter edit mode."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -37,8 +37,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "After issuing the token in March 2021, the funds were deposited at the project's Treasury Account, from where it is distributed to each year's Budget Account, each Release Account and finally to contributors accounts.",
|
||||
"updated": 1614853686491
|
||||
"text": "After issuing the token in March 2021, the funds were deposited at the project's Treasury Account, from where it is distributed to contributors accounts.",
|
||||
"updated": 1615564586741
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": "4",
|
||||
"type": "Automating Actions - Locating the Right Function Library",
|
||||
"type": "UI Global Object",
|
||||
"definition": {
|
||||
"text": "Write a summary for this topic page."
|
||||
"text": "It is a global object available at the browser, containing at runtime a structure of objects ranging from Utilities, Function Libraries, Spaces and others, ready to be accessed and their functions consumed from anywhere within the UI.",
|
||||
"updated": 1614941411500
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"type": "APIs",
|
||||
"definition": {
|
||||
"text": "Write the definition for this Node."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and select the pencil button to enter edit mode."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -8,9 +8,32 @@
|
||||
"style": "Block",
|
||||
"text": "Content"
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Optionality",
|
||||
"updated": 1615101975045
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The Close Stage is optional. That means that if you don't need it you can just delete this node and everything should work just fine. "
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The close stage is opened when either the stop loss or take profit targets are hit."
|
||||
"text": "There are situations where users might want to execute both buy and sell orders from within the Open Stage. In those situations they might want to delete the Manage Stage and the Close Stage so that they don't execute at all. That is possible because both are optional. This is how optionality looks like at the code:",
|
||||
"updated": 1615102048658
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "/*\nThe system allows the user not to define a close stage, because the close stage is optional.\nHere we are goint to see if that is the case and if it is, we will inmidiatelly consider \nthe close stage as closed.\n*/\nif (tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].closeStage === undefined) {\n changeStageStatus('Close Stage', 'Closed', 'Close Stage Undefined')\n return\n}",
|
||||
"updated": 1615102065680
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Close Stage Concept"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The close stage is opened when either the stop loss or take profit targets are hit. It is also opened after the position is opened if the Manage Stage is undefined."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -19,6 +42,11 @@
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, in the open stage, you probably defined the target size as a function of the capital allocated to the trading system. In the close stage, you will likely want to define the target size as a function of the size filled, that is, the amount of the orders placed that was filled during the open stage."
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Topic->Why My Stage is not Closing?->The Stage Does Not Close",
|
||||
"updated": 1615054694042
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -10,8 +10,61 @@
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Crypto Exchange Configuration",
|
||||
"updated": 1609771676751
|
||||
"text": "Tested Exchanges",
|
||||
"updated": 1615200855230
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In theory, Superalgos supports dozens of exchanges. However, each exchange must go through a testing process, as not all of them conform to the standard proposed by the CCXT library.",
|
||||
"updated": 1615201479524
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Binance Test Status",
|
||||
"updated": 1615203667257
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Binance-US Test Status"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Bitfinex Test Status"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Bittrex Test Status"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "CoinbasePro Test Status"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "FTX Test Status",
|
||||
"updated": 1615203669878
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Kraken Test Status",
|
||||
"updated": 1615453046113
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Kucoin Test Status"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Luno Test Status"
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Crypto Exchange Configuration"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Each exchange may require a very specific configuration. This is determined during the exchange testing process. Consult the page of each exchange as listed above. If you are interested in testing a new exchange, go to the How to Test New Exchanges page.",
|
||||
"updated": 1615201685376
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"type": "Github API",
|
||||
"definition": {
|
||||
"text": "Write the definition for this Node."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and select the pencil button to enter edit mode."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -8,6 +8,34 @@
|
||||
"style": "Block",
|
||||
"text": "Content"
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Optionality",
|
||||
"updated": 1615101510181
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "This Stage is optional. That means that if you do not want to deal with Stop Loss or Take Profits at your strategy, you can just delete this node and everything will continue working just fine. If you do remove this node, what will happen at runtime is that as soon as the position is triggered, the system will detect that that the Manage Stage is undefined, and it will jump it by opening the Close Stage (if it exists, because it is also optional)"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is how optionality looks like at the code:",
|
||||
"updated": 1615101627343
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "/* Opening Status Procedure */\nif (tradingEngine.tradingCurrent.strategyManageStage.status.value === 'Opening') {\n /*\n The system allows the user not to define a Manage Stage, because the Manage Stage is optional.\n Here we are going to see if that is the case and if it is, we will inmidiatelly consider \n the Manage Stage as closed.\n */\n if (tradingSystem.tradingStrategies[tradingEngine.tradingCurrent.strategy.index.value].manageStage === undefined) {\n changeStageStatus('Manage Stage', 'Closed', 'Manage Stage Undefined')\n changeStageStatus('Close Stage', 'Opening')\n return\n }\n\n /* Now we switch to the Open status. */\n changeStageStatus('Manage Stage', 'Open')\n}",
|
||||
"updated": 1615101667889
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "If both the Manage Stage and the Close Stage are undefined, what will happen is that whenever the Open Stage gets closed, you will exit the position.",
|
||||
"updated": 1615103161873
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Manage Stage Concept"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The first and foremost rule of trading is to preserve capital and its main goal is to increase it."
|
||||
|
||||
@@ -35,6 +35,11 @@
|
||||
{
|
||||
"style": "List",
|
||||
"text": "the take profit or stop loss targets are hit."
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Topic->Why My Stage is not Closing?->The Stage Does Not Close",
|
||||
"updated": 1615054619090
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"type": "Size Filled",
|
||||
"definition": {
|
||||
"text": "Size filled is the amount of the order that has been filled at the exchange."
|
||||
"text": "Size filled is the amount of the order that has been filled at the exchange. It can also represent the cumulative Size Filled of the Open or Close Stages.",
|
||||
"updated": 1615100388371
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
@@ -55,6 +55,10 @@
|
||||
{
|
||||
"style": "List",
|
||||
"text": "physics determines wether the environment is static (false) or dynamic (true). When physics is set to true, nodes in the design space are affected by th gravitational pull and repulsion of other nodes."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "detachUsingMouse defines if you can detach nodes from it's parent or reference parents only using the mouse (when true) or if you can not use the mouse for that and can only do it using the detach buttons on the icon's menu (when false)."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -7,15 +7,36 @@
|
||||
"updated": 1610909304702
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This command will send all the changes you have made both at Docs pages but also at any file within the Superalgos Repository to your fork at Github.com and from there to the main Superalgos Repository. It will do it specifically from the Current Branch to the Contributions Branch mentioned at the footer of this page. ",
|
||||
"updated": 1615288848213
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Contributions in most cases needs to come from the develop branch to the develop branch unless you have previously agreed with team members that you will send a contribution from master to master."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Master is our stable branch and it is very unlikely that we are going to merge contributions there. Instead all contributions are expected to go to the develop branch, where there are many users testing that branch every day, and the contribution will reach the master branch at the next relrease.",
|
||||
"updated": 1615288915134
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "It is also very unlikely that contributions coming from the master branch will be merged into the develop branch, since that can usually lead to merging conflicts. "
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "So be sure that your Current Branch is develop and the Contribution Branch is develop before submitting your contribution. "
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Syntax",
|
||||
"updated": 1609943337280
|
||||
"text": "Syntax"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "docs.contribute Message",
|
||||
"updated": 1609943744230
|
||||
"text": "app.contribute [Message]",
|
||||
"updated": 1615461375106
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -33,8 +54,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "docs.contribute Fixed typo.",
|
||||
"updated": 1610742512175
|
||||
"text": "app.contribute Fixed typo.",
|
||||
"updated": 1615461382913
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "docs.update",
|
||||
"updated": 1610710006400
|
||||
"text": "app.update",
|
||||
"updated": 1615612258411
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
|
||||
@@ -9,33 +9,37 @@
|
||||
{
|
||||
"language": "ID",
|
||||
"text": "Proses pembaruan berhasil dilaksanakan. Versi terbaru Superalgos telah selesai diunduh dan mengganti versi yang sekarang. Agar perubahan diterapkan dengan baik, anda harus memulai ulang Client ini dan merefresh halaman UI ini.",
|
||||
"updated": 1613891855110
|
||||
"updated": 1613891855110,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "You now have the latest version of Superalgos. Just remeber to restart the Client and the UI. If you have Tasks running, you should first stop the tasks, and then restart the Client, so that you can run those task again using the updated codebase.",
|
||||
"updated": 1611160648343,
|
||||
"text": "You now have the latest version of Superalgos. Just remember to restart the Client and the UI. If you have Tasks running, you should first stop the tasks, and then restart the Client, so that you can run those task again using the updated codebase.",
|
||||
"updated": 1615458633005,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ID",
|
||||
"text": "Sekarang anda memiliki Superalgos versi terbaru. Perlu diingat untuk selalu memulai ulang Client dan UI. Jika memiliki Task yang berjalan, maka anda harus menghentikan Task tersebut terlebih dahulu, lalu memulai ulang Client, sehingga anda dapat menjalankan Task tersebut lagi menggunakan codebase yang terupdate.",
|
||||
"updated": 1613892095568
|
||||
"updated": 1613892095568,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The update you made, only afffects the Client which you are connected to via http using your browser. If you have more Clients running as part of a Network, you will need to update them too, etither manually using Git or by navigating with your browser to their URL and doing running the App Update Command there.",
|
||||
"text": "The update you made, only affects the Client which you are connected to via http using your browser. If you have more Clients running as part of a Network, you will need to update them too, etither manually using Git or by navigating with your browser to their URL and doing running the App Update Command there.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ID",
|
||||
"text": "Pembaruan yang Anda buat, hanya mempengaruhi Client yang terhubung melalui http menggunakan browser ini. Jika Anda memiliki lebih banyak Client yang berjalan sebagai bagian dari Network, anda juga perlu memperbaruinya, baik secara manual menggunakan Git atau dengan menavigasikan browser anda ke URL tujuan dan menjalankan App Update Command di sana.",
|
||||
"updated": 1613892300538
|
||||
"updated": 1613892300538,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
],
|
||||
"updated": 1615458652244
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -3,13 +3,14 @@
|
||||
"pageNumber": "5",
|
||||
"type": "App Message - Update Done - Already Up-To-Date",
|
||||
"definition": {
|
||||
"text": "The update process run successfully but no changes where made since your installation is up-to-date with the current branch. No further action required.",
|
||||
"updated": 1611128829429,
|
||||
"text": "The update process run successfully but no changes were made since your installation is up-to-date with the current branch. No further action required.",
|
||||
"updated": 1615458687718,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ID",
|
||||
"text": "Proses pembaruan berjalan dengan lancar namun tidak ada perubahan yang terjadi karena versi Superalgos anda sudah diversi paling baru dengan cabang saat ini. Tidak perlu tindakan lebih lanjut.",
|
||||
"updated": 1613892507215
|
||||
"updated": 1613892507215,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -22,7 +23,8 @@
|
||||
{
|
||||
"language": "ID",
|
||||
"text": "Anda sudah diversi paling up-to-date. Tidak perlu me-reboot Client atau merefresh halaman UI ini.",
|
||||
"updated": 1613892633200
|
||||
"updated": 1613892633200,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -444,8 +444,13 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the case of the Superalgos project, SVG source files are organized in subfolders, as follows:",
|
||||
"updated": 1613730944769
|
||||
"text": "In the case of the Superalgos project, SVG source files are organized in subfolders, under the following directory:",
|
||||
"updated": 1614854522604
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "\\Projects\\Superalgos\\Icons-SVG-Sources\\",
|
||||
"updated": 1614854467481
|
||||
},
|
||||
{
|
||||
"style": "Table",
|
||||
@@ -478,7 +483,32 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Files inherit the name of the node, asset, exchange, or whatever the icon represents, and are named in lower case, each word separated by a hyphen, and with a lower-case extension. For example, the PNG file for the Initial Take Profit node is initial-take-profit.png."
|
||||
"text": "Files inherit the name of the node, asset, exchange, or whatever the icon represents, and are named in lower case, each word separated by a hyphen, and with a lower-case extension. ",
|
||||
"updated": 1615462236475
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example:",
|
||||
"updated": 1615462266490
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "In the case of nodes, the PNG file for the Managed Take Profit node is managed-take-profit.png",
|
||||
"updated": 1615462396196
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "In the case of assets, the name of the file must is the literal name of the asset. For instance, for Bitcoin, it is bitcoin.png; for Tether it is tether.png; and so on...",
|
||||
"updated": 1615462488610
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "In the case of an exchange, again, the literal name of the exchange is used, as it is listed in the CCXT library. for instance, Binance is binance.png.",
|
||||
"updated": 1615462532995
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -19,7 +19,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Link",
|
||||
"text": "Docs Group->https://t.me/superalgosdocs"
|
||||
"text": "Docs Group->t.me/superalgosdocs",
|
||||
"updated": 1615385427537
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
|
||||
@@ -18,15 +18,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The design space functions under the paradigm of a self-organizing workspace in which nodes tend to find their place guided by certain laws of physics, and constrained by their chain relationships."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This self-organizing paradigm saves users the effort of maintaining the arrangement of nodes in a logical manner, in particular when manipulating or creating new nodes."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "However, there will be times in which you will want to override this self-organizing nature. The following menu options are tools that will help you manipulate the arrangement of nodes, overriding the physics that affect their floating nature."
|
||||
"text": "The design space functions under the paradigm of a self-organizing workspace in which nodes tend to find their place guided by certain arrangement properties that you may control from the node's menu.",
|
||||
"updated": 1615313209746
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
@@ -134,10 +127,25 @@
|
||||
"updated": 1610041765847
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"style": "Anchor",
|
||||
"text": "Arrangement Style",
|
||||
"updated": 1610041884085
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Arrangement Style",
|
||||
"updated": 1615491355364
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following options affect how a node is arranged around or in relation to its parent.",
|
||||
"updated": 1615491622552
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "The current implementation of this feature is not optimal, and the behavior of some of these options is hard to predict. If you are a developer, this may be a good opportunity to iterate on the existing code and take this feature to a more usable state.",
|
||||
"updated": 1615491609266
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Set Node Arrangement to Concave->Definition",
|
||||
|
||||
@@ -39,6 +39,23 @@
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "docs.repaginate Topic from Superalgos: Docs Commands"
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Usage"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "After you repaginate a Topic or Tutorial, the best way to proceed it to manually delete from disk all the files associated with that Topic / Tutorial. After you delete them, you execute the repaginate command and then the docs.save command. "
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The repagination flags all of the files of that Topic / Tutorial as changed, so you don't need to worry about the deleted files since they will be all recreated.",
|
||||
"updated": 1614942454596
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "After repagination, reload the UI to get into memory only the repaginated version."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -3,8 +3,8 @@
|
||||
"pageNumber": 21,
|
||||
"type": "Docs Anchor Style",
|
||||
"definition": {
|
||||
"text": "Amchor paragraphs are used together with the Docs Goto Command. When you want to generate a Docs Link to an specific part of a Docs Page, you first need to create an Anchor paragraph in order to be able to create the link to that part of the page.",
|
||||
"updated": 1609258745310
|
||||
"text": "Anchor paragraphs are used together with the Docs Goto Command. When you want to generate a Docs Link to an specific part of a Docs Page, you first need to create an Anchor paragraph in order to be able to create the link to that part of the page.",
|
||||
"updated": 1615591597546
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"topic": "Frequently Asked Questions",
|
||||
"pageNumber": 1,
|
||||
"type": "Why My Stage is not Closing?",
|
||||
"definition": {
|
||||
"text": "One of the most common questions asked by users is why the open or close stage are not closing after the order was filled.",
|
||||
"updated": 1615100269026
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The shot answer is becasue the Stage Size Filled did not reach the value of the Stage Target Size.",
|
||||
"updated": 1615100332173
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "There are many reason why this can happen, but they all have to do with syncronization between the system and the exchange, and dust getting accumulated in decimal places.",
|
||||
"updated": 1615053796132
|
||||
},
|
||||
{
|
||||
"style": "Block",
|
||||
"text": "The Stage Does Not Close",
|
||||
"updated": 1615054499809
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "The Stage Does Not Close"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "One common issue users have while dealing with stages is that they do not get closed after their orders get filled. This usually happens because there are several adjustments on rate that happens during trading, specially during live trading. The reason a Stage does not get closed automatically is because the total filled for the whole stage is not close enough to the Stage Target Size defined by users. In order to avoid this situation there are three configurations at the Stage node you can use:",
|
||||
"updated": 1615053929853
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "ROUNDING_ERROR_CORRECTION_FACTOR : is a configurable factor that can be applied to the stage filled at runtime in order to force it to reach the Stage Target Size. The default value for this factor is:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "ROUNDING_ERROR_CORRECTION_FACTOR = 1.001",
|
||||
"updated": 1615053956943
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This value is overwritten by whatever users config at the Stage node under the roundingErrorCorrectionFactor property."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "A value of 1.01 would mean that when the Filled amount is at 1% distance from the Stage Target, the stage will be closed."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "ABSOLUTE_DUST_IN_BASE_ASSET: is a numeric value that represents the distance that you allow to be between the Size Filled and the Target Side for a stage, measured in Base Asset. It's default value is Zero and you can define it at the config of a Stage node using the absoluteDustInBaseAsset property.",
|
||||
"updated": 1615054114048
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "ABSOLUTE_DUST_IN_QUOTED_ASSET: is a numeric value that represents the distance that you allow to be between the Size Filled and the Target Side for a stage, measured in Base Asset. It's default value is Zero and you can define it at the config of a Stage node using the absoluteDustInQuotedAsset property.",
|
||||
"updated": 1615054151393
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Implementation",
|
||||
"updated": 1615054281409
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Here you can see how these parameters are implemented in the Low Frequency Trading Bot code:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": " if (\n tradingEngineStage.stageBaseAsset.sizeFilled.value\n *\n ROUNDING_ERROR_CORRECTION_FACTOR\n +\n ABSOLUTE_DUST_IN_BASE_ASSET\n >=\n tradingEngineStage.stageBaseAsset.targetSize.value\n ) {\n positionFilled()\n } else if (\n tradingEngineStage.stageQuotedAsset.sizeFilled.value\n *\n ROUNDING_ERROR_CORRECTION_FACTOR\n +\n ABSOLUTE_DUST_IN_QUOTED_ASSET\n >=\n tradingEngineStage.stageQuotedAsset.targetSize.value\n ) {\n positionFilled()\n } else {\n checkCloseStageEvent(tradingSystemStage)\n }",
|
||||
"updated": 1615296774086
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -3,8 +3,8 @@
|
||||
"pageNumber": "1",
|
||||
"type": "Detach and Attach Nodes",
|
||||
"definition": {
|
||||
"text": "To detach a node, click on the detach button on the node's menu. To attach a node, right-click it and drag it closer to the node you wish to attach it to. Release the right-click when the target node is highlighted.",
|
||||
"updated": 1609948586650
|
||||
"text": "To detach a node, click on the detach button on the node's menu. To attach a node, right-click the node and drag it closer to the node you wish to attach it to. Release the right-click when the target node is highlighted.",
|
||||
"updated": 1615545397469
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
@@ -1,36 +1,50 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": "1",
|
||||
"pageNumber": 1,
|
||||
"type": "Automating Actions - What is an Action?",
|
||||
"definition": {
|
||||
"text": "An Action is what is executed when users picks something from the menu of a Node.",
|
||||
"updated": 1614788525702
|
||||
"text": "An Action is what is executed when users picks something from the menu of a Node. ",
|
||||
"updated": 1614941717428
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Why a New Action",
|
||||
"updated": 1614939785554
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "These actions are implemented as functions inside a Function Library. So the basic workflow to implement a new action is the following:",
|
||||
"updated": 1614788734425
|
||||
"text": "Maybe you realized that you are doing repetitive actions at the Design Space and you can benefit from automating them. If your actions are constrained to manipulating the nodes at the workspace, by either creating new nodes, deleting existing ones, changing nodes configs, establishing references or some other similar stuff, then you might be able to create an Action function that can automate all this. This will allow you to stop doing those repetitive tasks youself and the ones that will come after you if you contribute these changes to the project.",
|
||||
"updated": 1614940379811
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Workflow"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "New Actions are implemented as functions inside a Function Library. So the basic workflow to implement a new Action is the following:",
|
||||
"updated": 1614940407806
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Add Menu Item: First you need to add a Menu Item for the node type that will allow the user to execute your action.",
|
||||
"updated": 1614790023220
|
||||
"text": "Add a Menu Item: First you need to add a Menu Item to the node type that will allow the user to execute your action.",
|
||||
"updated": 1614940496055
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Locate Function Library: Then you will need to locate the Function Library that is better suited to host the function that is going to be executed once the action is triggered.",
|
||||
"updated": 1614790037292
|
||||
"text": "Locate a Function Library: Then you will need to locate the Function Library that is better suited to host the function that is going to be executed once the action is triggered.",
|
||||
"updated": 1614926393154
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Add your Code: Then you will write the code for that function.",
|
||||
"updated": 1614790047291
|
||||
"text": "Add your Code: Then you will need to write the code for that function.",
|
||||
"updated": 1614940528253
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Connect Menu Item to your Code: Finally you will connect the Menu Item to that function.",
|
||||
"updated": 1614790060302
|
||||
"text": "Connect Menu Item to your Code: Finally you will connect the Menu Item to that function you wrote.",
|
||||
"updated": 1614940545908
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,26 +1,39 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": "2",
|
||||
"pageNumber": 2,
|
||||
"type": "Automating Actions - Adding a Menu Item",
|
||||
"definition": {
|
||||
"text": "You need to add a new Menu Item at the node definition at the App Schema.",
|
||||
"updated": 1614788860135
|
||||
"text": "You need to add a new Menu Item at the node definition at the App Schema. ",
|
||||
"updated": 1614941725823
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Locate App Schema",
|
||||
"updated": 1614927344633
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Check out the page of the App Schema concept. After that, locate the App Schema file of the Projects folder. There is one App Schema file for Project, pick the right one and edit it with VS Code.",
|
||||
"updated": 1614788974626
|
||||
"text": "Check out the page of the App Schema concept. After that, locate the App Schema file you will need to edit at the Projects folder. There is one App Schema file for Project, pick the right one and edit it with VS Code."
|
||||
},
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "Be carefull not to damage anything in there while editing. You will get into trouble if you do so. It can not only produce the UI not to load, but it can also damage the workspace you are working at.",
|
||||
"updated": 1614789073656
|
||||
"text": "Be carefull not to damage anything in the App Schema file while editing it. You will get into trouble if you do so. It can not only produce the UI not to load, but it can also damage the workspace you are working at.",
|
||||
"updated": 1614940590024
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "If you are not sure which project a certain node belongs to, there is a trick to find it out: close the Docs tab, and make focus on the node you want to add an Action to. While on focus, use Ctrl + Shift + Alt + F12 to log in the browser console the Node object. Inspect it to see the project property. Most likely it will be a Superalgos project's node.",
|
||||
"updated": 1614940654950
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Add Menu Item",
|
||||
"updated": 1614927443573
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Locate inside the file, the definition of the Node Type you want to add the new Action to. Once localted add a menu item object to the menuItems array, like in the following example:",
|
||||
"updated": 1614789152442
|
||||
"text": "Locate inside the file, the definition of the Node Type you want to add the new Action to. Once localted add a menu item object to the menuItems array, like in the following example:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
@@ -29,12 +42,13 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The example above is most likely what you need to add. For completeness, this is the list of properties this object can have:",
|
||||
"updated": 1614789977840
|
||||
"text": "The example above is most likely what you need to add, except that you will need to type the right values for each of those 4 properties. For completeness, this is the list of properties this object can have:",
|
||||
"updated": 1614940732785
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "action: define a name for your action. Capitalize each first letter please."
|
||||
"text": "action: define a name for your action. Capitalize each first letter please. This won't be seen by users.",
|
||||
"updated": 1614927479016
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
@@ -42,19 +56,23 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "label: this is what is going to be read by the user at the Node's menu."
|
||||
"text": "label: this is what is going to be read by users at the Node's menu.",
|
||||
"updated": 1614927503634
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "relatedUiObject: optional. You can define here a Node Type. The system will use for the Menu Item icon, the image associated to the Node Type you define here."
|
||||
"text": "relatedUiObject: optional. You can define here a Node Type. The system will use for the Menu Item icon the image associated to the Node Type you define here.",
|
||||
"updated": 1614927562326
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "askConfirmation: true if you want the user to confirm with an extra click."
|
||||
"text": "askConfirmation: true if you want users to confirm with an extra click.",
|
||||
"updated": 1614927580831
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "confirmationLabel: the text the user will read when asked to confirm."
|
||||
"text": "confirmationLabel: the text users will read when asked to confirm.",
|
||||
"updated": 1614927596195
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": 3,
|
||||
"type": "Automating Actions - Locating the Right Function Library",
|
||||
"definition": {
|
||||
"text": "Actions are packed inside Function Libraries. Most likely there is a Function Library already created that is related to the Action you want to create. ",
|
||||
"updated": 1614941736977
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The procedure to locate a suitable Function Library is very easy. Open the Projects folder, getting into the Project the Node where the action is going to be triggered at is defined. Inside that project Folder get into the UI folder and then into Function-Libraries folder.",
|
||||
"updated": 1614940833232
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Each file in there is a Function Library except for the one called ActionSwitch.js, which is the place where you connect the Action Function name you defined at the App Schema with the function that will host the code for the new Action.",
|
||||
"updated": 1614928708817
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Inspect each of these files and see at their header the functions they already implement. After a quick scan over all of them you can decide which one is where your action belongs to. If you believe that your Action should be placed at a new Function Library, then you can try to add a new one and set it up at the Project Schema file, but that is out of the scope of this guide.",
|
||||
"updated": 1614928780531
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Good Examples",
|
||||
"updated": 1614929743894
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Take a look at these Function Libraries that represent Hierarchies, because most likely your node belongs to a Hierarchy that already has a Function Library associated with it."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "ChartingSpaceFunctions"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "CryptoEcosystemFunctions"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "PluginsFunctions"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": 4,
|
||||
"type": "Automating Actions - Adding your Function",
|
||||
"definition": {
|
||||
"text": "Take a look at how other functions are implemented in the Function Library and try to follow that way.",
|
||||
"updated": 1614941850917
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The basic procedure is quite straight forward. First add the function name to the thisObject and the write you function at the most appropiate place at the Function Library. ",
|
||||
"updated": 1614941084806
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Please document your function the best you can, even if you see the other functions implemented at the same library poorly documented. See if you can make your function the best documented in the whole library."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Example of thisObject"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": " thisObject = {\n addMissingExchanges: addMissingExchanges,\n addMissingAssets: addMissingAssets,\n addMissingMarkets: addMissingMarkets,\n installMarket: installMarket,\n uninstallMarket: uninstallMarket\n }",
|
||||
"updated": 1614929327521
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Function Parameters"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Your function will receive some parameters, including the Node object that hosted the Menu Item that triggered your Action. The exact list of parameters will be defined by yourself later at the step Automating Actions - Adding an Action Switch Case. Here is a short list of the most common parameters you might later include:",
|
||||
"updated": 1614931548904
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "node: the node object that hosted the Menu Item that triggered your Action"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "rootNodes: An array of nodes that are floating at the Design Space without parents. This includes all hierarchy heads.",
|
||||
"updated": 1614931639516
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": "5",
|
||||
"type": "Automating Actions - Adding your Function",
|
||||
"definition": {
|
||||
"text": "Write a summary for this topic page."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use doscs.save to save your changes and app.contribute to send it to the main repository."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": 5,
|
||||
"type": "Automating Actions - Using Utilities",
|
||||
"definition": {
|
||||
"text": "Lower level functionality is packed in Utilities files by topic. There are already many utilities files with operations that will save you time while trying to implement your own Action. ",
|
||||
"updated": 1614941756401
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It is a very good idea to invest some time at the Utilities folder, scaning the files in there to see what you already have available to use at your actions. You will see that other actions in Function Libraries heavily rely on utilities functions defined at one of the files at the Utilities folder.",
|
||||
"updated": 1614930012933
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "How to Call an Utility Function?",
|
||||
"updated": 1614942924609
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "At runtime, all utility objects will be already instantiated by the time your Action function code runs. You just need to get to the object that host the utility funtion you want to execute via the UI Global Object that is available to you. For exmaple:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "let allLayers = UI.projects.superalgos.utilities.branches.nodeBranchToArray(botLayers, 'Layer')",
|
||||
"updated": 1614930217705
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The way to find out which is the property name of a certain utility object is by reading the definitions at the Project Schema File. The utility object hosting the nodeBranchToArray function used in the example above, is defined at the Project Schema File in this way:",
|
||||
"updated": 1614943148547
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"name\": \"Branches\",\n \"propertyName\": \"branches\",\n \"functionName\": \"newSuperalgosUtilitiesBranches\"\n }",
|
||||
"updated": 1614930415663
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The propertyName is what you need to know in order to get to the runtime reference of the utility object and execute it's functions.",
|
||||
"updated": 1614930462629
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Example: Change a Node's Config",
|
||||
"updated": 1614943976780
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is the way you programatically manipulate the config of a Node:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "UI.projects.superalgos.utilities.nodeConfig.savePropertyAtNodeConfig(node.payload,'showPanels', true)"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": 6,
|
||||
"type": "Automating Actions - Using Function Libraries",
|
||||
"definition": {
|
||||
"text": "You might also as well other functions located at Function Libraries from within your Action Function. In order to do this, you just need to locate the instance of the Function Library Object and call any of it's functions.",
|
||||
"updated": 1614942828678
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It is a very good idea to invest some time at the Function-Libraries folder, scaning the files in there to see what you already have available to use at your actions. You will see that other actions in Function Libraries heavily rely on functions defined at one of the files at the Function-Libraries folder.",
|
||||
"updated": 1614942900881
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "How to Call an Function Library Function?",
|
||||
"updated": 1614942916741
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "At runtime, all Funtion Library objects will be already instantiated by the time your Action function code runs. You just need to get to the object that host the Function Library funtion you want to execute via the UI Global Object that is available to you. For exmaple:",
|
||||
"updated": 1614942976608
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "UI.projects.superalgos.functionLibraries.dataStorageFunctions.createSessionReference(marketLearningProducts, session, 'Learning Session Reference')",
|
||||
"updated": 1614943049167
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The way to find out which is the property name of a certain Function Library object is by reading the definitions at the Project Schema File. The Function Library object hosting the createSessionReference function used in the example above, is defined at the Project Schema File in this way:",
|
||||
"updated": 1614943202556
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"name\": \"Data Storage Functions\",\n \"propertyName\": \"dataStorageFunctions\",\n \"functionName\": \"newSuperalgosFunctionLibraryDataStorageFunctions\"\n }",
|
||||
"updated": 1614943237559
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The propertyName is what you need to know in order to get to the runtime reference of the Function Library object and execute it's functions.",
|
||||
"updated": 1614943257490
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Popular Functions"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "At your own Action Function you might likely need to execute these functions, belonging to popular actions done at Action Functions:",
|
||||
"updated": 1614943932540
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Add a New Node"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following is an example on how to add a new children to an existing Node:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "dataStorage = UI.projects.superalgos.functionLibraries.uiObjectsFromNodes.addUIObject(networkNode, 'Data Storage')",
|
||||
"updated": 1614943544233
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Delete an Existing Node"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is an example on how to Delete an existing Node:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "UI.projects.superalgos.functionLibraries.nodeDeleter.deleteUIObject(projectReference, rootNodes)",
|
||||
"updated": 1614943594904
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Establish a Reference Parent"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Example of how to set the Reference Parent of a Node (in this case no Function Library is needed):",
|
||||
"updated": 1614944033214
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "node.payload.referenceParent = baseAsset\n",
|
||||
"updated": 1614943688069
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": "6",
|
||||
"type": "Automating Actions - Using Utilities",
|
||||
"definition": {
|
||||
"text": "Write a summary for this topic page."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use doscs.save to save your changes and app.contribute to send it to the main repository."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,14 +1,66 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": "7",
|
||||
"pageNumber": 7,
|
||||
"type": "Automating Actions - Using the Workspace",
|
||||
"definition": {
|
||||
"text": "Write a summary for this topic page."
|
||||
"text": "The workspace object will give you access to all the hierarchies of nodes, and once there you will be able to manipulate those structures at will.",
|
||||
"updated": 1614941811976
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use doscs.save to save your changes and app.contribute to send it to the main repository."
|
||||
"text": "You can access to the workspace object in this way:",
|
||||
"updated": 1614931075101
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "UI.projects.superalgos.spaces.designSpace.workspace",
|
||||
"updated": 1614931100393
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Check for the functions defined at thisObject what can be useful in your case. ",
|
||||
"updated": 1614931205528
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It is not very common to use the Workspace object from an Action, since you have access to the rootNodes array directly as a parameter of your Action function. Useful Workspace function for this use case might be:",
|
||||
"updated": 1614931466216
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "getProjectsHeads",
|
||||
"updated": 1614931357766
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "getHierarchyHeads",
|
||||
"updated": 1614931364737
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "getHierarchyHeadsById",
|
||||
"updated": 1614931372173
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "getHierarchyHeadsByType",
|
||||
"updated": 1614931380751
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "getNodeThatIsOnFocus",
|
||||
"updated": 1614931389528
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "getNodeByShortcutKey",
|
||||
"updated": 1614931399849
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "getNodeById",
|
||||
"updated": 1614931406224
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,14 +1,58 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": "8",
|
||||
"pageNumber": 8,
|
||||
"type": "Automating Actions - Adding an Action Switch Case",
|
||||
"definition": {
|
||||
"text": "Write a summary for this topic page."
|
||||
"text": "This steps create the mapping betwheen the actionFunction name you defined at the Menu Item of the node that can trigger your Action, and the function you coded inside a Function Library that will execute the code for the new Action. ",
|
||||
"updated": 1614941772231
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Action Switch File",
|
||||
"updated": 1614937860642
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use doscs.save to save your changes and app.contribute to send it to the main repository."
|
||||
"text": "Locate the ActionSwitch.js file inside the Function-Libraries folder. There you will find a gigantic switch instruction with a case for each Action available at the current Project."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Find within the list of cases some of the cases pointint to the same Function Library your new Action is hosted at, so that you can add a new case together with the rest.",
|
||||
"updated": 1614937904095
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Add a New Case",
|
||||
"updated": 1614938281975
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The case string must match the actionFunction you defined at the Menu Item. Your function call should be something like this:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "UI.projects.superalgos.functionLibraries.pluginsFunctions.pluginMissingTradingEngines(action.node, action.rootNodes)\n",
|
||||
"updated": 1614938043930
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "As you can see will you most likely be sending the node and rootNodes parameters into your Action function. You might want to also send other parameters from data you might find into the action object available to you at that point.",
|
||||
"updated": 1614938157839
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The property name needed to get to the reference of your Function Library object at runtime can be found at the definition of that Function Library located at the Project Schema File. The one corresponding to the example above is this one, for instance:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"name\": \"Plugins Functions\",\n \"propertyName\": \"pluginsFunctions\",\n \"functionName\": \"newSuperalgosFunctionLibraryPluginsFunctions\"\n }",
|
||||
"updated": 1614938194636
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You can use whatever you find at propertyName to get to the Function Library object at runtime. With this, the mapping is complete.",
|
||||
"updated": 1614938237127
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,14 +1,25 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": "9",
|
||||
"pageNumber": 9,
|
||||
"type": "Automating Actions - Testing your Action",
|
||||
"definition": {
|
||||
"text": "Write a summary for this topic page."
|
||||
"text": "To test your new Action you just need to reload the UI, locate the node with the new Menu Item, and click on it...",
|
||||
"updated": 1614941791574
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Debug",
|
||||
"updated": 1614939140622
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use doscs.save to save your changes and app.contribute to send it to the main repository."
|
||||
"text": "In order to debug your action, you will need to open the developer tool, and at the Sources tab, locate the Function Library file where you added your action, place a breakpoint at the begining of your function and go and click at the node Menu Item you added."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "If you change the code of your function, reload the UI and you can debug it again with the new changes.",
|
||||
"updated": 1614939195464
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -50,6 +50,33 @@
|
||||
"style": "Text",
|
||||
"text": "Over time some users tested Binanceus, which works with the same config as Binance and some other users ventured into others with unknown results. If you manage to put an exhange to work please let us know with which config so that we can move that exchange to the Tested Exchanges branch of the Crypto Ecosystem."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Your Favorite Exchange is not Listed"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "There are many reasons why an exchange might not be listed even at the Untested Exchanges node. Hera are some of them:",
|
||||
"updated": 1614949670526
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "1. When the list was created it did not exist (you can try Add Missing Exchanges menu item of the Crypto Exchanges node)"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "2. It is not listed at the CCXT library included with Superalgos (an npm update would be needed at the right folder to update the library). If it appears after the update, please inform the team so as to update it for all.",
|
||||
"updated": 1614949724133
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "3. The exchange does not support historical data at 1 min (you can check the exchange API docs). Escahnges that do not support this are filtered out while running Add Missing Exchanges command.",
|
||||
"updated": 1614949756265
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "4. The exchange does not support the function to list it's markets. (Also check the exchange API docs)"
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Getting Started"
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
"pageNumber": "2",
|
||||
"type": "Webhook Notifications",
|
||||
"definition": {
|
||||
"text": "Receive webhook notifications from other systems and use them as signals in your strategies.",
|
||||
"updated": 1611486052936
|
||||
"text": "Receive webhook notifications from other systems like Trading View, and use them as signals in your strategies.",
|
||||
"updated": 1615365927821
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
@@ -17,8 +17,29 @@
|
||||
"text": "Superalgos allows you to receive webhook notifications from TradingView or any other system supporting webhooks. You may use this feature to turn notifications into signals upon which you may act from within your strategies."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The system’s Web Server receives notifications and serves them to a sensor bot running as a data mining task. The sensor creates a data product with several properties which are made available to be used from within strategies."
|
||||
"style": "Title",
|
||||
"text": "How does it Work?",
|
||||
"updated": 1615366465462
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Receving Data: the Client receives via it's http interface notifications from external sources (like Trading View) and keep the data received in-memory. This happens independently of the Webhooks Sensor Bot, meaning that it does not matter if the Webhook Sensor Bot is running or not.",
|
||||
"updated": 1615366502234
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Retrieving Data: The Webhooks Sensor Bot, when it is running, queries the Client and ask it for the in-memory data it holds.",
|
||||
"updated": 1615366526381
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Saving Data: The Webhooks Sensor Bot saves this data to disk.",
|
||||
"updated": 1615366538404
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Consuming Data: A Trading Bot running a Strategy, might consume the data saved by the Webhooks Sensor Bot.",
|
||||
"updated": 1615366547425
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -26,19 +47,11 @@
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Set-up the Webhooks Sensor Bot Tasks"
|
||||
"text": "Set-up the Client for Webhooks"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Masters data mine features the definition of the Webhooks sensor bot used to monitor incoming notifications. You need to run an instance of this bot in the data mining section of the exchange and market of your choice."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The default workspace does not feature these tasks. To create a task for the Webhooks sensor bot, you need to uninstall and re-install the corresponding market."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Once the Webhooks sensor task is set up and running, you are all set at the application level. It’s that simple."
|
||||
"text": "There is nothing to configure in order for the Client to receive webhooks calls from external systems. The only thing you might need to do is to change the http interface port number at the Environment.js file if and only if your signals provider has any constraints regarding the port number it can send the notifications to."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -54,21 +67,143 @@
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n\"webhookURL\": \"Webhook/New-Message/Trading-View/Binance/BTC-USDT\",\n\"testMessage\": \"\"\n}",
|
||||
"updated": 1611486196742
|
||||
"text": "{\n\"webhookURL\": \"Webhook/New-Message/Trading-View/binance/BTC-USDT\",\n\"testMessage\": \"\"\n}",
|
||||
"updated": 1615370606690
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "webhookURL: This is the URL you need to use for testing purposes. Make sure you refer to the correct exchange and market."
|
||||
"text": "webhookURL: This is the URL you need to use for testing purposes. Make sure you refer to the correct exchange and market. Something very similar to this, you will configure later at Trading View or other Signal Provider. ",
|
||||
"updated": 1615368679683
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "testMessage: Enter any message, for testing purposes."
|
||||
"text": "testMessage: Enter any message, for testing purposes. This message will be what you will use at your Trading System conditions to know which type of signal you received. ",
|
||||
"updated": 1615368846219
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "testMessage Examples"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "BUY"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "SELL"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "TRIGGER ON"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "TRIGGER OFF"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "TAKE POSITION"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Send the Test Message to the Client",
|
||||
"updated": 1615368890166
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Once the test message is configured, select Send Test Message on the menu."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "By doing this, you are simulating being Trading View's server and sending the message in the exact same way they would do it, to the Superalgos Client you are running. "
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Client does not know you are sending a Test Message, and it does not know it is you and not the real Trading View. For the Client's point of view someone sent a Webhook message to it and it will do with it what it will do with any other message of this type. Store it in-memory waiting for the Webhook Sensor Bot to fetch the pending messages, in which case the Client will delete them upon delivery to the Sensor Bot.",
|
||||
"updated": 1615369237281
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "At the Signals Provider node you will see a message of failure or success depending if the message was succesfuly delivered to the Client or not."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "At the Client 's console, you will see 3 lines of logs, aknolidging that the message was received or if something was wrong, an error message with the cause."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The success logs looks like this:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Ferched by Webhooks Sensor Bot = 1",
|
||||
"updated": 1615370618823
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Set-up the Webhooks Sensor Bot Tasks",
|
||||
"updated": 1615370044893
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Masters Data Mine features the definition of the Webhooks sensor bot used to monitor incoming notifications. You need to run an instance of this bot in the data mining section of the exchange and market of your choice.",
|
||||
"updated": 1615370092995
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The default workspace does not feature these tasks. To create a task for the Webhooks sensor bot, you need to uninstall and re-install the corresponding market."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Once the Webhooks sensor task is set up, you are all set at the application level. It’s that simple.",
|
||||
"updated": 1615370160742
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Running the Webhooks Sensor Bot"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Now that you have verified that the Client is receiving the signal messages and storing them for you, the next thing to do is to run the Webhooks Sensor Bot so that it fetches the signals from the Client and saves them on disk in the format that later can be consumed from strategies.",
|
||||
"updated": 1615369878800
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "By default, this bot will run every 30 seconds. Each time it runs you will see logs entries at the Client 's console similar to this:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "2021-03-10T09:57:40.111Z Binance BTC/USDT Masters Webhooks Check-Webhook Main Loop # 3\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Messeges Fetched by Webhooks Sensor Bot = 0",
|
||||
"updated": 1615370294905
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Send Test Messages while Sensor Bot is Running",
|
||||
"updated": 1615371461320
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Now that you know how to send test messages, try doing that while the Sensor Bot is running. By looking at the Client 's console you will be able to see what is going on:",
|
||||
"updated": 1615370466427
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "The Client accumulates the signas received.",
|
||||
"updated": 1615370477786
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "The Sensor Bot fetches all the accumulated signals every time it runs."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the example below I sent 3 signal messages from the UI to the Client, and then the Sensor Bot fetch them all."
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = 1\n[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = 2\n[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = 3\n2021-03-10T10:04:40.472Z Binance BTC/USDT Masters Webhooks Check-Webhook Main Loop # 17\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Messeges Fetched by Webhooks Sensor Bot = 3",
|
||||
"updated": 1615370778562
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Webhooks Sensor Bot Output"
|
||||
@@ -80,8 +215,18 @@
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "\\Data-Storage\\Exchange\\Market\\Masters\\Webhooks\\Output\\External-Signals\\Single-File\\",
|
||||
"updated": 1611486278677
|
||||
"text": " Data-Storage\\Project\\Superalgos\\Data-Mine\\Masters\\Webhooks\\Exchange-Id\\Market\\Output\\External-Signals\\Single-File\n",
|
||||
"updated": 1615371100856
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Based on our tests, the location you would find the file would be:",
|
||||
"updated": 1615371008258
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "Data-Storage\\Project\\Superalgos\\Data-Mine\\Masters\\Webhooks\\binance\\BTC-USDT\\Output\\External-Signals\\Single-File",
|
||||
"updated": 1615371017985
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -94,11 +239,13 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is what the file may look like, assuming you sent four different test messages:"
|
||||
"text": "This is what the file may look like after the 3 test messages we sent:",
|
||||
"updated": 1615370943470
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "[[1587998459260,\"Trading-View\",\"Sell\"],[1587998475409,\"Trading-View\",\"Buy\"],[1587998530190,\"Trading-View\",\"A custom signal I just configured\"],[1588000300940,\"Trading-View\",\"This is my new message\"]]"
|
||||
"text": "[[1615370665064,\"Trading-View\",\"Sell\"],[1615370665655,\"Trading-View\",\"Sell\"],[1615370666472,\"Trading-View\",\"Sell\"]]\n",
|
||||
"updated": 1615370924302
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -106,15 +253,18 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "timestamp: the Unix datetime of the message."
|
||||
"text": "timestamp: the Unix datetime of the message. This is the moment in time the Client received the signal from the external Signals provider.",
|
||||
"updated": 1615371169447
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "source: the name of the signal provider."
|
||||
"text": "source: the name of the Signal Provider. This comes as part of the message sent by the provider, because is part of the URL you will specify later at the Signal Provider's system. In our example we used Trading View, but in fact it could be any other provider. You will have this property available at your Trading System, meaning that you will be able to write conditions that distingish the signal by Signal Provider.",
|
||||
"updated": 1615371322994
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "message: the message set up at the provider’s system."
|
||||
"text": "message: the message set up at the provider’s system (BUY, SELL, etc.).",
|
||||
"updated": 1615371373274
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -142,7 +292,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "chart.atAnyTimeFrame.externalSignal.source === \"Trading-View\" && chart.atAnyTimeFrame.externalSignal.message === \"Buy\""
|
||||
"text": "chart.atAnyTimeFrame.externalSignal.source === \"Trading-View\" && \nchart.atAnyTimeFrame.externalSignal.message === \"BUY\"",
|
||||
"updated": 1615371544991
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -150,7 +301,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "chart.atAnyTimeFrame.externalSignal.previous.message === \"Buy\""
|
||||
"text": "chart.atAnyTimeFrame.externalSignal.previous.message === \"BUY\"",
|
||||
"updated": 1615371536367
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -164,9 +316,227 @@
|
||||
"style": "Text",
|
||||
"text": "In the above example, the first parameter chart.atAnyTimeFrame.externalSignal is the signal object you wish to check, and the second parameter chart.at01hs.candle is any other object that is delimited in time. In this case, the condition validates true if the last message falls within the last 1-hour candle."
|
||||
},
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "The reason to make this validation is to avoid situations where the Webhook sensor bot was not running and it retrieved from the Client signals that are already old. If you do not check the age of the signal you might get into the situation where you are triggering a buy or sell based on old data."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Set-up Alerts/Messages at the Provider"
|
||||
"text": "Test that the Signal is Taken by your Strategy",
|
||||
"updated": 1615377044554
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We will make ourselves sure that from within a strategy we can react to an external Signal. To test this, plese take the following steps. All of the following goes into the current Lighting Strike Backtesting Session / Task.",
|
||||
"updated": 1615379790606
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Paper Trading Session",
|
||||
"updated": 1615380274411
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Rigth click over the Backtesting Session node and select switch to Paper Trading so that we can simulate live trading without connecting to the exchange."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Set-up Session Parameters"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Since you have reinstalled the market in order for the task of the Webhooks bot to appear at the Master Trading Mine Tasks, the setup for the Lighting Strike strategy needs to be fixed. (Assuming you are at the Getting Started Workspace). This is what we are going to do:",
|
||||
"updated": 1615379719899
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Apply this config to your Session Base Asset",
|
||||
"updated": 1615379980416
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"initialBalance\": 0\n}",
|
||||
"updated": 1615382028446
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Apply this config to the Session Quoted Asset",
|
||||
"updated": 1615379973089
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"initialBalance\": 1\n}",
|
||||
"updated": 1615380003924
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Apply this config to the Time Range",
|
||||
"updated": 1615380023496
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"initialDatetime\": \"2020-09-01\",\n \"finalDatetime\": \"2030-09-02\"\n}",
|
||||
"updated": 1615380126836
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The initialDatetime will be ingoned because we are running a Paper Trading Session. The important thing is that the finalDatetime is in the future.",
|
||||
"updated": 1615380159343
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Apply this config to the Time Frame",
|
||||
"updated": 1615380180549
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"label\": \"01-min\"\n}",
|
||||
"updated": 1615380196254
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Set-up the Strategy for Webhooks Signals",
|
||||
"updated": 1615380571676
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Inside the Lighting Strike trading system locate the Trigger On Event, and paste the following into the Javascript Node of the only condition it has.",
|
||||
"updated": 1615380721252
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "chart.atAnyTimeFrame.externalSignal.message === \"TRIGGER ON\"",
|
||||
"updated": 1615380737459
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "What we are doing here is setting the strategy to be triggered once an external signal with the message TRIGGER ON is received via the Webhook Sensor Bot."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Run the Data Mining Tasks"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For this test, since we are Paper Trading, we will need a live stream of data from the exchange. We don't need to run all the Task of Mater Data Mining, only the ones needed by the Lighting Strike strategy:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Exchange Raw Data"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Candles Volumens"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Resistances and Supports"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Webhooks "
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Run Task and Session"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Run Task and the Session, and monitor the chart that was called Backtesting (now that is our Papertrading session), at the end of the market at the 1 minute time frame. Turn on the Episodes layer and wait for a few minutes until you see the Episode icons appear at the charts.",
|
||||
"updated": 1615380482184
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Before running the task and session, delete the data at "
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "Data-Storage\\Project\\Superalgos\\Data-Mine\\Masters\\Webhooks",
|
||||
"updated": 1615381701627
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "This is not necesary the first time you run this, but if you are repeating this test, you will avoid confusions since the file of signals will be accumulating the test messages you send, and at the strategy we are not checking for the age of the messages, so it is a good idea to delete this data every time you try this procedure.",
|
||||
"updated": 1615381726583
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Set-up the Signals Provider",
|
||||
"updated": 1615380812487
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "At the Crypto Ecosystem, paste the following config to the Signals Provider.",
|
||||
"updated": 1615380855069
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "{\n \"webhookURL\": \"Webhook/New-Message/Trading-View/binance/BTC-USDT\",\n \"testMessage\": \"TRIGGER ON\"\n}",
|
||||
"updated": 1615380896874
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This means that when you send this test message, you will be delivering the TRIGGER ON signal expected by the strategy."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Ready to Send the Test Message TRIGGER ON",
|
||||
"updated": 1615381087734
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Go to the charts again an turn on the Strategies layer. You should not see anything at the charts since no strategy has been triggered.",
|
||||
"updated": 1615381066133
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Now you can send the test message."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "After you see the confirmation at the UI that the message was sent, check the Client's console to verify the message was received. Then wait until the message is picked up by the Webhooks Sensor Bot. Then wait until the Trading Bot runs again."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Go to the charts and wait until it plots the icons of the strategy, confirming that the strategy was triggered by the test message you sent."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "If all this worked, it means that it will work if the message comes from Trading View or other Signal Provider too."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Set-up your Firewall / Rounter to accept Incoming Connections"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As you might have imagined, you will need to open a port at your rounter / firewall to accept incomming connections from the signal provider's servers (like Trading View for instance). This is what allows that server to connect to the server where the Client is running, enabling the Client to receive those signals."
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "How you configure your Rounter / Firewall is up to you, and it depends on your network setup. You will need to do your research for details on how to do it, because it depends on which rounter / firewall you are using. We suggest you to include on the rules of your Firewall / Rounter the domain name or IP address of the Signal provider, so that nobody else can connect to the Client's http interface, which has, beyond Webhooks other features you don't want to expose openly to the world without restrictions.",
|
||||
"updated": 1615368540044
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "What we can tell you regarding this, is that the Superalgos Client is running a very simple http server at the port configured at the Environment.js file."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Set-up Alerts / Messages at the Signals Provider",
|
||||
"updated": 1615368585310
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -182,15 +552,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "http://182.45.73.1:34247/Webhook/New-Message/Trading-View/Binance/BTC-USDT"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Set-up Your Network to Accept Incoming Connections"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Needless to say, you need to configure your network / router / firewall to allow incoming webhook messages on the corresponding port."
|
||||
"text": "http://182.45.73.1:34247/Webhook/New-Message/Trading-View/binance/BTC-USDT",
|
||||
"updated": 1615371762205
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Direction",
|
||||
"updated": 1609950210690
|
||||
"text": "Direction"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -18,7 +17,12 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, a session establishes an outgoing reference with a trading system. This allows the session to access the information within the whole trading system hierarchy, including strategies. At the trading system level, the same reference is viewed as an incoming reference."
|
||||
"text": "For example, a Backtesting Session establishes an outgoing reference with a Trading System. This allows the session to access the information within the whole trading system hierarchy, including strategies. At the trading system level, the same reference is viewed as an incoming reference.",
|
||||
"updated": 1615795085518
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "A node may produce only one outgoing reference, however, it may take several incoming references."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -30,11 +34,18 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Examples of internal references may be found in the data mine and crypto ecosystem hierarchies. For example, let’s briefly look into one such case within a plotter module:"
|
||||
"text": "Examples of internal references may be found in the Data Mine and Crypto Ecosystem hierarchies. For example, let’s briefly look into one such case within a Plotter Module.",
|
||||
"updated": 1615795128743
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The capture below shows the shapes node and several offspring nodes: on one hand, several polygons; on the other hand, the chart points node."
|
||||
"text": "The capture below shows the Shapes node and several offspring nodes: on one hand, several Polygon nodes; on the other hand, the Chart Points node.",
|
||||
"updated": 1615795168459
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Docs/design-space/shapes-node-references.gif",
|
||||
"updated": 1615796201734
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -42,12 +53,32 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This means that the node shapes feature several internal references."
|
||||
"text": "This means that the node Shapes feature several internal references.",
|
||||
"updated": 1615796711778
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": " The backup, clone and share operations make different uses of the properties of references. We will cover the three of them extensively so that you may make the most of these features.",
|
||||
"updated": 1609950276151
|
||||
"text": "The backup, clone and share operations make different uses of the properties of references. We will cover the three of them extensively so that you may make the most of these features.",
|
||||
"updated": 1615796558622
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Graphical Representation",
|
||||
"updated": 1615796579270
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "References are graphically represented with faint grey dotted lines, but they are not visible by default. References become visible when you hover the mouse pointer on a node that has a reference, or when activating the display of all references with the following key combination: ",
|
||||
"updated": 1615827008604
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Ctrl + Shift + Alt + Key-R"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "For references to be visible, both nodes involved in the reference must be visible.",
|
||||
"updated": 1615796621593
|
||||
},
|
||||
{
|
||||
"style": "Anchor",
|
||||
|
||||
@@ -14,19 +14,23 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When you back up a single node, a structure of nodes, a complete hierarchy or even the workspace, all existing references are stored in the resulting JSON file."
|
||||
"text": "When you back up a Node, a structure of nodes, a complete hierarchy, or even the Workspace, all existing references are stored in the resulting JSON file.",
|
||||
"updated": 1615823255327
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When you restore a workspace backup, the current workspace is discarded entirely and replaced with the backup. Now, let’s see what happens when you restore anything other than a workspace, that is, any of the data structures contained in the workspace."
|
||||
"text": "When you restore a workspace backup, the current workspace is replaced with the backup.",
|
||||
"updated": 1615820832685
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In particular, what we want to analyze is what happens with each type of reference that may be present in the structure."
|
||||
"text": "Now, let’s see what happens when you restore anything other than a workspace, that is, any of the data structures contained in the workspace. What we want to analyze is what happens with references that may be present in the structure, in particular, with the different types of references.",
|
||||
"updated": 1615820914384
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "What happens with each type of reference when the back up is restored varies depending on one factor: the original structure is present in the workspace, or instead, it has been deleted prior to restoring the backup."
|
||||
"style": "Success",
|
||||
"text": "When a backup is restored, what happens with each type of reference varies depending on one factor: Is the original structure present in the workspace? Or has the structure been deleted before restoring the backup?",
|
||||
"updated": 1615823276285
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -34,11 +38,13 @@
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Outgoing references are kept no matter if the original structure of nodes still exists or not."
|
||||
"text": "Outgoing references are kept intact no matter if the original structure of nodes still exists or not.",
|
||||
"updated": 1615821071450
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, in a task set up for running a testing session, the trading bot process instance references the trading bot Multi-Period process, and the session references a trading sytem."
|
||||
"text": "For example, in a Task set up to run a Backtesting Session, the Trading Process Instance references the Trading Bot Multi-Period process, the Trading System Reference references a Trading System, and the Trading Engine Reference references the Trading Engine. These are all outgoing references relative to the structure of nodes that make up a Task.",
|
||||
"updated": 1615823380296
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
@@ -47,11 +53,13 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As the capture above shows, when restoring the backup of a task, both outgoing references are maintained, even when the original task has not been deleted."
|
||||
"text": "As the capture above shows, when restoring the backup of a Task, the three outgoing references are maintained, even when the original task has not been deleted.",
|
||||
"updated": 1615821379213
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This means that restoring a back up is a viable way to duplicate structures of nodes with outgoing references when you expect outgoing references to be preserved."
|
||||
"style": "Success",
|
||||
"text": "This means that restoring a backup is a viable way to duplicate structures of nodes with outgoing references when you expect outgoing references to be preserved.",
|
||||
"updated": 1615821244593
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -63,7 +71,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let’s take a trading system as an example. Trading systems usually have several incoming references originating at different testing and live trading sessions."
|
||||
"text": "Let’s take a Trading System as an example. Trading systems usually have several incoming references originating at different testing and live trading sessions.",
|
||||
"updated": 1615821415989
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
@@ -72,11 +81,13 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The capture above shows that restoring a backup of a trading system when the orginal definition is still in the workspace causes the incoming references to be lost."
|
||||
"text": "The capture above shows that restoring a backup of a trading system when the original definition is still in the workspace causes the incoming references to be lost. This is because the backup is restored with new IDs on each node.",
|
||||
"updated": 1615822161951
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "However, as the capture below shows, if the original structure of nodes is deleted before the backup is restored, then the incoming references are restored as well."
|
||||
"text": "However, as the capture below shows, if the original structure of nodes is deleted before the backup is restored, then the incoming references are restored as well. This is because deleting the original structure releases the IDs of the nodes involved and allows recreating the structure with the same IDs each of the nodes used to have.",
|
||||
"updated": 1615822180175
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
@@ -89,11 +100,13 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Internal references are kept internally only when the original structure of nodes is deleted before restoring the backup. If the original structure of nodes is present, then the references will point to the original nodes on the original structure of nodes."
|
||||
"text": "Internal references remain to be internal references only when the original structure of nodes is deleted before restoring the backup. If the original structure of nodes is present, then the references will point to the original nodes on the original structure of nodes.",
|
||||
"updated": 1615822737609
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let’s see what happens when we restore a backup of a shapes node without deleting the original node first:"
|
||||
"text": "Let’s see what happens when we restore a backup of a Shapes node without deleting the original node first:",
|
||||
"updated": 1615822610298
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
@@ -102,7 +115,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As expected, the references from vertices in the restored backup do not point to the points in the same structure, but instead point to the original points in the original strucutre."
|
||||
"text": "As expected, the references from vertices in the restored backup do not point to the points in the same structure, but instead, point to the original points in the original structure.",
|
||||
"updated": 1615823436326
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -113,6 +127,11 @@
|
||||
"text": "GIFs/Superalgos/Docs/design-space/backups-05.gif",
|
||||
"updated": 1611490016934
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "To understand this behavior you must consider —again— what happens with the IDs of the nodes involved! In the first case, when you delete the structure of nodes before the backup is restored, the IDs are freed so that when the backup is restored, the nodes may be restored with the same IDs they used to have. This allows for the references to be kept as they used to be. In the second case, the IDs are already taken and the nodes are created with new IDs. This results in the references pointing to the original nodes, instead of the ones that were restored from the backup.",
|
||||
"updated": 1615823179782
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Conclusion"
|
||||
@@ -123,8 +142,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "However, the tool’s particular behavior when restoring a backup without deleting the original structure may be of use in certain ocassions. In such cases, the backup feature behaves differently than the clone feature.",
|
||||
"updated": 1611490099609
|
||||
"text": "However, the tool’s particular behavior when restoring a backup without deleting the original structure may be of use on certain occasions. In such cases, the backup feature behaves differently than the clone feature.",
|
||||
"updated": 1615823501537
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
"pageNumber": "2",
|
||||
"type": "Clones",
|
||||
"definition": {
|
||||
"text": "The clone feature is designed to produce copies of data structures when you need to replicate nodes and expect the copies to behave similarly to the original.",
|
||||
"updated": 1611490308337
|
||||
"text": "The clone feature is designed to produce copies of data structures when you need to replicate structures of nodes and expect the copies to behave similarly to the original.",
|
||||
"updated": 1615832633335
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
@@ -17,8 +17,9 @@
|
||||
"text": "We will analyze the case of clones under the same lens we analyzed how backups work: we will study how clones treat outgoing, incoming and internal references."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Unlike with backups, clones behave in the same way independently of the existence of the original structure of nodes in the workspace, therefore, we will not make such distinction in the following paragraphs."
|
||||
"style": "Note",
|
||||
"text": "Unlike backups, clones behave in the same way independently of the existence of the original structure of nodes in the workspace, therefore, we will not make such distinction in the following paragraphs.",
|
||||
"updated": 1615832413196
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -34,7 +35,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The same example as with backups apply: cloning a task running a session produces a copy of the task with the trading bot process instance maintaining the reference to the trading bot Multi-Period process, and the session maintaining the reference with the corresponding trading system."
|
||||
"text": "The same example as with backups apply: cloning a Task running a Backtesting Session produces a copy of the Task with the Trading Process Instance maintaining the reference to the Trading Bot Multi-Period process, Trading Session Reference maintaining the reference to the corresponding Trading System, and the Trading Engine Reference keeping the reference to the Trading Engine hierarchy.",
|
||||
"updated": 1615832824246
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
@@ -51,7 +53,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let’s go back to the example of a trading system, like we did when exploring backups:"
|
||||
"text": "Let’s go back to the example of a Trading System, like we did when exploring backups:",
|
||||
"updated": 1615838266411
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
@@ -72,7 +75,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Going back to the shapes node example, the capture below shows how restonring a clone keeps internal references intact:"
|
||||
"text": "Going back to the shapes node example, the capture below shows how restoring a clone keeps internal references intact:",
|
||||
"updated": 1615838297924
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"topic": "Tested Exchanges",
|
||||
"pageNumber": "1",
|
||||
"type": "Binance Test Status",
|
||||
"definition": {
|
||||
"text": "Binance is fully tested for data mining and trading.",
|
||||
"updated": 1615141847424
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Properties",
|
||||
"updated": 1615143100216
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1-min OHLCVs Capability [*]: Yes."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Market History: Starting on September 2017.",
|
||||
"updated": 1615142912901
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading Capability [**]: Yes.",
|
||||
"updated": 1615143016205
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Comments: Fully tested. Starting with Binance is recommended as the experience is seamless.",
|
||||
"updated": 1615142951363
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[*] The ability to fetch historic data for backtesting purposes has been verified."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[**] The ability to run strategies in live-trading mode has been verified."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Configuration"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"codeName\": \"binance\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}",
|
||||
"updated": 1615143066280
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"topic": "Tested Exchanges",
|
||||
"pageNumber": "2",
|
||||
"type": "FTX Test Status",
|
||||
"definition": {
|
||||
"text": "FTX is tested for data mining but not for live trading",
|
||||
"updated": 1615204721150
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Properties",
|
||||
"updated": 1615143100216
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1-min OHLCVs Capability [*]: Yes",
|
||||
"updated": 1615204617519
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Market History: Starting on September 2019",
|
||||
"updated": 1615204614502
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading Capability [**]: Unknown",
|
||||
"updated": 1615204866750
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Comments: Raw Data mining can be slow due to exchange restrictions on their API that limit the number of data it can be requested via Rest API",
|
||||
"updated": 1615205045729
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[*] The ability to fetch historic data for backtesting purposes has been verified."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[**] The ability to run strategies in live-trading mode has not been verified.",
|
||||
"updated": 1615211002861
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Configuration"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"codeName\": \"ftx\"\n}",
|
||||
"updated": 1615204693035
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"topic": "Tested Exchanges",
|
||||
"pageNumber": "3",
|
||||
"type": "Binance-US Test Status",
|
||||
"definition": {
|
||||
"text": "Binance US is tested for data mining and live trading",
|
||||
"updated": 1615210764406
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Properties",
|
||||
"updated": 1615143100216
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1-min OHLCVs Capability [*]: Yes",
|
||||
"updated": 1615204617519
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Market History: Starting on Genuary 2020",
|
||||
"updated": 1615210971704
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading Capability [**]: Yes",
|
||||
"updated": 1615210793722
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Comments: Raw Data mining can be slow due to exchange restrictions on their API that limit the number of data it can be requested via Rest API",
|
||||
"updated": 1615205045729
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[*] The ability to fetch historic data for backtesting purposes has been verified."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[**] The ability to run strategies in live-trading mode has not been verified.",
|
||||
"updated": 1615210884706
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Configuration"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"codeName\": \"binanceus\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}",
|
||||
"updated": 1615210940971
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"topic": "Tested Exchanges",
|
||||
"pageNumber": "4",
|
||||
"type": "Bitfinex Test Status",
|
||||
"definition": {
|
||||
"text": "Bitfinex is tested for data mining but not for live trading",
|
||||
"updated": 1615211117153
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Properties",
|
||||
"updated": 1615143100216
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1-min OHLCVs Capability [*]: Yes",
|
||||
"updated": 1615204617519
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Market History: Starting on Genuary 2020",
|
||||
"updated": 1615211056787
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading Capability [**]: Unknown",
|
||||
"updated": 1615204866750
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Comments: Raw Data mining can be slow due to exchange restrictions on their API that limit the number of data it can be requested via Rest API",
|
||||
"updated": 1615205045729
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[*] The ability to fetch historic data for backtesting purposes has been verified."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[**] The ability to run strategies in live-trading mode has not been verified.",
|
||||
"updated": 1615211026605
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Configuration"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"codeName\": \"bitfinex\",\n \"API\": [\n {\n \"rateLimit\": 999\n }\n ]\n}",
|
||||
"updated": 1615211032603
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"topic": "Tested Exchanges",
|
||||
"pageNumber": "5",
|
||||
"type": "Kucoin Test Status",
|
||||
"definition": {
|
||||
"text": "Kucoin is not tested for data mining nor for live trading",
|
||||
"updated": 1615211178818
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Properties",
|
||||
"updated": 1615143100216
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1-min OHLCVs Capability [*]: Yes",
|
||||
"updated": 1615204617519
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Market History: 1 day",
|
||||
"updated": 1615211188110
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading Capability [**]: Unknown",
|
||||
"updated": 1615204866750
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Comments: While testing with standard configuration it was possible to fetch 1 day of historical Raw Data",
|
||||
"updated": 1615211286656
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[*] The ability to fetch historic data for backtesting purposes has not been verified",
|
||||
"updated": 1615211296452
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[**] The ability to run strategies in live-trading mode has not been verified",
|
||||
"updated": 1615211304255
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Configuration"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"codeName\": \"kucoin\"\n}",
|
||||
"updated": 1615211313657
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"topic": "Tested Exchanges",
|
||||
"pageNumber": "6",
|
||||
"type": "Luno Test Status",
|
||||
"definition": {
|
||||
"text": "Luno is tested for data mining and for live trading",
|
||||
"updated": 1615550142553
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Properties",
|
||||
"updated": 1615143100216
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1-min OHLCVs Capability [*]: Yes",
|
||||
"updated": 1615204617519
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Market History: Unknown",
|
||||
"updated": 1615204614502
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading Capability [**]: Yes",
|
||||
"updated": 1615550165906
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Comments: Raw Data mining is extremely slow due to exchange restrictions on their API that limit the number of data it can be requested via Rest API. One day of Raw Data takes about 5 minutes to download. Keep this in mind when setting a start date. The reason for this is because they do not support fetching of OHCLV data - this data has to be compiled by fetching individual trades. The fetching of trades is limited to 100 trades per request, and the rate limit is 1 second.",
|
||||
"updated": 1615456853257
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[*] The ability to fetch historic data for backtesting purposes has been verified.",
|
||||
"updated": 1615456911815
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[**] The ability to run strategies in live-trading mode is now possible. Ensure that the version of the CCXT library being used by Superalgos is 1.42.77 or better - earlier versions of this library did not correctly apply the precision settings of the exchange in the amounts specified for creating orders.",
|
||||
"updated": 1615550355806
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Configuration"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"codeName\": \"luno\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"useFetchTradesForFetchOHLCVs\": true,\n \"maxTradesPerFetch\": 100,\n \"limit\": 200,\n \"rateLimit\": 1100\n }\n ]\n}",
|
||||
"updated": 1615211372349
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"topic": "Tested Exchanges",
|
||||
"pageNumber": "7",
|
||||
"type": "Kraken Test Status",
|
||||
"definition": {
|
||||
"text": "Kraken is tested for data mining but not for live trading",
|
||||
"updated": 1615204721150
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Properties",
|
||||
"updated": 1615143100216
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1-min OHLCVs Capability [*]: Yes",
|
||||
"updated": 1615204617519
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Market History: Unknown",
|
||||
"updated": 1615204614502
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading Capability [**]: Unknown",
|
||||
"updated": 1615204866750
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Comments: With standard settings only one day worth of Raw Data is fetched. To retrieve Raw Data in Kraken, pairs in config are reversed. Backtesting and Live Trading behaviour unknown",
|
||||
"updated": 1615278620667
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[*] The ability to fetch historic data for backtesting purposes has not been verified",
|
||||
"updated": 1615211359233
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[**] The ability to run strategies in live-trading mode has not been verified",
|
||||
"updated": 1615211364516
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Configuration"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"codeName\": \"USDT/BTC\"\n}",
|
||||
"updated": 1615278483740
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"topic": "Tested Exchanges",
|
||||
"pageNumber": "8",
|
||||
"type": "Bittrex Test Status",
|
||||
"definition": {
|
||||
"text": "Bittrex is not fully tested for data mining nor for live trading",
|
||||
"updated": 1615450372178
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Properties",
|
||||
"updated": 1615143100216
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1-min OHLCVs Capability [*]: Yes",
|
||||
"updated": 1615204617519
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Market History: Unknown",
|
||||
"updated": 1615450231832
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading Capability [**]: Unknown",
|
||||
"updated": 1615204866750
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Comments: Raw Data mining it's extremely slow due to API restriction",
|
||||
"updated": 1615450349464
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[*] The ability to fetch historic data for backtesting purposes has not been verified",
|
||||
"updated": 1615211296452
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[**] The ability to run strategies in live-trading mode has not been verified",
|
||||
"updated": 1615211304255
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Configuration"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"codeName\": \"bittrex\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"limit\": 2\n }\n ]\n}",
|
||||
"updated": 1615450253869
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"topic": "Tested Exchanges",
|
||||
"pageNumber": "9",
|
||||
"type": "CoinbasePro Test Status",
|
||||
"definition": {
|
||||
"text": "Coinbase Pro is not fully tested for data mining nor for live trading",
|
||||
"updated": 1615453123690
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Properties",
|
||||
"updated": 1615143100216
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1-min OHLCVs Capability [*]: Yes",
|
||||
"updated": 1615204617519
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Market History: Unknown",
|
||||
"updated": 1615453086807
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trading Capability [**]: Unknown",
|
||||
"updated": 1615204866750
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Comments: Raw Data fetching extremely slow due to API restrictions, see config",
|
||||
"updated": 1615453110186
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[*] The ability to fetch historic data for backtesting purposes has not been fully verified",
|
||||
"updated": 1615453130798
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "[**] The ability to run strategies in live-trading mode has not been verified",
|
||||
"updated": 1615211304255
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Configuration"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"codeName\": \"coinbasepro\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"limit\": 300\n }\n ]\n}",
|
||||
"updated": 1615453067170
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56,7 +56,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Make sure you set the time scale to manual mode and adjust it so that fewer candles are displayed on the screen. Try switching the time frame box to the higher time frames so that candle density decreases."
|
||||
"text": "Make sure you set the Time Scale to manual mode and adjust it so that fewer candles are displayed on the screen. Try switching the time frame box to the higher time frames so that candle density decreases.",
|
||||
"updated": 1615810255059
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"topic": "User Examples for Stop Loss ",
|
||||
"pageNumber": 1,
|
||||
"type": " Trailing Stop Loss - Percentage of Rate",
|
||||
"definition": {
|
||||
"text": "A Trailing Stop Loss tracks the rate and sets the Stop Loss a given distance away from it",
|
||||
"updated": 1615285882641
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Change the \"trailingStopLoss\" value to what you see fit.",
|
||||
"updated": 1615286541864
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Trailing Stop Loss for a Long Position"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "\nlet trailingStopLoss = 3 // Set the percentage you wish your Trailing Stop Loss to trail\n\nif ( chart.at01min.candle.close * ( 1 - (trailingStopLoss / 100) ) > tradingEngine.tradingCurrent.position.stopLoss.value ) {\nchart.at01min.candle.close * ( 1 - (trailingStopLoss / 100) )\n}\nelse {\ntradingEngine.tradingCurrent.position.stopLoss.value\n}",
|
||||
"updated": 1615286314820
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "For a Long Position we want our Stop Loss below the actual rate",
|
||||
"updated": 1615286643236
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Trailing Stop Loss for a Short Position"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "let trailingStopLoss = 3 // Set the percentage you wish your Trailing Stop Loss to trail\n\nif ( chart.at01min.candle.close * ( 1 + (trailingStopLoss / 100) ) < tradingEngine.tradingCurrent.position.stopLoss.value ) {\nchart.at01min.candle.close * ( 1 + (trailingStopLoss / 100) )\n}\nelse {\ntradingEngine.tradingCurrent.position.stopLoss.value\n}",
|
||||
"updated": 1615297661487
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "For a Short Position we want our Stop Loss above the actual rate",
|
||||
"updated": 1615286643236
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"topic": "User Examples for Stop Loss ",
|
||||
"pageNumber": 2,
|
||||
"type": " Trailing Stop Loss - Risk of Total Quoted Balance",
|
||||
"definition": {
|
||||
"text": "This Trailing Stop Loss sets the Stop Loss according to the percentage you are willing to risk out of your Total Quoted Balance",
|
||||
"updated": 1615287509462
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Change the \"riskPercentage\" value to what you see fit",
|
||||
"updated": 1615288038247
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Risk of Total Quoted Balance"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The idea is based upon that with each position you take, you only want to risk a certain percentage out of your total balance."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Given that you might take several positions, this code sets the stop loss at the point where the loss would be equal to the Risk Percentage out of your Total Quoted Balance."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Example for a Long Position"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "\nlet riskPercentage = 2\n\nif ( tradingEngine.tradingCurrent.position.entryTargetRate.value * (1 - (( tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value * (riskPercentage / 100)) / tradingEngine.tradingCurrent.strategyOpenStage.stageQuotedAsset.sizeFilled.value)) > tradingEngine.tradingCurrent.position.stopLoss.value ) \n\n{\ntradingEngine.tradingCurrent.position.entryTargetRate.value * (1 - (( tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value * (riskPercentage / 100)) / tradingEngine.tradingCurrent.strategyOpenStage.stageQuotedAsset.sizeFilled.value))\n}\n\nelse {\ntradingEngine.tradingCurrent.position.stopLoss.value\n}",
|
||||
"updated": 1615287799360
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Example for a Short Position"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "let riskPercentage = 2\n\nif ( tradingEngine.tradingCurrent.position.entryTargetRate.value * (1 + (( tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value * (riskPercentage / 100)) / tradingEngine.tradingCurrent.strategyOpenStage.stageQuotedAsset.sizeFilled.value)) < tradingEngine.tradingCurrent.position.stopLoss.value ) \n\n{\ntradingEngine.tradingCurrent.position.entryTargetRate.value * (1 + (( tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value * (riskPercentage / 100)) / tradingEngine.tradingCurrent.strategyOpenStage.stageQuotedAsset.sizeFilled.value))\n}\n\nelse {\ntradingEngine.tradingCurrent.position.stopLoss.value\n}",
|
||||
"updated": 1615297434458
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"topic": "User Examples for Stop Loss ",
|
||||
"pageNumber": 3,
|
||||
"type": " Trailing Stop Loss - Initial Stop Loss, Risk and Targets Combo",
|
||||
"definition": {
|
||||
"text": "Setting an initial Risk Percentage of your Total Quoted Balance, after reaching the first Profit Target your first Trailing Stop Loss takes place. After reaching second Profit Target, we'll set the Trailing Stop Loss to a fixed percentage.",
|
||||
"updated": 1615298179984
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Initial Stop Loss, Risk and Target Combo",
|
||||
"updated": 1615297964577
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The idea of this is to initially give the position some space to move."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When ever the position reaches the first Profit Target, it will use a Trailing Stop Loss set to the Profit divided by your Profit Divider. After reaching the second Profit Target, the Trailing Stop Loss will use a fixed percentage."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Example for a Long Position"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "\nriskPercentage = 1 // Initial Stop Loss is set by this Risk Percentage out of your Total Quoted Balance\n\nprofitTarget1 = 0.5 // First Percent Profit\nprofitDivider = 2 // The profit will be divided with this value and set your Stop Loss to the Entry Rate + Half Profit\n\nprofitTarget2 = 5 // Second Percent Profit\ntrailingStopLoss = 2.5 // Fixed Trailing Percentage\n\nif ( chart.at01min.candle.close > (tradingEngine.tradingCurrent.position.entryTargetRate.value * (1 + (profitTarget2 / 100))) && tradingEngine.tradingCurrent.position.stopLoss.value < (chart.at01min.candle.close * (1 - (trailingStopLoss2 / 100))) ) {\n chart.at01min.candle.close * (1 - (trailingStopLoss / 100))\n}\n\nelse if ( chart.at01min.candle.close > (tradingEngine.tradingCurrent.position.entryTargetRate.value * (1 + (profitTarget1 / 100))) && tradingEngine.tradingCurrent.position.stopLoss.value < chart.at01min.candle.close - ( (chart.at01min.candle.close - tradingEngine.tradingCurrent.position.entryTargetRate.value) / profitDivider) ) {\n chart.at01min.candle.close - ( (chart.at01min.candle.close - tradingEngine.tradingCurrent.position.entryTargetRate.value) / profitDivider)\n}\n\nelse {\n tradingEngine.tradingCurrent.position.entryTargetRate.value * (1 - (( tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value * (riskPercentage / 100)) / tradingEngine.tradingCurrent.strategyOpenStage.stageQuotedAsset.sizeFilled.value))\n}",
|
||||
"updated": 1615298020120
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Example for a Short Position",
|
||||
"updated": 1615298191803
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "\nriskPercentage = 1 // Initial Stop Loss is set by this Risk Percentage out of your Total Quoted Balance\n\nprofitTarget1 = 0.5 // First Percent Profit\nprofitDivider = 2 // The profit will be divided with this value and set your Stop Loss to the Entry Rate + Half Profit\n\nprofitTarget2 = 5 // Second Percent Profit\ntrailingStopLoss = 2.5 // Fixed Trailing Percentage\n\nif ( chart.at01min.candle.close < (tradingEngine.tradingCurrent.position.entryTargetRate.value * (1 - (profitTarget2 / 100))) && tradingEngine.tradingCurrent.position.stopLoss.value > (chart.at01min.candle.close * (1 + (trailingStopLoss2 / 100))) ) {\n chart.at01min.candle.close * (1 + (trailingStopLoss / 100))\n}\n\nelse if ( chart.at01min.candle.close < (tradingEngine.tradingCurrent.position.entryTargetRate.value * (1 - (profitTarget1 / 100))) && tradingEngine.tradingCurrent.position.stopLoss.value > chart.at01min.candle.close + ( (chart.at01min.candle.close - tradingEngine.tradingCurrent.position.entryTargetRate.value) / profitDivider) ) {\n chart.at01min.candle.close + ( (chart.at01min.candle.close + tradingEngine.tradingCurrent.position.entryTargetRate.value) / profitDivider)\n}\n\nelse {\n tradingEngine.tradingCurrent.position.entryTargetRate.value * (1 + (( tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value * (riskPercentage / 100)) / tradingEngine.tradingCurrent.strategyOpenStage.stageQuotedAsset.sizeFilled.value))\n}",
|
||||
"updated": 1615298026442
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "1",
|
||||
"type": "Tutorial Step - Back to School!",
|
||||
"definition": {
|
||||
"text": "I hear my friend the Welcome tutorial showed you around and mesmerized you with a few cheap tricks... What a show-off!",
|
||||
"updated": 1615310208456,
|
||||
"icon": {
|
||||
"name": "tutorial",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Well, now it's time to work!",
|
||||
"updated": 1615310150633
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Learning Superalgos is quite an endeavor! Not because it's difficult, but because the system is vast, extremely flexible, and is built on a new paradigm that is not obvious in the beginning..."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "But don't worry! If you pay attention and do all available tutorials, you will be able to tackle the learning curve like a champ!",
|
||||
"updated": 1615308273598
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "2",
|
||||
"type": "Tutorial Step - From the Ground Up",
|
||||
"definition": {
|
||||
"text": "To be fair, my welcoming friend taught you many of the basic operations that you need to know to move around and feel comfortable with the interface...",
|
||||
"updated": 1615311043130,
|
||||
"icon": {
|
||||
"name": "tutorial",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "With me, you are going to complete your basic education! Once you finish this tutorial, you will be ready to start learning how to build your own Trading System... That's what all is about after all, right?",
|
||||
"updated": 1615459292734
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "We will focus on completing the overview of the interface, dealing with workspaces, backups, plugins, and more!",
|
||||
"updated": 1615311348229
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Let's get on with it!",
|
||||
"updated": 1615311356804
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "3",
|
||||
"type": "Tutorial Step - Let's Start With the Menu",
|
||||
"definition": {
|
||||
"text": "The left-hand side of a node's menu is common to most nodes. The right-hand side, however, is specific to the type of node!",
|
||||
"updated": 1615315122923,
|
||||
"icon": {
|
||||
"name": "unpinned-node",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Let's take a close look at the left-hand side!",
|
||||
"updated": 1615313694440
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The design space functions under the paradigm of a self-organizing workspace in which nodes tend to find their place guided by certain arrangement properties that you may control from the node's menu."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Click the pin button on the top-left corner of the Session Base Asset node. Now drag the node away and release it! Now drag and release any other node without pinning it. See the difference?",
|
||||
"updated": 1615315170878
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "4",
|
||||
"type": "Tutorial Step - Pinned Nodes Can't Dance",
|
||||
"definition": {
|
||||
"text": "When a node is pinned, it becomes fixed to a position regardless of the setting of the rest of the arrangement properties!",
|
||||
"icon": {
|
||||
"name": "pinned-node",
|
||||
"project": "Superalgos"
|
||||
},
|
||||
"updated": 1615315595276
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may pin a node, a structure of nodes, and even the complete hierarchy. Let's try something else...",
|
||||
"updated": 1615316007384
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Pin the Trading Parameters node and drag it away!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Notice how all offspring nodes follow the parent node. However, the Session Base Asset node remains in position! Before we move on, unpin all nodes to keep the workspace in order!",
|
||||
"updated": 1615316147113
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "5",
|
||||
"type": "Tutorial Step - Mary Go Round",
|
||||
"definition": {
|
||||
"text": "By default, nodes are locked to a rotational symmetry around their parent node. The symmetry may span 360 degrees or less, depending on the setting!",
|
||||
"updated": 1615316869620,
|
||||
"icon": {
|
||||
"name": "set-angle-to-parent-node-to-360-degrees",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When you click on the Angle to Parent node button, you cycle among five different settings: 360, 180, 90, and 45 degrees, plus the option to dissable the rotational symmetry.",
|
||||
"updated": 1615459469714
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Take a quick look at the setting selected on each of the offspring of the Lightning Strike Backtesting Session node: Trading Parameters, Trading System Reference, and the Trading Engine Reference. They are all set to 180 degrees, right?",
|
||||
"updated": 1615317622421
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "6",
|
||||
"type": "Tutorial Step - 180 Degrees",
|
||||
"definition": {
|
||||
"text": "When all offspring nodes are set to 180 degrees angle, each node takes a slot in a fraction of a circumference spanning 180 degrees, normal to the parent.",
|
||||
"updated": 1615319473489,
|
||||
"icon": {
|
||||
"name": "set-angle-to-parent-node-to-180-degrees",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "But what happens if one of the offspring nodes has a different Angle to Parent setting? Let's run an experiment!",
|
||||
"updated": 1615459555706
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Click once on the Trading Parameters Angle to Parent setting and exit the menu!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The node takes a slot in a smaller angle — 90 degrees! Do the same with the Trading System Reference and Trading Engine Reference nodes!",
|
||||
"updated": 1615318799392
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "7",
|
||||
"type": "Tutorial Step - Node's Independence",
|
||||
"definition": {
|
||||
"text": "Notice how you changed the Angle to Parent setting on different siblings and each of them reacted to the new setting independently from the rest!",
|
||||
"updated": 1615319889017,
|
||||
"icon": {
|
||||
"name": "set-angle-to-parent-node-to-90-degrees",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You control the position of each node from within the node's menu. Not the parent node nor the siblings may affect the position... save for this cool exception:",
|
||||
"updated": 1615459643749
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Go to the Lightning Strike Backtesting Session and select Add Missing Children from the right-hand side of the menu!"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Notice how the Social Bots node inherited the Angle to Parent setting from its closest sibling!",
|
||||
"updated": 1615322906744
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "8",
|
||||
"type": "Tutorial Step - Free-range Nodes",
|
||||
"definition": {
|
||||
"text": "When you select the option to cancel the Angle to Parent setting, the node is free to take any angle relative to its parent and siblings!",
|
||||
"updated": 1615473919848,
|
||||
"icon": {
|
||||
"name": "remove-angle-to-parent-node",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Open the menu of the Trading Parameters node, select the option to cancel the Angle to Parent setting, and move the node in any direction!",
|
||||
"updated": 1615474082667
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "As you can see, the node stays where you leave it, and the dotted line connecting to its parent turns yellow. Notice that both the angle to the parent node and the distance become arbitrary.",
|
||||
"updated": 1615474122131
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "9",
|
||||
"type": "Tutorial Step - Controlling Distances",
|
||||
"definition": {
|
||||
"text": "The next option in the menu controls the distance from the node to its parent. Clicking on the button cycles through options.",
|
||||
"icon": {
|
||||
"name": "set-distance-to-parent-node-to-one",
|
||||
"project": "Superalgos"
|
||||
},
|
||||
"updated": 1615474588252
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The distance from a node to its parent is set relative to the distance from the parent to its parent node. The available options are:",
|
||||
"updated": 1615474735608
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Pink: 0.25X",
|
||||
"updated": 1615474784140
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Orange: 0.5X"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Green: 1X"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Blue: 1.5X"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Red: 2X"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let's say that you choose the green option. The distance from the node to its parent will be the same distance that separates the parent node from its parent!",
|
||||
"updated": 1615475003479
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "10",
|
||||
"type": "Tutorial Step - Play With The Tape!",
|
||||
"definition": {
|
||||
"text": "Try the different distance settings of the Lightning Strike Trading System Reference node! Go ahead! Click the tape button!",
|
||||
"icon": {
|
||||
"name": "trading-system-reference",
|
||||
"project": "Superalgos"
|
||||
},
|
||||
"updated": 1615476811627
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Pretty straightforward, right? Now, what happens when the node you are adjusting has offspring of its own?",
|
||||
"updated": 1615476877641
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Let's find out! Click the Distance to Parent button once on the Trading Parameters node!"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Because you increased the distance separating the Trading Parameters node from the Backtesting Session node, the offspring of the Trading Parameters node also increased proportionally!",
|
||||
"updated": 1615476086180
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "11",
|
||||
"type": "Tutorial Step - How About The Hierarchy?",
|
||||
"definition": {
|
||||
"text": "The reason why the distance to the parent node is relative to the distance of the parent to its parent is so that you may affect long structures of nodes!",
|
||||
"updated": 1615477794893,
|
||||
"icon": {
|
||||
"name": "set-distance-to-parent-node-to-one-and-a-half",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Click once on the Distance to Parent button of the Network node!",
|
||||
"updated": 1615477834548
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Wow! See? These tools allow you full control over how you visually organize hierarchies!",
|
||||
"updated": 1615478179417
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Try canceling the Distance to Parent setting on the Testing Trading Tasks node! As you can see, you may set any arbitrary distance to the parent node, but the angle to the parent remains fixed.",
|
||||
"updated": 1615478515588
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "12",
|
||||
"type": "Tutorial Step - Arrangement Style",
|
||||
"definition": {
|
||||
"text": "The button cycles through several arrangement options that affect where a node is placed in relation to its parent.",
|
||||
"icon": {
|
||||
"name": "set-node-arrangement-to-concave",
|
||||
"project": "Superalgos"
|
||||
},
|
||||
"updated": 1615491939732
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the drawing, the orange dot represents the parent node, and the blue dots represent the node adopting the specific arrangement style.",
|
||||
"updated": 1615492521130
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Concave: This is the default style. The node adopts a slot on a circumsference around its parent node.",
|
||||
"updated": 1615492168857
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Convex: The slot is on a convex curve.",
|
||||
"updated": 1615492208853
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Vertical-Right: On a vertical line to the right.",
|
||||
"updated": 1615492432352
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Vertical-Left: The slot is on a vertical line to the left.",
|
||||
"updated": 1615492424255
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Horizontal-Bottom: On a horizontal line below.",
|
||||
"updated": 1615492441259
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Horizontal-Top: The slot is on a horizontal line above.",
|
||||
"updated": 1615492346954
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"topic": "How to Automate Actions at The Design Space",
|
||||
"pageNumber": "3",
|
||||
"type": "Automating Actions - Adding a Children Node Property",
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "13",
|
||||
"type": "Tutorial Step - Shall We Improve This?",
|
||||
"definition": {
|
||||
"text": "Write a summary for this topic page."
|
||||
"text": "If you experiment with this feature, you will notice that the behavior of each of the settings is not clear or predictable.",
|
||||
"updated": 1615492937986
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "13",
|
||||
"type": "Tutorial Step - Shall We Improve This?",
|
||||
"definition": {
|
||||
"text": "If you experiment with this feature, you will notice that the behavior of each of the settings is not clear or predictable.",
|
||||
"updated": 1615492937986,
|
||||
"icon": {
|
||||
"name": "set-node-arrangement-to-concave",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "The current implementation of this feature is not optimal, and the behavior of some of the options is hard to predict. If you are a developer, this may be a great opportunity to iterate on the existing code and take this feature to a more usable state!",
|
||||
"updated": 1615493927202
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Feel free to try this feature, but you will most likely want to go back to the default setting!",
|
||||
"updated": 1615493850572
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "14",
|
||||
"type": "Tutorial Step - Freeze!",
|
||||
"definition": {
|
||||
"text": "The freeze button makes sense under very specific circumstances: when physics are activated at the level of the Design Space.",
|
||||
"updated": 1615543120064,
|
||||
"icon": {
|
||||
"name": "freeze-structure-of-nodes",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Design Space offers some customization features, one of which is activating the physics of the universe. When physics is on, the whole space becomes alive!",
|
||||
"updated": 1615544003132
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "We won't go into that rabbit hole at this point as it's not in the basic education curriculum!",
|
||||
"updated": 1615544598765
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The freeze option freezes the node’s chain connections with its parent and offspring and connecting lines turn blue. Freezing releases CPU resources when physics animations are on, as the system stops calculating nodes' positions and status.",
|
||||
"updated": 1615544553909
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "15",
|
||||
"type": "Tutorial Step - Let's Talk Backups",
|
||||
"definition": {
|
||||
"text": "Backups are very powerful, and there are multiple use cases! When you click on the backup button, the node and its offspring are saved on a JSON file!",
|
||||
"updated": 1615546227075,
|
||||
"icon": {
|
||||
"name": "backup-entity",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may want to backup a structure of nodes to safeguard your work or to keep a copy of the structure in its current state.",
|
||||
"updated": 1615546257502
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Take a backup of the Lightning Strike trading system and check your downloads folder!",
|
||||
"updated": 1615546438350
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The file is downloaded by the browser and stored in the default Downloads folder. If you take multiple backups of the same file, the browser renames the file with sequential numbers.",
|
||||
"updated": 1615546360738
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "16",
|
||||
"type": "Tutorial Step - Working With Versions",
|
||||
"definition": {
|
||||
"text": "Let's say you want to test a strategy with different sets of parameters, so you take a backup of the Trading Parameters node!",
|
||||
"updated": 1615571330616,
|
||||
"icon": {
|
||||
"name": "hand-drag",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Go ahead and take the backup! Now that you have a backup of all Trading Parameters, you may change any of them knowing that you can always go back to your backup! If you are on Chrome, the backup must be visible in the bottom-left corner of the browser window.",
|
||||
"updated": 1615571301913
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Now drag the backup file and drop it in the Design Space! That's how you restore a backup!",
|
||||
"updated": 1615571393497
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Easy right? In the next step, I'll show you how to get back to using the original version!",
|
||||
"updated": 1615571399267
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "17",
|
||||
"type": "Tutorial Step - Detaching and Attaching",
|
||||
"definition": {
|
||||
"text": "Now follow my lead! We are not really going to test the strategy with different parameters... we are just simulating a use case!",
|
||||
"icon": {
|
||||
"name": "detach-node",
|
||||
"project": "Superalgos"
|
||||
},
|
||||
"updated": 1615571995273
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let's pretend we modified the Trading Parameters and now we want to go back to using the original ones. We already have the backup in the design space — detached from the hierarchy — and we need to replace the existing Trading Parameters node with the backup.",
|
||||
"updated": 1615572909121
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Go to the Trading Parameters node that is currently in use — the one attached to the Backtesting Session node — and click the Detach Node button. The node separates from the hierarchy! You may now move it to the side!",
|
||||
"updated": 1615572965552
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "18",
|
||||
"type": "Tutorial Step - Attaching The Backup",
|
||||
"definition": {
|
||||
"text": "Now we need to attach the backup of the Trading Parameters node to the Backtesting Session. How do we do that?",
|
||||
"icon": {
|
||||
"name": "mouse-right-click",
|
||||
"project": "Superalgos"
|
||||
},
|
||||
"updated": 1615573035743
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Right-click on the Trading Parameters node and pull it closer to the Backtesting session node! Release when you see an orange ring surrounding the Backtesting Session node!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "That's it! The backup of the Trading Parameters node is restored and back in use.",
|
||||
"updated": 1615573476475
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Notice that you may delete the second Trading Parameters node if you wish, or you can keep it on the side for later use.",
|
||||
"updated": 1615573597034
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": "19",
|
||||
"type": "Tutorial Step - Irrelevant Nodes",
|
||||
"definition": {
|
||||
"text": "Nodes that are not attached to a hierarchy are not computed. They exist in the workspace, but they don't affect the workings of the system at any level.",
|
||||
"updated": 1615575416918,
|
||||
"icon": {
|
||||
"name": "detach-node",
|
||||
"project": "Superalgos"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This means that you may keep as many structures of nodes detached from hierarchies, for as long as you wish, keeping them at hand for later use, or for whatever reason.",
|
||||
"updated": 1615580307483
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "A common scenario is keeping multiple versions of certain definitions while building strategies, so that you may test a set of rules and switch to other rules for the next run. You may even keep multiple versions of entire strategies!",
|
||||
"updated": 1615575707975
|
||||
}
|
||||
]
|
||||
}
|
||||