Files
krakentrading/flows_nodered_kraken.json

889 lines
23 KiB
JSON
Raw Normal View History

2020-01-05 19:16:13 -06:00
[
{
"id": "6d543cb4.ed3084",
"type": "tab",
"label": "Kraken Trading",
"disabled": false,
"info": ""
},
2020-01-07 09:22:34 -06:00
{
"id": "d8e8a587.a39408",
"type": "tab",
"label": "HTML Queries",
"disabled": false,
"info": ""
},
{
"id": "af98615f.cf9ce",
"type": "subflow",
"name": "DB Data to HTML Table",
"info": "",
"category": "",
"in": [
{
"x": 20,
"y": 80,
"wires": [
{
"id": "3ff8fa1b.3148f6"
}
]
}
],
"out": [
{
"x": 320,
"y": 240,
"wires": [
{
"id": "71b8fd74.2d9404",
"port": 0
}
]
}
],
"env": [],
"color": "#DDAA99"
},
2020-01-05 19:16:13 -06:00
{
"id": "42702610.230028",
"type": "kraken-credentials",
"z": "",
"name": "DFLT"
},
{
"id": "c0dcbde0.3085",
"type": "sqlitedb",
"z": "",
"db": "KrakenTradingDB.sqlite3",
"mode": "RW"
},
2020-01-07 09:22:34 -06:00
{
"id": "4378beea.a2c7f",
"type": "sqlitedb",
"z": "",
"db": "KrakenTradingDB.sqlite3",
"mode": "RWC"
},
2020-01-05 19:16:13 -06:00
{
"id": "b8c92875.131c58",
"type": "get-server-time",
"z": "6d543cb4.ed3084",
"name": "",
"x": 310,
"y": 240,
"wires": [
[
"63e56415.01466c"
],
[
"1637654a.83336b"
]
]
},
{
"id": "d11eed52.456ac",
"type": "inject",
"z": "6d543cb4.ed3084",
"name": "",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 120,
"y": 240,
"wires": [
[
"b8c92875.131c58"
]
]
},
{
"id": "63e56415.01466c",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 550,
"y": 220,
2020-01-05 19:16:13 -06:00
"wires": []
},
{
"id": "1637654a.83336b",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 560,
"y": 320,
"wires": []
},
{
"id": "978bdbc5.1c3508",
"type": "get-account-balance",
"z": "6d543cb4.ed3084",
"kraken": "42702610.230028",
"name": "",
"x": 340,
"y": 480,
"wires": [
[
"5fd28dbd.7d1504"
],
[
"8d9b208b.f68a7"
]
]
},
{
"id": "5fd28dbd.7d1504",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "Kraken-Balance",
"active": true,
"tosidebar": true,
"console": true,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"x": 600,
"y": 460,
"wires": []
},
{
"id": "8d9b208b.f68a7",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "Kraken Balance ERROR",
"active": true,
"tosidebar": true,
"console": true,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"x": 630,
"y": 540,
"wires": []
},
{
"id": "586b4d14.eca6f4",
"type": "inject",
"z": "6d543cb4.ed3084",
"name": "",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "18000",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 480,
"wires": [
[
"978bdbc5.1c3508"
]
]
},
{
"id": "a669c08c.d0185",
"type": "sqlite",
"z": "6d543cb4.ed3084",
"mydb": "c0dcbde0.3085",
"sqlquery": "msg.topic",
"sql": "",
"name": "",
"x": 890,
"y": 720,
2020-01-05 19:16:13 -06:00
"wires": [
[]
]
},
{
"id": "4f94e60f.4d3838",
"type": "function",
"z": "6d543cb4.ed3084",
"name": "Build Insert Statement",
"func": "msg.topic=\"Insert into KrakenQuotes (Symbol,Data) values ('XETCZUSD','\" + JSON.stringify(msg.payload.XETCZUSD) + \"');\"\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 600,
"y": 760,
2020-01-05 19:16:13 -06:00
"wires": [
[
"853572da.0b0bf",
"a669c08c.d0185"
]
]
},
{
"id": "853572da.0b0bf",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"x": 830,
"y": 780,
"wires": []
},
{
"id": "b6c88df3.41573",
"type": "get-ticker-information",
"z": "6d543cb4.ed3084",
"name": "",
"x": 350,
"y": 1040,
"wires": [
[
"8f27b1c3.3277e",
"1a447d86.305162",
"4f94e60f.4d3838"
],
[
"57c6ead4.4943d4"
]
]
},
{
"id": "b131c158.9b6e5",
"type": "inject",
"z": "6d543cb4.ed3084",
"name": "",
"topic": "",
"payload": "{\"pair\":\"XETCZUSD\"}",
"payloadType": "json",
"repeat": "60",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 160,
"y": 1040,
"wires": [
[
"b6c88df3.41573"
]
]
},
{
"id": "8f27b1c3.3277e",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 590,
2020-01-05 19:16:13 -06:00
"y": 880,
"wires": []
},
{
"id": "57c6ead4.4943d4",
2020-01-05 19:16:13 -06:00
"type": "debug",
"z": "6d543cb4.ed3084",
2020-01-07 09:22:34 -06:00
"name": "Ticker Retrieval Error",
2020-01-05 19:16:13 -06:00
"active": true,
"tosidebar": true,
2020-01-07 09:22:34 -06:00
"console": true,
"tostatus": false,
2020-01-07 09:22:34 -06:00
"complete": "payload",
"targetType": "msg",
"x": 510,
"y": 1100,
"wires": []
},
{
"id": "1a447d86.305162",
"type": "switch",
"z": "6d543cb4.ed3084",
"name": "Initialization Needed?",
"property": "lastExecPrice",
"propertyType": "flow",
"rules": [
{
"t": "null"
},
{
"t": "else"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 560,
"y": 1020,
"wires": [
[
"b14715f9.da01b8"
],
[
"746dd800.489408",
"3fcb4bfe.6d4b84"
]
]
},
{
"id": "b14715f9.da01b8",
"type": "change",
"z": "6d543cb4.ed3084",
"name": "",
"rules": [
{
"t": "set",
"p": "lastExecPrice",
"pt": "flow",
"to": "payload.XETCZUSD.a[0]",
"tot": "msg"
},
{
"t": "set",
"p": "maxVolume",
"pt": "flow",
"to": "10",
"tot": "num"
},
{
"t": "set",
"p": "minVolume",
"pt": "flow",
"to": "0",
"tot": "num"
},
{
"t": "set",
"p": "currVolume",
"pt": "flow",
"to": "0",
"tot": "num"
},
{
"t": "set",
"p": "delta",
"pt": "flow",
"to": "0.1",
"tot": "num"
},
{
"t": "set",
"p": "grosBalance",
"pt": "flow",
"to": "0",
"tot": "num"
},
{
"t": "set",
"p": "commission",
"pt": "flow",
"to": "0",
"tot": "num"
},
{
"t": "set",
"p": "acctBalance",
"pt": "flow",
"to": "100",
"tot": "num"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 840,
"y": 960,
"wires": [
[]
]
},
{
"id": "713645b4.f9ba7c",
"type": "switch",
"z": "6d543cb4.ed3084",
"name": "Action",
"property": "action",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "sell",
"vt": "str"
},
{
"t": "eq",
"v": "buy",
"vt": "str"
},
{
"t": "else"
}
],
"checkall": "true",
"repair": false,
"outputs": 3,
"x": 1050,
"y": 1100,
"wires": [
[
"8fc8be9f.e3552",
"894f2795.914b38"
],
[
"9073f8dd.8a8558",
"e961895.42ab678"
],
[
"1bc0ea09.db8676"
]
]
},
{
"id": "8fc8be9f.e3552",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "gt (Sell)",
"active": true,
"tosidebar": true,
2020-01-07 09:22:34 -06:00
"console": true,
2020-01-05 19:16:13 -06:00
"tostatus": false,
"complete": "true",
"targetType": "full",
"x": 1400,
"y": 1020,
2020-01-05 19:16:13 -06:00
"wires": []
},
{
"id": "9073f8dd.8a8558",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "lt (buy)",
"active": true,
"tosidebar": true,
2020-01-07 09:22:34 -06:00
"console": true,
"tostatus": false,
"complete": "true",
"targetType": "full",
2020-01-07 09:22:34 -06:00
"x": 1400,
"y": 1100,
"wires": []
},
{
"id": "1bc0ea09.db8676",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "small",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"x": 1370,
"y": 1240,
"wires": []
},
{
"id": "746dd800.489408",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "{\"le\":$flowContext('lastExecPrice'),\"cp\":payload.XETCZUSD.a[0] }",
"targetType": "jsonata",
"x": 760,
"y": 1180,
"wires": []
},
{
"id": "37af9cb0.cd7d74",
"type": "inject",
"z": "6d543cb4.ed3084",
"name": "",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 660,
"y": 940,
"wires": [
[
"b14715f9.da01b8"
]
]
},
{
"id": "894f2795.914b38",
"type": "switch",
"z": "6d543cb4.ed3084",
"name": "MinReached?",
"property": "currVolume",
"propertyType": "flow",
"rules": [
{
"t": "gt",
"v": "minVolume",
"vt": "flow"
},
{
"t": "else"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 1500,
"y": 1060,
"wires": [
[
"db4dcb29.89cd38",
"7a524b14.ab2ea4"
],
[
"c6b046f0.da94b8",
"10898ef6.fab381"
]
]
},
{
"id": "c6b046f0.da94b8",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "Not Selling, min Volume reached.",
"active": true,
"tosidebar": true,
2020-01-07 09:22:34 -06:00
"console": true,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"x": 1800,
"y": 1100,
"wires": []
},
{
"id": "db4dcb29.89cd38",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "SELLING!",
"active": true,
"tosidebar": true,
2020-01-07 09:22:34 -06:00
"console": true,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
2020-01-07 09:22:34 -06:00
"x": 1730,
"y": 1020,
"wires": []
},
{
"id": "9ff35104.7db0d",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "BUYING!",
"active": true,
"tosidebar": true,
2020-01-07 09:22:34 -06:00
"console": true,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
2020-01-07 09:22:34 -06:00
"x": 1710,
"y": 1180,
"wires": []
},
{
"id": "e961895.42ab678",
"type": "switch",
"z": "6d543cb4.ed3084",
"name": "MaxReached?",
"property": "currVolume",
"propertyType": "flow",
"rules": [
{
"t": "lt",
"v": "maxVolume",
"vt": "flow"
},
{
"t": "else"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 1500,
"y": 1200,
"wires": [
[
"9ff35104.7db0d",
"11de6ea9.7cbab1"
],
[
"cf8bb8be.0de778",
"b1857f61.f3b9a"
]
]
},
{
"id": "cf8bb8be.0de778",
"type": "debug",
"z": "6d543cb4.ed3084",
"name": "Not buying, max Volume reached.",
"active": true,
"tosidebar": true,
2020-01-07 09:22:34 -06:00
"console": true,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
2020-01-07 09:22:34 -06:00
"x": 1790,
"y": 1260,
"wires": []
},
{
"id": "3fcb4bfe.6d4b84",
"type": "function",
"z": "6d543cb4.ed3084",
"name": "Determine Action",
"func": "//$number(payload.XETCZUSD.a[0]) - $number($flowContext('lastExecPrice'))\n\nconst delta=flow.get('delta'); // how much price move to take action?\nlet askPrice=msg.payload.XETCZUSD.a[0];\nlet bidPrice=msg.payload.XETCZUSD.b[0];\nlet lastExecPrice=flow.get('lastExecPrice');\n\nmsg.lastExecPrice=lastExecPrice;\n\nif (bidPrice>lastExecPrice+delta) {\n msg.action=\"sell\";\n msg.price=bidPrice;\n} else if (askPrice<lastExecPrice-delta) {\n msg.action=\"buy\";\n msg.price=askPrice;\n} else {\n msg.action=\"nothing\";\n}\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 890,
"y": 1100,
"wires": [
[
"713645b4.f9ba7c"
]
]
},
{
"id": "7a524b14.ab2ea4",
"type": "function",
"z": "6d543cb4.ed3084",
"name": "SellAction",
"func": "let commission = flow.get('commission');\nlet grosBalance = flow.get('grosBalance');\nlet acctBalance = flow.get('acctBalance');\nlet delta = flow.get('delta');\n\nlet sellPrice = Number(msg.payload.XETCZUSD.b[0]);\n\ncommission += sellPrice*0.0026;\ngrosBalance -= 1;\nacctBalance += sellPrice;\n\nflow.set('commission',commission);\nflow.set('grosBalance',grosBalance);\nflow.set('acctBalance',acctBalance);\n\nflow.set('lastExecPrice',sellPrice);\nflow.set('currVolume',flow.get('currVolume')-1);\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 1710,
"y": 980,
"wires": [
[]
]
},
{
"id": "11de6ea9.7cbab1",
"type": "function",
"z": "6d543cb4.ed3084",
"name": "BuyAction",
"func": "let commission = flow.get('commission');\nlet grosBalance = flow.get('grosBalance');\nlet acctBalance = flow.get('acctBalance');\nlet delta = flow.get('delta');\n\nlet buyPrice = Number(msg.payload.XETCZUSD.a[0]);\n\ncommission += buyPrice*0.0026;\ngrosBalance += 1;\nacctBalance -= buyPrice;\n\nflow.set('commission',commission);\nflow.set('grosBalance',grosBalance);\nflow.set('acctBalance',acctBalance);\n\nflow.set('lastExecPrice',buyPrice);\nflow.set('currVolume',flow.get('currVolume')+1);\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 1700,
"y": 1140,
"wires": [
[]
]
},
{
"id": "10898ef6.fab381",
"type": "function",
"z": "6d543cb4.ed3084",
"name": "NoSellAction",
"func": "let sellPrice = Number(msg.payload.XETCZUSD.b[0]);\n\nflow.set('lastExecPrice',sellPrice);\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 1730,
"y": 1060,
"wires": [
[]
]
},
{
"id": "b1857f61.f3b9a",
"type": "function",
"z": "6d543cb4.ed3084",
"name": "NoBuyAction",
"func": "let buyPrice = Number(msg.payload.XETCZUSD.a[0]);\n\nflow.set('lastExecPrice',sellPrice);\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 1710,
"y": 1220,
"wires": [
[]
]
2020-01-07 09:22:34 -06:00
},
{
"id": "71b8fd74.2d9404",
"type": "template",
"z": "af98615f.cf9ce",
"name": "HTML",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "<html>\n <head>\n <title>{{payload.title}}</title>\n <style>{{payload.style}}</style>\n </head>\n<body>\n<table border='1'>\n <tr>\n {{#payload.header}}\n <th>{{.}}</th>\n {{/payload.header}}\n </tr>\n {{#payload.data}}\n <tr>\n {{#.}}\n <td><pre>{{.}}</pre></td>\n {{/.}}\n </tr>\n {{/payload.data}}\n</table>\n</body>\n</html>",
"output": "str",
"x": 190,
"y": 240,
"wires": [
[]
]
},
{
"id": "3ff8fa1b.3148f6",
"type": "function",
"z": "af98615f.cf9ce",
"name": "JSON Obj -> Array split Header and Data",
"func": "function toArray(json_data){\n for(var i in json_data)\n result.push([i, json_data [i]]);\n}\n\nfunction getHeader(json_data){\n let keys=Object.keys(json_data);\n return keys;\n}\n\nlet pl=msg.payload;\ndelete msg.payload;\n\nmsg.payload={};\nmsg.payload.header=[];\nmsg.payload.data=[];\nmsg.payload.title=msg.title;\n\nlet y=[];\nfor(var i in pl) {\n if (i==1) {\n msg.payload.header=getHeader(pl[i]);\n }\n let x=[];\n for (var j in pl[i]){\n x.push(pl[i][j]);\n }\n y.push(x);\n}\n\nmsg.payload.data=y;\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 260,
"y": 80,
"wires": [
[
"325628f8.f9bb48"
]
]
},
{
"id": "325628f8.f9bb48",
"type": "template",
"z": "af98615f.cf9ce",
"name": "CSS",
"field": "payload.style",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "html,\nbody {\n height: 100%;\n}\nbody {\n margin: 0;\n background: #222222;\n font-family: sans-serif;\n font-weight: 100;\n}\n.container {\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n}\ntable {\n width: 800px;\n border-collapse: collapse;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);\n}\ntd {\n padding: 0px;\n background-color: rgba(255, 255, 255, 0.2);\n color: #ffffff;\n text-align: left;\n}\npre {\n margin: 0;\n text-align: left;\n}\nth {\n background-color: #27206f;\n color: yellow;\n}\ntbody tr:hover {\n background-color: rgba(255, 255, 255, 0.3);\n}\ntbody td {\n position: relative;\n}\ntbody td:hover:before {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: -9999px;\n bottom: -9999px;\n background-color: rgba(255, 255, 255, 0.2);\n z-index: -1;\n}\n",
"output": "str",
"x": 190,
"y": 160,
"wires": [
[
"71b8fd74.2d9404"
]
]
},
{
"id": "8b96370c.e63028",
"type": "debug",
"z": "d8e8a587.a39408",
"d": true,
"name": "",
"active": true,
"tosidebar": true,
"console": true,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"x": 360,
"y": 100,
"wires": []
},
{
"id": "448c23fb.54356c",
"type": "http response",
"z": "d8e8a587.a39408",
"name": "",
"statusCode": "",
"headers": {},
"x": 1000,
"y": 140,
"wires": []
},
{
"id": "e7546e50.b4e6",
"type": "sqlite",
"z": "d8e8a587.a39408",
"mydb": "4378beea.a2c7f",
"sqlquery": "fixed",
"sql": "select * from TradeGeneralLog order by ID desc limit 10000;",
"name": "",
"x": 680,
"y": 140,
"wires": [
[
"b67c9c51.fda15"
]
]
},
{
"id": "79f2b3b4.db6cdc",
"type": "change",
"z": "d8e8a587.a39408",
"name": "Set Title (Manual)",
"rules": [
{
"t": "set",
"p": "title",
"pt": "msg",
"to": "LOGs",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 300,
"y": 140,
"wires": [
[
"e7546e50.b4e6",
"8b96370c.e63028"
]
]
},
{
"id": "b67c9c51.fda15",
"type": "subflow:af98615f.cf9ce",
"z": "d8e8a587.a39408",
"name": "",
"env": [],
"x": 760,
"y": 220,
"wires": [
[
"448c23fb.54356c"
]
]
},
{
"id": "7f957960.b6cd58",
"type": "http in",
"z": "d8e8a587.a39408",
"name": "",
"url": "/getLog",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 80,
"y": 140,
"wires": [
[
"79f2b3b4.db6cdc"
]
]
2020-01-05 19:16:13 -06:00
}
]