diff --git a/flows_nodered_kraken.json b/flows_nodered_kraken.json index 7ea545b..cc38712 100644 --- a/flows_nodered_kraken.json +++ b/flows_nodered_kraken.json @@ -65,8 +65,8 @@ "console": false, "tostatus": false, "complete": "false", - "x": 560, - "y": 240, + "x": 550, + "y": 220, "wires": [] }, { @@ -150,188 +150,6 @@ ] ] }, - { - "id": "715c2949.e70048", - "type": "get-ticker-information", - "z": "6d543cb4.ed3084", - "name": "", - "x": 370, - "y": 680, - "wires": [ - [ - "3362bc86.263034", - "49e9037c.b0234c" - ], - [ - "c776c3e9.448ed" - ] - ] - }, - { - "id": "926454.4996abb", - "type": "inject", - "z": "6d543cb4.ed3084", - "name": "", - "topic": "", - "payload": "{\"pair\":\"XETHZUSD\"}", - "payloadType": "json", - "repeat": "", - "crontab": "", - "once": false, - "onceDelay": 0.1, - "x": 140, - "y": 680, - "wires": [ - [ - "715c2949.e70048" - ] - ] - }, - { - "id": "3362bc86.263034", - "type": "debug", - "z": "6d543cb4.ed3084", - "name": "Kraken TickerData", - "active": true, - "tosidebar": true, - "console": true, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "x": 600, - "y": 640, - "wires": [] - }, - { - "id": "c776c3e9.448ed", - "type": "debug", - "z": "6d543cb4.ed3084", - "name": "Kraken TickerData ERROR", - "active": true, - "tosidebar": true, - "console": true, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "x": 630, - "y": 740, - "wires": [] - }, - { - "id": "49e9037c.b0234c", - "type": "function", - "z": "6d543cb4.ed3084", - "name": "compute order", - "func": "let askPrice = msg.payload.XETHZUSD.a[0];\nlet volume2Buy = 50/askPrice; // How much Etheream to buy for 50 USD?\nnode.log(\"Ask Price \", askPrice, \" --> Volume : \", volume2Buy );\n\nmsg.payload={\n\tpair : 'XETHZUSD',\n\ttype : 'buy',\n\tordertype : 'limit',\n\tprice : askPrice,\n\tvolume : volume2Buy\n};\n\n\nreturn msg;", - "outputs": 1, - "noerr": 0, - "x": 620, - "y": 700, - "wires": [ - [ - "c4999094.47952", - "ca762b6c.7d98f8" - ] - ] - }, - { - "id": "c4999094.47952", - "type": "add-standard-order", - "z": "6d543cb4.ed3084", - "kraken": "42702610.230028", - "name": "", - "x": 840, - "y": 700, - "wires": [ - [ - "5baa6fae.59cb2" - ], - [ - "27f87d72.6fa302" - ] - ] - }, - { - "id": "5baa6fae.59cb2", - "type": "debug", - "z": "6d543cb4.ed3084", - "name": "Kraken OrderFeedback Success", - "active": true, - "tosidebar": true, - "console": true, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "x": 1100, - "y": 680, - "wires": [] - }, - { - "id": "27f87d72.6fa302", - "type": "debug", - "z": "6d543cb4.ed3084", - "name": "Kraken OrderFeedback ERROR", - "active": true, - "tosidebar": true, - "console": true, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "x": 1110, - "y": 720, - "wires": [] - }, - { - "id": "ca762b6c.7d98f8", - "type": "debug", - "z": "6d543cb4.ed3084", - "name": "Kraken - OrderInfos", - "active": true, - "tosidebar": true, - "console": true, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "x": 900, - "y": 620, - "wires": [] - }, - { - "id": "ee195c7.d088ba", - "type": "get-ticker-information", - "z": "6d543cb4.ed3084", - "name": "", - "x": 330, - "y": 880, - "wires": [ - [ - "4f94e60f.4d3838" - ], - [ - "f163b077.931ff" - ] - ] - }, - { - "id": "eeb36454.5abdf8", - "type": "inject", - "z": "6d543cb4.ed3084", - "name": "", - "topic": "", - "payload": "{\"pair\":\"XETCZUSD\"}", - "payloadType": "json", - "repeat": "60", - "crontab": "", - "once": false, - "onceDelay": 0.1, - "x": 140, - "y": 880, - "wires": [ - [ - "ee195c7.d088ba" - ] - ] - }, { "id": "a669c08c.d0185", "type": "sqlite", @@ -340,8 +158,8 @@ "sqlquery": "msg.topic", "sql": "", "name": "", - "x": 830, - "y": 820, + "x": 890, + "y": 720, "wires": [ [] ] @@ -354,8 +172,8 @@ "func": "msg.topic=\"Insert into KrakenQuotes (Symbol,Data) values ('XETCZUSD','\" + JSON.stringify(msg.payload.XETCZUSD) + \"');\"\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 540, - "y": 860, + "x": 600, + "y": 760, "wires": [ [ "853572da.0b0bf", @@ -374,23 +192,497 @@ "tostatus": false, "complete": "true", "targetType": "full", - "x": 770, + "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, "y": 880, "wires": [] }, { - "id": "f163b077.931ff", + "id": "57c6ead4.4943d4", "type": "debug", "z": "6d543cb4.ed3084", - "name": "Error getting Kraken Quote", + "name": "", "active": true, "tosidebar": true, - "console": true, + "console": false, + "tostatus": false, + "complete": "false", + "x": 530, + "y": 1080, + "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, + "console": false, "tostatus": false, "complete": "true", "targetType": "full", - "x": 570, - "y": 920, + "x": 1400, + "y": 1020, "wires": [] + }, + { + "id": "9073f8dd.8a8558", + "type": "debug", + "z": "6d543cb4.ed3084", + "name": "lt (buy)", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "x": 1390, + "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, + "console": false, + "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, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "x": 1720, + "y": 1020, + "wires": [] + }, + { + "id": "9ff35104.7db0d", + "type": "debug", + "z": "6d543cb4.ed3084", + "name": "BUYING!", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "x": 1700, + "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, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "x": 1780, + "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