Compare commits
1487 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 28399aaab2 | |||
| 560085ab92 | |||
| 17c315bf4a | |||
| e8145e0057 | |||
| ae9073885f | |||
| 61886942c5 | |||
| 12d31c4acb | |||
| 14cfdb13c5 | |||
| e58ab7852a | |||
| dfae7ca2ec | |||
| 17cd0452ec | |||
| 9fe361f6fc | |||
| da7f35db8d | |||
| 4f216eb861 | |||
| 53383f3184 | |||
| b51c937e87 | |||
| f3d7f67671 | |||
| 87001d0806 | |||
| ffce0dfb2e | |||
| c1d08019d9 | |||
| bfa95ad976 | |||
| 4a4b39f898 | |||
| 215499a3f8 | |||
| 8c11974644 | |||
| 7dcbd8108e | |||
| e00b74c0e0 | |||
| 5ef439dd0f | |||
| 538c7b3c97 | |||
| 81456b2340 | |||
| dfec3f16ab | |||
| e67499e6cc | |||
| a1b5e7899f | |||
| a88a149999 | |||
| c646abc05d | |||
| f2a1561d31 | |||
| d7a3aeaa1b | |||
| 4b9a63de19 | |||
| 07985c2cae | |||
| 0c13414f14 | |||
| 1021c7a7af | |||
| 5306fb3709 | |||
| 1afddf9db4 | |||
| 929538dd5f | |||
| f432e65a14 | |||
| dfc1193c52 | |||
| 25077a1008 | |||
| b3b3bf6c1d | |||
| a7ebbd89c0 | |||
| ee25635c79 | |||
| b8e19ae78a | |||
| 937bd892fd | |||
| adce6e4f68 | |||
| 0b1ba0458d | |||
| 7668b95900 | |||
| 47465f198c | |||
| f3d03dd26a | |||
| ecdd84efd8 | |||
| 0ad6a6a951 | |||
| dc97f709d7 | |||
| 34ccf141d1 | |||
| f0b16c277c | |||
| 68061444d8 | |||
| 93356286d8 | |||
| 84e816fc5b | |||
| 12a482a6ba | |||
| a26a40d00f | |||
| 64c6b4718d | |||
| d1ebdf5df2 | |||
| 496c4947bd | |||
| 82f98746bd | |||
| 65418c7c00 | |||
| bbf6bade7c | |||
| b6cde05f0d | |||
| 0a3a1d7eca | |||
| 947cbdd858 | |||
| 8c999cd60c | |||
| ad5d2a36bc | |||
| 1666746692 | |||
| 3a74fc85b4 | |||
| 92a1c304a8 | |||
| d8c24663fc | |||
| 195c15c8dc | |||
| 44c06f6d20 | |||
| c268f20d18 | |||
| 83c92f3ac1 | |||
| b4a3eccfa3 | |||
| 837d006e11 | |||
| c1f1639807 | |||
| 8f71e45666 | |||
| 17fa2c9933 | |||
| 22fdf157ef | |||
| 6c8b39d32a | |||
| 5a2b3d9d87 | |||
| 8641796d04 | |||
| c5c5cfb4d5 | |||
| c74033d7f1 | |||
| d8c6873ee9 | |||
| b0cc2a2a1d | |||
| 226f9b7857 | |||
| 1abf72855e | |||
| b044410e42 | |||
| b64052850f | |||
| 8868b10042 | |||
| b18190891d | |||
| 5b001eec3e | |||
| 882ca44816 | |||
| 60157606fe | |||
| cbb0294cd2 | |||
| 1b4802ab73 | |||
| 6b7f210ef3 | |||
| 571b154345 | |||
| 9a2b5a1219 | |||
| fe9de41d58 | |||
| daff50e79e | |||
| 09b687d66f | |||
| 665ff9f14e | |||
| bd1a12ceaa | |||
| d33e931a0d | |||
| fbe38c362c | |||
| 718efc828a | |||
| 6d3ed84807 | |||
| 28e5efc902 | |||
| 510c47bd78 | |||
| 2e0065216f | |||
| ce024c74e1 | |||
| 90e2935abf | |||
| 12cd654bce | |||
| c3ea793abb | |||
| c901f6d1dd | |||
| 193cfb634c | |||
| a2b7620b64 | |||
| 9d91a4a298 | |||
| 3b6dbaccf8 | |||
| 3fe9e6b82b | |||
| b6614045aa | |||
| cbf27f0bdb | |||
| deafe39f76 | |||
| 1f63eca1a8 | |||
| 2c0db908b5 | |||
| ca9403f981 | |||
| a8d96087c1 | |||
| 1649505121 | |||
| 41a063e2ac | |||
| ba019ad143 | |||
| 6f3071f6ce | |||
| 5cdb2dd601 | |||
| 4db41f0225 | |||
| cc8581164d | |||
| 7d50353697 | |||
| d742f8b88f | |||
| 22bf036a66 | |||
| c45351beff | |||
| 6d1d0751e8 | |||
| 15012ec58c | |||
| fed91ff5a1 | |||
| 5b92af6a90 | |||
| 442a1ba50d | |||
| c3f6aa17ee | |||
| 8dc278f1a0 | |||
| 5f907d4219 | |||
| c39c5f254f | |||
| 0dfc4ed696 | |||
| 950a0df8b1 | |||
| 2a0dd4cf55 | |||
| 575c381e65 | |||
| 87061bcce8 | |||
| a6d3995013 | |||
| d0d40f4fce | |||
| ce7d81325d | |||
| 7cfecab7e2 | |||
| 8f8da51808 | |||
| f94fd7d5fc | |||
| befc41ae54 | |||
| 02092926ab | |||
| a49b4ab93a | |||
| bd7549bc8b | |||
| 47e1d209db | |||
| 5d2f5ec12f | |||
| 2d2dc7f14a | |||
| 43bd2a060c | |||
| b518d66aa2 | |||
| 2ba59cebe3 | |||
| f165c85e69 | |||
| fca454bba3 | |||
| 3dc1adfad4 | |||
| 38754e0598 | |||
| 8fb4446d82 | |||
| 3725ac145b | |||
| 7df0d06005 | |||
| 4e855b638b | |||
| 9783aba09c | |||
| 1936b20309 | |||
| 69de9687d0 | |||
| bdeeca7d43 | |||
| a7ba3cad85 | |||
| ef5fcad8cf | |||
| d8de6c8f7b | |||
| c3239da266 | |||
| 1edf948e49 | |||
| 224c4a717b | |||
| 6202436bfd | |||
| 122144857e | |||
| 92bcf672fb | |||
| 6f4ffa0758 | |||
| 82186c8a7f | |||
| 50596e1a6a | |||
| 9edcbbb9a8 | |||
| a59805d739 | |||
| b96c06ffdc | |||
| 8abe358c1e | |||
| 2142b2aea3 | |||
| 53ba3ced06 | |||
| a0f336c31f | |||
| 081fa2209a | |||
| ca67d3fb2c | |||
| 5a6b43da46 | |||
| 7d3fa41911 | |||
| b8f3f5e8d2 | |||
| 4849d5413f | |||
| 8b8bf6f97d | |||
| 9eea958e17 | |||
| f8a151c2a5 | |||
| 1013c32316 | |||
| d9ed7e1fb2 | |||
| 689da4c479 | |||
| 87d954a322 | |||
| 74f601b352 | |||
| a3359b62d4 | |||
| 064708a354 | |||
| 066a46d7aa | |||
| 333660e628 | |||
| 81f80a6b22 | |||
| dd613ac86c | |||
| 73c28890d7 | |||
| 61dd94ceb0 | |||
| 1fec5a873e | |||
| 9c4abcc927 | |||
| b74e38ef63 | |||
| 86f640627f | |||
| e27568a9d8 | |||
| 149133cc44 | |||
| 1b2d5a357f | |||
| ecc6371733 | |||
| 0c66180cf3 | |||
| 5954c64cc3 | |||
| d0b7a52202 | |||
| c18085d173 | |||
| b11119dbe5 | |||
| 67f88ea97a | |||
| 14353afa78 | |||
| cefc833ab1 | |||
| 5c7c3a88fb | |||
| 14e2e160af | |||
| 000eb875a2 | |||
| 33c8969411 | |||
| d90666d2e8 | |||
| f568d63c41 | |||
| a77618cc6b | |||
| cac2c363fa | |||
| ced1ce340a | |||
| 78943bf88d | |||
| 1b8a42d472 | |||
| 1d99b7d0f9 | |||
| 5c47a75f63 | |||
| 1ef2eeb456 | |||
| faa398053a | |||
| c32f8e972a | |||
| 23e4943b3a | |||
| b3ec69fa8a | |||
| dc4aaf0a82 | |||
| d5b9c6dde8 | |||
| bdfd3396cc | |||
| c9256e0d9f | |||
| c7e02b9a7f | |||
| 7d5cd998a3 | |||
| 96e8319e82 | |||
| 12d8fc8c3a | |||
| 1ad0e423c9 | |||
| 2ef1e203c6 | |||
| 959f81f4ac | |||
| 3090e47a12 | |||
| 02ab0eb139 | |||
| 5d8759de78 | |||
| b13b00df17 | |||
| 04492e75b2 | |||
| 8d0ca7f5c1 | |||
| d8b51875bf | |||
| 7f12f3a0e4 | |||
| 6afcc80937 | |||
| efdb726362 | |||
| 3ca7407b09 | |||
| 22ba0e61e3 | |||
| 6e83890a13 | |||
| 8a8cc5e563 | |||
| e1bf3bb825 | |||
| 0a4f82bc22 | |||
| 5ee7f8037d | |||
| 12728c0fcc | |||
| 875216cdc5 | |||
| 362f0895f4 | |||
| 903b580026 | |||
| 073b625355 | |||
| b3b21e6b93 | |||
| b8b4b2d2f3 | |||
| 0cf1f6dc88 | |||
| 502d50c988 | |||
| ed8b8fbf61 | |||
| 956398ab21 | |||
| f3154423bd | |||
| fb64ac942b | |||
| 3fc40f45b3 | |||
| ca5ccc8799 | |||
| 057cc2538e | |||
| ed22789a1a | |||
| 2abf22e37b | |||
| 9b08b51ad8 | |||
| 83cdf76636 | |||
| f545113840 | |||
| f86bc71c43 | |||
| 8af9875d45 | |||
| 8a9b31eccd | |||
| 124c051432 | |||
| 67bcf38ea5 | |||
| a98dd0eea3 | |||
| 103f64227f | |||
| 5b481009d6 | |||
| 3da6a8146e | |||
| a8b313d387 | |||
| 574419f3a4 | |||
| 5793888113 | |||
| b835af58c5 | |||
| ca0b6998f0 | |||
| 77c3894fe2 | |||
| 0c46afaee4 | |||
| b6e9609039 | |||
| 1b6dadbc87 | |||
| 1b18856d0b | |||
| 35e9805ef1 | |||
| dcf38557ee | |||
| 54d78fd1c6 | |||
| 6040c391d3 | |||
| b4a5f66f29 | |||
| e105ea660b | |||
| 1149393789 | |||
| d4655660f4 | |||
| e656063771 | |||
| 0c6ed588b5 | |||
| 45dc667233 | |||
| 10d79f6232 | |||
| 3c20106e7d | |||
| 1e1c9a28f2 | |||
| 6a01985fd1 | |||
| be572ba046 | |||
| f711afd843 | |||
| d6f58cd6cf | |||
| 9dd1ce71ca | |||
| 0a0a8428d5 | |||
| fdc248a1b1 | |||
| bfadd54ea3 | |||
| ed23dc0f72 | |||
| 27e3ae8c24 | |||
| f6cb446bff | |||
| 72786ca706 | |||
| 3e2a799d9f | |||
| 841f57800e | |||
| 5b6ea5ca90 | |||
| 162c1c606c | |||
| de0759c36a | |||
| 1dbef58fe9 | |||
| a63280bfa5 | |||
| 093a3f0e25 | |||
| f8fc8a7f33 | |||
| f8bf850673 | |||
| d06a531c72 | |||
| b341bc5a8c | |||
| 5ac1cf929b | |||
| eca2ca3dc2 | |||
| 1d8fd059c6 | |||
| a95972ae3f | |||
| 37985dfeea | |||
| 768efc45ff | |||
| e6b5233d2f | |||
| 6fa1133c61 | |||
| b1adb2b13d | |||
| 16378d32d7 | |||
| 33105a996e | |||
| 20fca07d8f | |||
| 8ee40ade45 | |||
| a6d76cad39 | |||
| 30ead79e11 | |||
| 5c859d929b | |||
| c89058788e | |||
| 35c3868c56 | |||
| 3d1568783e | |||
| 194d53acf8 | |||
| 85689ebc1c | |||
| 4fcc9dd587 | |||
| 05f19d574a | |||
| 1a24559729 | |||
| 7a51c9d540 | |||
| 1d22377cad | |||
| 82cd343fc1 | |||
| 751d98495f | |||
| 49b119f1dc | |||
| 6ba0eaf593 | |||
| 87f07d5f91 | |||
| a24f5d64a1 | |||
| 30eb32862c | |||
| 6ae5724ad1 | |||
| 90a57e7384 | |||
| 16379bbcc5 | |||
| 05bb7e2fad | |||
| 6e98635345 | |||
| de8dd83340 | |||
| b3296b75e9 | |||
| 2f9ec970a5 | |||
| 568c579cab | |||
| e116b71400 | |||
| a85dc6972d | |||
| feab28de91 | |||
| 0aa05855d5 | |||
| 44591053b6 | |||
| c11de3ac38 | |||
| b797a5bf2f | |||
| 1d9d2fce7f | |||
| 0e92372b0b | |||
| 68fbab5c32 | |||
| 596f6711f3 | |||
| c2296d83c3 | |||
| 9a3ada65f5 | |||
| df50e03239 | |||
| 9d0f5df549 | |||
| 6b41594c53 | |||
| 2d194995bc | |||
| 904580b914 | |||
| 9373779fba | |||
| 692bb36c80 | |||
| 8de5e2b7b8 | |||
| 6185761727 | |||
| 6c625c77c0 | |||
| 9950ed715e | |||
| 9b9ef6ae6d | |||
| 8075106286 | |||
| 6b033c211e | |||
| 8be31275d7 | |||
| a3d3a4de51 | |||
| f1b890954a | |||
| 0f2ff70bdf | |||
| 4c42bd7100 | |||
| 9acf8943ed | |||
| 4986f356ee | |||
| ca390eea6a | |||
| cd9c45e875 | |||
| c90ac30077 | |||
| 466914d5c7 | |||
| f86f955e24 | |||
| affab24185 | |||
| 125126fb86 | |||
| 010ed6992b | |||
| d8bbd4054e | |||
| baefaeb311 | |||
| 288db16198 | |||
| eb4199fe80 | |||
| 9a151b1ecf | |||
| 7dddab18c4 | |||
| a85afd9af3 | |||
| d09efa6dd1 | |||
| f817b21d17 | |||
| b7298f472c | |||
| 96baa90003 | |||
| fae7198bb4 | |||
| 55be046933 | |||
| 38fa7068ca | |||
| e5389be209 | |||
| 19a997a2db | |||
| eac440649b | |||
| 21a47bb1ac | |||
| b839e159a8 | |||
| 91df1257e7 | |||
| 88f8e831d7 | |||
| 627eee5fcf | |||
| 26c7752b7c | |||
| 1aaf0c2034 | |||
| ac3a5900b4 | |||
| 60695fe205 | |||
| 2e2f40ca10 | |||
| 1f09b90dbe | |||
| 9c39b99ec6 | |||
| 2e343b9fbd | |||
| 90aaaa50fc | |||
| 087fb31f26 | |||
| 3edc442f48 | |||
| b6cf3cc57d | |||
| be2d97b559 | |||
| a3f23fd4fb | |||
| 68f32d76ae | |||
| bffb3120c1 | |||
| bb596d6f8d | |||
| ca573a828f | |||
| e9cd840f5b | |||
| 3fcf6559ab | |||
| 7894c08b83 | |||
| 296c14afc0 | |||
| b2b1518708 | |||
| 93967ad8f0 | |||
| 6082beb58d | |||
| 8309853439 | |||
| 2522a3be61 | |||
| 19b38a02fa | |||
| 4935e23271 | |||
| a4f9a25007 | |||
| 795a0b81ee | |||
| e5268a0449 | |||
| c81761e3e2 | |||
| 8fbb4e1e60 | |||
| 937aa5c70e | |||
| db647ab4d5 | |||
| 98652bfd89 | |||
| 63010bc5e9 | |||
| dd388a51e0 | |||
| 22f109bab1 | |||
| 67e2d9c730 | |||
| 07fb941758 | |||
| 6fca35adae | |||
| 85f4a8daea | |||
| 2595479e43 | |||
| ac9b26cc57 | |||
| 31aa397492 | |||
| b77739b5ca | |||
| b603771242 | |||
| 722d5b2319 | |||
| 91ace759c5 | |||
| 3d8d2fc0c6 | |||
| 58154d76ae | |||
| 9c1183bc59 | |||
| 38feb90f9e | |||
| 4632839fc5 | |||
| 26ea4fdcc9 | |||
| 3637d7a54c | |||
| 6ee500db4f | |||
| 583e20dc9d | |||
| b3296a06d9 | |||
| 09051fb641 | |||
| 3c6500c2bc | |||
| f242110957 | |||
| 6b78b1c882 | |||
| ee3d46c8fa | |||
| 59e52bb601 | |||
| 553dbccec7 | |||
| 2e06eb0e7b | |||
| 31c4d35932 | |||
| eb03382b2d | |||
| bb08880c4a | |||
| 948487518d | |||
| 9480331b45 | |||
| be5d158761 | |||
| 4f2681500a | |||
| 00237d68e4 | |||
| 20325a2b5e | |||
| be40e828a9 | |||
| 916ef43f7f | |||
| 2b01d2e06b | |||
| fcd0c1d606 | |||
| 0553486e55 | |||
| 4fa8c3f9ab | |||
| 543c77fe00 | |||
| e77ce8d481 | |||
| 285867f8c6 | |||
| 276ef6cdde | |||
| c5088e6b66 | |||
| 62f05964b4 | |||
| 7c5b2fdffb | |||
| 8cf3f3826f | |||
| 799ce4e1f2 | |||
| 1fdce89806 | |||
| e1f2f0cb64 | |||
| c3b6258dfe | |||
| 4154a7058d | |||
| bdfa9c146e | |||
| c6d6bc62eb | |||
| 2347195b0b | |||
| f3101e8a75 | |||
| 43dd90f6d4 | |||
| 7ef52365f7 | |||
| 00bdf13fae | |||
| 5f8608d3b3 | |||
| d19498667a | |||
| b2898cf742 | |||
| 31625befd1 | |||
| 394535c2e8 | |||
| 16576d37b1 | |||
| 53bd2d71a0 | |||
| df4b44d09e | |||
| b6b3429b62 | |||
| 0adb264c9b | |||
| 286371c1e4 | |||
| 445c3a67db | |||
| 06c4b661f7 | |||
| 3ffc69ad02 | |||
| 7b44dd17ae | |||
| 5b0b44069a | |||
| 85fc936431 | |||
| 04a28b2550 | |||
| 9fa3a15e24 | |||
| 23b10161d5 | |||
| b8dffe0eb0 | |||
| 85772ac7f7 | |||
| 3ec72f88e2 | |||
| 4f4f927b97 | |||
| 46fab55378 | |||
| 1d44f75659 | |||
| a4416b885a | |||
| 209c2e0ceb | |||
| 324aada2bc | |||
| 6f58e01f8e | |||
| 31e4501765 | |||
| 50d60fad89 | |||
| 7286568447 | |||
| 3116fd34cf | |||
| f70815dd8e | |||
| 47151e77e1 | |||
| 5a1f96d35c | |||
| fe03bf7ce0 | |||
| d09160fff8 | |||
| f46c8cdc4a | |||
| db57f83922 | |||
| c6e64bad49 | |||
| bbf0ac83a1 | |||
| a9714727b1 | |||
| 8e2de9ef7e | |||
| 5ea7ba6b9a | |||
| e3e924d888 | |||
| 02b0f0abd6 | |||
| 7735ea91bb | |||
| 7178ce8559 | |||
| 26ba076143 | |||
| 425701ddcf | |||
| 42e45a0a65 | |||
| b97f3ca818 | |||
| dfc77945ce | |||
| 6d8011e075 | |||
| 1b4f8dfa54 | |||
| 48b7a85c90 | |||
| 0d7854ff1b | |||
| d3464ac2dc | |||
| 95f5db9dcd | |||
| 61b29962c4 | |||
| b83754c5a4 | |||
| 9a1f2d42a7 | |||
| bd511c2158 | |||
| 6b6d7fc310 | |||
| c6959c92ac | |||
| 7bc6a2279c | |||
| b431c5b343 | |||
| 176f5518ea | |||
| 06406b7103 | |||
| 17e4f5ed1f | |||
| 578ba9ea4a | |||
| 83a8651d41 | |||
| ba0c22b6f0 | |||
| 90219f040b | |||
| fef234d80f | |||
| 68ad688665 | |||
| 0c7a2747d3 | |||
| 23187f0c41 | |||
| f66d81c4b8 | |||
| 87a64cbe68 | |||
| ef58aaf9e9 | |||
| 4a432760ed | |||
| 484943a640 | |||
| eec16cfc8a | |||
| fddceb2572 | |||
| d665a01fe6 | |||
| 8f93ac5770 | |||
| 33164ec041 | |||
| 0e6cd72edd | |||
| 4f218e4fb2 | |||
| 0bf411ae19 | |||
| 283199b6ed | |||
| 0270a61cba | |||
| 1aeed3951b | |||
| ba38f8120c | |||
| 7de9e2c4b6 | |||
| 331c6beafc | |||
| 93cbbbbe31 | |||
| ddd2e2cc3b | |||
| 55301b8d0c | |||
| a47ed1dbdb | |||
| 17b161cb03 | |||
| 5d3c764e27 | |||
| f3aac3d66d | |||
| 39903d521e | |||
| 7255beddea | |||
| a95c3ace92 | |||
| d543feb032 | |||
| 623f27341f | |||
| 55dc2d4bf4 | |||
| 24e94cfaa7 | |||
| 7db62689c4 | |||
| da53b5d115 | |||
| 03dfe4ec45 | |||
| 39288d2e53 | |||
| 2a6dc3e45d | |||
| 5964845265 | |||
| 9911d2aa32 | |||
| bfd2c3f942 | |||
| 74c837519a | |||
| 415e361c66 | |||
| 7e154c6fb6 | |||
| 385b39ff66 | |||
| 9d232c4949 | |||
| 85ccc31a63 | |||
| 65d19c38b6 | |||
| 5b8752e649 | |||
| 8832bae371 | |||
| a85e044e99 | |||
| 7b1ee84b34 | |||
| 79ebc943a2 | |||
| eabcaa38e2 | |||
| e930221b78 | |||
| 08c4f24bdf | |||
| 56c23f9dd8 | |||
| 6edee269d8 | |||
| f9d978f16a | |||
| 1eac77fe0b | |||
| a98121ea26 | |||
| cc9c373a76 | |||
| 390b113776 | |||
| bf33f8b632 | |||
| 030dcfdd83 | |||
| cd77758852 | |||
| 1aa6c2ad55 | |||
| 55d71cecdd | |||
| 70a81c86ba | |||
| 1c6c710696 | |||
| 4ca2a043b5 | |||
| 41418784e3 | |||
| 9afd572948 | |||
| 51a99f2a66 | |||
| 969b0570c2 | |||
| e94ccece93 | |||
| cd435098bd | |||
| 33659ee273 | |||
| c30db9d0d6 | |||
| 429505b134 | |||
| 2c2cc086c3 | |||
| fe16654733 | |||
| f85891941f | |||
| 493b6f6592 | |||
| 97faa7fc5a | |||
| 5402b14336 | |||
| 4c7ff7ab0c | |||
| 8288a5cf91 | |||
| 442b29e0ea | |||
| b6a65ce125 | |||
| 743422ccf3 | |||
| d69b1566b1 | |||
| 5c01023d55 | |||
| 97d303579a | |||
| 265a798f78 | |||
| db19446e27 | |||
| e62a0f76ed | |||
| 673447794e | |||
| 76aefccd03 | |||
| b0b9e398e1 | |||
| fac0491658 | |||
| 7770f082c8 | |||
| 3281049264 | |||
| fe48f6769f | |||
| 6a5be68367 | |||
| 6613366343 | |||
| 48c1aaaa38 | |||
| 23928e55a3 | |||
| 6d84b93715 | |||
| 5b1011668a | |||
| 30d2298d54 | |||
| 98b6f58eb2 | |||
| a0cbdc9135 | |||
| 805e03b83b | |||
| 35cc7da9b3 | |||
| 6efe6bbfc2 | |||
| ac29ef67fd | |||
| 4a7140c05d | |||
| cd971cff4f | |||
| 538139ef31 | |||
| 8bd4926c29 | |||
| a9195c8ff9 | |||
| 93c8a11824 | |||
| aec496a73b | |||
| 7bc1398574 | |||
| 3371bad504 | |||
| 64e27637dc | |||
| ee4f05a5b8 | |||
| 6636a2fda8 | |||
| 754936d253 | |||
| 3762f40538 | |||
| 4a3c45af2d | |||
| 29fdbc8f7f | |||
| 6116c6abb9 | |||
| 466c21e9fd | |||
| d461d6f8e8 | |||
| 53f68a3834 | |||
| 76d43782db | |||
| e7a6db8916 | |||
| cdb7fa83e4 | |||
| f785f9ff00 | |||
| 4d87d13165 | |||
| 9128011208 | |||
| 3dd7f7f17b | |||
| 7665d3d1f2 | |||
| e055feb1d3 | |||
| dfe6982099 | |||
| ad2aef09c4 | |||
| facfdfd85c | |||
| 1bba2a5f21 | |||
| ef239b8d0c | |||
| bccbac9f23 | |||
| 113efe129d | |||
| 8d73cccde5 | |||
| 055c56edfc | |||
| 942c1c1f5c | |||
| 243a91a141 | |||
| 281bd69fa5 | |||
| 6630259833 | |||
| 674d28622b | |||
| e21aedfb73 | |||
| 8f22c58875 | |||
| e3d1c4c9c7 | |||
| 40f87c9ab5 | |||
| bd5f02a8df | |||
| 91438affc8 | |||
| 1548fdfca6 | |||
| 4bebb20477 | |||
| 3fb4524c5a | |||
| cdd1273ed0 | |||
| 717f17a9b5 | |||
| 11763e8cd1 | |||
| 5e50348150 | |||
| ccfc690281 | |||
| e1f6702932 | |||
| 13e9f8a98e | |||
| cc0337585e | |||
| 3070e37335 | |||
| c50edafac6 | |||
| 7ccac492bb | |||
| a23409b72f | |||
| 5b9102f9a8 | |||
| f447de4840 | |||
| 186bc4d272 | |||
| 06fd176286 | |||
| c5fd6f4519 | |||
| efe0275ae1 | |||
| ba98f1a9be | |||
| 5380b22729 | |||
| 338bc7c677 | |||
| 449a5e85b4 | |||
| 0f5cb87c65 | |||
| 822e7bad1f | |||
| 86a5240174 | |||
| 7b7c8d9374 | |||
| fde3547dbb | |||
| 9bd7fac86f | |||
| 8085d8cd00 | |||
| 3f656a9758 | |||
| 38f1981d6f | |||
| d55b3e0228 | |||
| d3f8bef2ef | |||
| f78f52f78e | |||
| d451dcf28b | |||
| 063964ed38 | |||
| ac70d559a4 | |||
| 685e575f6b | |||
| 1640267798 | |||
| d5585dd5e3 | |||
| 90e2db708e | |||
| 64303e90d6 | |||
| 901dfa21fc | |||
| 5e7d883732 | |||
| 840f074c66 | |||
| 0408ad1095 | |||
| e262110c3b | |||
| 09b9ff2c68 | |||
| e76574b79f | |||
| 08587d826e | |||
| 584b84a941 | |||
| 44182783c0 | |||
| 90f52ba8ad | |||
| f8f10f27e9 | |||
| 7f393252e2 | |||
| dd8938ced2 | |||
| 67ce9a41f2 | |||
| 756bada570 | |||
| 25c0036012 | |||
| 3b03fae939 | |||
| 0f9e61371c | |||
| 1970cc65c0 | |||
| 8d74e8b8dd | |||
| fc4e09f398 | |||
| a45d941b11 | |||
| 39fd27c7ec | |||
| fa939a7f66 | |||
| 6fc81fa9c7 | |||
| 89cd46d2e5 | |||
| f287d0ad24 | |||
| 93e3bbea5a | |||
| 6be25bd86a | |||
| ec82894990 | |||
| ea1b7c692a | |||
| 0e08173235 | |||
| cdf33761c0 | |||
| 63ca07aeac | |||
| 5022407021 | |||
| f54b7d56d3 | |||
| 382befb053 | |||
| 11404ef230 | |||
| 8964cfc123 | |||
| ec97723c54 | |||
| 4cfbcefb33 | |||
| 1f575d95e6 | |||
| d4900c28e1 | |||
| f12964f543 | |||
| c339853ec0 | |||
| 3924514d2b | |||
| aae92c29db | |||
| 5683063379 | |||
| 5ab993b6d5 | |||
| 9584f6c549 | |||
| 2a95a3aefe | |||
| 36eeac365e | |||
| 2b8c4942fd | |||
| 4a190bd13c | |||
| cf6a89e161 | |||
| a29c5322ab | |||
| 4e2d2639ae | |||
| a54f895ea9 | |||
| ad55615ecb | |||
| c8aff5687d | |||
| 02c2e451b1 | |||
| 84d49a0f53 | |||
| 22b096be25 | |||
| b285cdd491 | |||
| b2881affc0 | |||
| b3e0b42155 | |||
| 314c017dd3 | |||
| 9fbc413d4d | |||
| ad96fa0f58 | |||
| f2283410ce | |||
| f14c4ebcc8 | |||
| ceff757bc6 | |||
| c3c6207cda | |||
| 975ad26eb8 | |||
| 8a5ff4ed0d | |||
| 7d19e0e692 | |||
| a1a5cab04e | |||
| 8182947f29 | |||
| 2231ba3f04 | |||
| bf0a08f5a7 | |||
| 552575c7e6 | |||
| d0979d560f | |||
| e3a9b0aa17 | |||
| 7caa22c7a7 | |||
| 91131d7884 | |||
| 967ad2f8ff | |||
| d00f82a641 | |||
| 2f83f07fd3 | |||
| 78d213a8a0 | |||
| 44d798239d | |||
| 08e1a616a0 | |||
| 8009c03629 | |||
| ae068bd6f5 | |||
| 2350aa6a27 | |||
| 8394826d62 | |||
| a46d41a594 | |||
| a0d8055917 | |||
| 3ec892a5ab | |||
| 3deffb57ce | |||
| db8c1917e0 | |||
| 57f55d416c | |||
| 315421037f | |||
| 0b4a6e7e11 | |||
| f918a66292 | |||
| d795af5921 | |||
| 21b8982e55 | |||
| 5a9f66e6d6 | |||
| 4fd77e7ee7 | |||
| 428ca972e2 | |||
| 3913e4fa96 | |||
| e296242072 | |||
| 82001d1e8b | |||
| 137bfc2b56 | |||
| a8ae767576 | |||
| b9c77124fc | |||
| f060548134 | |||
| 18ce8af084 | |||
| 7f7cff85c1 | |||
| 9a22e5c775 | |||
| 2cfb8834b6 | |||
| 013006050f | |||
| 99df346bf5 | |||
| 2e57158556 | |||
| b75eb85e66 | |||
| dbb9f225d0 | |||
| 85753be7cb | |||
| 18b35b0657 | |||
| 857aeaa9eb | |||
| 3e06971038 | |||
| 323b9f8693 | |||
| a412ff76bc | |||
| 2bfd66d271 | |||
| 8cad9c8436 | |||
| 3504073428 | |||
| b4af89380b | |||
| c131493eca | |||
| 37031ba83d | |||
| 69106633cd | |||
| a2e674b237 | |||
| c1c9f0151e | |||
| 963ec23ae2 | |||
| 0c35f3a47a | |||
| f4fdcfc78d | |||
| 97c67d55c6 | |||
| 9983b44e6f | |||
| 78bf9bf60d | |||
| 9d22dac28d | |||
| 37e16acc80 | |||
| 6d5cd69764 | |||
| 3a8c594ae8 | |||
| 5f72ed9b3c | |||
| bee897f5b7 | |||
| 75542cdd93 | |||
| 97da78c499 | |||
| d8d35ec234 | |||
| 86d65f8428 | |||
| 973aa6a0c3 | |||
| aaab2a1c86 | |||
| 16924525ff | |||
| f1f355330c | |||
| 4c5c054bca | |||
| 0181e00c19 | |||
| ecf013dd18 | |||
| 59837ef6ac | |||
| b42a91d783 | |||
| 187c8b8070 | |||
| a807d2d6c8 | |||
| fda7b0f1ef | |||
| ae42f8d512 | |||
| 6fb74fa166 | |||
| 7dd0f2174c | |||
| e1cc7dcfdf | |||
| 6b3fff6b7e | |||
| 5d4324dd55 | |||
| fc0cae21e6 | |||
| 89b6cc89a3 | |||
| 26af62e4dd | |||
| f90cd44a9e | |||
| 35f7c97c76 | |||
| d530527f11 | |||
| 8af8260b7c | |||
| 7a17cd781a | |||
| 7c8b934c1d | |||
| ba244cd2f6 | |||
| 10eef02e58 | |||
| 20380b616a | |||
| 7d3c8b48dd | |||
| 6931b81daa | |||
| 92405f94ec | |||
| 3e1daf50b0 | |||
| 94010287cc | |||
| 24ebe1a205 | |||
| 63ca884dbe | |||
| a6005fde28 | |||
| 486a4ed5c0 | |||
| fd4cd11de2 | |||
| 262cfedfc9 | |||
| 0e807d4a18 | |||
| de8b3a89fd | |||
| 0caeb6b5f7 | |||
| 85d235958e | |||
| 62e3f408a6 | |||
| 008f875282 | |||
| 9b0beb0e6d | |||
| 939e3e4a53 | |||
| e257589fdb | |||
| 4d00309717 | |||
| 41535bef1f | |||
| ddad3ba616 | |||
| d70a48970d | |||
| b91deaa0cd | |||
| 152705bc62 | |||
| f288381a08 | |||
| cfbc6a524c | |||
| 1495a15563 | |||
| 4a582e5ce5 | |||
| 5b06db2529 | |||
| 8e357934ed | |||
| 223ea8acec | |||
| 567a4f9aad | |||
| 997f914d56 | |||
| 4a9483c669 | |||
| 319ea1072d | |||
| 33eaa4b53e | |||
| cf563c1a56 | |||
| 99b2857d3d | |||
| eb24d11259 | |||
| f9d4d38523 | |||
| b01de10ab2 | |||
| fa4a540f9e | |||
| 4ee875ce2a | |||
| 78c71cdf87 | |||
| 1aac8dfa59 | |||
| 8b42c2558a | |||
| 40f56e43cc | |||
| e9c961802b | |||
| 948b6e041d | |||
| 80d776af56 | |||
| e62d84e35d | |||
| 098a6551f6 | |||
| 6e15fd0da6 | |||
| 1f2dadc333 | |||
| c3b7a2b382 | |||
| 3746305b5a | |||
| af3f9d5a75 | |||
| 33549a6cef | |||
| a0bc3d968b | |||
| 8aab8bc528 | |||
| aa595ae8cb | |||
| b657e349a2 | |||
| 77e6b2a108 | |||
| d3f6227d3f | |||
| 2a370aecd8 | |||
| 0cfb73b74b | |||
| 867020606c | |||
| 222da034d1 | |||
| 63b72fb4eb | |||
| 7e08828537 | |||
| d843216343 | |||
| 120194ff1e | |||
| 27a9cbf5e4 | |||
| 08b18b7ff6 | |||
| c3cc58a1af | |||
| 713979d80c | |||
| 3d28765238 | |||
| 9efa48f2a8 | |||
| 4a7a51035d | |||
| 7f2e6966a6 | |||
| 1d22cf98c8 | |||
| 03a22186bb | |||
| f4bc956b1b | |||
| f8f21cfc9c | |||
| 2b915a76df | |||
| eb41cc3b00 | |||
| c1d812c307 | |||
| 952a647c69 | |||
| dff308062e | |||
| 81b4285d17 | |||
| 822521136f | |||
| 6f307e1e3d | |||
| 588bf357a9 | |||
| 9158a3d7d9 | |||
| 47a86c3d54 | |||
| 1e27c8af0a | |||
| 38bf71f02f | |||
| ffef87f7d1 | |||
| fc1feb9abc | |||
| a3b1428d28 | |||
| 63c63560dd | |||
| 0358a4d23b | |||
| df71670e6d | |||
| 0a09c6cbd7 | |||
| 152358ee18 | |||
| d710ea448f | |||
| 36e4842fe9 | |||
| 141286a88c | |||
| 1e2450d5b9 | |||
| f773905d8e | |||
| 2044af24a3 | |||
| 6bca604bf9 | |||
| 5d3a056ae5 | |||
| e9eee11b2e | |||
| cf5b6e5e20 | |||
| 13050f0d67 | |||
| 61e5b4755c | |||
| 5e0ea48011 | |||
| aceb3ac764 | |||
| 6b1af9b9a2 | |||
| e350dbd552 | |||
| f7f78ad2a4 | |||
| 26983c637a | |||
| 733cd22dee | |||
| 1e61aea23b | |||
| 419d5d9946 | |||
| d02b4d4c3f | |||
| 5f89708be4 | |||
| e80ddcabe7 | |||
| 12e0dcd523 | |||
| 4a6027b43f | |||
| e81489807d | |||
| a6601ba7d2 | |||
| 2b4d3b3f15 | |||
| a326af830f | |||
| cbe38c6f41 | |||
| d54af598ac | |||
| 1e1b4239e7 | |||
| f5be8fc70a | |||
| 807fcffdae | |||
| 96cea99d4f | |||
| 14acc6609f | |||
| 8029729ab1 | |||
| b525ba85c8 | |||
| 6db42f5fbc | |||
| 1f0b23c5fc | |||
| a13feaf49f | |||
| 2697ac3581 | |||
| 70d9ac09d1 | |||
| be2907acca | |||
| 5b555cca57 | |||
| f1c5d4a970 | |||
| 2e482fbb3a | |||
| 35f914afa3 | |||
| 5356fc3191 | |||
| 16ef348222 | |||
| 01ce4e42c6 | |||
| 6addab2eae | |||
| f428e81469 | |||
| 039bffb0e6 | |||
| ea649fbdbf | |||
| 15a99b02bd | |||
| f7c94f7e44 | |||
| 76ab888714 | |||
| c52a07f2f1 | |||
| e987858109 | |||
| a8dc5339ab | |||
| fb09d4c534 | |||
| 538c8c9805 | |||
| 0e5f072f6c | |||
| ca6153715a | |||
| 2a1144c827 | |||
| ffaf648d5c | |||
| b1c5e0458c | |||
| cf1e8934aa | |||
| 153e2f9628 | |||
| 1b28be974c | |||
| 5bfd503cd8 | |||
| c90cfa896c | |||
| 1a59ecf98e | |||
| 711e680198 | |||
| e5d508a507 | |||
| 75fb2a0c86 | |||
| 092a9ff5db | |||
| dc7246413b | |||
| fbad2d5c89 | |||
| a6e44c9e4a | |||
| cb0fc9c1a9 | |||
| b57cedeab7 | |||
| b863c6830d | |||
| 3a8aba13d9 | |||
| 09c272515e | |||
| c266490ee4 | |||
| ecd2d013df | |||
| fa306b090e | |||
| 6ca5d42c89 | |||
| 353e3da2f8 | |||
| 054bccf24e | |||
| 96490b7b7a | |||
| fc9ea6d153 | |||
| 817707711d | |||
| e2bdf2a97f | |||
| 5bb109884c | |||
| 64c2c6a524 | |||
| 6760d44761 | |||
| 1f0d304190 | |||
| de2b8dcfdd | |||
| 0e5a88bf93 | |||
| a19872d640 | |||
| ee63e51cc5 | |||
| 82e3e3d66e | |||
| cb5fd6ea71 | |||
| d12d3ac0b3 | |||
| 489440fbc3 | |||
| 5a3b7f8915 | |||
| 49ef2393fb | |||
| af673f568d | |||
| eed89d2749 | |||
| a883114c92 | |||
| 22905baf55 | |||
| 999fc2208a | |||
| 767a145374 | |||
| 4ef5a878d6 | |||
| 70a53d68a4 | |||
| 4297c5830f | |||
| 00d1f14bcc | |||
| c100009b00 | |||
| 93c2d6a7ad | |||
| 649739b8e4 | |||
| f109d08bd0 | |||
| 6b96d4d145 | |||
| 98e49ab187 | |||
| b70d02e46d | |||
| 4f1bf6a1f0 | |||
| 5f0df2c1de | |||
| ece7b0d9f2 | |||
| e620f55cd6 | |||
| 08fa82dc53 | |||
| a9483edaac | |||
| 2fe9ceab8d | |||
| f6bf6c52c5 | |||
| 5f5e51326f | |||
| 7c148a0123 | |||
| 452358541b | |||
| 37c10c9b06 | |||
| 3682fcba4d | |||
| 046e1534f3 | |||
| fd7272ba63 | |||
| 12adbeb7f3 | |||
| 11976f11b0 | |||
| ea96abecd0 | |||
| 5589578872 | |||
| fb4aae080b | |||
| 471df70f62 | |||
| 90b1e15eb2 | |||
| 9c825fb156 | |||
| 676cdab9a9 | |||
| c4b34ea60c | |||
| af0d719b2c | |||
| 0866b8fdca | |||
| 32d966a8a6 | |||
| b6f6afa15e | |||
| 9f69b4f1b6 | |||
| d23c3120e6 | |||
| 9beae3d164 | |||
| 503eb1e55d | |||
| 0919d4c274 | |||
| f4c004347e | |||
| d2beb07eef | |||
| 5266f74708 | |||
| 243f219e22 | |||
| 0f5ef03dc9 | |||
| c1e032a4f0 | |||
| c460511574 | |||
| 8624a9c306 | |||
| 1f6a0dccd5 | |||
| 99ba489874 | |||
| ea00260e79 | |||
| fcc7c5cf5c | |||
| 4285602323 | |||
| 10969b7139 | |||
| a4f3fe70c5 | |||
| 3903e4455c | |||
| 0f2d3f2638 | |||
| 3ed1454168 | |||
| b6867d956c | |||
| 392486bc17 | |||
| dfcf4ba7fd | |||
| 0f4330a6bb | |||
| e5da4d4be1 | |||
| 44d9cb85a0 | |||
| 59f3d88c58 | |||
| 3e5ab8549f | |||
| af28656138 | |||
| 4ff200d315 | |||
| 5700f789e2 | |||
| 689767e3ca | |||
| 66efc9a469 | |||
| 4c3e477667 | |||
| 8cdae5f56e | |||
| 347295ecaf | |||
| 7272204d58 | |||
| 10063b205c | |||
| 6c94b75172 | |||
| 7a619594f6 | |||
| 0682d12fe3 | |||
| 1119ee1cdd | |||
| 8fe1f3cb95 | |||
| 6121fb30a9 | |||
| a40b2816a1 | |||
| bb372e380d | |||
| aa99baf268 | |||
| 606013a697 | |||
| a88675b693 | |||
| b08a93a287 | |||
| 2768155e7d | |||
| 9f2142135e | |||
| 258b85a860 | |||
| b1bf56cfab | |||
| d2d6c6fa81 | |||
| b1fc271a7e | |||
| 37bbb0e0e0 | |||
| 2a9a3e020c | |||
| cd2520603a | |||
| cefacf4a6d | |||
| c9aa202be8 | |||
| 84e5a9521d | |||
| 48b0ffac06 | |||
| 5c42c89505 | |||
| d37e23f68e | |||
| 9953903193 | |||
| 48506f2945 | |||
| 0a27a7ad38 | |||
| daf655cd24 | |||
| 44c29aa998 | |||
| 2a45ff08e4 | |||
| 7b1ea81a27 | |||
| d559572718 | |||
| 2c1400a9ff | |||
| 85af1c91a2 | |||
| dcc8c8800f | |||
| 5a24292d34 | |||
| c492dcc7ba | |||
| c5f89f34fd | |||
| 1ef4b063ea | |||
| d05cae10f7 | |||
| 478387531d | |||
| 0b9cca27e2 | |||
| ca9589b2e8 | |||
| e7b1a7e493 | |||
| c112b84d0f | |||
| 7d5f021717 | |||
| 9207cf501c | |||
| fc1c3a8f97 | |||
| 83e56a09c2 | |||
| 47613b1cf9 | |||
| ef3a7d5c92 | |||
| 23d6c362c4 | |||
| 41a548d625 | |||
| 309adb2ffd | |||
| 16d2dbc9d7 | |||
| 73d53579d9 | |||
| fbd6a58e3d | |||
| 4717f716de | |||
| 02a089cb64 | |||
| 8f15bce680 | |||
| 0a51006da2 | |||
| 4c365f6afc | |||
| a49b0a922a | |||
| 0c79c32b0d | |||
| 12424aef69 | |||
| 091fe6be88 | |||
| 9432865bcd | |||
| c0754587bf | |||
| 7ecf1b18c1 | |||
| 9b8e485f00 | |||
| 5c9ec37609 | |||
| 4dc20effb8 | |||
| 084d951ffd | |||
| 092fbe25b8 | |||
| 7d5d84763f | |||
| 95f709ae14 | |||
| 43b2ec1e3f | |||
| acb3941776 | |||
| f8807cf659 | |||
| c01996d1d1 | |||
| 3d6e186b30 | |||
| 584bbd93e0 | |||
| 7e2d55743e | |||
| a194ef0b78 | |||
| 476960b5b7 | |||
| 69f0ea5199 | |||
| 3fea958faf | |||
| 5efc2a09e5 | |||
| 9dd887f2ff | |||
| bfaf9e690d | |||
| beebc1743a | |||
| 5ba592ff47 | |||
| bb4db022f0 | |||
| 418356f383 | |||
| c6d7ae9d27 | |||
| 0d3ab37eb7 | |||
| 6b8ca7217b | |||
| 2811a470aa | |||
| 1fccdd8cda | |||
| 33b421014d | |||
| 730bef2920 | |||
| 79ce1ddaef | |||
| 714822c93c | |||
| fb3787173f | |||
| e9ba0d2ce8 | |||
| 705d1e4cc0 | |||
| 5b3f348bbb | |||
| aa81c75bef | |||
| 6b889814ad | |||
| 1ade11f00b | |||
| 6a580176ea | |||
| 910b3ad536 | |||
| 05cf4cab8e | |||
| 6752c3e288 | |||
| faeda2a166 | |||
| 3d67e0893a |
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: Bug report
|
name: Bug report
|
||||||
about: Create a report to help us improve
|
about: Create a report to help us improve. Do not use this for strategy assistance.
|
||||||
title: ''
|
title: ''
|
||||||
labels: "Triage Needed"
|
labels: "Triage Needed"
|
||||||
assignees: ''
|
assignees: ''
|
||||||
@@ -12,7 +12,11 @@ Have you searched for similar issues before posting it?
|
|||||||
If you have discovered a bug in the bot, please [search the issue tracker](https://github.com/freqtrade/freqtrade/issues?q=is%3Aissue).
|
If you have discovered a bug in the bot, please [search the issue tracker](https://github.com/freqtrade/freqtrade/issues?q=is%3Aissue).
|
||||||
If it hasn't been reported, please create a new issue.
|
If it hasn't been reported, please create a new issue.
|
||||||
|
|
||||||
Please do not use bug reports to request new features.
|
Has your strategy or configuration been generated by an AI model, and is now not working?
|
||||||
|
This is almost certainly NOT a bug in Freqtrade, but a problem with the code your AI model generated.
|
||||||
|
Please consult the documentation. We'll close such issues and point to the documentation.
|
||||||
|
|
||||||
|
Please do not use the bug report template to request new features.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## Describe your environment
|
## Describe your environment
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: Feature request
|
name: Feature request
|
||||||
about: Suggest an idea for this project
|
about: Suggest a new feature or idea for this project
|
||||||
title: ''
|
title: ''
|
||||||
labels: ''
|
labels: ''
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: Question
|
name: Question
|
||||||
about: Ask a question you could not find an answer in the docs
|
about: Ask a question you could not find an answer in the docs. Use this template if you've got problems with your strategy.
|
||||||
title: ''
|
title: ''
|
||||||
labels: "Question"
|
labels: "Question"
|
||||||
assignees: ''
|
assignees: ''
|
||||||
@@ -8,9 +8,12 @@ assignees: ''
|
|||||||
---
|
---
|
||||||
<!--
|
<!--
|
||||||
Have you searched for similar issues before posting it?
|
Have you searched for similar issues before posting it?
|
||||||
Did you have a VERY good look at the [documentation](https://www.freqtrade.io/en/latest/) and are sure that the question is not explained there
|
Did you have a VERY good look at the [documentation](https://www.freqtrade.io/) and are sure that the question is not explained there
|
||||||
|
|
||||||
Please do not use the question template to report bugs or to request new features.
|
Please do not use the question template to report bugs or to request new features.
|
||||||
|
|
||||||
|
Has your strategy or configuration been generated by an AI model, and is now not working?
|
||||||
|
Please consult the documentation. We'll close such issues and point to the documentation.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## Describe your environment
|
## Describe your environment
|
||||||
@@ -22,4 +25,4 @@ Please do not use the question template to report bugs or to request new feature
|
|||||||
|
|
||||||
## Your question
|
## Your question
|
||||||
|
|
||||||
*Ask the question you have not been able to find an answer in the [Documentation](https://www.freqtrade.io/en/latest/)*
|
*Ask the question you have not been able to find an answer in the [Documentation](https://www.freqtrade.io/)*
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ jobs:
|
|||||||
name: develop
|
name: develop
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
@@ -32,7 +34,7 @@ jobs:
|
|||||||
run: python build_helpers/binance_update_lev_tiers.py
|
run: python build_helpers/binance_update_lev_tiers.py
|
||||||
|
|
||||||
|
|
||||||
- uses: peter-evans/create-pull-request@v7
|
- uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.REPO_SCOPED_TOKEN }}
|
token: ${{ secrets.REPO_SCOPED_TOKEN }}
|
||||||
add-paths: freqtrade/exchange/binance_leverage_tiers.json
|
add-paths: freqtrade/exchange/binance_leverage_tiers.json
|
||||||
@@ -42,6 +44,7 @@ jobs:
|
|||||||
branch: update/binance-leverage-tiers
|
branch: update/binance-leverage-tiers
|
||||||
title: Update Binance Leverage Tiers
|
title: Update Binance Leverage Tiers
|
||||||
commit-message: "chore: update pre-commit hooks"
|
commit-message: "chore: update pre-commit hooks"
|
||||||
committer: Freqtrade Bot <noreply@github.com>
|
committer: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com>
|
||||||
|
author: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com>
|
||||||
body: Update binance leverage tiers.
|
body: Update binance leverage tiers.
|
||||||
delete-branch: true
|
delete-branch: true
|
||||||
|
|||||||
+98
-54
@@ -24,17 +24,29 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ "ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04" ]
|
os: [ "ubuntu-22.04", "ubuntu-24.04" ]
|
||||||
python-version: ["3.10", "3.11", "3.12"]
|
python-version: ["3.10", "3.11", "3.12"]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@f0ec1fc3b38f5e7cd731bb6ce540c5af426746bb # v6.1.0
|
||||||
|
with:
|
||||||
|
activate-environment: true
|
||||||
|
enable-cache: true
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache-dependency-glob: "requirements**.txt"
|
||||||
|
cache-suffix: "${{ matrix.python-version }}"
|
||||||
|
prune-cache: false
|
||||||
|
|
||||||
- name: Cache_dependencies
|
- name: Cache_dependencies
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
id: cache
|
id: cache
|
||||||
@@ -42,12 +54,6 @@ jobs:
|
|||||||
path: ~/dependencies/
|
path: ~/dependencies/
|
||||||
key: ${{ runner.os }}-dependencies
|
key: ${{ runner.os }}-dependencies
|
||||||
|
|
||||||
- name: pip cache (linux)
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ~/.cache/pip
|
|
||||||
key: pip-${{ matrix.python-version }}-ubuntu
|
|
||||||
|
|
||||||
- name: TA binary *nix
|
- name: TA binary *nix
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
if: steps.cache.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
@@ -55,30 +61,30 @@ jobs:
|
|||||||
|
|
||||||
- name: Installation - *nix
|
- name: Installation - *nix
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip wheel
|
uv pip install --upgrade wheel
|
||||||
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
|
||||||
export TA_LIBRARY_PATH=${HOME}/dependencies/lib
|
export TA_LIBRARY_PATH=${HOME}/dependencies/lib
|
||||||
export TA_INCLUDE_PATH=${HOME}/dependencies/include
|
export TA_INCLUDE_PATH=${HOME}/dependencies/include
|
||||||
pip install -r requirements-dev.txt
|
uv pip install -r requirements-dev.txt
|
||||||
pip install -e ft_client/
|
uv pip install -e ft_client/
|
||||||
pip install -e .
|
uv pip install -e .
|
||||||
|
|
||||||
- name: Check for version alignment
|
- name: Check for version alignment
|
||||||
run: |
|
run: |
|
||||||
python build_helpers/freqtrade_client_version_align.py
|
python build_helpers/freqtrade_client_version_align.py
|
||||||
|
|
||||||
- name: Tests
|
- name: Tests
|
||||||
if: (!(runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-22.04'))
|
if: (!(runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04'))
|
||||||
run: |
|
run: |
|
||||||
pytest --random-order
|
pytest --random-order
|
||||||
|
|
||||||
- name: Tests with Coveralls
|
- name: Tests with Coveralls
|
||||||
if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-22.04')
|
if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04')
|
||||||
run: |
|
run: |
|
||||||
pytest --random-order --cov=freqtrade --cov=freqtrade_client --cov-config=.coveragerc
|
pytest --random-order --cov=freqtrade --cov=freqtrade_client --cov-config=.coveragerc
|
||||||
|
|
||||||
- name: Coveralls
|
- name: Coveralls
|
||||||
if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-22.04')
|
if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04')
|
||||||
env:
|
env:
|
||||||
# Coveralls token. Not used as secret due to github not providing secrets to forked repositories
|
# Coveralls token. Not used as secret due to github not providing secrets to forked repositories
|
||||||
COVERALLS_REPO_TOKEN: 6D1m0xupS3FgutfuGao8keFf9Hc0FpIXu
|
COVERALLS_REPO_TOKEN: 6D1m0xupS3FgutfuGao8keFf9Hc0FpIXu
|
||||||
@@ -91,6 +97,11 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
python build_helpers/extract_config_json_schema.py
|
python build_helpers/extract_config_json_schema.py
|
||||||
|
|
||||||
|
- name: Run command docs partials extract
|
||||||
|
# This should be kept before the repository check to ensure that the docs are up-to-date
|
||||||
|
run: |
|
||||||
|
python build_helpers/create_command_partials.py
|
||||||
|
|
||||||
- name: Check for repository changes
|
- name: Check for repository changes
|
||||||
run: |
|
run: |
|
||||||
if [ -n "$(git status --porcelain)" ]; then
|
if [ -n "$(git status --porcelain)" ]; then
|
||||||
@@ -129,11 +140,12 @@ jobs:
|
|||||||
ruff format --check
|
ruff format --check
|
||||||
|
|
||||||
- name: Mypy
|
- name: Mypy
|
||||||
|
if: matrix.os == 'ubuntu-24.04'
|
||||||
run: |
|
run: |
|
||||||
mypy freqtrade scripts tests
|
mypy freqtrade scripts tests
|
||||||
|
|
||||||
- name: Discord notification
|
- name: Discord notification
|
||||||
uses: rjstone/discord-webhook-notify@v1
|
uses: rjstone/discord-webhook-notify@1399c1b2d57cc05894d506d2cfdc33c5f012b993 #v1.1.1
|
||||||
if: failure() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
|
if: failure() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
|
||||||
with:
|
with:
|
||||||
severity: error
|
severity: error
|
||||||
@@ -149,6 +161,8 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
@@ -156,6 +170,16 @@ jobs:
|
|||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
check-latest: true
|
check-latest: true
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@f0ec1fc3b38f5e7cd731bb6ce540c5af426746bb # v6.1.0
|
||||||
|
with:
|
||||||
|
activate-environment: true
|
||||||
|
enable-cache: true
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache-dependency-glob: "requirements**.txt"
|
||||||
|
cache-suffix: "${{ matrix.python-version }}"
|
||||||
|
prune-cache: false
|
||||||
|
|
||||||
- name: Cache_dependencies
|
- name: Cache_dependencies
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
id: cache
|
id: cache
|
||||||
@@ -163,12 +187,6 @@ jobs:
|
|||||||
path: ~/dependencies/
|
path: ~/dependencies/
|
||||||
key: ${{ matrix.os }}-dependencies
|
key: ${{ matrix.os }}-dependencies
|
||||||
|
|
||||||
- name: pip cache (macOS)
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ~/Library/Caches/pip
|
|
||||||
key: pip-${{ matrix.os }}-${{ matrix.python-version }}
|
|
||||||
|
|
||||||
- name: TA binary *nix
|
- name: TA binary *nix
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
if: steps.cache.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
@@ -200,13 +218,13 @@ jobs:
|
|||||||
|
|
||||||
- name: Installation (python)
|
- name: Installation (python)
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip wheel
|
uv pip install wheel
|
||||||
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
|
||||||
export TA_LIBRARY_PATH=${HOME}/dependencies/lib
|
export TA_LIBRARY_PATH=${HOME}/dependencies/lib
|
||||||
export TA_INCLUDE_PATH=${HOME}/dependencies/include
|
export TA_INCLUDE_PATH=${HOME}/dependencies/include
|
||||||
pip install -r requirements-dev.txt
|
uv pip install -r requirements-dev.txt
|
||||||
pip install -e ft_client/
|
uv pip install -e ft_client/
|
||||||
pip install -e .
|
uv pip install -e .
|
||||||
|
|
||||||
- name: Tests
|
- name: Tests
|
||||||
run: |
|
run: |
|
||||||
@@ -249,11 +267,12 @@ jobs:
|
|||||||
ruff format --check
|
ruff format --check
|
||||||
|
|
||||||
- name: Mypy
|
- name: Mypy
|
||||||
|
if: matrix.os == 'macos-15'
|
||||||
run: |
|
run: |
|
||||||
mypy freqtrade scripts
|
mypy freqtrade scripts
|
||||||
|
|
||||||
- name: Discord notification
|
- name: Discord notification
|
||||||
uses: rjstone/discord-webhook-notify@v1
|
uses: rjstone/discord-webhook-notify@1399c1b2d57cc05894d506d2cfdc33c5f012b993 #v1.1.1
|
||||||
if: failure() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
|
if: failure() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
|
||||||
with:
|
with:
|
||||||
severity: info
|
severity: info
|
||||||
@@ -270,6 +289,8 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
@@ -277,27 +298,25 @@ jobs:
|
|||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@v5
|
uses: astral-sh/setup-uv@f0ec1fc3b38f5e7cd731bb6ce540c5af426746bb # v6.1.0
|
||||||
with:
|
with:
|
||||||
|
activate-environment: true
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
cache-dependency-glob: "requirements**.txt"
|
cache-dependency-glob: "requirements**.txt"
|
||||||
cache-suffix: "${{ matrix.python-version }}"
|
cache-suffix: "${{ matrix.python-version }}"
|
||||||
prune-cache: false
|
prune-cache: false
|
||||||
|
|
||||||
- name: Installation
|
- name: Installation
|
||||||
run: |
|
run: |
|
||||||
uv venv
|
|
||||||
.venv\Scripts\activate
|
|
||||||
# persist the venv path for future steps
|
|
||||||
"$(pwd)/.venv/Scripts" >> $env:GITHUB_PATH
|
|
||||||
|
|
||||||
function uvpipFunction { uv pip $args }
|
function uvpipFunction { uv pip $args }
|
||||||
Set-Alias -name pip -value uvpipFunction
|
Set-Alias -name pip -value uvpipFunction
|
||||||
|
|
||||||
./build_helpers/install_windows.ps1
|
./build_helpers/install_windows.ps1
|
||||||
|
|
||||||
- name: Tests
|
- name: Tests
|
||||||
run: |
|
run: |
|
||||||
pytest --random-order
|
pytest --random-order --durations 20 -n auto
|
||||||
|
|
||||||
- name: Check for repository changes
|
- name: Check for repository changes
|
||||||
run: |
|
run: |
|
||||||
@@ -347,7 +366,7 @@ jobs:
|
|||||||
shell: powershell
|
shell: powershell
|
||||||
|
|
||||||
- name: Discord notification
|
- name: Discord notification
|
||||||
uses: rjstone/discord-webhook-notify@v1
|
uses: rjstone/discord-webhook-notify@1399c1b2d57cc05894d506d2cfdc33c5f012b993 #v1.1.1
|
||||||
if: failure() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
|
if: failure() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
|
||||||
with:
|
with:
|
||||||
severity: error
|
severity: error
|
||||||
@@ -358,6 +377,8 @@ jobs:
|
|||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
@@ -373,16 +394,20 @@ jobs:
|
|||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
- uses: pre-commit/action@v3.0.1
|
- uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1
|
||||||
|
|
||||||
docs-check:
|
docs-check:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Documentation syntax
|
- name: Documentation syntax
|
||||||
run: |
|
run: |
|
||||||
@@ -399,7 +424,7 @@ jobs:
|
|||||||
mkdocs build
|
mkdocs build
|
||||||
|
|
||||||
- name: Discord notification
|
- name: Discord notification
|
||||||
uses: rjstone/discord-webhook-notify@v1
|
uses: rjstone/discord-webhook-notify@1399c1b2d57cc05894d506d2cfdc33c5f012b993 #v1.1.1
|
||||||
if: failure() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
|
if: failure() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
|
||||||
with:
|
with:
|
||||||
severity: error
|
severity: error
|
||||||
@@ -409,15 +434,27 @@ jobs:
|
|||||||
|
|
||||||
build-linux-online:
|
build-linux-online:
|
||||||
# Run pytest with "live" checks
|
# Run pytest with "live" checks
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@f0ec1fc3b38f5e7cd731bb6ce540c5af426746bb # v6.1.0
|
||||||
|
with:
|
||||||
|
activate-environment: true
|
||||||
|
enable-cache: true
|
||||||
|
python-version: "3.12"
|
||||||
|
cache-dependency-glob: "requirements**.txt"
|
||||||
|
cache-suffix: "3.12"
|
||||||
|
prune-cache: false
|
||||||
|
|
||||||
- name: Cache_dependencies
|
- name: Cache_dependencies
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
id: cache
|
id: cache
|
||||||
@@ -425,11 +462,6 @@ jobs:
|
|||||||
path: ~/dependencies/
|
path: ~/dependencies/
|
||||||
key: ${{ runner.os }}-dependencies
|
key: ${{ runner.os }}-dependencies
|
||||||
|
|
||||||
- name: pip cache (linux)
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ~/.cache/pip
|
|
||||||
key: pip-3.12-ubuntu
|
|
||||||
|
|
||||||
- name: TA binary *nix
|
- name: TA binary *nix
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
if: steps.cache.outputs.cache-hit != 'true'
|
||||||
@@ -438,13 +470,13 @@ jobs:
|
|||||||
|
|
||||||
- name: Installation - *nix
|
- name: Installation - *nix
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip wheel
|
uv pip install --upgrade wheel
|
||||||
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
|
||||||
export TA_LIBRARY_PATH=${HOME}/dependencies/lib
|
export TA_LIBRARY_PATH=${HOME}/dependencies/lib
|
||||||
export TA_INCLUDE_PATH=${HOME}/dependencies/include
|
export TA_INCLUDE_PATH=${HOME}/dependencies/include
|
||||||
pip install -r requirements-dev.txt
|
uv pip install -r requirements-dev.txt
|
||||||
pip install -e ft_client/
|
uv pip install -e ft_client/
|
||||||
pip install -e .
|
uv pip install -e .
|
||||||
|
|
||||||
- name: Tests incl. ccxt compatibility tests
|
- name: Tests incl. ccxt compatibility tests
|
||||||
env:
|
env:
|
||||||
@@ -473,14 +505,14 @@ jobs:
|
|||||||
|
|
||||||
- name: Check user permission
|
- name: Check user permission
|
||||||
id: check
|
id: check
|
||||||
uses: scherermichael-oss/action-has-permission@1.0.6
|
uses: scherermichael-oss/action-has-permission@136e061bfe093832d87f090dd768e14e27a740d3 # 1.0.6
|
||||||
with:
|
with:
|
||||||
required-permission: write
|
required-permission: write
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Discord notification
|
- name: Discord notification
|
||||||
uses: rjstone/discord-webhook-notify@v1
|
uses: rjstone/discord-webhook-notify@1399c1b2d57cc05894d506d2cfdc33c5f012b993 #v1.1.1
|
||||||
if: always() && steps.check.outputs.has-permission && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
|
if: always() && steps.check.outputs.has-permission && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
|
||||||
with:
|
with:
|
||||||
severity: info
|
severity: info
|
||||||
@@ -494,6 +526,8 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
@@ -539,6 +573,8 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Download artifact 📦
|
- name: Download artifact 📦
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
@@ -548,7 +584,7 @@ jobs:
|
|||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Publish to PyPI (Test)
|
- name: Publish to PyPI (Test)
|
||||||
uses: pypa/gh-action-pypi-publish@v1.12.3
|
uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
|
||||||
with:
|
with:
|
||||||
repository-url: https://test.pypi.org/legacy/
|
repository-url: https://test.pypi.org/legacy/
|
||||||
|
|
||||||
@@ -566,6 +602,8 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Download artifact 📦
|
- name: Download artifact 📦
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
@@ -575,7 +613,7 @@ jobs:
|
|||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Publish to PyPI
|
- name: Publish to PyPI
|
||||||
uses: pypa/gh-action-pypi-publish@v1.12.3
|
uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
|
||||||
|
|
||||||
|
|
||||||
deploy-docker:
|
deploy-docker:
|
||||||
@@ -586,6 +624,8 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
@@ -614,14 +654,16 @@ jobs:
|
|||||||
docker version -f '{{.Server.Experimental}}'
|
docker version -f '{{.Server.Experimental}}'
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
id: buildx
|
id: buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 #v3.10.0
|
||||||
|
|
||||||
- name: Available platforms
|
- name: Available platforms
|
||||||
run: echo ${{ steps.buildx.outputs.platforms }}
|
run: echo ${PLATFORMS}
|
||||||
|
env:
|
||||||
|
PLATFORMS: ${{ steps.buildx.outputs.platforms }}
|
||||||
|
|
||||||
- name: Build and test and push docker images
|
- name: Build and test and push docker images
|
||||||
env:
|
env:
|
||||||
@@ -640,6 +682,8 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Extract branch name
|
- name: Extract branch name
|
||||||
id: extract-branch
|
id: extract-branch
|
||||||
@@ -663,7 +707,7 @@ jobs:
|
|||||||
build_helpers/publish_docker_arm64.sh
|
build_helpers/publish_docker_arm64.sh
|
||||||
|
|
||||||
- name: Discord notification
|
- name: Discord notification
|
||||||
uses: rjstone/discord-webhook-notify@v1
|
uses: rjstone/discord-webhook-notify@1399c1b2d57cc05894d506d2cfdc33c5f012b993 #v1.1.1
|
||||||
if: always() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false) && (github.event_name != 'schedule')
|
if: always() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false) && (github.event_name != 'schedule')
|
||||||
with:
|
with:
|
||||||
severity: info
|
severity: info
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: true
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
@@ -43,12 +45,16 @@ jobs:
|
|||||||
- name: Build and push Mike
|
- name: Build and push Mike
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
run: |
|
run: |
|
||||||
mike deploy ${{ github.ref_name }} latest --push --update-aliases
|
mike deploy ${REF_NAME} latest --push --update-aliases
|
||||||
|
env:
|
||||||
|
REF_NAME: ${{ github.ref_name }}
|
||||||
|
|
||||||
- name: Build and push Mike - Release
|
- name: Build and push Mike - Release
|
||||||
if: ${{ github.event_name == 'release' }}
|
if: ${{ github.event_name == 'release' }}
|
||||||
run: |
|
run: |
|
||||||
mike deploy ${{ github.ref_name }} stable --push --update-aliases
|
mike deploy ${REF_NAME} stable --push --update-aliases
|
||||||
|
env:
|
||||||
|
REF_NAME: ${{ github.ref_name }}
|
||||||
|
|
||||||
- name: Show mike versions
|
- name: Show mike versions
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -17,29 +17,26 @@ concurrency:
|
|||||||
group: "${{ github.workflow }}"
|
group: "${{ github.workflow }}"
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
permissions:
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-push:
|
build-and-push:
|
||||||
|
permissions:
|
||||||
|
packages: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
-
|
- uses: actions/checkout@v4
|
||||||
name: Checkout
|
with:
|
||||||
id: checkout
|
persist-credentials: false
|
||||||
uses: actions/checkout@v4
|
- name: Login to GitHub Container Registry
|
||||||
-
|
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
|
||||||
name: Login to GitHub Container Registry
|
with:
|
||||||
uses: docker/login-action@v3
|
registry: ghcr.io
|
||||||
with:
|
username: ${{ github.actor }}
|
||||||
registry: ghcr.io
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
username: ${{ github.actor }}
|
- name: Pre-build dev container image
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
uses: devcontainers/ci@8bf61b26e9c3a98f69cb6ce2f88d24ff59b785c6 # v0.3.19
|
||||||
-
|
with:
|
||||||
name: Pre-build dev container image
|
subFolder: .github
|
||||||
uses: devcontainers/ci@v0.3
|
imageName: ghcr.io/${{ github.repository }}-devcontainer
|
||||||
with:
|
cacheFrom: ghcr.io/${{ github.repository }}-devcontainer
|
||||||
subFolder: .github
|
push: always
|
||||||
imageName: ghcr.io/${{ github.repository }}-devcontainer
|
|
||||||
cacheFrom: ghcr.io/${{ github.repository }}-devcontainer
|
|
||||||
push: always
|
|
||||||
|
|||||||
@@ -4,14 +4,19 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- stable
|
- stable
|
||||||
|
|
||||||
|
# disable permissions for all of the available permissions
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
dockerHubDescription:
|
dockerHubDescription:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Docker Hub Description
|
- name: Docker Hub Description
|
||||||
uses: peter-evans/dockerhub-description@v4
|
uses: peter-evans/dockerhub-description@432a30c9e07499fd01da9f8a49f0faf9e0ca5b77 # v4.0.2
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
@@ -26,7 +28,7 @@ jobs:
|
|||||||
- name: Run auto-update
|
- name: Run auto-update
|
||||||
run: pre-commit autoupdate
|
run: pre-commit autoupdate
|
||||||
|
|
||||||
- uses: peter-evans/create-pull-request@v7
|
- uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.REPO_SCOPED_TOKEN }}
|
token: ${{ secrets.REPO_SCOPED_TOKEN }}
|
||||||
add-paths: .pre-commit-config.yaml
|
add-paths: .pre-commit-config.yaml
|
||||||
@@ -36,6 +38,7 @@ jobs:
|
|||||||
branch: update/pre-commit-hooks
|
branch: update/pre-commit-hooks
|
||||||
title: Update pre-commit hooks
|
title: Update pre-commit hooks
|
||||||
commit-message: "chore: update pre-commit hooks"
|
commit-message: "chore: update pre-commit hooks"
|
||||||
committer: Freqtrade Bot <noreply@github.com>
|
committer: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com>
|
||||||
|
author: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com>
|
||||||
body: Update versions of pre-commit hooks to latest version.
|
body: Update versions of pre-commit hooks to latest version.
|
||||||
delete-branch: true
|
delete-branch: true
|
||||||
|
|||||||
+28
-10
@@ -1,29 +1,41 @@
|
|||||||
# See https://pre-commit.com for more information
|
# See https://pre-commit.com for more information
|
||||||
# See https://pre-commit.com/hooks.html for more hooks
|
# See https://pre-commit.com/hooks.html for more hooks
|
||||||
repos:
|
repos:
|
||||||
|
|
||||||
|
- repo: local
|
||||||
|
# Keep json schema in sync with the config schema
|
||||||
|
# This will write the files - and fail pre-commit if a file has been changed.
|
||||||
|
hooks:
|
||||||
|
- id: Extract config json schema
|
||||||
|
name: extract-config-json-schema
|
||||||
|
entry: "python build_helpers/extract_config_json_schema.py"
|
||||||
|
language: python
|
||||||
|
pass_filenames: false
|
||||||
|
additional_dependencies: ["python-rapidjson", "jsonschema"]
|
||||||
|
|
||||||
- repo: https://github.com/pycqa/flake8
|
- repo: https://github.com/pycqa/flake8
|
||||||
rev: "7.1.1"
|
rev: "7.2.0"
|
||||||
hooks:
|
hooks:
|
||||||
- id: flake8
|
- id: flake8
|
||||||
additional_dependencies: [Flake8-pyproject]
|
additional_dependencies: [Flake8-pyproject]
|
||||||
# stages: [push]
|
# stages: [push]
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||||
rev: "v1.14.0"
|
rev: "v1.15.0"
|
||||||
hooks:
|
hooks:
|
||||||
- id: mypy
|
- id: mypy
|
||||||
exclude: build_helpers
|
exclude: build_helpers
|
||||||
additional_dependencies:
|
additional_dependencies:
|
||||||
- types-cachetools==5.5.0.20240820
|
- types-cachetools==6.0.0.20250525
|
||||||
- types-filelock==3.2.7
|
- types-filelock==3.2.7
|
||||||
- types-requests==2.32.0.20241016
|
- types-requests==2.32.0.20250515
|
||||||
- types-tabulate==0.9.0.20241207
|
- types-tabulate==0.9.0.20241207
|
||||||
- types-python-dateutil==2.9.0.20241206
|
- types-python-dateutil==2.9.0.20250516
|
||||||
- SQLAlchemy==2.0.36
|
- SQLAlchemy==2.0.41
|
||||||
# stages: [push]
|
# stages: [push]
|
||||||
|
|
||||||
- repo: https://github.com/pycqa/isort
|
- repo: https://github.com/pycqa/isort
|
||||||
rev: "5.13.2"
|
rev: "6.0.1"
|
||||||
hooks:
|
hooks:
|
||||||
- id: isort
|
- id: isort
|
||||||
name: isort (python)
|
name: isort (python)
|
||||||
@@ -31,7 +43,7 @@ repos:
|
|||||||
|
|
||||||
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
||||||
# Ruff version.
|
# Ruff version.
|
||||||
rev: 'v0.8.4'
|
rev: 'v0.11.11'
|
||||||
hooks:
|
hooks:
|
||||||
- id: ruff
|
- id: ruff
|
||||||
- id: ruff-format
|
- id: ruff-format
|
||||||
@@ -57,13 +69,19 @@ repos:
|
|||||||
)$
|
)$
|
||||||
|
|
||||||
- repo: https://github.com/stefmolin/exif-stripper
|
- repo: https://github.com/stefmolin/exif-stripper
|
||||||
rev: 0.6.1
|
rev: 0.6.2
|
||||||
hooks:
|
hooks:
|
||||||
- id: strip-exif
|
- id: strip-exif
|
||||||
|
|
||||||
- repo: https://github.com/codespell-project/codespell
|
- repo: https://github.com/codespell-project/codespell
|
||||||
rev: v2.3.0
|
rev: v2.4.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: codespell
|
- id: codespell
|
||||||
additional_dependencies:
|
additional_dependencies:
|
||||||
- tomli
|
- tomli
|
||||||
|
|
||||||
|
# Ensure github actions remain safe
|
||||||
|
- repo: https://github.com/woodruffw/zizmor-pre-commit
|
||||||
|
rev: v1.8.0
|
||||||
|
hooks:
|
||||||
|
- id: zizmor
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
FROM python:3.12.7-slim-bookworm as base
|
FROM python:3.12.10-slim-bookworm as base
|
||||||
|
|
||||||
# Setup env
|
# Setup env
|
||||||
ENV LANG C.UTF-8
|
ENV LANG C.UTF-8
|
||||||
@@ -11,7 +11,7 @@ ENV FT_APP_ENV="docker"
|
|||||||
# Prepare environment
|
# Prepare environment
|
||||||
RUN mkdir /freqtrade \
|
RUN mkdir /freqtrade \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& apt-get -y install sudo libatlas3-base curl sqlite3 libhdf5-serial-dev libgomp1 \
|
&& apt-get -y install sudo libatlas3-base curl sqlite3 libgomp1 \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& useradd -u 1000 -G sudo -U -m -s /bin/bash ftuser \
|
&& useradd -u 1000 -G sudo -U -m -s /bin/bash ftuser \
|
||||||
&& chown ftuser:ftuser /freqtrade \
|
&& chown ftuser:ftuser /freqtrade \
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 
|
# 
|
||||||
|
|
||||||
[](https://github.com/freqtrade/freqtrade/actions/)
|
[](https://github.com/freqtrade/freqtrade/actions/)
|
||||||
[](https://doi.org/10.21105/joss.04864)
|
[](https://doi.org/10.21105/joss.04864)
|
||||||
[](https://coveralls.io/github/freqtrade/freqtrade?branch=develop)
|
[](https://coveralls.io/github/freqtrade/freqtrade?branch=develop)
|
||||||
[](https://www.freqtrade.io)
|
[](https://www.freqtrade.io)
|
||||||
@@ -90,13 +90,13 @@ For further (native) installation methods, please refer to the [Installation doc
|
|||||||
|
|
||||||
```
|
```
|
||||||
usage: freqtrade [-h] [-V]
|
usage: freqtrade [-h] [-V]
|
||||||
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
|
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-hyperoptloss,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
|
||||||
...
|
...
|
||||||
|
|
||||||
Free, open source crypto trading bot
|
Free, open source crypto trading bot
|
||||||
|
|
||||||
positional arguments:
|
positional arguments:
|
||||||
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
|
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-hyperoptloss,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
|
||||||
trade Trade module.
|
trade Trade module.
|
||||||
create-userdir Create user-data directory.
|
create-userdir Create user-data directory.
|
||||||
new-config Create new config
|
new-config Create new config
|
||||||
@@ -120,6 +120,7 @@ positional arguments:
|
|||||||
list-markets Print markets on exchange.
|
list-markets Print markets on exchange.
|
||||||
list-pairs Print pairs on exchange.
|
list-pairs Print pairs on exchange.
|
||||||
list-strategies Print available strategies.
|
list-strategies Print available strategies.
|
||||||
|
list-hyperoptloss Print available hyperopt loss functions.
|
||||||
list-freqaimodels Print available freqAI models.
|
list-freqaimodels Print available freqAI models.
|
||||||
list-timeframes Print available timeframes for the exchange.
|
list-timeframes Print available timeframes for the exchange.
|
||||||
show-trades Show trades.
|
show-trades Show trades.
|
||||||
@@ -136,7 +137,6 @@ positional arguments:
|
|||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Telegram RPC commands
|
### Telegram RPC commands
|
||||||
|
|||||||
@@ -12,7 +12,12 @@ secret = os.environ.get("FREQTRADE__EXCHANGE__SECRET")
|
|||||||
proxy = os.environ.get("CI_WEB_PROXY")
|
proxy = os.environ.get("CI_WEB_PROXY")
|
||||||
|
|
||||||
exchange = ccxt.binance(
|
exchange = ccxt.binance(
|
||||||
{"apiKey": key, "secret": secret, "httpsProxy": proxy, "options": {"defaultType": "swap"}}
|
{
|
||||||
|
"apiKey": key,
|
||||||
|
"secret": secret,
|
||||||
|
"httpsProxy": proxy,
|
||||||
|
"options": {"defaultType": "swap"},
|
||||||
|
}
|
||||||
)
|
)
|
||||||
_ = exchange.load_markets()
|
_ = exchange.load_markets()
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
import subprocess # noqa: S404, RUF100
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
subcommands = [
|
||||||
|
"trade",
|
||||||
|
"create-userdir",
|
||||||
|
"new-config",
|
||||||
|
"show-config",
|
||||||
|
"new-strategy",
|
||||||
|
"download-data",
|
||||||
|
"convert-data",
|
||||||
|
"convert-trade-data",
|
||||||
|
"trades-to-ohlcv",
|
||||||
|
"list-data",
|
||||||
|
"backtesting",
|
||||||
|
"backtesting-show",
|
||||||
|
"backtesting-analysis",
|
||||||
|
"edge",
|
||||||
|
"hyperopt",
|
||||||
|
"hyperopt-list",
|
||||||
|
"hyperopt-show",
|
||||||
|
"list-exchanges",
|
||||||
|
"list-markets",
|
||||||
|
"list-pairs",
|
||||||
|
"list-strategies",
|
||||||
|
"list-hyperoptloss",
|
||||||
|
"list-freqaimodels",
|
||||||
|
"list-timeframes",
|
||||||
|
"show-trades",
|
||||||
|
"test-pairlist",
|
||||||
|
"convert-db",
|
||||||
|
"install-ui",
|
||||||
|
"plot-dataframe",
|
||||||
|
"plot-profit",
|
||||||
|
"webserver",
|
||||||
|
"strategy-updater",
|
||||||
|
"lookahead-analysis",
|
||||||
|
"recursive-analysis",
|
||||||
|
]
|
||||||
|
|
||||||
|
result = subprocess.run(["freqtrade", "--help"], capture_output=True, text=True)
|
||||||
|
|
||||||
|
with Path("docs/commands/main.md").open("w") as f:
|
||||||
|
f.write(f"```\n{result.stdout}\n```\n")
|
||||||
|
|
||||||
|
|
||||||
|
for command in subcommands:
|
||||||
|
print(f"Running for {command}")
|
||||||
|
result = subprocess.run(["freqtrade", command, "--help"], capture_output=True, text=True)
|
||||||
|
|
||||||
|
with Path(f"docs/commands/{command}.md").open("w") as f:
|
||||||
|
f.write(f"```\n{result.stdout}\n```\n")
|
||||||
@@ -4,10 +4,23 @@ from pathlib import Path
|
|||||||
|
|
||||||
import rapidjson
|
import rapidjson
|
||||||
|
|
||||||
from freqtrade.configuration.config_schema import CONF_SCHEMA
|
|
||||||
|
|
||||||
|
|
||||||
def extract_config_json_schema():
|
def extract_config_json_schema():
|
||||||
|
try:
|
||||||
|
# Try to import from the installed package
|
||||||
|
from freqtrade.config_schema import CONF_SCHEMA
|
||||||
|
except ImportError:
|
||||||
|
# If freqtrade is not installed, add the parent directory to sys.path
|
||||||
|
# to import directly from the source
|
||||||
|
import sys
|
||||||
|
|
||||||
|
script_dir = Path(__file__).parent
|
||||||
|
freqtrade_dir = script_dir.parent
|
||||||
|
sys.path.insert(0, str(freqtrade_dir))
|
||||||
|
|
||||||
|
# Now try to import from the source
|
||||||
|
from freqtrade.config_schema import CONF_SCHEMA
|
||||||
|
|
||||||
schema_filename = Path(__file__).parent / "schema.json"
|
schema_filename = Path(__file__).parent / "schema.json"
|
||||||
with schema_filename.open("w") as f:
|
with schema_filename.open("w") as f:
|
||||||
rapidjson.dump(CONF_SCHEMA, f, indent=2)
|
rapidjson.dump(CONF_SCHEMA, f, indent=2)
|
||||||
|
|||||||
BIN
Binary file not shown.
+119
-23
@@ -13,6 +13,10 @@
|
|||||||
"description": "The timeframe to use (e.g `1m`, `5m`, `15m`, `30m`, `1h` ...). \nUsually specified in the strategy and missing in the configuration.",
|
"description": "The timeframe to use (e.g `1m`, `5m`, `15m`, `30m`, `1h` ...). \nUsually specified in the strategy and missing in the configuration.",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"proxy_coin": {
|
||||||
|
"description": "Proxy coin - must be used for specific futures modes (e.g. BNFCR)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"stake_currency": {
|
"stake_currency": {
|
||||||
"description": "Currency used for staking.",
|
"description": "Currency used for staking.",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
@@ -253,7 +257,8 @@
|
|||||||
"enum": [
|
"enum": [
|
||||||
"day",
|
"day",
|
||||||
"week",
|
"week",
|
||||||
"month"
|
"month",
|
||||||
|
"year"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -537,6 +542,10 @@
|
|||||||
"description": "Edge configuration.",
|
"description": "Edge configuration.",
|
||||||
"$ref": "#/definitions/edge"
|
"$ref": "#/definitions/edge"
|
||||||
},
|
},
|
||||||
|
"log_config": {
|
||||||
|
"description": "Logging configuration.",
|
||||||
|
"$ref": "#/definitions/logging"
|
||||||
|
},
|
||||||
"freqai": {
|
"freqai": {
|
||||||
"description": "FreqAI configuration.",
|
"description": "FreqAI configuration.",
|
||||||
"$ref": "#/definitions/freqai"
|
"$ref": "#/definitions/freqai"
|
||||||
@@ -601,13 +610,21 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"chat_id": {
|
"chat_id": {
|
||||||
"description": "Telegram chat or group ID",
|
"description": "Telegram chat or group ID. Recommended to be set via environment variable FREQTRADE__TELEGRAM__CHAT_ID",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"topic_id": {
|
"topic_id": {
|
||||||
"description": "Telegram topic ID - only applicable for group chats",
|
"description": "Telegram topic ID - only applicable for group chats. Recommended to be set via environment variable FREQTRADE__TELEGRAM__TOPIC_ID",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"authorized_users": {
|
||||||
|
"description": "Authorized users for the bot.",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"uniqueItems": true
|
||||||
|
},
|
||||||
"allow_custom_messages": {
|
"allow_custom_messages": {
|
||||||
"description": "Allow sending custom messages from the Strategy.",
|
"description": "Allow sending custom messages from the Strategy.",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
@@ -756,9 +773,11 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"enabled": {
|
"enabled": {
|
||||||
|
"description": "Enable webhook notifications.",
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
"url": {
|
"url": {
|
||||||
|
"description": "Webhook URL. Recommended to be set via environment variable FREQTRADE__WEBHOOK__URL",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"format": {
|
"format": {
|
||||||
@@ -836,6 +855,7 @@
|
|||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
"webhook_url": {
|
"webhook_url": {
|
||||||
|
"description": "Discord webhook URL. Recommended to be set via environment variable FREQTRADE__DISCORD__WEBHOOK_URL",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"exit_fill": {
|
"exit_fill": {
|
||||||
@@ -975,7 +995,7 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"x": {
|
"verbosity": {
|
||||||
"description": "Logging verbosity level.",
|
"description": "Logging verbosity level.",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
@@ -1015,6 +1035,7 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
"running",
|
"running",
|
||||||
|
"paused",
|
||||||
"stopped"
|
"stopped"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1051,7 +1072,6 @@
|
|||||||
"enum": [
|
"enum": [
|
||||||
"json",
|
"json",
|
||||||
"jsongz",
|
"jsongz",
|
||||||
"hdf5",
|
|
||||||
"feather",
|
"feather",
|
||||||
"parquet"
|
"parquet"
|
||||||
],
|
],
|
||||||
@@ -1063,7 +1083,6 @@
|
|||||||
"enum": [
|
"enum": [
|
||||||
"json",
|
"json",
|
||||||
"jsongz",
|
"jsongz",
|
||||||
"hdf5",
|
|
||||||
"feather",
|
"feather",
|
||||||
"parquet"
|
"parquet"
|
||||||
],
|
],
|
||||||
@@ -1152,28 +1171,35 @@
|
|||||||
"description": "Name of the exchange.",
|
"description": "Name of the exchange.",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"enable_ws": {
|
|
||||||
"description": "Enable WebSocket connections to the exchange.",
|
|
||||||
"type": "boolean",
|
|
||||||
"default": true
|
|
||||||
},
|
|
||||||
"key": {
|
"key": {
|
||||||
"description": "API key for the exchange.",
|
"description": "API key for the exchange. Recommended to be set via environment variable FREQTRADE__EXCHANGE__KEY",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": ""
|
"default": ""
|
||||||
},
|
},
|
||||||
"secret": {
|
"secret": {
|
||||||
"description": "API secret for the exchange.",
|
"description": "API secret for the exchange. Recommended to be set via environment variable FREQTRADE__EXCHANGE__SECRET",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": ""
|
"default": ""
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"description": "Password for the exchange, if required.",
|
"description": "Password for the exchange, if required. Recommended to be set via environment variable FREQTRADE__EXCHANGE__PASSWORD",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": ""
|
"default": ""
|
||||||
},
|
},
|
||||||
"uid": {
|
"uid": {
|
||||||
"description": "User ID for the exchange, if required.",
|
"description": "User ID for the exchange, if required. Recommended to be set via environment variable FREQTRADE__EXCHANGE__UID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"account_id": {
|
||||||
|
"description": "Account ID for the exchange, if required. Recommended to be set via environment variable FREQTRADE__EXCHANGE__ACCOUNT_ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"wallet_address": {
|
||||||
|
"description": "Wallet address for the exchange, if required. Usually used by DEX exchanges. Recommended to be set via environment variable FREQTRADE__EXCHANGE__WALLET_ADDRESS",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"private_key": {
|
||||||
|
"description": "Private key for the exchange, if required. Usually used by DEX exchanges. Recommended to be set via environment variable FREQTRADE__EXCHANGE__PRIVATE_KEY",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"pair_whitelist": {
|
"pair_whitelist": {
|
||||||
@@ -1197,6 +1223,11 @@
|
|||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
|
"enable_ws": {
|
||||||
|
"description": "Enable WebSocket connections to the exchange.",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
"unknown_fee_rate": {
|
"unknown_fee_rate": {
|
||||||
"description": "Fee rate for unknown markets.",
|
"description": "Fee rate for unknown markets.",
|
||||||
"type": "number"
|
"type": "number"
|
||||||
@@ -1270,6 +1301,30 @@
|
|||||||
"allowed_risk"
|
"allowed_risk"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"logging": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"version": {
|
||||||
|
"type": "number",
|
||||||
|
"const": 1
|
||||||
|
},
|
||||||
|
"formatters": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"handlers": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"version",
|
||||||
|
"formatters",
|
||||||
|
"handlers",
|
||||||
|
"root"
|
||||||
|
]
|
||||||
|
},
|
||||||
"external_message_consumer": {
|
"external_message_consumer": {
|
||||||
"description": "Configuration for external message consumer.",
|
"description": "Configuration for external message consumer.",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -1364,10 +1419,10 @@
|
|||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"keras": {
|
"identifier": {
|
||||||
"description": "Use Keras for model training.",
|
"description": "A unique ID for the current model. Must be changed when modifying features.",
|
||||||
"type": "boolean",
|
"type": "string",
|
||||||
"default": false
|
"default": "example"
|
||||||
},
|
},
|
||||||
"write_metrics_to_disk": {
|
"write_metrics_to_disk": {
|
||||||
"description": "Write metrics to disk?",
|
"description": "Write metrics to disk?",
|
||||||
@@ -1397,16 +1452,49 @@
|
|||||||
"type": "number",
|
"type": "number",
|
||||||
"default": 7
|
"default": 7
|
||||||
},
|
},
|
||||||
"identifier": {
|
"live_retrain_hours": {
|
||||||
"description": "A unique ID for the current model. Must be changed when modifying features.",
|
"description": "Frequency of retraining during dry/live runs.",
|
||||||
"type": "string",
|
"type": "number",
|
||||||
"default": "example"
|
"default": 0
|
||||||
|
},
|
||||||
|
"expiration_hours": {
|
||||||
|
"description": "Avoid making predictions if a model is more than `expiration_hours` old. Defaults to 0 (no expiration).",
|
||||||
|
"type": "number",
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
|
"save_backtest_models": {
|
||||||
|
"description": "Save models to disk when running backtesting.",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"fit_live_predictions_candles": {
|
||||||
|
"description": "Number of historical candles to use for computing target (label) statistics from prediction data, instead of from the training dataset.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"data_kitchen_thread_count": {
|
||||||
|
"description": "Designate the number of threads you want to use for data processing (outlier methods, normalization, etc.).",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"activate_tensorboard": {
|
||||||
|
"description": "Indicate whether or not to activate tensorboard",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true
|
||||||
},
|
},
|
||||||
"wait_for_training_iteration_on_reload": {
|
"wait_for_training_iteration_on_reload": {
|
||||||
"description": "Wait for the next training iteration to complete after /reload or ctrl+c.",
|
"description": "Wait for the next training iteration to complete after /reload or ctrl+c.",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": true
|
"default": true
|
||||||
},
|
},
|
||||||
|
"continual_learning": {
|
||||||
|
"description": "Use the final state of the most recently trained model as starting point for the new model, allowing for incremental learning.",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"keras": {
|
||||||
|
"description": "Use Keras for model training.",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
"feature_parameters": {
|
"feature_parameters": {
|
||||||
"description": "The parameters used to engineer the feature set",
|
"description": "The parameters used to engineer the feature set",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -1443,6 +1531,14 @@
|
|||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
|
"indicator_periods_candles": {
|
||||||
|
"description": "Time periods to calculate indicators for. The indicators are added to the base indicator dataset.",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
"use_SVM_to_remove_outliers": {
|
"use_SVM_to_remove_outliers": {
|
||||||
"description": "Use SVM to remove outliers from the features.",
|
"description": "Use SVM to remove outliers from the features.",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
|
|||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
FROM python:3.11.10-slim-bookworm as base
|
FROM python:3.11.12-slim-bookworm as base
|
||||||
|
|
||||||
# Setup env
|
# Setup env
|
||||||
ENV LANG C.UTF-8
|
ENV LANG C.UTF-8
|
||||||
@@ -11,7 +11,7 @@ ENV FT_APP_ENV="docker"
|
|||||||
# Prepare environment
|
# Prepare environment
|
||||||
RUN mkdir /freqtrade \
|
RUN mkdir /freqtrade \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& apt-get -y install sudo libatlas3-base libopenblas-dev curl sqlite3 libhdf5-dev libutf8proc-dev libsnappy-dev \
|
&& apt-get -y install sudo libatlas3-base libopenblas-dev curl sqlite3 libutf8proc-dev libsnappy-dev \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& useradd -u 1000 -G sudo -U -m ftuser \
|
&& useradd -u 1000 -G sudo -U -m ftuser \
|
||||||
&& chown ftuser:ftuser /freqtrade \
|
&& chown ftuser:ftuser /freqtrade \
|
||||||
@@ -34,7 +34,7 @@ COPY build_helpers/* /tmp/
|
|||||||
# Install dependencies
|
# Install dependencies
|
||||||
COPY --chown=ftuser:ftuser requirements.txt /freqtrade/
|
COPY --chown=ftuser:ftuser requirements.txt /freqtrade/
|
||||||
USER ftuser
|
USER ftuser
|
||||||
RUN pip install --user --no-cache-dir numpy \
|
RUN pip install --user --no-cache-dir "numpy<2" \
|
||||||
&& pip install --user --no-index --find-links /tmp/ pyarrow TA-Lib \
|
&& pip install --user --no-index --find-links /tmp/ pyarrow TA-Lib \
|
||||||
&& pip install --user --no-cache-dir -r requirements.txt
|
&& pip install --user --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
|||||||
+35
-38
@@ -161,56 +161,53 @@ class MyAwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
### Overriding Base estimator
|
### Overriding Base estimator
|
||||||
|
|
||||||
You can define your own estimator for Hyperopt by implementing `generate_estimator()` in the Hyperopt subclass.
|
You can define your own optuna sampler for Hyperopt by implementing `generate_estimator()` in the Hyperopt subclass.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class MyAwesomeStrategy(IStrategy):
|
class MyAwesomeStrategy(IStrategy):
|
||||||
class HyperOpt:
|
class HyperOpt:
|
||||||
def generate_estimator(dimensions: List['Dimension'], **kwargs):
|
def generate_estimator(dimensions: List['Dimension'], **kwargs):
|
||||||
return "RF"
|
return "NSGAIIISampler"
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Possible values are either one of "GP", "RF", "ET", "GBRT" (Details can be found in the [scikit-optimize documentation](https://scikit-optimize.github.io/)), or "an instance of a class that inherits from `RegressorMixin` (from sklearn) and where the `predict` method has an optional `return_std` argument, which returns `std(Y | x)` along with `E[Y | x]`".
|
Possible values are either one of "NSGAIISampler", "TPESampler", "GPSampler", "CmaEsSampler", "NSGAIIISampler", "QMCSampler" (Details can be found in the [optuna-samplers documentation](https://optuna.readthedocs.io/en/stable/reference/samplers/index.html)), or "an instance of a class that inherits from `optuna.samplers.BaseSampler`".
|
||||||
|
|
||||||
Some research will be necessary to find additional Regressors.
|
Some research will be necessary to find additional Samplers (from optunahub) for example.
|
||||||
|
|
||||||
Example for `ExtraTreesRegressor` ("ET") with additional parameters:
|
|
||||||
|
|
||||||
```python
|
|
||||||
class MyAwesomeStrategy(IStrategy):
|
|
||||||
class HyperOpt:
|
|
||||||
def generate_estimator(dimensions: List['Dimension'], **kwargs):
|
|
||||||
from skopt.learning import ExtraTreesRegressor
|
|
||||||
# Corresponds to "ET" - but allows additional parameters.
|
|
||||||
return ExtraTreesRegressor(n_estimators=100)
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
The `dimensions` parameter is the list of `skopt.space.Dimension` objects corresponding to the parameters to be optimized. It can be used to create isotropic kernels for the `skopt.learning.GaussianProcessRegressor` estimator. Here's an example:
|
|
||||||
|
|
||||||
```python
|
|
||||||
class MyAwesomeStrategy(IStrategy):
|
|
||||||
class HyperOpt:
|
|
||||||
def generate_estimator(dimensions: List['Dimension'], **kwargs):
|
|
||||||
from skopt.utils import cook_estimator
|
|
||||||
from skopt.learning.gaussian_process.kernels import (Matern, ConstantKernel)
|
|
||||||
kernel_bounds = (0.0001, 10000)
|
|
||||||
kernel = (
|
|
||||||
ConstantKernel(1.0, kernel_bounds) *
|
|
||||||
Matern(length_scale=np.ones(len(dimensions)), length_scale_bounds=[kernel_bounds for d in dimensions], nu=2.5)
|
|
||||||
)
|
|
||||||
kernel += (
|
|
||||||
ConstantKernel(1.0, kernel_bounds) *
|
|
||||||
Matern(length_scale=np.ones(len(dimensions)), length_scale_bounds=[kernel_bounds for d in dimensions], nu=1.5)
|
|
||||||
)
|
|
||||||
|
|
||||||
return cook_estimator("GP", space=dimensions, kernel=kernel, n_restarts_optimizer=2)
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
While custom estimators can be provided, it's up to you as User to do research on possible parameters and analyze / understand which ones should be used.
|
While custom estimators can be provided, it's up to you as User to do research on possible parameters and analyze / understand which ones should be used.
|
||||||
If you're unsure about this, best use one of the Defaults (`"ET"` has proven to be the most versatile) without further parameters.
|
If you're unsure about this, best use one of the Defaults (`"NSGAIIISampler"` has proven to be the most versatile) without further parameters.
|
||||||
|
|
||||||
|
??? Example "Using `AutoSampler` from Optunahub"
|
||||||
|
|
||||||
|
[AutoSampler docs](https://hub.optuna.org/samplers/auto_sampler/)
|
||||||
|
|
||||||
|
Install the necessary dependencies
|
||||||
|
``` bash
|
||||||
|
pip install optunahub cmaes torch scipy
|
||||||
|
```
|
||||||
|
Implement `generate_estimator()` in your strategy
|
||||||
|
|
||||||
|
``` python
|
||||||
|
# ...
|
||||||
|
from freqtrade.strategy.interface import IStrategy
|
||||||
|
from typing import List
|
||||||
|
import optunahub
|
||||||
|
# ...
|
||||||
|
|
||||||
|
class my_strategy(IStrategy):
|
||||||
|
class HyperOpt:
|
||||||
|
def generate_estimator(dimensions: List["Dimension"], **kwargs):
|
||||||
|
if "random_state" in kwargs.keys():
|
||||||
|
return optunahub.load_module("samplers/auto_sampler").AutoSampler(seed=kwargs["random_state"])
|
||||||
|
else:
|
||||||
|
return optunahub.load_module("samplers/auto_sampler").AutoSampler()
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Obviously the same approach will work for all other Samplers optuna supports.
|
||||||
|
|
||||||
|
|
||||||
## Space options
|
## Space options
|
||||||
|
|
||||||
|
|||||||
@@ -70,8 +70,8 @@ dataframe["delta"] # Difference between ask and bid volume.
|
|||||||
dataframe["min_delta"] # Minimum delta within the candle
|
dataframe["min_delta"] # Minimum delta within the candle
|
||||||
dataframe["max_delta"] # Maximum delta within the candle
|
dataframe["max_delta"] # Maximum delta within the candle
|
||||||
dataframe["total_trades"] # Total number of trades
|
dataframe["total_trades"] # Total number of trades
|
||||||
dataframe["stacked_imbalances_bid"] # Price level of stacked bid imbalance
|
dataframe["stacked_imbalances_bid"] # List of price levels of stacked bid imbalance range beginnings
|
||||||
dataframe["stacked_imbalances_ask"] # Price level of stacked ask imbalance
|
dataframe["stacked_imbalances_ask"] # List of price levels of stacked ask imbalance range beginnings
|
||||||
```
|
```
|
||||||
|
|
||||||
You can access these columns in your strategy code for further analysis. Here's an example:
|
You can access these columns in your strategy code for further analysis. Here's an example:
|
||||||
|
|||||||
+198
-14
@@ -177,7 +177,7 @@ sudo loginctl enable-linger "$USER"
|
|||||||
If you run the bot as a service, you can use systemd service manager as a software watchdog monitoring freqtrade bot
|
If you run the bot as a service, you can use systemd service manager as a software watchdog monitoring freqtrade bot
|
||||||
state and restarting it in the case of failures. If the `internals.sd_notify` parameter is set to true in the
|
state and restarting it in the case of failures. If the `internals.sd_notify` parameter is set to true in the
|
||||||
configuration or the `--sd-notify` command line option is used, the bot will send keep-alive ping messages to systemd
|
configuration or the `--sd-notify` command line option is used, the bot will send keep-alive ping messages to systemd
|
||||||
using the sd_notify (systemd notifications) protocol and will also tell systemd its current state (Running or Stopped)
|
using the sd_notify (systemd notifications) protocol and will also tell systemd its current state (Running, Paused or Stopped)
|
||||||
when it changes.
|
when it changes.
|
||||||
|
|
||||||
The `freqtrade.service.watchdog` file contains an example of the service unit configuration file which uses systemd
|
The `freqtrade.service.watchdog` file contains an example of the service unit configuration file which uses systemd
|
||||||
@@ -188,30 +188,113 @@ as the watchdog.
|
|||||||
|
|
||||||
## Advanced Logging
|
## Advanced Logging
|
||||||
|
|
||||||
|
Freqtrade uses the default logging module provided by python.
|
||||||
|
Python allows for extensive [logging configuration](https://docs.python.org/3/library/logging.config.html#logging.config.dictConfig) in this regard - way more than what can be covered here.
|
||||||
|
|
||||||
|
Default logging format (coloured terminal output) is set up by default if no `log_config` is provided in your freqtrade configuration.
|
||||||
|
Using `--logfile logfile.log` will enable the RotatingFileHandler.
|
||||||
|
|
||||||
|
If you're not content with the log format, or with the default settings provided for the RotatingFileHandler, you can customize logging to your liking by adding the `log_config` configuration to your freqtrade configuration file(s).
|
||||||
|
|
||||||
|
The default configuration looks roughly like the below, with the file handler being provided but not enabled as the `filename` is commented out.
|
||||||
|
Uncomment this line and supply a valid path/filename to enable it.
|
||||||
|
|
||||||
|
``` json hl_lines="5-7 13-16 27"
|
||||||
|
{
|
||||||
|
"log_config": {
|
||||||
|
"version": 1,
|
||||||
|
"formatters": {
|
||||||
|
"basic": {
|
||||||
|
"format": "%(message)s"
|
||||||
|
},
|
||||||
|
"standard": {
|
||||||
|
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"handlers": {
|
||||||
|
"console": {
|
||||||
|
"class": "freqtrade.loggers.ft_rich_handler.FtRichHandler",
|
||||||
|
"formatter": "basic"
|
||||||
|
},
|
||||||
|
"file": {
|
||||||
|
"class": "logging.handlers.RotatingFileHandler",
|
||||||
|
"formatter": "standard",
|
||||||
|
// "filename": "someRandomLogFile.log",
|
||||||
|
"maxBytes": 10485760,
|
||||||
|
"backupCount": 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"handlers": [
|
||||||
|
"console",
|
||||||
|
// "file"
|
||||||
|
],
|
||||||
|
"level": "INFO",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! Note "highlighted lines"
|
||||||
|
Highlighted lines in the above code-block define the Rich handler and belong together.
|
||||||
|
The formatter "standard" and "file" will belong to the FileHandler.
|
||||||
|
|
||||||
|
Each handler must use one of the defined formatters (by name), its class must be available, and must be a valid logging class.
|
||||||
|
To actually use a handler, it must be in the "handlers" section inside the "root" segment.
|
||||||
|
If this section is left out, freqtrade will provide no output (in the non-configured handler, anyway).
|
||||||
|
|
||||||
|
!!! Tip "Explicit log configuration"
|
||||||
|
We recommend to extract the logging configuration from your main freqtrade configuration file, and provide it to your bot via [multiple configuration files](configuration.md#multiple-configuration-files) functionality. This will avoid unnecessary code duplication.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
On many Linux systems the bot can be configured to send its log messages to `syslog` or `journald` system services. Logging to a remote `syslog` server is also available on Windows. The special values for the `--logfile` command line option can be used for this.
|
On many Linux systems the bot can be configured to send its log messages to `syslog` or `journald` system services. Logging to a remote `syslog` server is also available on Windows. The special values for the `--logfile` command line option can be used for this.
|
||||||
|
|
||||||
### Logging to syslog
|
### Logging to syslog
|
||||||
|
|
||||||
To send Freqtrade log messages to a local or remote `syslog` service use the `--logfile` command line option with the value in the following format:
|
To send Freqtrade log messages to a local or remote `syslog` service use the `"log_config"` setup option to configure logging.
|
||||||
|
|
||||||
* `--logfile syslog:<syslog_address>` -- send log messages to `syslog` service using the `<syslog_address>` as the syslog address.
|
``` json
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
"log_config": {
|
||||||
|
"version": 1,
|
||||||
|
"formatters": {
|
||||||
|
"syslog_fmt": {
|
||||||
|
"format": "%(name)s - %(levelname)s - %(message)s"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"handlers": {
|
||||||
|
// Other handlers?
|
||||||
|
"syslog": {
|
||||||
|
"class": "logging.handlers.SysLogHandler",
|
||||||
|
"formatter": "syslog_fmt",
|
||||||
|
// Use one of the other options above as address instead?
|
||||||
|
"address": "/dev/log"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"handlers": [
|
||||||
|
// other handlers
|
||||||
|
"syslog",
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
The syslog address can be either a Unix domain socket (socket filename) or a UDP socket specification, consisting of IP address and UDP port, separated by the `:` character.
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
So, the following are the examples of possible usages:
|
[Additional log-handlers](#advanced-logging) may need to be configured to for example also have log output in the console.
|
||||||
|
|
||||||
* `--logfile syslog:/dev/log` -- log to syslog (rsyslog) using the `/dev/log` socket, suitable for most systems.
|
#### Syslog usage
|
||||||
* `--logfile syslog` -- same as above, the shortcut for `/dev/log`.
|
|
||||||
* `--logfile syslog:/var/run/syslog` -- log to syslog (rsyslog) using the `/var/run/syslog` socket. Use this on MacOS.
|
|
||||||
* `--logfile syslog:localhost:514` -- log to local syslog using UDP socket, if it listens on port 514.
|
|
||||||
* `--logfile syslog:<ip>:514` -- log to remote syslog at IP address and port 514. This may be used on Windows for remote logging to an external syslog server.
|
|
||||||
|
|
||||||
Log messages are send to `syslog` with the `user` facility. So you can see them with the following commands:
|
Log messages are send to `syslog` with the `user` facility. So you can see them with the following commands:
|
||||||
|
|
||||||
* `tail -f /var/log/user`, or
|
* `tail -f /var/log/user`, or
|
||||||
* install a comprehensive graphical viewer (for instance, 'Log File Viewer' for Ubuntu).
|
* install a comprehensive graphical viewer (for instance, 'Log File Viewer' for Ubuntu).
|
||||||
|
|
||||||
On many systems `syslog` (`rsyslog`) fetches data from `journald` (and vice versa), so both `--logfile syslog` or `--logfile journald` can be used and the messages be viewed with both `journalctl` and a syslog viewer utility. You can combine this in any way which suites you better.
|
On many systems `syslog` (`rsyslog`) fetches data from `journald` (and vice versa), so both syslog or journald can be used and the messages be viewed with both `journalctl` and a syslog viewer utility. You can combine this in any way which suites you better.
|
||||||
|
|
||||||
For `rsyslog` the messages from the bot can be redirected into a separate dedicated log file. To achieve this, add
|
For `rsyslog` the messages from the bot can be redirected into a separate dedicated log file. To achieve this, add
|
||||||
|
|
||||||
@@ -228,13 +311,66 @@ For `syslog` (`rsyslog`), the reduction mode can be switched on. This will reduc
|
|||||||
$RepeatedMsgReduction on
|
$RepeatedMsgReduction on
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Syslog addressing
|
||||||
|
|
||||||
|
The syslog address can be either a Unix domain socket (socket filename) or a UDP socket specification, consisting of IP address and UDP port, separated by the `:` character.
|
||||||
|
|
||||||
|
So, the following are the examples of possible addresses:
|
||||||
|
|
||||||
|
* `"address": "/dev/log"` -- log to syslog (rsyslog) using the `/dev/log` socket, suitable for most systems.
|
||||||
|
* `"address": "/var/run/syslog"` -- log to syslog (rsyslog) using the `/var/run/syslog` socket. Use this on MacOS.
|
||||||
|
* `"address": "localhost:514"` -- log to local syslog using UDP socket, if it listens on port 514.
|
||||||
|
* `"address": "<ip>:514"` -- log to remote syslog at IP address and port 514. This may be used on Windows for remote logging to an external syslog server.
|
||||||
|
|
||||||
|
??? Info "Deprecated - configure syslog via command line"
|
||||||
|
`--logfile syslog:<syslog_address>` -- send log messages to `syslog` service using the `<syslog_address>` as the syslog address.
|
||||||
|
|
||||||
|
The syslog address can be either a Unix domain socket (socket filename) or a UDP socket specification, consisting of IP address and UDP port, separated by the `:` character.
|
||||||
|
|
||||||
|
So, the following are the examples of possible usages:
|
||||||
|
|
||||||
|
* `--logfile syslog:/dev/log` -- log to syslog (rsyslog) using the `/dev/log` socket, suitable for most systems.
|
||||||
|
* `--logfile syslog` -- same as above, the shortcut for `/dev/log`.
|
||||||
|
* `--logfile syslog:/var/run/syslog` -- log to syslog (rsyslog) using the `/var/run/syslog` socket. Use this on MacOS.
|
||||||
|
* `--logfile syslog:localhost:514` -- log to local syslog using UDP socket, if it listens on port 514.
|
||||||
|
* `--logfile syslog:<ip>:514` -- log to remote syslog at IP address and port 514. This may be used on Windows for remote logging to an external syslog server.
|
||||||
|
|
||||||
### Logging to journald
|
### Logging to journald
|
||||||
|
|
||||||
This needs the `cysystemd` python package installed as dependency (`pip install cysystemd`), which is not available on Windows. Hence, the whole journald logging functionality is not available for a bot running on Windows.
|
This needs the `cysystemd` python package installed as dependency (`pip install cysystemd`), which is not available on Windows. Hence, the whole journald logging functionality is not available for a bot running on Windows.
|
||||||
|
|
||||||
To send Freqtrade log messages to `journald` system service use the `--logfile` command line option with the value in the following format:
|
To send Freqtrade log messages to `journald` system service, add the following configuration snippet to your configuration.
|
||||||
|
|
||||||
* `--logfile journald` -- send log messages to `journald`.
|
``` json
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
"log_config": {
|
||||||
|
"version": 1,
|
||||||
|
"formatters": {
|
||||||
|
"journald_fmt": {
|
||||||
|
"format": "%(name)s - %(levelname)s - %(message)s"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"handlers": {
|
||||||
|
// Other handlers?
|
||||||
|
"journald": {
|
||||||
|
"class": "cysystemd.journal.JournaldLogHandler",
|
||||||
|
"formatter": "journald_fmt",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"handlers": [
|
||||||
|
// ..
|
||||||
|
"journald",
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
[Additional log-handlers](#advanced-logging) may need to be configured to for example also have log output in the console.
|
||||||
|
|
||||||
Log messages are send to `journald` with the `user` facility. So you can see them with the following commands:
|
Log messages are send to `journald` with the `user` facility. So you can see them with the following commands:
|
||||||
|
|
||||||
@@ -244,3 +380,51 @@ Log messages are send to `journald` with the `user` facility. So you can see the
|
|||||||
There are many other options in the `journalctl` utility to filter the messages, see manual pages for this utility.
|
There are many other options in the `journalctl` utility to filter the messages, see manual pages for this utility.
|
||||||
|
|
||||||
On many systems `syslog` (`rsyslog`) fetches data from `journald` (and vice versa), so both `--logfile syslog` or `--logfile journald` can be used and the messages be viewed with both `journalctl` and a syslog viewer utility. You can combine this in any way which suites you better.
|
On many systems `syslog` (`rsyslog`) fetches data from `journald` (and vice versa), so both `--logfile syslog` or `--logfile journald` can be used and the messages be viewed with both `journalctl` and a syslog viewer utility. You can combine this in any way which suites you better.
|
||||||
|
|
||||||
|
??? Info "Deprecated - configure journald via command line"
|
||||||
|
To send Freqtrade log messages to `journald` system service use the `--logfile` command line option with the value in the following format:
|
||||||
|
|
||||||
|
`--logfile journald` -- send log messages to `journald`.
|
||||||
|
|
||||||
|
### Log format as JSON
|
||||||
|
|
||||||
|
You can also configure the default output stream to use JSON format instead.
|
||||||
|
The "fmt_dict" attribute defines the keys for the json output - as well as the [python logging LogRecord attributes](https://docs.python.org/3/library/logging.html#logrecord-attributes).
|
||||||
|
|
||||||
|
The below configuration will change the default output to JSON. The same formatter could however also be used in combination with the `RotatingFileHandler`.
|
||||||
|
We recommend to keep one format in human readable form.
|
||||||
|
|
||||||
|
``` json
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
"log_config": {
|
||||||
|
"version": 1,
|
||||||
|
"formatters": {
|
||||||
|
"json": {
|
||||||
|
"()": "freqtrade.loggers.json_formatter.JsonFormatter",
|
||||||
|
"fmt_dict": {
|
||||||
|
"timestamp": "asctime",
|
||||||
|
"level": "levelname",
|
||||||
|
"logger": "name",
|
||||||
|
"message": "message"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"handlers": {
|
||||||
|
// Other handlers?
|
||||||
|
"jsonStream": {
|
||||||
|
"class": "logging.StreamHandler",
|
||||||
|
"formatter": "json"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"handlers": [
|
||||||
|
// ..
|
||||||
|
"jsonStream",
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 111 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 109 KiB |
+45
-106
@@ -7,111 +7,7 @@ To learn how to get data for the pairs and exchange you're interested in, head o
|
|||||||
|
|
||||||
## Backtesting command reference
|
## Backtesting command reference
|
||||||
|
|
||||||
```
|
--8<-- "commands/backtesting.md"
|
||||||
usage: freqtrade backtesting [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH] [-s NAME]
|
|
||||||
[--strategy-path PATH]
|
|
||||||
[--recursive-strategy-search]
|
|
||||||
[--freqaimodel NAME] [--freqaimodel-path PATH]
|
|
||||||
[-i TIMEFRAME] [--timerange TIMERANGE]
|
|
||||||
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
|
|
||||||
[--max-open-trades INT]
|
|
||||||
[--stake-amount STAKE_AMOUNT] [--fee FLOAT]
|
|
||||||
[-p PAIRS [PAIRS ...]] [--eps]
|
|
||||||
[--enable-protections]
|
|
||||||
[--dry-run-wallet DRY_RUN_WALLET]
|
|
||||||
[--timeframe-detail TIMEFRAME_DETAIL]
|
|
||||||
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
|
|
||||||
[--export {none,trades,signals}]
|
|
||||||
[--export-filename PATH]
|
|
||||||
[--breakdown {day,week,month} [{day,week,month} ...]]
|
|
||||||
[--cache {none,day,week,month}]
|
|
||||||
[--freqai-backtest-live-models]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
|
||||||
--timerange TIMERANGE
|
|
||||||
Specify what timerange of data to use.
|
|
||||||
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Storage format for downloaded candle (OHLCV) data.
|
|
||||||
(default: `feather`).
|
|
||||||
--max-open-trades INT
|
|
||||||
Override the value of the `max_open_trades`
|
|
||||||
configuration setting.
|
|
||||||
--stake-amount STAKE_AMOUNT
|
|
||||||
Override the value of the `stake_amount` configuration
|
|
||||||
setting.
|
|
||||||
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
|
||||||
entry and exit).
|
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
|
||||||
Limit command to these pairs. Pairs are space-
|
|
||||||
separated.
|
|
||||||
--eps, --enable-position-stacking
|
|
||||||
Allow buying the same pair multiple times (position
|
|
||||||
stacking).
|
|
||||||
--enable-protections, --enableprotections
|
|
||||||
Enable protections for backtesting.Will slow
|
|
||||||
backtesting down by a considerable amount, but will
|
|
||||||
include configured protections
|
|
||||||
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
|
||||||
Starting balance, used for backtesting / hyperopt and
|
|
||||||
dry-runs.
|
|
||||||
--timeframe-detail TIMEFRAME_DETAIL
|
|
||||||
Specify detail timeframe for backtesting (`1m`, `5m`,
|
|
||||||
`30m`, `1h`, `1d`).
|
|
||||||
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
|
|
||||||
Provide a space-separated list of strategies to
|
|
||||||
backtest. Please note that timeframe needs to be set
|
|
||||||
either in config or via command line. When using this
|
|
||||||
together with `--export trades`, the strategy-name is
|
|
||||||
injected into the filename (so `backtest-data.json`
|
|
||||||
becomes `backtest-data-SampleStrategy.json`
|
|
||||||
--export {none,trades,signals}
|
|
||||||
Export backtest results (default: trades).
|
|
||||||
--export-filename PATH, --backtest-filename PATH
|
|
||||||
Use this filename for backtest results.Requires
|
|
||||||
`--export` to be set as well. Example: `--export-filen
|
|
||||||
ame=user_data/backtest_results/backtest_today.json`
|
|
||||||
--breakdown {day,week,month} [{day,week,month} ...]
|
|
||||||
Show backtesting breakdown per [day, week, month].
|
|
||||||
--cache {none,day,week,month}
|
|
||||||
Load a cached backtest result no older than specified
|
|
||||||
age (default: day).
|
|
||||||
--freqai-backtest-live-models
|
|
||||||
Run backtest with ready models.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
Strategy arguments:
|
|
||||||
-s NAME, --strategy NAME
|
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
|
||||||
--recursive-strategy-search
|
|
||||||
Recursively search for a strategy in the strategies
|
|
||||||
folder.
|
|
||||||
--freqaimodel NAME Specify a custom freqaimodels.
|
|
||||||
--freqaimodel-path PATH
|
|
||||||
Specify additional lookup path for freqaimodels.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## Test your strategy with Backtesting
|
## Test your strategy with Backtesting
|
||||||
|
|
||||||
@@ -313,6 +209,7 @@ A backtesting result will look like that:
|
|||||||
| Sortino | 1.88 |
|
| Sortino | 1.88 |
|
||||||
| Sharpe | 2.97 |
|
| Sharpe | 2.97 |
|
||||||
| Calmar | 6.29 |
|
| Calmar | 6.29 |
|
||||||
|
| SQN | 2.45 |
|
||||||
| Profit factor | 1.11 |
|
| Profit factor | 1.11 |
|
||||||
| Expectancy (Ratio) | -0.15 (-0.05) |
|
| Expectancy (Ratio) | -0.15 (-0.05) |
|
||||||
| Avg. stake amount | 0.001 BTC |
|
| Avg. stake amount | 0.001 BTC |
|
||||||
@@ -419,6 +316,7 @@ It contains some useful key metrics about performance of your strategy on backte
|
|||||||
| Sortino | 1.88 |
|
| Sortino | 1.88 |
|
||||||
| Sharpe | 2.97 |
|
| Sharpe | 2.97 |
|
||||||
| Calmar | 6.29 |
|
| Calmar | 6.29 |
|
||||||
|
| SQN | 2.45 |
|
||||||
| Profit factor | 1.11 |
|
| Profit factor | 1.11 |
|
||||||
| Expectancy (Ratio) | -0.15 (-0.05) |
|
| Expectancy (Ratio) | -0.15 (-0.05) |
|
||||||
| Avg. stake amount | 0.001 BTC |
|
| Avg. stake amount | 0.001 BTC |
|
||||||
@@ -472,6 +370,7 @@ It contains some useful key metrics about performance of your strategy on backte
|
|||||||
- `Sortino`: Annualized Sortino ratio.
|
- `Sortino`: Annualized Sortino ratio.
|
||||||
- `Sharpe`: Annualized Sharpe ratio.
|
- `Sharpe`: Annualized Sharpe ratio.
|
||||||
- `Calmar`: Annualized Calmar ratio.
|
- `Calmar`: Annualized Calmar ratio.
|
||||||
|
- `SQN`: System Quality Number (SQN) - by Van Tharp.
|
||||||
- `Profit factor`: profit / loss.
|
- `Profit factor`: profit / loss.
|
||||||
- `Avg. stake amount`: Average stake amount, either `stake_amount` or the average when using dynamic stake amount.
|
- `Avg. stake amount`: Average stake amount, either `stake_amount` or the average when using dynamic stake amount.
|
||||||
- `Total trade volume`: Volume generated on the exchange to reach the above profit.
|
- `Total trade volume`: Volume generated on the exchange to reach the above profit.
|
||||||
@@ -536,6 +435,20 @@ To save time, by default backtest will reuse a cached result from within the las
|
|||||||
To further analyze your backtest results, freqtrade will export the trades to file by default.
|
To further analyze your backtest results, freqtrade will export the trades to file by default.
|
||||||
You can then load the trades to perform further analysis as shown in the [data analysis](strategy_analysis_example.md#load-backtest-results-to-pandas-dataframe) backtesting section.
|
You can then load the trades to perform further analysis as shown in the [data analysis](strategy_analysis_example.md#load-backtest-results-to-pandas-dataframe) backtesting section.
|
||||||
|
|
||||||
|
### Backtest output file
|
||||||
|
|
||||||
|
The output file freqtrade produces is a zip file containing the following files:
|
||||||
|
|
||||||
|
- The backtest report in json format
|
||||||
|
- the market change data in feather format
|
||||||
|
- a copy of the strategy file
|
||||||
|
- a copy of the strategy parameters (if a parameter file was used)
|
||||||
|
- a sanitized copy of the config file
|
||||||
|
|
||||||
|
This will ensure results are reproducible - under the assumption that the same data is available.
|
||||||
|
|
||||||
|
Only the strategy file and the config file are included in the zip file, eventual dependencies are not included.
|
||||||
|
|
||||||
## Assumptions made by backtesting
|
## Assumptions made by backtesting
|
||||||
|
|
||||||
Since backtesting lacks some detailed information about what happens within a candle, it needs to take a few assumptions:
|
Since backtesting lacks some detailed information about what happens within a candle, it needs to take a few assumptions:
|
||||||
@@ -612,7 +525,12 @@ To utilize this, you can append `--timeframe-detail 5m` to your regular backtest
|
|||||||
freqtrade backtesting --strategy AwesomeStrategy --timeframe 1h --timeframe-detail 5m
|
freqtrade backtesting --strategy AwesomeStrategy --timeframe 1h --timeframe-detail 5m
|
||||||
```
|
```
|
||||||
|
|
||||||
This will load 1h data as well as 5m data for the timeframe. The strategy will be analyzed with the 1h timeframe, and Entry orders will only be placed at the main timeframe, however Order fills and exit signals will be evaluated at the 5m candle, simulating intra-candle movements.
|
This will load 1h data (the main timeframe) as well as 5m data (detail timeframe) for the selected timerange.
|
||||||
|
The strategy will be analyzed with the 1h timeframe.
|
||||||
|
Candles where activity may take place (there's an active signal, the pair is in a trade) are evaluated at the 5m timeframe.
|
||||||
|
This will allow for a more accurate simulation of intra-candle movements - and can lead to different results, especially on higher timeframes.
|
||||||
|
|
||||||
|
Entries will generally still happen at the main candle's open, however freed trade slots may be freed earlier (if the exit signal is triggered on the 5m candle), which can then be used for a new trade of a different pair.
|
||||||
|
|
||||||
All callback functions (`custom_exit()`, `custom_stoploss()`, ... ) will be running for each 5m candle once the trade is opened (so 12 times in the above example of 1h timeframe, and 5m detailed timeframe).
|
All callback functions (`custom_exit()`, `custom_stoploss()`, ... ) will be running for each 5m candle once the trade is opened (so 12 times in the above example of 1h timeframe, and 5m detailed timeframe).
|
||||||
|
|
||||||
@@ -624,6 +542,27 @@ Also, data must be available / downloaded already.
|
|||||||
!!! Tip
|
!!! Tip
|
||||||
You can use this function as the last part of strategy development, to ensure your strategy is not exploiting one of the [backtesting assumptions](#assumptions-made-by-backtesting). Strategies that perform similarly well with this mode have a good chance to perform well in dry/live modes too (although only forward-testing (dry-mode) can really confirm a strategy).
|
You can use this function as the last part of strategy development, to ensure your strategy is not exploiting one of the [backtesting assumptions](#assumptions-made-by-backtesting). Strategies that perform similarly well with this mode have a good chance to perform well in dry/live modes too (although only forward-testing (dry-mode) can really confirm a strategy).
|
||||||
|
|
||||||
|
??? Sample "Extreme Difference Example"
|
||||||
|
Using `--timeframe-detail` on an extreme example (all below pairs have the 10:00 candle with an entry signal) may lead to the following backtesting Trade sequence with 1 max_open_trades:
|
||||||
|
|
||||||
|
| Pair | Entry Time | Exit Time | Duration |
|
||||||
|
|------|------------|-----------| -------- |
|
||||||
|
| BTC/USDT | 2024-01-01 10:00:00 | 2021-01-01 10:05:00 | 5m |
|
||||||
|
| ETH/USDT | 2024-01-01 10:05:00 | 2021-01-01 10:15:00 | 10m |
|
||||||
|
| XRP/USDT | 2024-01-01 10:15:00 | 2021-01-01 10:30:00 | 15m |
|
||||||
|
| SOL/USDT | 2024-01-01 10:15:00 | 2021-01-01 11:05:00 | 50m |
|
||||||
|
| BTC/USDT | 2024-01-01 11:05:00 | 2021-01-01 12:00:00 | 55m |
|
||||||
|
|
||||||
|
Without timeframe-detail, this would look like:
|
||||||
|
|
||||||
|
| Pair | Entry Time | Exit Time | Duration |
|
||||||
|
|------|------------|-----------| -------- |
|
||||||
|
| BTC/USDT | 2024-01-01 10:00:00 | 2021-01-01 11:00:00 | 1h |
|
||||||
|
| BTC/USDT | 2024-01-01 11:00:00 | 2021-01-01 12:00:00 | 1h |
|
||||||
|
|
||||||
|
The difference is significant, as without detail data, only the first `max_open_trades` signals per candle are evaluated, and the trade slots are only freed at the end of the candle, allowing for a new trade to be opened at the next candle.
|
||||||
|
|
||||||
|
|
||||||
## Backtesting multiple strategies
|
## Backtesting multiple strategies
|
||||||
|
|
||||||
To compare multiple strategies, a list of Strategies can be provided to backtesting.
|
To compare multiple strategies, a list of Strategies can be provided to backtesting.
|
||||||
|
|||||||
+7
-3
@@ -54,11 +54,13 @@ By default, the bot loop runs every few seconds (`internals.process_throttle_sec
|
|||||||
* Check timeouts for open orders.
|
* Check timeouts for open orders.
|
||||||
* Calls `check_entry_timeout()` strategy callback for open entry orders.
|
* Calls `check_entry_timeout()` strategy callback for open entry orders.
|
||||||
* Calls `check_exit_timeout()` strategy callback for open exit orders.
|
* Calls `check_exit_timeout()` strategy callback for open exit orders.
|
||||||
* Calls `adjust_entry_price()` strategy callback for open entry orders.
|
* Calls `adjust_order_price()` strategy callback for open orders.
|
||||||
|
* Calls `adjust_entry_price()` strategy callback for open entry orders. *only called when `adjust_order_price()` is not implemented*
|
||||||
|
* Calls `adjust_exit_price()` strategy callback for open exit orders. *only called when `adjust_order_price()` is not implemented*
|
||||||
* Verifies existing positions and eventually places exit orders.
|
* Verifies existing positions and eventually places exit orders.
|
||||||
* Considers stoploss, ROI and exit-signal, `custom_exit()` and `custom_stoploss()`.
|
* Considers stoploss, ROI and exit-signal, `custom_exit()` and `custom_stoploss()`.
|
||||||
* Determine exit-price based on `exit_pricing` configuration setting or by using the `custom_exit_price()` callback.
|
* Determine exit-price based on `exit_pricing` configuration setting or by using the `custom_exit_price()` callback.
|
||||||
* Before a exit order is placed, `confirm_trade_exit()` strategy callback is called.
|
* Before an exit order is placed, `confirm_trade_exit()` strategy callback is called.
|
||||||
* Check position adjustments for open trades if enabled by calling `adjust_trade_position()` and place additional order if required.
|
* Check position adjustments for open trades if enabled by calling `adjust_trade_position()` and place additional order if required.
|
||||||
* Check if trade-slots are still available (if `max_open_trades` is reached).
|
* Check if trade-slots are still available (if `max_open_trades` is reached).
|
||||||
* Verifies entry signal trying to enter new positions.
|
* Verifies entry signal trying to enter new positions.
|
||||||
@@ -80,7 +82,9 @@ This loop will be repeated again and again until the bot is stopped.
|
|||||||
* Loops per candle simulating entry and exit points.
|
* Loops per candle simulating entry and exit points.
|
||||||
* Calls `bot_loop_start()` strategy callback.
|
* Calls `bot_loop_start()` strategy callback.
|
||||||
* Check for Order timeouts, either via the `unfilledtimeout` configuration, or via `check_entry_timeout()` / `check_exit_timeout()` strategy callbacks.
|
* Check for Order timeouts, either via the `unfilledtimeout` configuration, or via `check_entry_timeout()` / `check_exit_timeout()` strategy callbacks.
|
||||||
* Calls `adjust_entry_price()` strategy callback for open entry orders.
|
* Calls `adjust_order_price()` strategy callback for open orders.
|
||||||
|
* Calls `adjust_entry_price()` strategy callback for open entry orders. *only called when `adjust_order_price()` is not implemented!*
|
||||||
|
* Calls `adjust_exit_price()` strategy callback for open exit orders. *only called when `adjust_order_price()` is not implemented!*
|
||||||
* Check for trade entry signals (`enter_long` / `enter_short` columns).
|
* Check for trade entry signals (`enter_long` / `enter_short` columns).
|
||||||
* Confirm trade entry / exits (calls `confirm_trade_entry()` and `confirm_trade_exit()` if implemented in the strategy).
|
* Confirm trade entry / exits (calls `confirm_trade_entry()` and `confirm_trade_exit()` if implemented in the strategy).
|
||||||
* Call `custom_entry_price()` (if implemented in the strategy) to determine entry price (Prices are moved to be within the opening candle).
|
* Call `custom_entry_price()` (if implemented in the strategy) to determine entry price (Prices are moved to be within the opening candle).
|
||||||
|
|||||||
+2
-92
@@ -10,101 +10,11 @@ This page explains the different parameters of the bot and how to run it.
|
|||||||
|
|
||||||
## Bot commands
|
## Bot commands
|
||||||
|
|
||||||
```
|
--8<-- "commands/main.md"
|
||||||
usage: freqtrade [-h] [-V]
|
|
||||||
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
|
|
||||||
...
|
|
||||||
|
|
||||||
Free, open source crypto trading bot
|
|
||||||
|
|
||||||
positional arguments:
|
|
||||||
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
|
|
||||||
trade Trade module.
|
|
||||||
create-userdir Create user-data directory.
|
|
||||||
new-config Create new config
|
|
||||||
show-config Show resolved config
|
|
||||||
new-strategy Create new strategy
|
|
||||||
download-data Download backtesting data.
|
|
||||||
convert-data Convert candle (OHLCV) data from one format to
|
|
||||||
another.
|
|
||||||
convert-trade-data Convert trade data from one format to another.
|
|
||||||
trades-to-ohlcv Convert trade data to OHLCV data.
|
|
||||||
list-data List downloaded data.
|
|
||||||
backtesting Backtesting module.
|
|
||||||
backtesting-show Show past Backtest results
|
|
||||||
backtesting-analysis
|
|
||||||
Backtest Analysis module.
|
|
||||||
edge Edge module.
|
|
||||||
hyperopt Hyperopt module.
|
|
||||||
hyperopt-list List Hyperopt results
|
|
||||||
hyperopt-show Show details of Hyperopt results
|
|
||||||
list-exchanges Print available exchanges.
|
|
||||||
list-markets Print markets on exchange.
|
|
||||||
list-pairs Print pairs on exchange.
|
|
||||||
list-strategies Print available strategies.
|
|
||||||
list-freqaimodels Print available freqAI models.
|
|
||||||
list-timeframes Print available timeframes for the exchange.
|
|
||||||
show-trades Show trades.
|
|
||||||
test-pairlist Test your pairlist configuration.
|
|
||||||
convert-db Migrate database to different system
|
|
||||||
install-ui Install FreqUI
|
|
||||||
plot-dataframe Plot candles with indicators.
|
|
||||||
plot-profit Generate plot showing profits.
|
|
||||||
webserver Webserver module.
|
|
||||||
strategy-updater updates outdated strategy files to the current version
|
|
||||||
lookahead-analysis Check for potential look ahead bias.
|
|
||||||
recursive-analysis Check for potential recursive formula issue.
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bot trading commands
|
### Bot trading commands
|
||||||
|
|
||||||
```
|
--8<-- "commands/trade.md"
|
||||||
usage: freqtrade trade [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
|
|
||||||
[--userdir PATH] [-s NAME] [--strategy-path PATH]
|
|
||||||
[--db-url PATH] [--sd-notify] [--dry-run]
|
|
||||||
[--dry-run-wallet DRY_RUN_WALLET]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--db-url PATH Override trades database URL, this is useful in custom
|
|
||||||
deployments (default: `sqlite:///tradesv3.sqlite` for
|
|
||||||
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
|
|
||||||
Dry Run).
|
|
||||||
--sd-notify Notify systemd service manager.
|
|
||||||
--dry-run Enforce dry-run for trading (removes Exchange secrets
|
|
||||||
and simulates trades).
|
|
||||||
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
|
||||||
Starting balance, used for backtesting / hyperopt and
|
|
||||||
dry-runs.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
Strategy arguments:
|
|
||||||
-s NAME, --strategy NAME
|
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### How to specify which configuration file be used?
|
### How to specify which configuration file be used?
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade backtesting-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
|
[-V] [-c PATH] [-d PATH]
|
||||||
|
[--userdir PATH]
|
||||||
|
[--export-filename PATH]
|
||||||
|
[--analysis-groups {0,1,2,3,4,5} [{0,1,2,3,4,5} ...]]
|
||||||
|
[--enter-reason-list ENTER_REASON_LIST [ENTER_REASON_LIST ...]]
|
||||||
|
[--exit-reason-list EXIT_REASON_LIST [EXIT_REASON_LIST ...]]
|
||||||
|
[--indicator-list INDICATOR_LIST [INDICATOR_LIST ...]]
|
||||||
|
[--entry-only] [--exit-only]
|
||||||
|
[--timerange TIMERANGE]
|
||||||
|
[--rejected-signals] [--analysis-to-csv]
|
||||||
|
[--analysis-csv-path ANALYSIS_CSV_PATH]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--export-filename PATH, --backtest-filename PATH
|
||||||
|
Use this filename for backtest results.Requires
|
||||||
|
`--export` to be set as well. Example: `--export-filen
|
||||||
|
ame=user_data/backtest_results/backtest_today.json`
|
||||||
|
--analysis-groups {0,1,2,3,4,5} [{0,1,2,3,4,5} ...]
|
||||||
|
grouping output - 0: simple wins/losses by enter tag,
|
||||||
|
1: by enter_tag, 2: by enter_tag and exit_tag, 3: by
|
||||||
|
pair and enter_tag, 4: by pair, enter_ and exit_tag
|
||||||
|
(this can get quite large), 5: by exit_tag
|
||||||
|
--enter-reason-list ENTER_REASON_LIST [ENTER_REASON_LIST ...]
|
||||||
|
Space separated list of entry signals to analyse.
|
||||||
|
Default: all. e.g. 'entry_tag_a entry_tag_b'
|
||||||
|
--exit-reason-list EXIT_REASON_LIST [EXIT_REASON_LIST ...]
|
||||||
|
Space separated list of exit signals to analyse.
|
||||||
|
Default: all. e.g. 'exit_tag_a roi stop_loss
|
||||||
|
trailing_stop_loss'
|
||||||
|
--indicator-list INDICATOR_LIST [INDICATOR_LIST ...]
|
||||||
|
Space separated list of indicators to analyse. e.g.
|
||||||
|
'close rsi bb_lowerband profit_abs'
|
||||||
|
--entry-only Only analyze entry signals.
|
||||||
|
--exit-only Only analyze exit signals.
|
||||||
|
--timerange TIMERANGE
|
||||||
|
Specify what timerange of data to use.
|
||||||
|
--rejected-signals Analyse rejected signals
|
||||||
|
--analysis-to-csv Save selected analysis tables to individual CSVs
|
||||||
|
--analysis-csv-path ANALYSIS_CSV_PATH
|
||||||
|
Specify a path to save the analysis CSVs if
|
||||||
|
--analysis-to-csv is enabled. Default:
|
||||||
|
user_data/basktesting_results/
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade backtesting-show [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[--export-filename PATH] [--show-pair-list]
|
||||||
|
[--breakdown {day,week,month,year} [{day,week,month,year} ...]]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--export-filename PATH, --backtest-filename PATH
|
||||||
|
Use this filename for backtest results.Requires
|
||||||
|
`--export` to be set as well. Example: `--export-filen
|
||||||
|
ame=user_data/backtest_results/backtest_today.json`
|
||||||
|
--show-pair-list Show backtesting pairlist sorted by profit.
|
||||||
|
--breakdown {day,week,month,year} [{day,week,month,year} ...]
|
||||||
|
Show backtesting breakdown per [day, week, month,
|
||||||
|
year].
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade backtesting [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
||||||
|
[--strategy-path PATH]
|
||||||
|
[--recursive-strategy-search]
|
||||||
|
[--freqaimodel NAME] [--freqaimodel-path PATH]
|
||||||
|
[-i TIMEFRAME] [--timerange TIMERANGE]
|
||||||
|
[--data-format-ohlcv {json,jsongz,feather,parquet}]
|
||||||
|
[--max-open-trades INT]
|
||||||
|
[--stake-amount STAKE_AMOUNT] [--fee FLOAT]
|
||||||
|
[-p PAIRS [PAIRS ...]] [--eps]
|
||||||
|
[--enable-protections]
|
||||||
|
[--dry-run-wallet DRY_RUN_WALLET]
|
||||||
|
[--timeframe-detail TIMEFRAME_DETAIL]
|
||||||
|
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
|
||||||
|
[--export {none,trades,signals}]
|
||||||
|
[--export-filename PATH]
|
||||||
|
[--breakdown {day,week,month,year} [{day,week,month,year} ...]]
|
||||||
|
[--cache {none,day,week,month}]
|
||||||
|
[--freqai-backtest-live-models]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-i TIMEFRAME, --timeframe TIMEFRAME
|
||||||
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
|
--timerange TIMERANGE
|
||||||
|
Specify what timerange of data to use.
|
||||||
|
--data-format-ohlcv {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded candle (OHLCV) data.
|
||||||
|
(default: `feather`).
|
||||||
|
--max-open-trades INT
|
||||||
|
Override the value of the `max_open_trades`
|
||||||
|
configuration setting.
|
||||||
|
--stake-amount STAKE_AMOUNT
|
||||||
|
Override the value of the `stake_amount` configuration
|
||||||
|
setting.
|
||||||
|
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
||||||
|
entry and exit).
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--eps, --enable-position-stacking
|
||||||
|
Allow buying the same pair multiple times (position
|
||||||
|
stacking).
|
||||||
|
--enable-protections, --enableprotections
|
||||||
|
Enable protections for backtesting.Will slow
|
||||||
|
backtesting down by a considerable amount, but will
|
||||||
|
include configured protections
|
||||||
|
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
||||||
|
Starting balance, used for backtesting / hyperopt and
|
||||||
|
dry-runs.
|
||||||
|
--timeframe-detail TIMEFRAME_DETAIL
|
||||||
|
Specify detail timeframe for backtesting (`1m`, `5m`,
|
||||||
|
`30m`, `1h`, `1d`).
|
||||||
|
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
|
||||||
|
Provide a space-separated list of strategies to
|
||||||
|
backtest. Please note that timeframe needs to be set
|
||||||
|
either in config or via command line. When using this
|
||||||
|
together with `--export trades`, the strategy-name is
|
||||||
|
injected into the filename (so `backtest-data.json`
|
||||||
|
becomes `backtest-data-SampleStrategy.json`
|
||||||
|
--export {none,trades,signals}
|
||||||
|
Export backtest results (default: trades).
|
||||||
|
--export-filename PATH, --backtest-filename PATH
|
||||||
|
Use this filename for backtest results.Requires
|
||||||
|
`--export` to be set as well. Example: `--export-filen
|
||||||
|
ame=user_data/backtest_results/backtest_today.json`
|
||||||
|
--breakdown {day,week,month,year} [{day,week,month,year} ...]
|
||||||
|
Show backtesting breakdown per [day, week, month,
|
||||||
|
year].
|
||||||
|
--cache {none,day,week,month}
|
||||||
|
Load a cached backtest result no older than specified
|
||||||
|
age (default: day).
|
||||||
|
--freqai-backtest-live-models
|
||||||
|
Run backtest with ready models.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
Strategy arguments:
|
||||||
|
-s NAME, --strategy NAME
|
||||||
|
Specify strategy class name which will be used by the
|
||||||
|
bot.
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
--recursive-strategy-search
|
||||||
|
Recursively search for a strategy in the strategies
|
||||||
|
folder.
|
||||||
|
--freqaimodel NAME Specify a custom freqaimodels.
|
||||||
|
--freqaimodel-path PATH
|
||||||
|
Specify additional lookup path for freqaimodels.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade convert-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[-p PAIRS [PAIRS ...]] --format-from
|
||||||
|
{json,jsongz,feather,parquet} --format-to
|
||||||
|
{json,jsongz,feather,parquet} [--erase]
|
||||||
|
[--exchange EXCHANGE]
|
||||||
|
[-t TIMEFRAMES [TIMEFRAMES ...]]
|
||||||
|
[--trading-mode {spot,margin,futures}]
|
||||||
|
[--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--format-from {json,jsongz,feather,parquet}
|
||||||
|
Source format for data conversion.
|
||||||
|
--format-to {json,jsongz,feather,parquet}
|
||||||
|
Destination format for data conversion.
|
||||||
|
--erase Clean all existing data for the selected
|
||||||
|
exchange/pairs/timeframes.
|
||||||
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
|
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
||||||
|
Specify which tickers to download. Space-separated
|
||||||
|
list. Default: `1m 5m`.
|
||||||
|
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
||||||
|
Select Trading mode
|
||||||
|
--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]
|
||||||
|
Select candle type to convert. Defaults to all
|
||||||
|
available types.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade convert-db [-h] [--db-url PATH] [--db-url-from PATH]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--db-url PATH Override trades database URL, this is useful in custom
|
||||||
|
deployments (default: `sqlite:///tradesv3.sqlite` for
|
||||||
|
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
|
||||||
|
Dry Run).
|
||||||
|
--db-url-from PATH Source db url to use when migrating a database.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade convert-trade-data [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
|
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[-p PAIRS [PAIRS ...]] --format-from
|
||||||
|
{json,jsongz,feather,parquet,kraken_csv}
|
||||||
|
--format-to {json,jsongz,feather,parquet}
|
||||||
|
[--erase] [--exchange EXCHANGE]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--format-from {json,jsongz,feather,parquet,kraken_csv}
|
||||||
|
Source format for data conversion.
|
||||||
|
--format-to {json,jsongz,feather,parquet}
|
||||||
|
Destination format for data conversion.
|
||||||
|
--erase Clean all existing data for the selected
|
||||||
|
exchange/pairs/timeframes.
|
||||||
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade create-userdir [-h] [--userdir PATH] [--reset]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
--reset Reset sample files to their original state.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade download-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[-p PAIRS [PAIRS ...]] [--pairs-file FILE]
|
||||||
|
[--days INT] [--new-pairs-days INT]
|
||||||
|
[--include-inactive-pairs]
|
||||||
|
[--timerange TIMERANGE] [--dl-trades]
|
||||||
|
[--convert] [--exchange EXCHANGE]
|
||||||
|
[-t TIMEFRAMES [TIMEFRAMES ...]] [--erase]
|
||||||
|
[--data-format-ohlcv {json,jsongz,feather,parquet}]
|
||||||
|
[--data-format-trades {json,jsongz,feather,parquet}]
|
||||||
|
[--trading-mode {spot,margin,futures}]
|
||||||
|
[--prepend]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--pairs-file FILE File containing a list of pairs. Takes precedence over
|
||||||
|
--pairs or pairs configured in the configuration.
|
||||||
|
--days INT Download data for given number of days.
|
||||||
|
--new-pairs-days INT Download data of new pairs for given number of days.
|
||||||
|
Default: `None`.
|
||||||
|
--include-inactive-pairs
|
||||||
|
Also download data from inactive pairs.
|
||||||
|
--timerange TIMERANGE
|
||||||
|
Specify what timerange of data to use.
|
||||||
|
--dl-trades Download trades instead of OHLCV data.
|
||||||
|
--convert Convert downloaded trades to OHLCV data. Only
|
||||||
|
applicable in combination with `--dl-trades`. Will be
|
||||||
|
automatic for exchanges which don't have historic
|
||||||
|
OHLCV (e.g. Kraken). If not provided, use `trades-to-
|
||||||
|
ohlcv` to convert trades data to OHLCV data.
|
||||||
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
|
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
||||||
|
Specify which tickers to download. Space-separated
|
||||||
|
list. Default: `1m 5m`.
|
||||||
|
--erase Clean all existing data for the selected
|
||||||
|
exchange/pairs/timeframes.
|
||||||
|
--data-format-ohlcv {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded candle (OHLCV) data.
|
||||||
|
(default: `feather`).
|
||||||
|
--data-format-trades {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded trades data. (default:
|
||||||
|
`feather`).
|
||||||
|
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
||||||
|
Select Trading mode
|
||||||
|
--prepend Allow data prepending. (Data-appending is disabled)
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade edge [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH]
|
||||||
|
[-d PATH] [--userdir PATH] [-s NAME]
|
||||||
|
[--strategy-path PATH] [--recursive-strategy-search]
|
||||||
|
[--freqaimodel NAME] [--freqaimodel-path PATH]
|
||||||
|
[-i TIMEFRAME] [--timerange TIMERANGE]
|
||||||
|
[--data-format-ohlcv {json,jsongz,feather,parquet}]
|
||||||
|
[--max-open-trades INT] [--stake-amount STAKE_AMOUNT]
|
||||||
|
[--fee FLOAT] [-p PAIRS [PAIRS ...]]
|
||||||
|
[--stoplosses STOPLOSS_RANGE]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-i TIMEFRAME, --timeframe TIMEFRAME
|
||||||
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
|
--timerange TIMERANGE
|
||||||
|
Specify what timerange of data to use.
|
||||||
|
--data-format-ohlcv {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded candle (OHLCV) data.
|
||||||
|
(default: `feather`).
|
||||||
|
--max-open-trades INT
|
||||||
|
Override the value of the `max_open_trades`
|
||||||
|
configuration setting.
|
||||||
|
--stake-amount STAKE_AMOUNT
|
||||||
|
Override the value of the `stake_amount` configuration
|
||||||
|
setting.
|
||||||
|
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
||||||
|
entry and exit).
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--stoplosses STOPLOSS_RANGE
|
||||||
|
Defines a range of stoploss values against which edge
|
||||||
|
will assess the strategy. The format is "min,max,step"
|
||||||
|
(without any space). Example:
|
||||||
|
`--stoplosses=-0.01,-0.1,-0.001`
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
Strategy arguments:
|
||||||
|
-s NAME, --strategy NAME
|
||||||
|
Specify strategy class name which will be used by the
|
||||||
|
bot.
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
--recursive-strategy-search
|
||||||
|
Recursively search for a strategy in the strategies
|
||||||
|
folder.
|
||||||
|
--freqaimodel NAME Specify a custom freqaimodels.
|
||||||
|
--freqaimodel-path PATH
|
||||||
|
Specify additional lookup path for freqaimodels.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade hyperopt-list [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH] [--best]
|
||||||
|
[--profitable] [--min-trades INT]
|
||||||
|
[--max-trades INT] [--min-avg-time FLOAT]
|
||||||
|
[--max-avg-time FLOAT] [--min-avg-profit FLOAT]
|
||||||
|
[--max-avg-profit FLOAT]
|
||||||
|
[--min-total-profit FLOAT]
|
||||||
|
[--max-total-profit FLOAT]
|
||||||
|
[--min-objective FLOAT] [--max-objective FLOAT]
|
||||||
|
[--print-json] [--no-details]
|
||||||
|
[--hyperopt-filename FILENAME]
|
||||||
|
[--export-csv FILE]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--best Select only best epochs.
|
||||||
|
--profitable Select only profitable epochs.
|
||||||
|
--min-trades INT Select epochs with more than INT trades.
|
||||||
|
--max-trades INT Select epochs with less than INT trades.
|
||||||
|
--min-avg-time FLOAT Select epochs above average time.
|
||||||
|
--max-avg-time FLOAT Select epochs below average time.
|
||||||
|
--min-avg-profit FLOAT
|
||||||
|
Select epochs above average profit.
|
||||||
|
--max-avg-profit FLOAT
|
||||||
|
Select epochs below average profit.
|
||||||
|
--min-total-profit FLOAT
|
||||||
|
Select epochs above total profit.
|
||||||
|
--max-total-profit FLOAT
|
||||||
|
Select epochs below total profit.
|
||||||
|
--min-objective FLOAT
|
||||||
|
Select epochs above objective.
|
||||||
|
--max-objective FLOAT
|
||||||
|
Select epochs below objective.
|
||||||
|
--print-json Print output in JSON format.
|
||||||
|
--no-details Do not print best epoch details.
|
||||||
|
--hyperopt-filename FILENAME
|
||||||
|
Hyperopt result filename.Example: `--hyperopt-
|
||||||
|
filename=hyperopt_results_2020-09-27_16-20-48.pickle`
|
||||||
|
--export-csv FILE Export to CSV-File. This will disable table print.
|
||||||
|
Example: --export-csv hyperopt.csv
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade hyperopt-show [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH] [--best]
|
||||||
|
[--profitable] [-n INT] [--print-json]
|
||||||
|
[--hyperopt-filename FILENAME] [--no-header]
|
||||||
|
[--disable-param-export]
|
||||||
|
[--breakdown {day,week,month,year} [{day,week,month,year} ...]]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--best Select only best epochs.
|
||||||
|
--profitable Select only profitable epochs.
|
||||||
|
-n INT, --index INT Specify the index of the epoch to print details for.
|
||||||
|
--print-json Print output in JSON format.
|
||||||
|
--hyperopt-filename FILENAME
|
||||||
|
Hyperopt result filename.Example: `--hyperopt-
|
||||||
|
filename=hyperopt_results_2020-09-27_16-20-48.pickle`
|
||||||
|
--no-header Do not print epoch details header.
|
||||||
|
--disable-param-export
|
||||||
|
Disable automatic hyperopt parameter export.
|
||||||
|
--breakdown {day,week,month,year} [{day,week,month,year} ...]
|
||||||
|
Show backtesting breakdown per [day, week, month,
|
||||||
|
year].
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,127 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade hyperopt [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
||||||
|
[--strategy-path PATH] [--recursive-strategy-search]
|
||||||
|
[--freqaimodel NAME] [--freqaimodel-path PATH]
|
||||||
|
[-i TIMEFRAME] [--timerange TIMERANGE]
|
||||||
|
[--data-format-ohlcv {json,jsongz,feather,parquet}]
|
||||||
|
[--max-open-trades INT]
|
||||||
|
[--stake-amount STAKE_AMOUNT] [--fee FLOAT]
|
||||||
|
[-p PAIRS [PAIRS ...]] [--hyperopt-path PATH]
|
||||||
|
[--eps] [--enable-protections]
|
||||||
|
[--dry-run-wallet DRY_RUN_WALLET]
|
||||||
|
[--timeframe-detail TIMEFRAME_DETAIL] [-e INT]
|
||||||
|
[--spaces {all,buy,sell,roi,stoploss,trailing,protection,trades,default} [{all,buy,sell,roi,stoploss,trailing,protection,trades,default} ...]]
|
||||||
|
[--print-all] [--print-json] [-j JOBS]
|
||||||
|
[--random-state INT] [--min-trades INT]
|
||||||
|
[--hyperopt-loss NAME] [--disable-param-export]
|
||||||
|
[--ignore-missing-spaces] [--analyze-per-epoch]
|
||||||
|
[--early-stop INT]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-i TIMEFRAME, --timeframe TIMEFRAME
|
||||||
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
|
--timerange TIMERANGE
|
||||||
|
Specify what timerange of data to use.
|
||||||
|
--data-format-ohlcv {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded candle (OHLCV) data.
|
||||||
|
(default: `feather`).
|
||||||
|
--max-open-trades INT
|
||||||
|
Override the value of the `max_open_trades`
|
||||||
|
configuration setting.
|
||||||
|
--stake-amount STAKE_AMOUNT
|
||||||
|
Override the value of the `stake_amount` configuration
|
||||||
|
setting.
|
||||||
|
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
||||||
|
entry and exit).
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--hyperopt-path PATH Specify additional lookup path for Hyperopt Loss
|
||||||
|
functions.
|
||||||
|
--eps, --enable-position-stacking
|
||||||
|
Allow buying the same pair multiple times (position
|
||||||
|
stacking).
|
||||||
|
--enable-protections, --enableprotections
|
||||||
|
Enable protections for backtesting.Will slow
|
||||||
|
backtesting down by a considerable amount, but will
|
||||||
|
include configured protections
|
||||||
|
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
||||||
|
Starting balance, used for backtesting / hyperopt and
|
||||||
|
dry-runs.
|
||||||
|
--timeframe-detail TIMEFRAME_DETAIL
|
||||||
|
Specify detail timeframe for backtesting (`1m`, `5m`,
|
||||||
|
`30m`, `1h`, `1d`).
|
||||||
|
-e INT, --epochs INT Specify number of epochs (default: 100).
|
||||||
|
--spaces {all,buy,sell,roi,stoploss,trailing,protection,trades,default} [{all,buy,sell,roi,stoploss,trailing,protection,trades,default} ...]
|
||||||
|
Specify which parameters to hyperopt. Space-separated
|
||||||
|
list.
|
||||||
|
--print-all Print all results, not only the best ones.
|
||||||
|
--print-json Print output in JSON format.
|
||||||
|
-j JOBS, --job-workers JOBS
|
||||||
|
The number of concurrently running jobs for
|
||||||
|
hyperoptimization (hyperopt worker processes). If -1
|
||||||
|
(default), all CPUs are used, for -2, all CPUs but one
|
||||||
|
are used, etc. If 1 is given, no parallel computing
|
||||||
|
code is used at all.
|
||||||
|
--random-state INT Set random state to some positive integer for
|
||||||
|
reproducible hyperopt results.
|
||||||
|
--min-trades INT Set minimal desired number of trades for evaluations
|
||||||
|
in the hyperopt optimization path (default: 1).
|
||||||
|
--hyperopt-loss NAME, --hyperoptloss NAME
|
||||||
|
Specify the class name of the hyperopt loss function
|
||||||
|
class (IHyperOptLoss). Different functions can
|
||||||
|
generate completely different results, since the
|
||||||
|
target for optimization is different. Built-in
|
||||||
|
Hyperopt-loss-functions are:
|
||||||
|
ShortTradeDurHyperOptLoss, OnlyProfitHyperOptLoss,
|
||||||
|
SharpeHyperOptLoss, SharpeHyperOptLossDaily,
|
||||||
|
SortinoHyperOptLoss, SortinoHyperOptLossDaily,
|
||||||
|
CalmarHyperOptLoss, MaxDrawDownHyperOptLoss,
|
||||||
|
MaxDrawDownRelativeHyperOptLoss,
|
||||||
|
MaxDrawDownPerPairHyperOptLoss,
|
||||||
|
ProfitDrawDownHyperOptLoss, MultiMetricHyperOptLoss
|
||||||
|
--disable-param-export
|
||||||
|
Disable automatic hyperopt parameter export.
|
||||||
|
--ignore-missing-spaces, --ignore-unparameterized-spaces
|
||||||
|
Suppress errors for any requested Hyperopt spaces that
|
||||||
|
do not contain any parameters.
|
||||||
|
--analyze-per-epoch Run populate_indicators once per epoch.
|
||||||
|
--early-stop INT Early stop hyperopt if no improvement after (default:
|
||||||
|
0) epochs.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
Strategy arguments:
|
||||||
|
-s NAME, --strategy NAME
|
||||||
|
Specify strategy class name which will be used by the
|
||||||
|
bot.
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
--recursive-strategy-search
|
||||||
|
Recursively search for a strategy in the strategies
|
||||||
|
folder.
|
||||||
|
--freqaimodel NAME Specify a custom freqaimodels.
|
||||||
|
--freqaimodel-path PATH
|
||||||
|
Specify additional lookup path for freqaimodels.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade install-ui [-h] [--erase] [--prerelease]
|
||||||
|
[--ui-version UI_VERSION]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--erase Clean UI folder, don't download new version.
|
||||||
|
--prerelease Install the latest pre-release version of FreqUI. This
|
||||||
|
is not recommended for production use.
|
||||||
|
--ui-version UI_VERSION
|
||||||
|
Specify a specific version of FreqUI to install. Not
|
||||||
|
specifying this installs the latest version.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade list-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[--exchange EXCHANGE]
|
||||||
|
[--data-format-ohlcv {json,jsongz,feather,parquet}]
|
||||||
|
[--data-format-trades {json,jsongz,feather,parquet}]
|
||||||
|
[--trades] [-p PAIRS [PAIRS ...]]
|
||||||
|
[--trading-mode {spot,margin,futures}]
|
||||||
|
[--show-timerange]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
|
--data-format-ohlcv {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded candle (OHLCV) data.
|
||||||
|
(default: `feather`).
|
||||||
|
--data-format-trades {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded trades data. (default:
|
||||||
|
`feather`).
|
||||||
|
--trades Work on trades data instead of OHLCV data.
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
||||||
|
Select Trading mode
|
||||||
|
--show-timerange Show timerange available for available data. (May take
|
||||||
|
a while to calculate).
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade list-exchanges [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH] [-1] [-a]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-1, --one-column Print output in one column.
|
||||||
|
-a, --all Print all exchanges known to the ccxt library.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade list-freqaimodels [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
|
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[--freqaimodel-path PATH] [-1]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--freqaimodel-path PATH
|
||||||
|
Specify additional lookup path for freqaimodels.
|
||||||
|
-1, --one-column Print output in one column.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade list-hyperoptloss [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
|
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[--hyperopt-path PATH] [-1]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--hyperopt-path PATH Specify additional lookup path for Hyperopt Loss
|
||||||
|
functions.
|
||||||
|
-1, --one-column Print output in one column.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade list-markets [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[--exchange EXCHANGE] [--print-list]
|
||||||
|
[--print-json] [-1] [--print-csv]
|
||||||
|
[--base BASE_CURRENCY [BASE_CURRENCY ...]]
|
||||||
|
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
|
||||||
|
[-a] [--trading-mode {spot,margin,futures}]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
|
--print-list Print list of pairs or market symbols. By default data
|
||||||
|
is printed in the tabular format.
|
||||||
|
--print-json Print list of pairs or market symbols in JSON format.
|
||||||
|
-1, --one-column Print output in one column.
|
||||||
|
--print-csv Print exchange pair or market data in the csv format.
|
||||||
|
--base BASE_CURRENCY [BASE_CURRENCY ...]
|
||||||
|
Specify base currency(-ies). Space-separated list.
|
||||||
|
--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]
|
||||||
|
Specify quote currency(-ies). Space-separated list.
|
||||||
|
-a, --all Print all pairs or market symbols. By default only
|
||||||
|
active ones are shown.
|
||||||
|
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
||||||
|
Select Trading mode
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade list-pairs [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[--exchange EXCHANGE] [--print-list]
|
||||||
|
[--print-json] [-1] [--print-csv]
|
||||||
|
[--base BASE_CURRENCY [BASE_CURRENCY ...]]
|
||||||
|
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]] [-a]
|
||||||
|
[--trading-mode {spot,margin,futures}]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
|
--print-list Print list of pairs or market symbols. By default data
|
||||||
|
is printed in the tabular format.
|
||||||
|
--print-json Print list of pairs or market symbols in JSON format.
|
||||||
|
-1, --one-column Print output in one column.
|
||||||
|
--print-csv Print exchange pair or market data in the csv format.
|
||||||
|
--base BASE_CURRENCY [BASE_CURRENCY ...]
|
||||||
|
Specify base currency(-ies). Space-separated list.
|
||||||
|
--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]
|
||||||
|
Specify quote currency(-ies). Space-separated list.
|
||||||
|
-a, --all Print all pairs or market symbols. By default only
|
||||||
|
active ones are shown.
|
||||||
|
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
||||||
|
Select Trading mode
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade list-strategies [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[--strategy-path PATH] [-1]
|
||||||
|
[--recursive-strategy-search]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
-1, --one-column Print output in one column.
|
||||||
|
--recursive-strategy-search
|
||||||
|
Recursively search for a strategy in the strategies
|
||||||
|
folder.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade list-timeframes [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[--exchange EXCHANGE] [-1]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
|
-1, --one-column Print output in one column.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade lookahead-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
|
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[-s NAME] [--strategy-path PATH]
|
||||||
|
[--recursive-strategy-search]
|
||||||
|
[--freqaimodel NAME]
|
||||||
|
[--freqaimodel-path PATH] [-i TIMEFRAME]
|
||||||
|
[--timerange TIMERANGE]
|
||||||
|
[--data-format-ohlcv {json,jsongz,feather,parquet}]
|
||||||
|
[--max-open-trades INT]
|
||||||
|
[--stake-amount STAKE_AMOUNT]
|
||||||
|
[--fee FLOAT] [-p PAIRS [PAIRS ...]]
|
||||||
|
[--enable-protections]
|
||||||
|
[--dry-run-wallet DRY_RUN_WALLET]
|
||||||
|
[--timeframe-detail TIMEFRAME_DETAIL]
|
||||||
|
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
|
||||||
|
[--export {none,trades,signals}]
|
||||||
|
[--export-filename PATH]
|
||||||
|
[--freqai-backtest-live-models]
|
||||||
|
[--minimum-trade-amount INT]
|
||||||
|
[--targeted-trade-amount INT]
|
||||||
|
[--lookahead-analysis-exportfilename LOOKAHEAD_ANALYSIS_EXPORTFILENAME]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-i TIMEFRAME, --timeframe TIMEFRAME
|
||||||
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
|
--timerange TIMERANGE
|
||||||
|
Specify what timerange of data to use.
|
||||||
|
--data-format-ohlcv {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded candle (OHLCV) data.
|
||||||
|
(default: `feather`).
|
||||||
|
--max-open-trades INT
|
||||||
|
Override the value of the `max_open_trades`
|
||||||
|
configuration setting.
|
||||||
|
--stake-amount STAKE_AMOUNT
|
||||||
|
Override the value of the `stake_amount` configuration
|
||||||
|
setting.
|
||||||
|
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
||||||
|
entry and exit).
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--enable-protections, --enableprotections
|
||||||
|
Enable protections for backtesting.Will slow
|
||||||
|
backtesting down by a considerable amount, but will
|
||||||
|
include configured protections
|
||||||
|
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
||||||
|
Starting balance, used for backtesting / hyperopt and
|
||||||
|
dry-runs.
|
||||||
|
--timeframe-detail TIMEFRAME_DETAIL
|
||||||
|
Specify detail timeframe for backtesting (`1m`, `5m`,
|
||||||
|
`30m`, `1h`, `1d`).
|
||||||
|
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
|
||||||
|
Provide a space-separated list of strategies to
|
||||||
|
backtest. Please note that timeframe needs to be set
|
||||||
|
either in config or via command line. When using this
|
||||||
|
together with `--export trades`, the strategy-name is
|
||||||
|
injected into the filename (so `backtest-data.json`
|
||||||
|
becomes `backtest-data-SampleStrategy.json`
|
||||||
|
--export {none,trades,signals}
|
||||||
|
Export backtest results (default: trades).
|
||||||
|
--export-filename PATH, --backtest-filename PATH
|
||||||
|
Use this filename for backtest results.Requires
|
||||||
|
`--export` to be set as well. Example: `--export-filen
|
||||||
|
ame=user_data/backtest_results/backtest_today.json`
|
||||||
|
--freqai-backtest-live-models
|
||||||
|
Run backtest with ready models.
|
||||||
|
--minimum-trade-amount INT
|
||||||
|
Minimum trade amount for lookahead-analysis
|
||||||
|
--targeted-trade-amount INT
|
||||||
|
Targeted trade amount for lookahead analysis
|
||||||
|
--lookahead-analysis-exportfilename LOOKAHEAD_ANALYSIS_EXPORTFILENAME
|
||||||
|
Use this csv-filename to store lookahead-analysis-
|
||||||
|
results
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
Strategy arguments:
|
||||||
|
-s NAME, --strategy NAME
|
||||||
|
Specify strategy class name which will be used by the
|
||||||
|
bot.
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
--recursive-strategy-search
|
||||||
|
Recursively search for a strategy in the strategies
|
||||||
|
folder.
|
||||||
|
--freqaimodel NAME Specify a custom freqaimodels.
|
||||||
|
--freqaimodel-path PATH
|
||||||
|
Specify additional lookup path for freqaimodels.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade [-h] [-V]
|
||||||
|
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-hyperoptloss,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
|
||||||
|
...
|
||||||
|
|
||||||
|
Free, open source crypto trading bot
|
||||||
|
|
||||||
|
positional arguments:
|
||||||
|
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-hyperoptloss,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
|
||||||
|
trade Trade module.
|
||||||
|
create-userdir Create user-data directory.
|
||||||
|
new-config Create new config
|
||||||
|
show-config Show resolved config
|
||||||
|
new-strategy Create new strategy
|
||||||
|
download-data Download backtesting data.
|
||||||
|
convert-data Convert candle (OHLCV) data from one format to
|
||||||
|
another.
|
||||||
|
convert-trade-data Convert trade data from one format to another.
|
||||||
|
trades-to-ohlcv Convert trade data to OHLCV data.
|
||||||
|
list-data List downloaded data.
|
||||||
|
backtesting Backtesting module.
|
||||||
|
backtesting-show Show past Backtest results
|
||||||
|
backtesting-analysis
|
||||||
|
Backtest Analysis module.
|
||||||
|
edge Edge module.
|
||||||
|
hyperopt Hyperopt module.
|
||||||
|
hyperopt-list List Hyperopt results
|
||||||
|
hyperopt-show Show details of Hyperopt results
|
||||||
|
list-exchanges Print available exchanges.
|
||||||
|
list-markets Print markets on exchange.
|
||||||
|
list-pairs Print pairs on exchange.
|
||||||
|
list-strategies Print available strategies.
|
||||||
|
list-hyperoptloss Print available hyperopt loss functions.
|
||||||
|
list-freqaimodels Print available freqAI models.
|
||||||
|
list-timeframes Print available timeframes for the exchange.
|
||||||
|
show-trades Show trades.
|
||||||
|
test-pairlist Test your pairlist configuration.
|
||||||
|
convert-db Migrate database to different system
|
||||||
|
install-ui Install FreqUI
|
||||||
|
plot-dataframe Plot candles with indicators.
|
||||||
|
plot-profit Generate plot showing profits.
|
||||||
|
webserver Webserver module.
|
||||||
|
strategy-updater updates outdated strategy files to the current version
|
||||||
|
lookahead-analysis Check for potential look ahead bias.
|
||||||
|
recursive-analysis Check for potential recursive formula issue.
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade new-config [-h] [-c PATH]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade new-strategy [-h] [--userdir PATH] [-s NAME]
|
||||||
|
[--strategy-path PATH]
|
||||||
|
[--template {full,minimal,advanced}]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
-s NAME, --strategy NAME
|
||||||
|
Specify strategy class name which will be used by the
|
||||||
|
bot.
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
--template {full,minimal,advanced}
|
||||||
|
Use a template which is either `minimal`, `full`
|
||||||
|
(containing multiple sample indicators) or `advanced`.
|
||||||
|
Default: `full`.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade plot-dataframe [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
||||||
|
[--strategy-path PATH]
|
||||||
|
[--recursive-strategy-search]
|
||||||
|
[--freqaimodel NAME] [--freqaimodel-path PATH]
|
||||||
|
[-p PAIRS [PAIRS ...]]
|
||||||
|
[--indicators1 INDICATORS1 [INDICATORS1 ...]]
|
||||||
|
[--indicators2 INDICATORS2 [INDICATORS2 ...]]
|
||||||
|
[--plot-limit INT] [--db-url PATH]
|
||||||
|
[--trade-source {DB,file}]
|
||||||
|
[--export {none,trades,signals}]
|
||||||
|
[--export-filename PATH]
|
||||||
|
[--timerange TIMERANGE] [-i TIMEFRAME]
|
||||||
|
[--no-trades]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--indicators1 INDICATORS1 [INDICATORS1 ...]
|
||||||
|
Set indicators from your strategy you want in the
|
||||||
|
first row of the graph. Space-separated list. Example:
|
||||||
|
`ema3 ema5`. Default: `['sma', 'ema3', 'ema5']`.
|
||||||
|
--indicators2 INDICATORS2 [INDICATORS2 ...]
|
||||||
|
Set indicators from your strategy you want in the
|
||||||
|
third row of the graph. Space-separated list. Example:
|
||||||
|
`fastd fastk`. Default: `['macd', 'macdsignal']`.
|
||||||
|
--plot-limit INT Specify tick limit for plotting. Notice: too high
|
||||||
|
values cause huge files. Default: 750.
|
||||||
|
--db-url PATH Override trades database URL, this is useful in custom
|
||||||
|
deployments (default: `sqlite:///tradesv3.sqlite` for
|
||||||
|
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
|
||||||
|
Dry Run).
|
||||||
|
--trade-source {DB,file}
|
||||||
|
Specify the source for trades (Can be DB or file
|
||||||
|
(backtest file)) Default: file
|
||||||
|
--export {none,trades,signals}
|
||||||
|
Export backtest results (default: trades).
|
||||||
|
--export-filename PATH, --backtest-filename PATH
|
||||||
|
Use this filename for backtest results.Requires
|
||||||
|
`--export` to be set as well. Example: `--export-filen
|
||||||
|
ame=user_data/backtest_results/backtest_today.json`
|
||||||
|
--timerange TIMERANGE
|
||||||
|
Specify what timerange of data to use.
|
||||||
|
-i TIMEFRAME, --timeframe TIMEFRAME
|
||||||
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
|
--no-trades Skip using trades from backtesting file and DB.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
Strategy arguments:
|
||||||
|
-s NAME, --strategy NAME
|
||||||
|
Specify strategy class name which will be used by the
|
||||||
|
bot.
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
--recursive-strategy-search
|
||||||
|
Recursively search for a strategy in the strategies
|
||||||
|
folder.
|
||||||
|
--freqaimodel NAME Specify a custom freqaimodels.
|
||||||
|
--freqaimodel-path PATH
|
||||||
|
Specify additional lookup path for freqaimodels.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade plot-profit [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
||||||
|
[--strategy-path PATH]
|
||||||
|
[--recursive-strategy-search]
|
||||||
|
[--freqaimodel NAME] [--freqaimodel-path PATH]
|
||||||
|
[-p PAIRS [PAIRS ...]] [--timerange TIMERANGE]
|
||||||
|
[--export {none,trades,signals}]
|
||||||
|
[--export-filename PATH] [--db-url PATH]
|
||||||
|
[--trade-source {DB,file}] [-i TIMEFRAME]
|
||||||
|
[--auto-open]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--timerange TIMERANGE
|
||||||
|
Specify what timerange of data to use.
|
||||||
|
--export {none,trades,signals}
|
||||||
|
Export backtest results (default: trades).
|
||||||
|
--export-filename PATH, --backtest-filename PATH
|
||||||
|
Use this filename for backtest results.Requires
|
||||||
|
`--export` to be set as well. Example: `--export-filen
|
||||||
|
ame=user_data/backtest_results/backtest_today.json`
|
||||||
|
--db-url PATH Override trades database URL, this is useful in custom
|
||||||
|
deployments (default: `sqlite:///tradesv3.sqlite` for
|
||||||
|
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
|
||||||
|
Dry Run).
|
||||||
|
--trade-source {DB,file}
|
||||||
|
Specify the source for trades (Can be DB or file
|
||||||
|
(backtest file)) Default: file
|
||||||
|
-i TIMEFRAME, --timeframe TIMEFRAME
|
||||||
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
|
--auto-open Automatically open generated plot.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
Strategy arguments:
|
||||||
|
-s NAME, --strategy NAME
|
||||||
|
Specify strategy class name which will be used by the
|
||||||
|
bot.
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
--recursive-strategy-search
|
||||||
|
Recursively search for a strategy in the strategies
|
||||||
|
folder.
|
||||||
|
--freqaimodel NAME Specify a custom freqaimodels.
|
||||||
|
--freqaimodel-path PATH
|
||||||
|
Specify additional lookup path for freqaimodels.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade recursive-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
|
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[-s NAME] [--strategy-path PATH]
|
||||||
|
[--recursive-strategy-search]
|
||||||
|
[--freqaimodel NAME]
|
||||||
|
[--freqaimodel-path PATH] [-i TIMEFRAME]
|
||||||
|
[--timerange TIMERANGE]
|
||||||
|
[--data-format-ohlcv {json,jsongz,feather,parquet}]
|
||||||
|
[-p PAIRS [PAIRS ...]]
|
||||||
|
[--startup-candle STARTUP_CANDLE [STARTUP_CANDLE ...]]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-i TIMEFRAME, --timeframe TIMEFRAME
|
||||||
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
|
--timerange TIMERANGE
|
||||||
|
Specify what timerange of data to use.
|
||||||
|
--data-format-ohlcv {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded candle (OHLCV) data.
|
||||||
|
(default: `feather`).
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
--startup-candle STARTUP_CANDLE [STARTUP_CANDLE ...]
|
||||||
|
Specify startup candles to be checked (`199`, `499`,
|
||||||
|
`999`, `1999`).
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
Strategy arguments:
|
||||||
|
-s NAME, --strategy NAME
|
||||||
|
Specify strategy class name which will be used by the
|
||||||
|
bot.
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
--recursive-strategy-search
|
||||||
|
Recursively search for a strategy in the strategies
|
||||||
|
folder.
|
||||||
|
--freqaimodel NAME Specify a custom freqaimodels.
|
||||||
|
--freqaimodel-path PATH
|
||||||
|
Specify additional lookup path for freqaimodels.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade show-config [-h] [--userdir PATH] [-c PATH]
|
||||||
|
[--show-sensitive]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
--show-sensitive Show secrets in the output.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade show-trades [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[--db-url PATH]
|
||||||
|
[--trade-ids TRADE_IDS [TRADE_IDS ...]]
|
||||||
|
[--print-json]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--db-url PATH Override trades database URL, this is useful in custom
|
||||||
|
deployments (default: `sqlite:///tradesv3.sqlite` for
|
||||||
|
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
|
||||||
|
Dry Run).
|
||||||
|
--trade-ids TRADE_IDS [TRADE_IDS ...]
|
||||||
|
Specify the list of trade ids.
|
||||||
|
--print-json Print output in JSON format.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade strategy-updater [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
|
||||||
|
[--strategy-path PATH]
|
||||||
|
[--recursive-strategy-search]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
|
||||||
|
Provide a space-separated list of strategies to
|
||||||
|
backtest. Please note that timeframe needs to be set
|
||||||
|
either in config or via command line. When using this
|
||||||
|
together with `--export trades`, the strategy-name is
|
||||||
|
injected into the filename (so `backtest-data.json`
|
||||||
|
becomes `backtest-data-SampleStrategy.json`
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
--recursive-strategy-search
|
||||||
|
Recursively search for a strategy in the strategies
|
||||||
|
folder.
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade test-pairlist [-h] [--userdir PATH] [-v] [-c PATH]
|
||||||
|
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
|
||||||
|
[-1] [--print-json] [--exchange EXCHANGE]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]
|
||||||
|
Specify quote currency(-ies). Space-separated list.
|
||||||
|
-1, --one-column Print output in one column.
|
||||||
|
--print-json Print list of pairs or market symbols in JSON format.
|
||||||
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade trade [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH]
|
||||||
|
[-d PATH] [--userdir PATH] [-s NAME]
|
||||||
|
[--strategy-path PATH] [--recursive-strategy-search]
|
||||||
|
[--freqaimodel NAME] [--freqaimodel-path PATH]
|
||||||
|
[--db-url PATH] [--sd-notify] [--dry-run]
|
||||||
|
[--dry-run-wallet DRY_RUN_WALLET] [--fee FLOAT]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--db-url PATH Override trades database URL, this is useful in custom
|
||||||
|
deployments (default: `sqlite:///tradesv3.sqlite` for
|
||||||
|
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
|
||||||
|
Dry Run).
|
||||||
|
--sd-notify Notify systemd service manager.
|
||||||
|
--dry-run Enforce dry-run for trading (removes Exchange secrets
|
||||||
|
and simulates trades).
|
||||||
|
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
||||||
|
Starting balance, used for backtesting / hyperopt and
|
||||||
|
dry-runs.
|
||||||
|
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
||||||
|
entry and exit).
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
Strategy arguments:
|
||||||
|
-s NAME, --strategy NAME
|
||||||
|
Specify strategy class name which will be used by the
|
||||||
|
bot.
|
||||||
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
|
--recursive-strategy-search
|
||||||
|
Recursively search for a strategy in the strategies
|
||||||
|
folder.
|
||||||
|
--freqaimodel NAME Specify a custom freqaimodels.
|
||||||
|
--freqaimodel-path PATH
|
||||||
|
Specify additional lookup path for freqaimodels.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade trades-to-ohlcv [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
[-p PAIRS [PAIRS ...]]
|
||||||
|
[-t TIMEFRAMES [TIMEFRAMES ...]]
|
||||||
|
[--exchange EXCHANGE]
|
||||||
|
[--data-format-ohlcv {json,jsongz,feather,parquet}]
|
||||||
|
[--data-format-trades {json,jsongz,feather,parquet}]
|
||||||
|
[--trading-mode {spot,margin,futures}]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
||||||
|
Limit command to these pairs. Pairs are space-
|
||||||
|
separated.
|
||||||
|
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
||||||
|
Specify which tickers to download. Space-separated
|
||||||
|
list. Default: `1m 5m`.
|
||||||
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
|
--data-format-ohlcv {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded candle (OHLCV) data.
|
||||||
|
(default: `feather`).
|
||||||
|
--data-format-trades {json,jsongz,feather,parquet}
|
||||||
|
Storage format for downloaded trades data. (default:
|
||||||
|
`feather`).
|
||||||
|
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
||||||
|
Select Trading mode
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade webserver [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
|
||||||
|
Common arguments:
|
||||||
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
|
useful if you are redirecting output to a file.
|
||||||
|
--logfile FILE, --log-file FILE
|
||||||
|
Log to the file specified. Special values are:
|
||||||
|
'syslog', 'journald'. See the documentation for more
|
||||||
|
details.
|
||||||
|
-V, --version show program's version number and exit
|
||||||
|
-c PATH, --config PATH
|
||||||
|
Specify configuration file (default:
|
||||||
|
`userdir/config.json` or `config.json` whichever
|
||||||
|
exists). Multiple --config options may be used. Can be
|
||||||
|
set to `-` to read config from stdin.
|
||||||
|
-d PATH, --datadir PATH, --data-dir PATH
|
||||||
|
Path to the base directory of the exchange with
|
||||||
|
historical backtesting data. To see futures data, use
|
||||||
|
trading-mode additionally.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -180,7 +180,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi
|
|||||||
| `minimal_roi` | **Required.** Set the threshold as ratio the bot will use to exit a trade. [More information below](#understand-minimal_roi). [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** Dict
|
| `minimal_roi` | **Required.** Set the threshold as ratio the bot will use to exit a trade. [More information below](#understand-minimal_roi). [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** Dict
|
||||||
| `stoploss` | **Required.** Value as ratio of the stoploss used by the bot. More details in the [stoploss documentation](stoploss.md). [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** Float (as ratio)
|
| `stoploss` | **Required.** Value as ratio of the stoploss used by the bot. More details in the [stoploss documentation](stoploss.md). [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** Float (as ratio)
|
||||||
| `trailing_stop` | Enables trailing stoploss (based on `stoploss` in either configuration or strategy file). More details in the [stoploss documentation](stoploss.md#trailing-stop-loss). [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** Boolean
|
| `trailing_stop` | Enables trailing stoploss (based on `stoploss` in either configuration or strategy file). More details in the [stoploss documentation](stoploss.md#trailing-stop-loss). [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** Boolean
|
||||||
| `trailing_stop_positive` | Changes stoploss once profit has been reached. More details in the [stoploss documentation](stoploss.md#trailing-stop-loss-custom-positive-loss). [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** Float
|
| `trailing_stop_positive` | Changes stoploss once profit has been reached. More details in the [stoploss documentation](stoploss.md#trailing-stop-loss-different-positive-loss). [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** Float
|
||||||
| `trailing_stop_positive_offset` | Offset on when to apply `trailing_stop_positive`. Percentage value which should be positive. More details in the [stoploss documentation](stoploss.md#trailing-stop-loss-only-once-the-trade-has-reached-a-certain-offset). [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `0.0` (no offset).* <br> **Datatype:** Float
|
| `trailing_stop_positive_offset` | Offset on when to apply `trailing_stop_positive`. Percentage value which should be positive. More details in the [stoploss documentation](stoploss.md#trailing-stop-loss-only-once-the-trade-has-reached-a-certain-offset). [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `0.0` (no offset).* <br> **Datatype:** Float
|
||||||
| `trailing_only_offset_is_reached` | Only apply trailing stoploss when the offset is reached. [stoploss documentation](stoploss.md). [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `false`.* <br> **Datatype:** Boolean
|
| `trailing_only_offset_is_reached` | Only apply trailing stoploss when the offset is reached. [stoploss documentation](stoploss.md). [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `false`.* <br> **Datatype:** Boolean
|
||||||
| `fee` | Fee used during backtesting / dry-runs. Should normally not be configured, which has freqtrade fall back to the exchange default fee. Set as ratio (e.g. 0.001 = 0.1%). Fee is applied twice for each trade, once when buying, once when selling. <br> **Datatype:** Float (as ratio)
|
| `fee` | Fee used during backtesting / dry-runs. Should normally not be configured, which has freqtrade fall back to the exchange default fee. Set as ratio (e.g. 0.001 = 0.1%). Fee is applied twice for each trade, once when buying, once when selling. <br> **Datatype:** Float (as ratio)
|
||||||
@@ -205,7 +205,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi
|
|||||||
| `exit_pricing.use_order_book` | Enable exiting of open trades using [Order Book Exit](#exit-price-with-orderbook-enabled). <br> *Defaults to `true`.*<br> **Datatype:** Boolean
|
| `exit_pricing.use_order_book` | Enable exiting of open trades using [Order Book Exit](#exit-price-with-orderbook-enabled). <br> *Defaults to `true`.*<br> **Datatype:** Boolean
|
||||||
| `exit_pricing.order_book_top` | Bot will use the top N rate in Order Book "price_side" to exit. I.e. a value of 2 will allow the bot to pick the 2nd ask rate in [Order Book Exit](#exit-price-with-orderbook-enabled)<br>*Defaults to `1`.* <br> **Datatype:** Positive Integer
|
| `exit_pricing.order_book_top` | Bot will use the top N rate in Order Book "price_side" to exit. I.e. a value of 2 will allow the bot to pick the 2nd ask rate in [Order Book Exit](#exit-price-with-orderbook-enabled)<br>*Defaults to `1`.* <br> **Datatype:** Positive Integer
|
||||||
| `custom_price_max_distance_ratio` | Configure maximum distance ratio between current and custom entry or exit price. <br>*Defaults to `0.02` 2%).*<br> **Datatype:** Positive float
|
| `custom_price_max_distance_ratio` | Configure maximum distance ratio between current and custom entry or exit price. <br>*Defaults to `0.02` 2%).*<br> **Datatype:** Positive float
|
||||||
| | **TODO**
|
| | **Order/Signal handling**
|
||||||
| `use_exit_signal` | Use exit signals produced by the strategy in addition to the `minimal_roi`. <br>Setting this to false disables the usage of `"exit_long"` and `"exit_short"` columns. Has no influence on other exit methods (Stoploss, ROI, callbacks). [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
| `use_exit_signal` | Use exit signals produced by the strategy in addition to the `minimal_roi`. <br>Setting this to false disables the usage of `"exit_long"` and `"exit_short"` columns. Has no influence on other exit methods (Stoploss, ROI, callbacks). [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
||||||
| `exit_profit_only` | Wait until the bot reaches `exit_profit_offset` before taking an exit decision. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `false`.* <br> **Datatype:** Boolean
|
| `exit_profit_only` | Wait until the bot reaches `exit_profit_offset` before taking an exit decision. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `false`.* <br> **Datatype:** Boolean
|
||||||
| `exit_profit_offset` | Exit-signal is only active above this value. Only active in combination with `exit_profit_only=True`. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `0.0`.* <br> **Datatype:** Float (as ratio)
|
| `exit_profit_offset` | Exit-signal is only active above this value. Only active in combination with `exit_profit_only=True`. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `0.0`.* <br> **Datatype:** Float (as ratio)
|
||||||
@@ -266,7 +266,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi
|
|||||||
| `bot_name` | Name of the bot. Passed via API to a client - can be shown to distinguish / name bots.<br> *Defaults to `freqtrade`*<br> **Datatype:** String
|
| `bot_name` | Name of the bot. Passed via API to a client - can be shown to distinguish / name bots.<br> *Defaults to `freqtrade`*<br> **Datatype:** String
|
||||||
| `external_message_consumer` | Enable [Producer/Consumer mode](producer-consumer.md) for more details. <br> **Datatype:** Dict
|
| `external_message_consumer` | Enable [Producer/Consumer mode](producer-consumer.md) for more details. <br> **Datatype:** Dict
|
||||||
| | **Other**
|
| | **Other**
|
||||||
| `initial_state` | Defines the initial application state. If set to stopped, then the bot has to be explicitly started via `/start` RPC command. <br>*Defaults to `stopped`.* <br> **Datatype:** Enum, either `stopped` or `running`
|
| `initial_state` | Defines the initial application state. If set to stopped, then the bot has to be explicitly started via `/start` RPC command. <br>*Defaults to `stopped`.* <br> **Datatype:** Enum, either `running`, `paused` or `stopped`
|
||||||
| `force_entry_enable` | Enables the RPC Commands to force a Trade entry. More information below. <br> **Datatype:** Boolean
|
| `force_entry_enable` | Enables the RPC Commands to force a Trade entry. More information below. <br> **Datatype:** Boolean
|
||||||
| `disable_dataframe_checks` | Disable checking the OHLCV dataframe returned from the strategy methods for correctness. Only use when intentionally changing the dataframe and understand what you are doing. [Strategy Override](#parameters-in-the-strategy).<br> *Defaults to `False`*. <br> **Datatype:** Boolean
|
| `disable_dataframe_checks` | Disable checking the OHLCV dataframe returned from the strategy methods for correctness. Only use when intentionally changing the dataframe and understand what you are doing. [Strategy Override](#parameters-in-the-strategy).<br> *Defaults to `False`*. <br> **Datatype:** Boolean
|
||||||
| `internals.process_throttle_secs` | Set the process throttle, or minimum loop duration for one bot iteration loop. Value in second. <br>*Defaults to `5` seconds.* <br> **Datatype:** Positive Integer
|
| `internals.process_throttle_secs` | Set the process throttle, or minimum loop duration for one bot iteration loop. Value in second. <br>*Defaults to `5` seconds.* <br> **Datatype:** Positive Integer
|
||||||
@@ -281,7 +281,8 @@ Mandatory parameters are marked as **Required**, which means that they are requi
|
|||||||
| `add_config_files` | Additional config files. These files will be loaded and merged with the current config file. The files are resolved relative to the initial file.<br> *Defaults to `[]`*. <br> **Datatype:** List of strings
|
| `add_config_files` | Additional config files. These files will be loaded and merged with the current config file. The files are resolved relative to the initial file.<br> *Defaults to `[]`*. <br> **Datatype:** List of strings
|
||||||
| `dataformat_ohlcv` | Data format to use to store historical candle (OHLCV) data. <br> *Defaults to `feather`*. <br> **Datatype:** String
|
| `dataformat_ohlcv` | Data format to use to store historical candle (OHLCV) data. <br> *Defaults to `feather`*. <br> **Datatype:** String
|
||||||
| `dataformat_trades` | Data format to use to store historical trades data. <br> *Defaults to `feather`*. <br> **Datatype:** String
|
| `dataformat_trades` | Data format to use to store historical trades data. <br> *Defaults to `feather`*. <br> **Datatype:** String
|
||||||
| `reduce_df_footprint` | Recast all numeric columns to float32/int32, with the objective of reducing ram/disk usage (and decreasing train/inference timing in FreqAI). (Currently only affects FreqAI use-cases) <br> **Datatype:** Boolean. <br> Default: `False`.
|
| `reduce_df_footprint` | Recast all numeric columns to float32/int32, with the objective of reducing ram/disk usage (and decreasing train/inference timing backtesting/hyperopt and in FreqAI). <br> **Datatype:** Boolean. <br> Default: `False`.
|
||||||
|
| `log_config` | Dictionary containing the log config for python logging. [more info](advanced-setup.md#advanced-logging) <br> **Datatype:** dict. <br> Default: `FtRichHandler`
|
||||||
|
|
||||||
### Parameters in the strategy
|
### Parameters in the strategy
|
||||||
|
|
||||||
@@ -671,7 +672,7 @@ Should you experience problems you suspect are caused by websockets, you can dis
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Should you be required to use a proxy, please refer to the [proxy section](#using-proxy-with-freqtrade) for more information.
|
Should you be required to use a proxy, please refer to the [proxy section](#using-a-proxy-with-freqtrade) for more information.
|
||||||
|
|
||||||
!!! Info "Rollout"
|
!!! Info "Rollout"
|
||||||
We're implementing this out slowly, ensuring stability of your bots.
|
We're implementing this out slowly, ensuring stability of your bots.
|
||||||
|
|||||||
+7
-251
@@ -16,76 +16,7 @@ You can use a relative timerange (`--days 20`) or an absolute starting point (`-
|
|||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
```
|
--8<-- "commands/download-data.md"
|
||||||
usage: freqtrade download-data [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH]
|
|
||||||
[-p PAIRS [PAIRS ...]] [--pairs-file FILE]
|
|
||||||
[--days INT] [--new-pairs-days INT]
|
|
||||||
[--include-inactive-pairs]
|
|
||||||
[--timerange TIMERANGE] [--dl-trades]
|
|
||||||
[--convert] [--exchange EXCHANGE]
|
|
||||||
[-t TIMEFRAMES [TIMEFRAMES ...]] [--erase]
|
|
||||||
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
|
|
||||||
[--data-format-trades {json,jsongz,hdf5,feather,parquet}]
|
|
||||||
[--trading-mode {spot,margin,futures}]
|
|
||||||
[--prepend]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
|
||||||
Limit command to these pairs. Pairs are space-
|
|
||||||
separated.
|
|
||||||
--pairs-file FILE File containing a list of pairs. Takes precedence over
|
|
||||||
--pairs or pairs configured in the configuration.
|
|
||||||
--days INT Download data for given number of days.
|
|
||||||
--new-pairs-days INT Download data of new pairs for given number of days.
|
|
||||||
Default: `None`.
|
|
||||||
--include-inactive-pairs
|
|
||||||
Also download data from inactive pairs.
|
|
||||||
--timerange TIMERANGE
|
|
||||||
Specify what timerange of data to use.
|
|
||||||
--dl-trades Download trades instead of OHLCV data. The bot will
|
|
||||||
resample trades to the desired timeframe as specified
|
|
||||||
as --timeframes/-t.
|
|
||||||
--convert Convert downloaded trades to OHLCV data. Only
|
|
||||||
applicable in combination with `--dl-trades`. Will be
|
|
||||||
automatic for exchanges which don't have historic
|
|
||||||
OHLCV (e.g. Kraken). If not provided, use `trades-to-
|
|
||||||
ohlcv` to convert trades data to OHLCV data.
|
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
|
||||||
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
|
||||||
Specify which tickers to download. Space-separated
|
|
||||||
list. Default: `1m 5m`.
|
|
||||||
--erase Clean all existing data for the selected
|
|
||||||
exchange/pairs/timeframes.
|
|
||||||
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Storage format for downloaded candle (OHLCV) data.
|
|
||||||
(default: `feather`).
|
|
||||||
--data-format-trades {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Storage format for downloaded trades data. (default:
|
|
||||||
`feather`).
|
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
|
||||||
Select Trading mode
|
|
||||||
--prepend Allow data prepending. (Data-appending is disabled)
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! Tip "Downloading all data for one quote currency"
|
!!! Tip "Downloading all data for one quote currency"
|
||||||
Often, you'll want to download data for all pairs of a specific quote-currency. In such cases, you can use the following shorthand:
|
Often, you'll want to download data for all pairs of a specific quote-currency. In such cases, you can use the following shorthand:
|
||||||
@@ -162,7 +93,6 @@ Freqtrade currently supports the following data-formats:
|
|||||||
* `feather` - a dataformat based on Apache Arrow
|
* `feather` - a dataformat based on Apache Arrow
|
||||||
* `json` - plain "text" json files
|
* `json` - plain "text" json files
|
||||||
* `jsongz` - a gzip-zipped version of json files
|
* `jsongz` - a gzip-zipped version of json files
|
||||||
* `hdf5` - a high performance datastore (deprecated)
|
|
||||||
* `parquet` - columnar datastore (OHLCV only)
|
* `parquet` - columnar datastore (OHLCV only)
|
||||||
|
|
||||||
By default, both OHLCV data and trades data are stored in the `feather` format.
|
By default, both OHLCV data and trades data are stored in the `feather` format.
|
||||||
@@ -172,8 +102,8 @@ To persist this change, you should also add the following snippet to your config
|
|||||||
|
|
||||||
``` jsonc
|
``` jsonc
|
||||||
// ...
|
// ...
|
||||||
"dataformat_ohlcv": "hdf5",
|
"dataformat_ohlcv": "feather",
|
||||||
"dataformat_trades": "hdf5",
|
"dataformat_trades": "feather",
|
||||||
// ...
|
// ...
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -211,7 +141,6 @@ time freqtrade list-data --show-timerange --data-format-ohlcv <dataformat>
|
|||||||
| `feather` | 72Mb | 3.5s |
|
| `feather` | 72Mb | 3.5s |
|
||||||
| `json` | 149Mb | 25.6s |
|
| `json` | 149Mb | 25.6s |
|
||||||
| `jsongz` | 39Mb | 27s |
|
| `jsongz` | 39Mb | 27s |
|
||||||
| `hdf5` | 145Mb | 3.9s |
|
|
||||||
| `parquet` | 83Mb | 3.8s |
|
| `parquet` | 83Mb | 3.8s |
|
||||||
|
|
||||||
Size has been taken from the BTC/USDT 1m spot combination for the timerange specified above.
|
Size has been taken from the BTC/USDT 1m spot combination for the timerange specified above.
|
||||||
@@ -249,55 +178,7 @@ Mixing different stake-currencies is allowed for this file, since it's only used
|
|||||||
|
|
||||||
## Sub-command convert data
|
## Sub-command convert data
|
||||||
|
|
||||||
```
|
--8<-- "commands/convert-data.md"
|
||||||
usage: freqtrade convert-data [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH]
|
|
||||||
[-p PAIRS [PAIRS ...]] --format-from
|
|
||||||
{json,jsongz,hdf5,feather,parquet} --format-to
|
|
||||||
{json,jsongz,hdf5,feather,parquet} [--erase]
|
|
||||||
[--exchange EXCHANGE]
|
|
||||||
[-t TIMEFRAMES [TIMEFRAMES ...]]
|
|
||||||
[--trading-mode {spot,margin,futures}]
|
|
||||||
[--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
|
||||||
Limit command to these pairs. Pairs are space-
|
|
||||||
separated.
|
|
||||||
--format-from {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Source format for data conversion.
|
|
||||||
--format-to {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Destination format for data conversion.
|
|
||||||
--erase Clean all existing data for the selected
|
|
||||||
exchange/pairs/timeframes.
|
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
|
||||||
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
|
||||||
Specify which tickers to download. Space-separated
|
|
||||||
list. Default: `1m 5m`.
|
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
|
||||||
Select Trading mode
|
|
||||||
--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]
|
|
||||||
Select candle type to convert. Defaults to all
|
|
||||||
available types.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example converting data
|
### Example converting data
|
||||||
|
|
||||||
@@ -310,46 +191,7 @@ freqtrade convert-data --format-from json --format-to jsongz --datadir ~/.freqtr
|
|||||||
|
|
||||||
## Sub-command convert trade data
|
## Sub-command convert trade data
|
||||||
|
|
||||||
```
|
--8<-- "commands/convert-trade-data.md"
|
||||||
usage: freqtrade convert-trade-data [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH]
|
|
||||||
[-p PAIRS [PAIRS ...]] --format-from
|
|
||||||
{json,jsongz,hdf5,feather,parquet}
|
|
||||||
--format-to
|
|
||||||
{json,jsongz,hdf5,feather,parquet}
|
|
||||||
[--erase] [--exchange EXCHANGE]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
|
||||||
Limit command to these pairs. Pairs are space-
|
|
||||||
separated.
|
|
||||||
--format-from {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Source format for data conversion.
|
|
||||||
--format-to {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Destination format for data conversion.
|
|
||||||
--erase Clean all existing data for the selected
|
|
||||||
exchange/pairs/timeframes.
|
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example converting trades
|
### Example converting trades
|
||||||
|
|
||||||
@@ -365,49 +207,7 @@ freqtrade convert-trade-data --format-from jsongz --format-to json --datadir ~/.
|
|||||||
When you need to use `--dl-trades` (kraken only) to download data, conversion of trades data to ohlcv data is the last step.
|
When you need to use `--dl-trades` (kraken only) to download data, conversion of trades data to ohlcv data is the last step.
|
||||||
This command will allow you to repeat this last step for additional timeframes without re-downloading the data.
|
This command will allow you to repeat this last step for additional timeframes without re-downloading the data.
|
||||||
|
|
||||||
```
|
--8<-- "commands/trades-to-ohlcv.md"
|
||||||
usage: freqtrade trades-to-ohlcv [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH]
|
|
||||||
[-p PAIRS [PAIRS ...]]
|
|
||||||
[-t TIMEFRAMES [TIMEFRAMES ...]]
|
|
||||||
[--exchange EXCHANGE]
|
|
||||||
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
|
|
||||||
[--data-format-trades {json,jsongz,hdf5,feather}]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
|
||||||
Limit command to these pairs. Pairs are space-
|
|
||||||
separated.
|
|
||||||
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
|
||||||
Specify which tickers to download. Space-separated
|
|
||||||
list. Default: `1m 5m`.
|
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
|
||||||
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Storage format for downloaded candle (OHLCV) data.
|
|
||||||
(default: `feather`).
|
|
||||||
--data-format-trades {json,jsongz,hdf5,feather}
|
|
||||||
Storage format for downloaded trades data. (default:
|
|
||||||
`feather`).
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example trade-to-ohlcv conversion
|
### Example trade-to-ohlcv conversion
|
||||||
|
|
||||||
@@ -419,51 +219,7 @@ freqtrade trades-to-ohlcv --exchange kraken -t 5m 1h 1d --pairs BTC/EUR ETH/EUR
|
|||||||
|
|
||||||
You can get a list of downloaded data using the `list-data` sub-command.
|
You can get a list of downloaded data using the `list-data` sub-command.
|
||||||
|
|
||||||
```
|
--8<-- "commands/list-data.md"
|
||||||
usage: freqtrade list-data [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
|
|
||||||
[--userdir PATH] [--exchange EXCHANGE]
|
|
||||||
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
|
|
||||||
[--data-format-trades {json,jsongz,hdf5,feather,parquet}]
|
|
||||||
[--trades] [-p PAIRS [PAIRS ...]]
|
|
||||||
[--trading-mode {spot,margin,futures}]
|
|
||||||
[--show-timerange]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
|
||||||
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Storage format for downloaded candle (OHLCV) data.
|
|
||||||
(default: `feather`).
|
|
||||||
--data-format-trades {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Storage format for downloaded trades data. (default:
|
|
||||||
`feather`).
|
|
||||||
--trades Work on trades data instead of OHLCV data.
|
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
|
||||||
Limit command to these pairs. Pairs are space-
|
|
||||||
separated.
|
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
|
||||||
Select Trading mode
|
|
||||||
--show-timerange Show timerange available for available data. (May take
|
|
||||||
a while to calculate).
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example list-data
|
### Example list-data
|
||||||
|
|
||||||
|
|||||||
+7
-2
@@ -85,6 +85,11 @@ Setting protections from the configuration via `"protections": [],` has been rem
|
|||||||
|
|
||||||
## hdf5 data storage
|
## hdf5 data storage
|
||||||
|
|
||||||
Using hdf5 as data storage has been deprecated in 2024.12 and will be removed in 2025.1. We recommend switching to the feather data format.
|
Using hdf5 as data storage has been deprecated in 2024.12 and was removed in 2025.1. We recommend switching to the feather data format.
|
||||||
|
|
||||||
Please use the [`convert-data` subcommand](data-download.md#sub-command-convert-data) to convert your existing data to one of the supported formats.
|
Please use the [`convert-data` subcommand](data-download.md#sub-command-convert-data) to convert your existing data to one of the supported formats before updating.
|
||||||
|
|
||||||
|
## Configuring advanced logging via config
|
||||||
|
|
||||||
|
Configuring syslog and journald via `--logfile systemd` and `--logfile journald` respectively has been deprecated in 2025.3.
|
||||||
|
Please use configuration based [log setup](advanced-setup.md#advanced-logging) instead.
|
||||||
|
|||||||
+1
-58
@@ -215,64 +215,7 @@ Let's say the stake currency is **ETH** and there is $10$ **ETH** on the wallet.
|
|||||||
|
|
||||||
## Edge command reference
|
## Edge command reference
|
||||||
|
|
||||||
```
|
--8<-- "commands/edge.md"
|
||||||
usage: freqtrade edge [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
|
|
||||||
[--userdir PATH] [-s NAME] [--strategy-path PATH]
|
|
||||||
[-i TIMEFRAME] [--timerange TIMERANGE]
|
|
||||||
[--data-format-ohlcv {json,jsongz,hdf5}]
|
|
||||||
[--max-open-trades INT] [--stake-amount STAKE_AMOUNT]
|
|
||||||
[--fee FLOAT] [-p PAIRS [PAIRS ...]]
|
|
||||||
[--stoplosses STOPLOSS_RANGE]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
|
||||||
--timerange TIMERANGE
|
|
||||||
Specify what timerange of data to use.
|
|
||||||
--data-format-ohlcv {json,jsongz,hdf5}
|
|
||||||
Storage format for downloaded candle (OHLCV) data.
|
|
||||||
(default: `None`).
|
|
||||||
--max-open-trades INT
|
|
||||||
Override the value of the `max_open_trades`
|
|
||||||
configuration setting.
|
|
||||||
--stake-amount STAKE_AMOUNT
|
|
||||||
Override the value of the `stake_amount` configuration
|
|
||||||
setting.
|
|
||||||
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
|
||||||
entry and exit).
|
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
|
||||||
Limit command to these pairs. Pairs are space-
|
|
||||||
separated.
|
|
||||||
--stoplosses STOPLOSS_RANGE
|
|
||||||
Defines a range of stoploss values against which edge
|
|
||||||
will assess the strategy. The format is "min,max,step"
|
|
||||||
(without any space). Example:
|
|
||||||
`--stoplosses=-0.01,-0.1,-0.001`
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
Strategy arguments:
|
|
||||||
-s NAME, --strategy NAME
|
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configurations
|
## Configurations
|
||||||
|
|
||||||
|
|||||||
+46
-2
@@ -118,7 +118,7 @@ When trading on Binance Futures market, orderbook must be used because there is
|
|||||||
},
|
},
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Binance futures settings
|
#### Binance isolated futures settings
|
||||||
|
|
||||||
Users will also have to have the futures-setting "Position Mode" set to "One-way Mode", and "Asset Mode" set to "Single-Asset Mode".
|
Users will also have to have the futures-setting "Position Mode" set to "One-way Mode", and "Asset Mode" set to "Single-Asset Mode".
|
||||||
These settings will be checked on startup, and freqtrade will show an error if this setting is wrong.
|
These settings will be checked on startup, and freqtrade will show an error if this setting is wrong.
|
||||||
@@ -127,6 +127,27 @@ These settings will be checked on startup, and freqtrade will show an error if t
|
|||||||
|
|
||||||
Freqtrade will not attempt to change these settings.
|
Freqtrade will not attempt to change these settings.
|
||||||
|
|
||||||
|
#### Binance BNFCR futures
|
||||||
|
|
||||||
|
BNFCR mode are a special type of futures mode on Binance to work around regulatory issues in Europe.
|
||||||
|
To use BNFCR futures, you will have to have the following combination of settings:
|
||||||
|
|
||||||
|
``` jsonc
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
"trading_mode": "futures",
|
||||||
|
"margin_mode": "cross",
|
||||||
|
"proxy_coin": "BNFCR",
|
||||||
|
"stake_currency": "USDT" // or "USDC"
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `stake_currency` setting defines the markets the bot will be operating in. This choice is really arbitrary.
|
||||||
|
|
||||||
|
On the exchange, you'll have to use "Multi-asset Mode" - and "Position Mode set to "One-way Mode".
|
||||||
|
Freqtrade will check these settings on startup, but won't attempt to change them.
|
||||||
|
|
||||||
## Bingx
|
## Bingx
|
||||||
|
|
||||||
BingX supports [time_in_force](configuration.md#understand-order_time_in_force) with settings "GTC" (good till cancelled), "IOC" (immediate-or-cancel) and "PO" (Post only) settings.
|
BingX supports [time_in_force](configuration.md#understand-order_time_in_force) with settings "GTC" (good till cancelled), "IOC" (immediate-or-cancel) and "PO" (Post only) settings.
|
||||||
@@ -189,7 +210,7 @@ freqtrade download-data --exchange kraken --dl-trades -p BTC/EUR BCH/EUR
|
|||||||
It will also take a long time, as freqtrade will need to download every single trade that happened on the exchange for the pair / timerange combination, therefore please be patient.
|
It will also take a long time, as freqtrade will need to download every single trade that happened on the exchange for the pair / timerange combination, therefore please be patient.
|
||||||
|
|
||||||
!!! Warning "rateLimit tuning"
|
!!! Warning "rateLimit tuning"
|
||||||
Please pay attention that rateLimit configuration entry holds delay in milliseconds between requests, NOT requests\sec rate.
|
Please pay attention that rateLimit configuration entry holds delay in milliseconds between requests, NOT requests/sec rate.
|
||||||
So, in order to mitigate Kraken API "Rate limit exceeded" exception, this configuration should be increased, NOT decreased.
|
So, in order to mitigate Kraken API "Rate limit exceeded" exception, this configuration should be increased, NOT decreased.
|
||||||
|
|
||||||
## Kucoin
|
## Kucoin
|
||||||
@@ -342,6 +363,29 @@ Hyperliquid handles deposits and withdrawals on the Arbitrum One chain, a Layer
|
|||||||
* Create a different software wallet, only transfer the funds you want to trade with to that wallet, and use that wallet to trade on Hyperliquid.
|
* Create a different software wallet, only transfer the funds you want to trade with to that wallet, and use that wallet to trade on Hyperliquid.
|
||||||
* If you have funds you don't want to use for trading (after making a profit for example), transfer them back to your hardware wallet.
|
* If you have funds you don't want to use for trading (after making a profit for example), transfer them back to your hardware wallet.
|
||||||
|
|
||||||
|
### Historic Hyperliquid data
|
||||||
|
|
||||||
|
The Hyperliquid API does not provide historic data beyond the single call to fetch current data, so downloading data is not possible, as the downloaded data would not constitute proper historic data.
|
||||||
|
|
||||||
|
## Bitvavo
|
||||||
|
|
||||||
|
If your account is required to use an operatorId, you can set it in the configuration file as follows:
|
||||||
|
|
||||||
|
``` json
|
||||||
|
"exchange": {
|
||||||
|
"name": "bitvavo",
|
||||||
|
"key": "",
|
||||||
|
"secret": "",
|
||||||
|
"ccxt_config": {
|
||||||
|
"options": {
|
||||||
|
"operatorId": "123567"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Bitvavo expects the `operatorId` to be an integer.
|
||||||
|
|
||||||
## All exchanges
|
## All exchanges
|
||||||
|
|
||||||
Should you experience constant errors with Nonce (like `InvalidNonce`), it is best to regenerate the API keys. Resetting Nonce is difficult and it's usually easier to regenerate the API keys.
|
Should you experience constant errors with Nonce (like `InvalidNonce`), it is best to regenerate the API keys. Resetting Nonce is difficult and it's usually easier to regenerate the API keys.
|
||||||
|
|||||||
+13
-6
@@ -46,10 +46,12 @@ Make sure you set the `initial_state` config option to `"running"` in your confi
|
|||||||
|
|
||||||
### I have waited 5 minutes, why hasn't the bot made any trades yet?
|
### I have waited 5 minutes, why hasn't the bot made any trades yet?
|
||||||
|
|
||||||
* Depending on the buy strategy, the amount of whitelisted coins, the
|
* Depending on the entry strategy, the amount of whitelisted coins, the
|
||||||
situation of the market etc, it can take up to hours to find a good entry
|
situation of the market etc, it can take up to hours or days to find a good entry
|
||||||
position for a trade. Be patient!
|
position for a trade. Be patient!
|
||||||
|
|
||||||
|
* Backtesting will tell you roughly how many trades to expect - but that won't guarantee that they'll be distributed evenly across time - so you could have 20 trades on one day, and 0 for the rest of the week.
|
||||||
|
|
||||||
* It may be because of a configuration error. It's best to check the logs, they usually tell you if the bot is simply not getting buy signals (only heartbeat messages), or if there is something wrong (errors / exceptions in the log).
|
* It may be because of a configuration error. It's best to check the logs, they usually tell you if the bot is simply not getting buy signals (only heartbeat messages), or if there is something wrong (errors / exceptions in the log).
|
||||||
|
|
||||||
### I have made 12 trades already, why is my total profit negative?
|
### I have made 12 trades already, why is my total profit negative?
|
||||||
@@ -100,6 +102,14 @@ You can use "current" market data by using the [dataprovider](strategy-customiza
|
|||||||
|
|
||||||
You can use the `/stopentry` command in Telegram to prevent future trade entry, followed by `/forceexit all` (sell all open trades).
|
You can use the `/stopentry` command in Telegram to prevent future trade entry, followed by `/forceexit all` (sell all open trades).
|
||||||
|
|
||||||
|
### I sold the bot's capital and now there's errors in the log
|
||||||
|
|
||||||
|
Freqtrade assumes that the trades it opens are managed only though the bot.
|
||||||
|
If you happen to (accidentally) sell the bot's capital, freqtrade will try to recover by trying to re-find on-exchange orders.
|
||||||
|
|
||||||
|
This is a best-effort approach, and will not work in all cases, especially when using order types that are not supported by freqtrade (OCO, iceberg, etc.), or when working with older trades (where the exchange no longer provides full order information).
|
||||||
|
The exact limits will vary between exchanges - with the details usually being documented in the exchange's API documentation.
|
||||||
|
|
||||||
### I want to run multiple bots on the same machine
|
### I want to run multiple bots on the same machine
|
||||||
|
|
||||||
Please look at the [advanced setup documentation Page](advanced-setup.md#running-multiple-instances-of-freqtrade).
|
Please look at the [advanced setup documentation Page](advanced-setup.md#running-multiple-instances-of-freqtrade).
|
||||||
@@ -217,10 +227,7 @@ On Windows, the `--logfile` option is also supported by Freqtrade and you can us
|
|||||||
First of all, most indicator libraries don't have GPU support - as such, there would be little benefit for indicator calculations.
|
First of all, most indicator libraries don't have GPU support - as such, there would be little benefit for indicator calculations.
|
||||||
The GPU improvements would only apply to pandas-native calculations - or ones written by yourself.
|
The GPU improvements would only apply to pandas-native calculations - or ones written by yourself.
|
||||||
|
|
||||||
For hyperopt, freqtrade is using scikit-optimize, which is built on top of scikit-learn.
|
GPU's are only good at crunching numbers (floating point operations).
|
||||||
Their statement about GPU support is [pretty clear](https://scikit-learn.org/stable/faq.html#will-you-add-gpu-support).
|
|
||||||
|
|
||||||
GPU's also are only good at crunching numbers (floating point operations).
|
|
||||||
For hyperopt, we need both number-crunching (find next parameters) and running python code (running backtesting).
|
For hyperopt, we need both number-crunching (find next parameters) and running python code (running backtesting).
|
||||||
As such, GPU's are not too well suited for most parts of hyperopt.
|
As such, GPU's are not too well suited for most parts of hyperopt.
|
||||||
|
|
||||||
|
|||||||
@@ -258,6 +258,8 @@ freqtrade trade --config config_examples/config_freqai.example.json --strategy F
|
|||||||
We do provide an explicit docker-compose file for this in `docker/docker-compose-freqai.yml` - which can be used via `docker compose -f docker/docker-compose-freqai.yml run ...` - or can be copied to replace the original docker file.
|
We do provide an explicit docker-compose file for this in `docker/docker-compose-freqai.yml` - which can be used via `docker compose -f docker/docker-compose-freqai.yml run ...` - or can be copied to replace the original docker file.
|
||||||
This docker-compose file also contains a (disabled) section to enable GPU resources within docker containers. This obviously assumes the system has GPU resources available.
|
This docker-compose file also contains a (disabled) section to enable GPU resources within docker containers. This obviously assumes the system has GPU resources available.
|
||||||
|
|
||||||
|
PyTorch dropped support for macOS x64 (intel based Apple devices) in version 2.3. Subsequently, freqtrade also dropped support for PyTorch on this platform.
|
||||||
|
|
||||||
### Structure
|
### Structure
|
||||||
|
|
||||||
#### Model
|
#### Model
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ You can ask for each of the defined features to be included also for informative
|
|||||||
In total, the number of features the user of the presented example strategy has created is: length of `include_timeframes` * no. features in `feature_engineering_expand_*()` * length of `include_corr_pairlist` * no. `include_shifted_candles` * length of `indicator_periods_candles`
|
In total, the number of features the user of the presented example strategy has created is: length of `include_timeframes` * no. features in `feature_engineering_expand_*()` * length of `include_corr_pairlist` * no. `include_shifted_candles` * length of `indicator_periods_candles`
|
||||||
$= 3 * 3 * 3 * 2 * 2 = 108$.
|
$= 3 * 3 * 3 * 2 * 2 = 108$.
|
||||||
|
|
||||||
!!! note "Learn more about creative feature engineering"
|
!!! note "Learn more about creative feature engineering"
|
||||||
Check out our [medium article](https://emergentmethods.medium.com/freqai-from-price-to-prediction-6fadac18b665) geared toward helping users learn how to creatively engineer features.
|
Check out our [medium article](https://emergentmethods.medium.com/freqai-from-price-to-prediction-6fadac18b665) geared toward helping users learn how to creatively engineer features.
|
||||||
|
|
||||||
### Gain finer control over `feature_engineering_*` functions with `metadata`
|
### Gain finer control over `feature_engineering_*` functions with `metadata`
|
||||||
@@ -310,7 +310,7 @@ class MyCoolTransform(BaseTransform):
|
|||||||
|
|
||||||
If you have created your own custom `IFreqaiModel` with a custom `train()`/`predict()` function, *and* you still rely on `data_cleaning_train/predict()`, then you will need to migrate to the new pipeline. If your model does *not* rely on `data_cleaning_train/predict()`, then you do not need to worry about this migration.
|
If you have created your own custom `IFreqaiModel` with a custom `train()`/`predict()` function, *and* you still rely on `data_cleaning_train/predict()`, then you will need to migrate to the new pipeline. If your model does *not* rely on `data_cleaning_train/predict()`, then you do not need to worry about this migration.
|
||||||
|
|
||||||
More details about the migration can be found [here](strategy_migration.md#freqai---new-data-pipeline).
|
More details about the migration can be found [here](strategy_migration.md#freqai-new-data-pipeline).
|
||||||
|
|
||||||
## Outlier detection
|
## Outlier detection
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -18,7 +18,7 @@ Features include:
|
|||||||
* **Extensibility** - The generalized and robust architecture allows for incorporating any [machine learning library/method](freqai-configuration.md#using-different-prediction-models) available in Python. Eight examples are currently available, including classifiers, regressors, and a convolutional neural network
|
* **Extensibility** - The generalized and robust architecture allows for incorporating any [machine learning library/method](freqai-configuration.md#using-different-prediction-models) available in Python. Eight examples are currently available, including classifiers, regressors, and a convolutional neural network
|
||||||
* **Smart outlier removal** - Remove outliers from training and prediction data sets using a variety of [outlier detection techniques](freqai-feature-engineering.md#outlier-detection)
|
* **Smart outlier removal** - Remove outliers from training and prediction data sets using a variety of [outlier detection techniques](freqai-feature-engineering.md#outlier-detection)
|
||||||
* **Crash resilience** - Store trained models to disk to make reloading from a crash fast and easy, and [purge obsolete files](freqai-running.md#purging-old-model-data) for sustained dry/live runs
|
* **Crash resilience** - Store trained models to disk to make reloading from a crash fast and easy, and [purge obsolete files](freqai-running.md#purging-old-model-data) for sustained dry/live runs
|
||||||
* **Automatic data normalization** - [Normalize the data](freqai-feature-engineering.md#feature-normalization) in a smart and statistically safe way
|
* **Automatic data normalization** - [Normalize the data](freqai-feature-engineering.md#building-the-data-pipeline) in a smart and statistically safe way
|
||||||
* **Automatic data download** - Compute timeranges for data downloads and update historic data (in live deployments)
|
* **Automatic data download** - Compute timeranges for data downloads and update historic data (in live deployments)
|
||||||
* **Cleaning of incoming data** - Handle NaNs safely before training and model inferencing
|
* **Cleaning of incoming data** - Handle NaNs safely before training and model inferencing
|
||||||
* **Dimensionality reduction** - Reduce the size of the training data via [Principal Component Analysis](freqai-feature-engineering.md#data-dimensionality-reduction-with-principal-component-analysis)
|
* **Dimensionality reduction** - Reduce the size of the training data via [Principal Component Analysis](freqai-feature-engineering.md#data-dimensionality-reduction-with-principal-component-analysis)
|
||||||
@@ -76,14 +76,14 @@ pip install -r requirements-freqai.txt
|
|||||||
|
|
||||||
### Usage with docker
|
### Usage with docker
|
||||||
|
|
||||||
If you are using docker, a dedicated tag with FreqAI dependencies is available as `:freqai`. As such - you can replace the image line in your docker compose file with `image: freqtradeorg/freqtrade:develop_freqai`. This image contains the regular FreqAI dependencies. Similar to native installs, Catboost will not be available on ARM based devices. If you would like to use PyTorch or Reinforcement learning, you should use the torch or RL tags, `image: freqtradeorg/freqtrade:develop_freqaitorch`, `image: freqtradeorg/freqtrade:develop_freqairl`.
|
If you are using docker, a dedicated tag with FreqAI dependencies is available as `:freqai`. As such - you can replace the image line in your docker compose file with `image: freqtradeorg/freqtrade:stable_freqai`. This image contains the regular FreqAI dependencies. Similar to native installs, Catboost will not be available on ARM based devices. If you would like to use PyTorch or Reinforcement learning, you should use the torch or RL tags, `image: freqtradeorg/freqtrade:stable_freqaitorch`, `image: freqtradeorg/freqtrade:stable_freqairl`.
|
||||||
|
|
||||||
!!! note "docker-compose-freqai.yml"
|
!!! note "docker-compose-freqai.yml"
|
||||||
We do provide an explicit docker-compose file for this in `docker/docker-compose-freqai.yml` - which can be used via `docker compose -f docker/docker-compose-freqai.yml run ...` - or can be copied to replace the original docker file. This docker-compose file also contains a (disabled) section to enable GPU resources within docker containers. This obviously assumes the system has GPU resources available.
|
We do provide an explicit docker-compose file for this in `docker/docker-compose-freqai.yml` - which can be used via `docker compose -f docker/docker-compose-freqai.yml run ...` - or can be copied to replace the original docker file. This docker-compose file also contains a (disabled) section to enable GPU resources within docker containers. This obviously assumes the system has GPU resources available.
|
||||||
|
|
||||||
### FreqAI position in open-source machine learning landscape
|
### FreqAI position in open-source machine learning landscape
|
||||||
|
|
||||||
Forecasting chaotic time-series based systems, such as equity/cryptocurrency markets, requires a broad set of tools geared toward testing a wide range of hypotheses. Fortunately, a recent maturation of robust machine learning libraries (e.g. `scikit-learn`) has opened up a wide range of research possibilities. Scientists from a diverse range of fields can now easily prototype their studies on an abundance of established machine learning algorithms. Similarly, these user-friendly libraries enable "citzen scientists" to use their basic Python skills for data exploration. However, leveraging these machine learning libraries on historical and live chaotic data sources can be logistically difficult and expensive. Additionally, robust data collection, storage, and handling presents a disparate challenge. [`FreqAI`](#freqai) aims to provide a generalized and extensible open-sourced framework geared toward live deployments of adaptive modeling for market forecasting. The `FreqAI` framework is effectively a sandbox for the rich world of open-source machine learning libraries. Inside the `FreqAI` sandbox, users find they can combine a wide variety of third-party libraries to test creative hypotheses on a free live 24/7 chaotic data source - cryptocurrency exchange data.
|
Forecasting chaotic time-series based systems, such as equity/cryptocurrency markets, requires a broad set of tools geared toward testing a wide range of hypotheses. Fortunately, a recent maturation of robust machine learning libraries (e.g. `scikit-learn`) has opened up a wide range of research possibilities. Scientists from a diverse range of fields can now easily prototype their studies on an abundance of established machine learning algorithms. Similarly, these user-friendly libraries enable "citizen scientists" to use their basic Python skills for data exploration. However, leveraging these machine learning libraries on historical and live chaotic data sources can be logistically difficult and expensive. Additionally, robust data collection, storage, and handling presents a disparate challenge. [`FreqAI`](#freqai) aims to provide a generalized and extensible open-sourced framework geared toward live deployments of adaptive modeling for market forecasting. The `FreqAI` framework is effectively a sandbox for the rich world of open-source machine learning libraries. Inside the `FreqAI` sandbox, users find they can combine a wide variety of third-party libraries to test creative hypotheses on a free live 24/7 chaotic data source - cryptocurrency exchange data.
|
||||||
|
|
||||||
### Citing FreqAI
|
### Citing FreqAI
|
||||||
|
|
||||||
|
|||||||
+7
-124
@@ -1,10 +1,10 @@
|
|||||||
# Hyperopt
|
# Hyperopt
|
||||||
|
|
||||||
This page explains how to tune your strategy by finding the optimal
|
This page explains how to tune your strategy by finding the optimal
|
||||||
parameters, a process called hyperparameter optimization. The bot uses algorithms included in the `scikit-optimize` package to accomplish this.
|
parameters, a process called hyperparameter optimization. The bot uses algorithms included in the `optuna` package to accomplish this.
|
||||||
The search will burn all your CPU cores, make your laptop sound like a fighter jet and still take a long time.
|
The search will burn all your CPU cores, make your laptop sound like a fighter jet and still take a long time.
|
||||||
|
|
||||||
In general, the search for best parameters starts with a few random combinations (see [below](#reproducible-results) for more details) and then uses Bayesian search with a ML regressor algorithm (currently ExtraTreesRegressor) to quickly find a combination of parameters in the search hyperspace that minimizes the value of the [loss function](#loss-functions).
|
In general, the search for best parameters starts with a few random combinations (see [below](#reproducible-results) for more details) and then uses one of optuna's sampler algorithms (currently NSGAIIISampler) to quickly find a combination of parameters in the search hyperspace that minimizes the value of the [loss function](#loss-functions).
|
||||||
|
|
||||||
Hyperopt requires historic data to be available, just as backtesting does (hyperopt runs backtesting many times with different parameters).
|
Hyperopt requires historic data to be available, just as backtesting does (hyperopt runs backtesting many times with different parameters).
|
||||||
To learn how to get data for the pairs and exchange you're interested in, head over to the [Data Downloading](data-download.md) section of the documentation.
|
To learn how to get data for the pairs and exchange you're interested in, head over to the [Data Downloading](data-download.md) section of the documentation.
|
||||||
@@ -36,127 +36,7 @@ pip install -r requirements-hyperopt.txt
|
|||||||
|
|
||||||
## Hyperopt command reference
|
## Hyperopt command reference
|
||||||
|
|
||||||
```
|
--8<-- "commands/hyperopt.md"
|
||||||
usage: freqtrade hyperopt [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
|
|
||||||
[--userdir PATH] [-s NAME] [--strategy-path PATH]
|
|
||||||
[--recursive-strategy-search] [--freqaimodel NAME]
|
|
||||||
[--freqaimodel-path PATH] [-i TIMEFRAME]
|
|
||||||
[--timerange TIMERANGE]
|
|
||||||
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
|
|
||||||
[--max-open-trades INT]
|
|
||||||
[--stake-amount STAKE_AMOUNT] [--fee FLOAT]
|
|
||||||
[-p PAIRS [PAIRS ...]] [--hyperopt-path PATH]
|
|
||||||
[--eps] [--enable-protections]
|
|
||||||
[--dry-run-wallet DRY_RUN_WALLET]
|
|
||||||
[--timeframe-detail TIMEFRAME_DETAIL] [-e INT]
|
|
||||||
[--spaces {all,buy,sell,roi,stoploss,trailing,protection,trades,default} [{all,buy,sell,roi,stoploss,trailing,protection,trades,default} ...]]
|
|
||||||
[--print-all] [--no-color] [--print-json] [-j JOBS]
|
|
||||||
[--random-state INT] [--min-trades INT]
|
|
||||||
[--hyperopt-loss NAME] [--disable-param-export]
|
|
||||||
[--ignore-missing-spaces] [--analyze-per-epoch]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
|
||||||
--timerange TIMERANGE
|
|
||||||
Specify what timerange of data to use.
|
|
||||||
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Storage format for downloaded candle (OHLCV) data.
|
|
||||||
(default: `feather`).
|
|
||||||
--max-open-trades INT
|
|
||||||
Override the value of the `max_open_trades`
|
|
||||||
configuration setting.
|
|
||||||
--stake-amount STAKE_AMOUNT
|
|
||||||
Override the value of the `stake_amount` configuration
|
|
||||||
setting.
|
|
||||||
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
|
||||||
entry and exit).
|
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
|
||||||
Limit command to these pairs. Pairs are space-
|
|
||||||
separated.
|
|
||||||
--hyperopt-path PATH Specify additional lookup path for Hyperopt Loss
|
|
||||||
functions.
|
|
||||||
--eps, --enable-position-stacking
|
|
||||||
Allow buying the same pair multiple times (position
|
|
||||||
stacking).
|
|
||||||
--enable-protections, --enableprotections
|
|
||||||
Enable protections for backtesting.Will slow
|
|
||||||
backtesting down by a considerable amount, but will
|
|
||||||
include configured protections
|
|
||||||
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
|
||||||
Starting balance, used for backtesting / hyperopt and
|
|
||||||
dry-runs.
|
|
||||||
--timeframe-detail TIMEFRAME_DETAIL
|
|
||||||
Specify detail timeframe for backtesting (`1m`, `5m`,
|
|
||||||
`30m`, `1h`, `1d`).
|
|
||||||
-e INT, --epochs INT Specify number of epochs (default: 100).
|
|
||||||
--spaces {all,buy,sell,roi,stoploss,trailing,protection,trades,default} [{all,buy,sell,roi,stoploss,trailing,protection,trades,default} ...]
|
|
||||||
Specify which parameters to hyperopt. Space-separated
|
|
||||||
list.
|
|
||||||
--print-all Print all results, not only the best ones.
|
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
|
||||||
useful if you are redirecting output to a file.
|
|
||||||
--print-json Print output in JSON format.
|
|
||||||
-j JOBS, --job-workers JOBS
|
|
||||||
The number of concurrently running jobs for
|
|
||||||
hyperoptimization (hyperopt worker processes). If -1
|
|
||||||
(default), all CPUs are used, for -2, all CPUs but one
|
|
||||||
are used, etc. If 1 is given, no parallel computing
|
|
||||||
code is used at all.
|
|
||||||
--random-state INT Set random state to some positive integer for
|
|
||||||
reproducible hyperopt results.
|
|
||||||
--min-trades INT Set minimal desired number of trades for evaluations
|
|
||||||
in the hyperopt optimization path (default: 1).
|
|
||||||
--hyperopt-loss NAME, --hyperoptloss NAME
|
|
||||||
Specify the class name of the hyperopt loss function
|
|
||||||
class (IHyperOptLoss). Different functions can
|
|
||||||
generate completely different results, since the
|
|
||||||
target for optimization is different. Built-in
|
|
||||||
Hyperopt-loss-functions are:
|
|
||||||
ShortTradeDurHyperOptLoss, OnlyProfitHyperOptLoss,
|
|
||||||
SharpeHyperOptLoss, SharpeHyperOptLossDaily,
|
|
||||||
SortinoHyperOptLoss, SortinoHyperOptLossDaily,
|
|
||||||
CalmarHyperOptLoss, MaxDrawDownHyperOptLoss,
|
|
||||||
MaxDrawDownRelativeHyperOptLoss,
|
|
||||||
ProfitDrawDownHyperOptLoss
|
|
||||||
--disable-param-export
|
|
||||||
Disable automatic hyperopt parameter export.
|
|
||||||
--ignore-missing-spaces, --ignore-unparameterized-spaces
|
|
||||||
Suppress errors for any requested Hyperopt spaces that
|
|
||||||
do not contain any parameters.
|
|
||||||
--analyze-per-epoch Run populate_indicators once per epoch.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
Strategy arguments:
|
|
||||||
-s NAME, --strategy NAME
|
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
|
||||||
--recursive-strategy-search
|
|
||||||
Recursively search for a strategy in the strategies
|
|
||||||
folder.
|
|
||||||
--freqaimodel NAME Specify a custom freqaimodels.
|
|
||||||
--freqaimodel-path PATH
|
|
||||||
Specify additional lookup path for freqaimodels.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### Hyperopt checklist
|
### Hyperopt checklist
|
||||||
|
|
||||||
@@ -591,6 +471,7 @@ Currently, the following loss functions are builtin:
|
|||||||
* `SortinoHyperOptLossDaily` - optimizes Sortino Ratio calculated on **daily** trade returns relative to **downside** standard deviation.
|
* `SortinoHyperOptLossDaily` - optimizes Sortino Ratio calculated on **daily** trade returns relative to **downside** standard deviation.
|
||||||
* `MaxDrawDownHyperOptLoss` - Optimizes Maximum absolute drawdown.
|
* `MaxDrawDownHyperOptLoss` - Optimizes Maximum absolute drawdown.
|
||||||
* `MaxDrawDownRelativeHyperOptLoss` - Optimizes both maximum absolute drawdown while also adjusting for maximum relative drawdown.
|
* `MaxDrawDownRelativeHyperOptLoss` - Optimizes both maximum absolute drawdown while also adjusting for maximum relative drawdown.
|
||||||
|
* `MaxDrawDownPerPairHyperOptLoss` - Calculates the profit/drawdown ratio per pair and returns the worst result as objective, forcing hyperopt to optimize the parameters for all pairs in the pairlist. This way, we prevent one or more pairs with good results from inflating the metrics, while the pairs with poor results are not represented and therefore not optimized.
|
||||||
* `CalmarHyperOptLoss` - Optimizes Calmar Ratio calculated on trade returns relative to max drawdown.
|
* `CalmarHyperOptLoss` - Optimizes Calmar Ratio calculated on trade returns relative to max drawdown.
|
||||||
* `ProfitDrawDownHyperOptLoss` - Optimizes by max Profit & min Drawdown objective. `DRAWDOWN_MULT` variable within the hyperoptloss file can be adjusted to be stricter or more flexible on drawdown purposes.
|
* `ProfitDrawDownHyperOptLoss` - Optimizes by max Profit & min Drawdown objective. `DRAWDOWN_MULT` variable within the hyperoptloss file can be adjusted to be stricter or more flexible on drawdown purposes.
|
||||||
* `MultiMetricHyperOptLoss` - Optimizes by several key metrics to achieve balanced performance. The primary focus is on maximizing Profit and minimizing Drawdown, while also considering additional metrics such as Profit Factor, Expectancy Ratio and Winrate. Moreover, it applies a penalty for epochs with a low number of trades, encouraging strategies with adequate trade frequency.
|
* `MultiMetricHyperOptLoss` - Optimizes by several key metrics to achieve balanced performance. The primary focus is on maximizing Profit and minimizing Drawdown, while also considering additional metrics such as Profit Factor, Expectancy Ratio and Winrate. Moreover, it applies a penalty for epochs with a low number of trades, encouraging strategies with adequate trade frequency.
|
||||||
@@ -609,6 +490,8 @@ freqtrade hyperopt --config config.json --hyperopt-loss <hyperoptlossname> --str
|
|||||||
```
|
```
|
||||||
|
|
||||||
The `-e` option will set how many evaluations hyperopt will do. Since hyperopt uses Bayesian search, running too many epochs at once may not produce greater results. Experience has shown that best results are usually not improving much after 500-1000 epochs.
|
The `-e` option will set how many evaluations hyperopt will do. Since hyperopt uses Bayesian search, running too many epochs at once may not produce greater results. Experience has shown that best results are usually not improving much after 500-1000 epochs.
|
||||||
|
The `--early-stop` option will set after how many epochs with no improvements hyperopt will stop. A good value is 20-30% of the total epochs. Any value greater than 0 and lower than 20 it will be replaced by 20. Early stop is by default disabled (`--early-stop=0`)
|
||||||
|
|
||||||
Doing multiple runs (executions) with a few 1000 epochs and different random state will most likely produce different results.
|
Doing multiple runs (executions) with a few 1000 epochs and different random state will most likely produce different results.
|
||||||
|
|
||||||
The `--spaces all` option determines that all possible parameters should be optimized. Possibilities are listed below.
|
The `--spaces all` option determines that all possible parameters should be optimized. Possibilities are listed below.
|
||||||
@@ -651,7 +534,7 @@ Legal values are:
|
|||||||
* `trailing`: search for the best trailing stop values
|
* `trailing`: search for the best trailing stop values
|
||||||
* `trades`: search for the best max open trades values
|
* `trades`: search for the best max open trades values
|
||||||
* `protection`: search for the best protection parameters (read the [protections section](#optimizing-protections) on how to properly define these)
|
* `protection`: search for the best protection parameters (read the [protections section](#optimizing-protections) on how to properly define these)
|
||||||
* `default`: `all` except `trailing` and `protection`
|
* `default`: `all` except `trailing`, `trades` and `protection`
|
||||||
* space-separated list of any of the above values for example `--spaces roi stoploss`
|
* space-separated list of any of the above values for example `--spaces roi stoploss`
|
||||||
|
|
||||||
The default Hyperopt Search Space, used when no `--space` command line option is specified, does not include the `trailing` hyperspace. We recommend you to run optimization for the `trailing` hyperspace separately, when the best parameters for other hyperspaces were found, validated and pasted into your custom strategy.
|
The default Hyperopt Search Space, used when no `--space` command line option is specified, does not include the `trailing` hyperspace. We recommend you to run optimization for the `trailing` hyperspace separately, when the best parameters for other hyperspaces were found, validated and pasted into your custom strategy.
|
||||||
|
|||||||
@@ -44,9 +44,24 @@ You may also use something like `.*DOWN/BTC` or `.*UP/BTC` to exclude leveraged
|
|||||||
|
|
||||||
By default, the `StaticPairList` method is used, which uses a statically defined pair whitelist from the configuration. The pairlist also supports wildcards (in regex-style) - so `.*/BTC` will include all pairs with BTC as a stake.
|
By default, the `StaticPairList` method is used, which uses a statically defined pair whitelist from the configuration. The pairlist also supports wildcards (in regex-style) - so `.*/BTC` will include all pairs with BTC as a stake.
|
||||||
|
|
||||||
It uses configuration from `exchange.pair_whitelist` and `exchange.pair_blacklist`.
|
It uses configuration from `exchange.pair_whitelist` and `exchange.pair_blacklist`, which in the below example, will trade BTC/USDT and ETH/USDT - and will prevent BNB/USDT trading.
|
||||||
|
|
||||||
|
Both `pair_*list` parameters support regex - so values like `.*/USDT` would enable trading all pairs that are not in the blacklist.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
|
"exchange": {
|
||||||
|
"name": "...",
|
||||||
|
// ...
|
||||||
|
"pair_whitelist": [
|
||||||
|
"BTC/USDT",
|
||||||
|
"ETH/USDT",
|
||||||
|
// ...
|
||||||
|
],
|
||||||
|
"pair_blacklist": [
|
||||||
|
"BNB/USDT",
|
||||||
|
// ...
|
||||||
|
]
|
||||||
|
},
|
||||||
"pairlists": [
|
"pairlists": [
|
||||||
{"method": "StaticPairList"}
|
{"method": "StaticPairList"}
|
||||||
],
|
],
|
||||||
@@ -377,6 +392,9 @@ If an incorrect category string is chosen, the plugin will print the available c
|
|||||||
!!! Warning "Many categories"
|
!!! Warning "Many categories"
|
||||||
Each added category corresponds to one API call to CoinGecko. The more categories you add, the longer the pairlist generation will take, potentially causing rate limit issues.
|
Each added category corresponds to one API call to CoinGecko. The more categories you add, the longer the pairlist generation will take, potentially causing rate limit issues.
|
||||||
|
|
||||||
|
!!! Danger "Duplicate symbols in coingecko"
|
||||||
|
Coingecko often has duplicate symbols, where the same symbol is used for different coins. Freqtrade will use the symbol as is and try to search for it on the exchange. If the symbol exists - it will be used. Freqtrade will however not check if the _intended_ symbol is the one coingecko meant. This can sometimes lead to unexpected results, especially on low volume coins or with meme coin categories.
|
||||||
|
|
||||||
#### AgeFilter
|
#### AgeFilter
|
||||||
|
|
||||||
Removes pairs that have been listed on the exchange for less than `min_days_listed` days (defaults to `10`) or more than `max_days_listed` days (defaults `None` mean infinity).
|
Removes pairs that have been listed on the exchange for less than `min_days_listed` days (defaults to `10`) or more than `max_days_listed` days (defaults `None` mean infinity).
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ This section will highlight a few projects from members of the community.
|
|||||||
The projects below are for the most part not maintained by the freqtrade , therefore use your own caution before using them.
|
The projects below are for the most part not maintained by the freqtrade , therefore use your own caution before using them.
|
||||||
|
|
||||||
- [Example freqtrade strategies](https://github.com/freqtrade/freqtrade-strategies/)
|
- [Example freqtrade strategies](https://github.com/freqtrade/freqtrade-strategies/)
|
||||||
- [FrequentHippo - Grafana dashboard with dry/live runs and backtests](http://frequenthippo.ddns.net:3000/) (by hippocritical).
|
- [FrequentHippo - Statistics of dry/live runs and backtests](http://frequenthippo.ddns.net) (by hippocritical).
|
||||||
- [Online pairlist generator](https://remotepairlist.com/) (by Blood4rc).
|
- [Online pairlist generator](https://remotepairlist.com/) (by Blood4rc).
|
||||||
- [Freqtrade Backtesting Project](https://strat.ninja/) (by Blood4rc).
|
- [Freqtrade Backtesting Project](https://strat.ninja/) (by Blood4rc).
|
||||||
- [Freqtrade analysis notebook](https://github.com/froggleston/freqtrade_analysis_notebook) (by Froggleston).
|
- [Freqtrade analysis notebook](https://github.com/froggleston/freqtrade_analysis_notebook) (by Froggleston).
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
## Exit logic comparisons
|
||||||
|
|
||||||
|
Freqtrade allows your strategy to implement different exit logic using signal-based or callback-based functions.
|
||||||
|
This section aims to compare each different function, helping you to choose the one that best fits your needs.
|
||||||
|
|
||||||
|
* **`populate_exit_trend()`** - Vectorized signal-based exit logic using indicators in the main dataframe
|
||||||
|
✅ **Use** to define exit signals based on indicators or other data that can be calculated in a vectorized manner.
|
||||||
|
🚫 **Don't use** to customize exit conditions for each individual trade, or if trade data is necessary to make an exit decision.
|
||||||
|
* **`custom_exit()`** - Custom exit logic that will fully exit a trade immediately, called for every open trade at every bot loop iteration until a trade is closed.
|
||||||
|
✅ **Use** to specify exit conditions for each individual trade (including any additional adjusted orders using `adjust_trade_position()`), or if trade data is necessary to make an exit decision, e.g. using profit data to exit.
|
||||||
|
🚫 **Don't use** when you want to exit using vectorised indicator-based data (use a `populate_exit_trend()` signal instead), or as a proxy for `custom_stoploss()`, and be aware that rate-based exits in backtesting can be inaccurate.
|
||||||
|
* **`custom_stoploss()`** - Custom trailing stoploss, called for every open trade every iteration until a trade is closed. The value returned here is also used for [stoploss on exchange](stoploss.md#stop-loss-on-exchangefreqtrade).
|
||||||
|
✅ **Use** to customize the stoploss logic to set a dynamic stoploss based on trade data or other conditions.
|
||||||
|
🚫 **Don't use** to exit a trade immediately based on a specific condition. Use `custom_exit()` for that purpose.
|
||||||
|
* **`custom_roi()`** - Custom ROI, called for every open trade every iteration until a trade is closed.
|
||||||
|
✅ **Use** to specify a minimum ROI threshold ("take-profit") to exit a trade at this ROI level at some point within the trade duration, based on profit or other conditions.
|
||||||
|
🚫 **Don't use** to exit a trade immediately based on a specific condition. Use `custom_exit()`.
|
||||||
|
🚫 **Don't use** for static ROI. Use `minimal_roi`.
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||

|

|
||||||
|
|
||||||
[](https://github.com/freqtrade/freqtrade/actions/)
|
[](https://github.com/freqtrade/freqtrade/actions/)
|
||||||
[](https://doi.org/10.21105/joss.04864)
|
[](https://doi.org/10.21105/joss.04864)
|
||||||
[](https://coveralls.io/github/freqtrade/freqtrade?branch=develop)
|
[](https://coveralls.io/github/freqtrade/freqtrade?branch=develop)
|
||||||
[](https://codeclimate.com/github/freqtrade/freqtrade/maintainability)
|
[](https://codeclimate.com/github/freqtrade/freqtrade/maintainability)
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ OS Specific steps are listed first, the common section below is necessary for al
|
|||||||
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install python3-venv libatlas-base-dev cmake curl
|
sudo apt-get install python3-venv libatlas-base-dev cmake curl libffi-dev
|
||||||
# Use piwheels.org to speed up installation
|
# Use piwheels.org to speed up installation
|
||||||
sudo echo "[global]\nextra-index-url=https://www.piwheels.org/simple" > tee /etc/pip.conf
|
sudo echo "[global]\nextra-index-url=https://www.piwheels.org/simple" > tee /etc/pip.conf
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -82,7 +82,7 @@ Each market(trading pair), keeps collateral in a separate account
|
|||||||
"margin_mode": "isolated"
|
"margin_mode": "isolated"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Cross margin mode (currently unavailable)
|
#### Cross margin mode
|
||||||
|
|
||||||
One account is used to share collateral between markets (trading pairs). Margin is taken from total account balance to avoid liquidation when needed.
|
One account is used to share collateral between markets (trading pairs). Margin is taken from total account balance to avoid liquidation when needed.
|
||||||
|
|
||||||
|
|||||||
+71
-70
@@ -1,23 +1,21 @@
|
|||||||
# Lookahead analysis
|
# Lookahead analysis
|
||||||
|
|
||||||
This page explains how to validate your strategy in terms of look ahead bias.
|
This page explains how to validate your strategy in terms of lookahead bias.
|
||||||
|
|
||||||
Checking look ahead bias is the bane of any strategy since it is sometimes very easy to introduce backtest bias -
|
Lookahead bias is the bane of any strategy since it is sometimes very easy to introduce this bias, but can be very hard to detect.
|
||||||
but very hard to detect.
|
|
||||||
|
|
||||||
Backtesting initializes all timestamps at once and calculates all indicators in the beginning.
|
Backtesting initializes all timestamps (loads the whole dataframe into memory) and calculates all indicators at once.
|
||||||
This means that if your indicators or entry/exit signals could look into future candles and falsify your backtest.
|
This means that if your indicators or entry/exit signals look into future candles, this will falsify your backtest.
|
||||||
|
|
||||||
Lookahead-analysis requires historic data to be available.
|
The `lookahead-analysis` command requires historic data to be available.
|
||||||
To learn how to get data for the pairs and exchange you're interested in,
|
To learn how to get data for the pairs and exchange you're interested in,
|
||||||
head over to the [Data Downloading](data-download.md) section of the documentation.
|
head over to the [Data Downloading](data-download.md) section of the documentation.
|
||||||
|
`lookahead-analysis` also supports freqai strategies.
|
||||||
|
|
||||||
This command is built upon backtesting since it internally chains backtests and pokes at the strategy to provoke it to show look ahead bias.
|
This command internally chains backtests and pokes at the strategy to provoke it to show lookahead bias.
|
||||||
This is done by not looking at the strategy itself - but at the results it returned.
|
This is done by not looking at the strategy code itself, but at changed indicator values and moved entries/exits compared to the full backtest.
|
||||||
The results are things like changed indicator-values and moved entries/exits compared to the full backtest.
|
|
||||||
|
|
||||||
You can use commands of [Backtesting](backtesting.md).
|
`lookahead-analysis` can use the typical options of [Backtesting](backtesting.md), but forces the following options:
|
||||||
It also supports the lookahead-analysis of freqai strategies.
|
|
||||||
|
|
||||||
- `--cache` is forced to "none".
|
- `--cache` is forced to "none".
|
||||||
- `--max-open-trades` is forced to be at least equal to the number of pairs.
|
- `--max-open-trades` is forced to be at least equal to the number of pairs.
|
||||||
@@ -25,80 +23,83 @@ It also supports the lookahead-analysis of freqai strategies.
|
|||||||
- `--stake-amount` is forced to be a static 10000 (10k).
|
- `--stake-amount` is forced to be a static 10000 (10k).
|
||||||
- `--enable-protections` is forced to be off.
|
- `--enable-protections` is forced to be off.
|
||||||
|
|
||||||
Those are set to avoid users accidentally generating false positives.
|
These are set to avoid users accidentally generating false positives.
|
||||||
|
|
||||||
## Lookahead-analysis command reference
|
## Lookahead-analysis command reference
|
||||||
|
|
||||||
```
|
--8<-- "commands/lookahead-analysis.md"
|
||||||
usage: freqtrade lookahead-analysis [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH] [-s NAME]
|
|
||||||
[--strategy-path PATH]
|
|
||||||
[--recursive-strategy-search]
|
|
||||||
[--freqaimodel NAME]
|
|
||||||
[--freqaimodel-path PATH] [-i TIMEFRAME]
|
|
||||||
[--timerange TIMERANGE]
|
|
||||||
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
|
|
||||||
[--max-open-trades INT]
|
|
||||||
[--stake-amount STAKE_AMOUNT]
|
|
||||||
[--fee FLOAT] [-p PAIRS [PAIRS ...]]
|
|
||||||
[--dry-run-wallet DRY_RUN_WALLET]
|
|
||||||
[--timeframe-detail TIMEFRAME_DETAIL]
|
|
||||||
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
|
|
||||||
[--export {none,trades,signals}]
|
|
||||||
[--export-filename PATH]
|
|
||||||
[--breakdown {day,week,month} [{day,week,month} ...]]
|
|
||||||
[--cache {none,day,week,month}]
|
|
||||||
[--freqai-backtest-live-models]
|
|
||||||
[--minimum-trade-amount INT]
|
|
||||||
[--targeted-trade-amount INT]
|
|
||||||
[--lookahead-analysis-exportfilename LOOKAHEAD_ANALYSIS_EXPORTFILENAME]
|
|
||||||
|
|
||||||
options:
|
!!! Note
|
||||||
--minimum-trade-amount INT
|
The above output was reduced to options that `lookahead-analysis` adds on top of regular backtesting commands.
|
||||||
Minimum trade amount for lookahead-analysis
|
|
||||||
--targeted-trade-amount INT
|
|
||||||
Targeted trade amount for lookahead analysis
|
|
||||||
--lookahead-analysis-exportfilename LOOKAHEAD_ANALYSIS_EXPORTFILENAME
|
|
||||||
Use this csv-filename to store lookahead-analysis-
|
|
||||||
results
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! Note ""
|
|
||||||
The above Output was reduced to options `lookahead-analysis` adds on top of regular backtesting commands.
|
|
||||||
|
|
||||||
### Summary
|
|
||||||
|
|
||||||
Checks a given strategy for look ahead bias via lookahead-analysis
|
|
||||||
Look ahead bias means that the backtest uses data from future candles thereby not making it viable beyond backtesting
|
|
||||||
and producing false hopes for the one backtesting.
|
|
||||||
|
|
||||||
### Introduction
|
### Introduction
|
||||||
|
|
||||||
Many strategies - without the programmer knowing - have fallen prey to look ahead bias.
|
Many strategies, without the programmer knowing, have fallen prey to lookahead bias.
|
||||||
|
This typically makes the strategy backtest look profitable, sometimes to extremes, but this is not realistic as the strategy is "cheating" by looking at data it would not have in dry or live modes.
|
||||||
|
|
||||||
Any backtest will populate the full dataframe including all time stamps at the beginning.
|
The reason why strategies can "cheat" is because the freqtrade backtesting process populates the full dataframe including all candle timestamps at the outset.
|
||||||
If the programmer is not careful or oblivious how things work internally
|
If the programmer is not careful or oblivious how things work internally
|
||||||
(which sometimes can be really hard to find out) then it will just look into the future making the strategy amazing
|
(which sometimes can be really hard to find out) then the strategy will look into the future.
|
||||||
but not realistic.
|
|
||||||
|
|
||||||
This command is made to try to verify the validity in the form of the aforementioned look ahead bias.
|
This command is made to try to verify the validity in the form of the aforementioned lookahead bias.
|
||||||
|
|
||||||
### How does the command work?
|
### How does the command work?
|
||||||
|
|
||||||
It will start with a backtest of all pairs to generate a baseline for indicators and entries/exits.
|
It will start with a backtest of all pairs to generate a baseline for indicators and entries/exits.
|
||||||
After the backtest ran, it will look if the `minimum-trade-amount` is met
|
After this initial backtest runs, it will look if the `minimum-trade-amount` is met and if not cancel the lookahead-analysis for this strategy.
|
||||||
and if not cancel the lookahead-analysis for this strategy.
|
If this happens, use a wider timerange to get more trades for the analysis, or use a timerange where more trades occur.
|
||||||
|
|
||||||
After setting the baseline it will then do additional runs for every entry and exit separately.
|
After setting the baseline it will then do additional backtest runs for every entry and exit separately.
|
||||||
When a verification-backtest is done, it will compare the indicators as the signal (either entry or exit) and report the bias.
|
When these verification backtests complete, it will compare the indicators at the signal candles (both entry or exit)
|
||||||
After all signals have been verified or falsified a result-table will be generated for the user to see.
|
and report the bias.
|
||||||
|
After all signals have been verified or falsified a result table will be generated for the user to see.
|
||||||
|
|
||||||
|
### How to find and remove bias? How can I salvage a biased strategy?
|
||||||
|
|
||||||
|
If you found a biased strategy online and want to have the same results, just without bias,
|
||||||
|
then you will be out of luck most of the time.
|
||||||
|
Usually the bias in the strategy is THE driving factor for "too good to be true" profits.
|
||||||
|
Removing conditions or indicators that push the profits up from bias will usually make the strategy significantly worse.
|
||||||
|
You might be able to salvage it partially if the biased indicators or conditions are not the core of the strategy, or there
|
||||||
|
are other entry and exit signals that are not biased.
|
||||||
|
|
||||||
|
### Examples of lookahead-bias
|
||||||
|
|
||||||
|
- `shift(-10)` looks 10 candles into the future.
|
||||||
|
- Using `iloc[]` in populate_* functions to access a specific row in the dataframe.
|
||||||
|
- For-loops are prone to introduce lookahead bias if you don't tightly control which numbers are looped through.
|
||||||
|
- Aggregation functions like `.mean()`, `.min()` and `.max()`, without a rolling window,
|
||||||
|
will calculate the value over the **whole** dataframe, so the signal candle will "see" a value including future candles.
|
||||||
|
A non-biased example would be to look back candles using `rolling()` instead:
|
||||||
|
e.g. `dataframe['volume_mean_12'] = dataframe['volume'].rolling(12).mean()`
|
||||||
|
- `ta.MACD(dataframe, 12, 26, 1)` will introduce bias with a signalperiod of 1.
|
||||||
|
|
||||||
|
### What do the columns in the results table mean?
|
||||||
|
|
||||||
|
- `filename`: name of the checked strategy file
|
||||||
|
- `strategy`: checked strategy class name
|
||||||
|
- `has_bias`: result of the lookahead-analysis. `No` would be good, `Yes` would be bad.
|
||||||
|
- `total_signals`: number of checked signals (default is 20)
|
||||||
|
- `biased_entry_signals`: found bias in that many entries
|
||||||
|
- `biased_exit_signals`: found bias in that many exits
|
||||||
|
- `biased_indicators`: shows you the indicators themselves that are defined in populate_indicators
|
||||||
|
|
||||||
|
You might get false positives in the `biased_exit_signals` if you have biased entry signals paired with those exits.
|
||||||
|
However, a biased entry will usually result in a biased exit too,
|
||||||
|
even if the exit itself does not produce the bias -
|
||||||
|
especially if your entry and exit conditions use the same biased indicator.
|
||||||
|
|
||||||
|
**Address the bias in the entries first, then address the exits.**
|
||||||
|
|
||||||
### Caveats
|
### Caveats
|
||||||
|
|
||||||
- `lookahead-analysis` can only verify / falsify the trades it calculated and verified.
|
- `lookahead-analysis` can only verify / falsify the trades it calculated and verified.
|
||||||
If the strategy has many different signals / signal types, it's up to you to select appropriate parameters to ensure that all signals have triggered at least once. Not triggered signals will not have been verified.
|
If the strategy has many different signals / signal types, it's up to you to select appropriate parameters to ensure that all signals have triggered at least once. Signals that are not triggered will not have been verified.
|
||||||
This could lead to a false-negative (the strategy will then be reported as non-biased).
|
This would lead to a false-negative, i.e. the strategy will be reported as non-biased.
|
||||||
- `lookahead-analysis` has access to everything that backtesting has too.
|
- `lookahead-analysis` has access to the same backtesting options and this can introduce problems.
|
||||||
Please don't provoke any configs like enabling position stacking.
|
Please don't use any options like enabling position stacking as this will distort the number of checked signals.
|
||||||
If you decide to do so, then make doubly sure that you won't ever run out of `max_open_trades` amount and neither leftover money in your wallet.
|
If you decide to do so, then make doubly sure that you won't ever run out of `max_open_trades` slots,
|
||||||
- In the results table, the `biased_indicators` column will falsely flag FreqAI target indicators defined in `set_freqai_targets()` as biased. These are not biased and can safely be ignored.
|
and that you have enough capital in the backtest wallet configuration.
|
||||||
|
- In the results table, the `biased_indicators` column
|
||||||
|
will falsely flag FreqAI target indicators defined in `set_freqai_targets()` as biased.
|
||||||
|
**These are not biased and can safely be ignored.**
|
||||||
|
|||||||
+2
-126
@@ -30,76 +30,7 @@ The `freqtrade plot-dataframe` subcommand shows an interactive graph with three
|
|||||||
|
|
||||||
Possible arguments:
|
Possible arguments:
|
||||||
|
|
||||||
```
|
--8<-- "commands/plot-dataframe.md"
|
||||||
usage: freqtrade plot-dataframe [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH] [-s NAME]
|
|
||||||
[--strategy-path PATH] [-p PAIRS [PAIRS ...]]
|
|
||||||
[--indicators1 INDICATORS1 [INDICATORS1 ...]]
|
|
||||||
[--indicators2 INDICATORS2 [INDICATORS2 ...]]
|
|
||||||
[--plot-limit INT] [--db-url PATH]
|
|
||||||
[--trade-source {DB,file}] [--export EXPORT]
|
|
||||||
[--export-filename PATH]
|
|
||||||
[--timerange TIMERANGE] [-i TIMEFRAME]
|
|
||||||
[--no-trades]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
|
||||||
Limit command to these pairs. Pairs are space-
|
|
||||||
separated.
|
|
||||||
--indicators1 INDICATORS1 [INDICATORS1 ...]
|
|
||||||
Set indicators from your strategy you want in the
|
|
||||||
first row of the graph. Space-separated list. Example:
|
|
||||||
`ema3 ema5`. Default: `['sma', 'ema3', 'ema5']`.
|
|
||||||
--indicators2 INDICATORS2 [INDICATORS2 ...]
|
|
||||||
Set indicators from your strategy you want in the
|
|
||||||
third row of the graph. Space-separated list. Example:
|
|
||||||
`fastd fastk`. Default: `['macd', 'macdsignal']`.
|
|
||||||
--plot-limit INT Specify tick limit for plotting. Notice: too high
|
|
||||||
values cause huge files. Default: 750.
|
|
||||||
--db-url PATH Override trades database URL, this is useful in custom
|
|
||||||
deployments (default: `sqlite:///tradesv3.sqlite` for
|
|
||||||
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
|
|
||||||
Dry Run).
|
|
||||||
--trade-source {DB,file}
|
|
||||||
Specify the source for trades (Can be DB or file
|
|
||||||
(backtest file)) Default: file
|
|
||||||
--export EXPORT Export backtest results, argument are: trades.
|
|
||||||
Example: `--export=trades`
|
|
||||||
--export-filename PATH
|
|
||||||
Save backtest results to the file with this filename.
|
|
||||||
Requires `--export` to be set as well. Example:
|
|
||||||
`--export-filename=user_data/backtest_results/backtest
|
|
||||||
_today.json`
|
|
||||||
--timerange TIMERANGE
|
|
||||||
Specify what timerange of data to use.
|
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
|
||||||
--no-trades Skip using trades from backtesting file and DB.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
Strategy arguments:
|
|
||||||
-s NAME, --strategy NAME
|
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@@ -306,62 +237,7 @@ The forth graph can help you analyze trade parallelism, showing how often max_op
|
|||||||
|
|
||||||
Possible options for the `freqtrade plot-profit` subcommand:
|
Possible options for the `freqtrade plot-profit` subcommand:
|
||||||
|
|
||||||
```
|
--8<-- "commands/plot-profit.md"
|
||||||
usage: freqtrade plot-profit [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH] [-s NAME]
|
|
||||||
[--strategy-path PATH] [-p PAIRS [PAIRS ...]]
|
|
||||||
[--timerange TIMERANGE] [--export EXPORT]
|
|
||||||
[--export-filename PATH] [--db-url PATH]
|
|
||||||
[--trade-source {DB,file}] [-i TIMEFRAME]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
|
||||||
Limit command to these pairs. Pairs are space-
|
|
||||||
separated.
|
|
||||||
--timerange TIMERANGE
|
|
||||||
Specify what timerange of data to use.
|
|
||||||
--export EXPORT Export backtest results, argument are: trades.
|
|
||||||
Example: `--export=trades`
|
|
||||||
--export-filename PATH, --backtest-filename PATH
|
|
||||||
Use backtest results from this filename.
|
|
||||||
Requires `--export` to be set as well. Example:
|
|
||||||
`--export-filename=user_data/backtest_results/backtest
|
|
||||||
_today.json`
|
|
||||||
--db-url PATH Override trades database URL, this is useful in custom
|
|
||||||
deployments (default: `sqlite:///tradesv3.sqlite` for
|
|
||||||
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
|
|
||||||
Dry Run).
|
|
||||||
--trade-source {DB,file}
|
|
||||||
Specify the source for trades (Can be DB or file
|
|
||||||
(backtest file)) Default: file
|
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
|
||||||
--auto-open Automatically open generated plot.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
Strategy arguments:
|
|
||||||
-s NAME, --strategy NAME
|
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
The `-p/--pairs` argument, can be used to limit the pairs that are considered for this calculation.
|
The `-p/--pairs` argument, can be used to limit the pairs that are considered for this calculation.
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ Enable subscribing to an instance by adding the `external_message_consumer` sect
|
|||||||
| `ping_timeout` | Ping timeout <br>*Defaults to `10`.*<br> **Datatype:** Integer - in seconds.
|
| `ping_timeout` | Ping timeout <br>*Defaults to `10`.*<br> **Datatype:** Integer - in seconds.
|
||||||
| `sleep_time` | Sleep time before retrying to connect.<br>*Defaults to `10`.*<br> **Datatype:** Integer - in seconds.
|
| `sleep_time` | Sleep time before retrying to connect.<br>*Defaults to `10`.*<br> **Datatype:** Integer - in seconds.
|
||||||
| `remove_entry_exit_signals` | Remove signal columns from the dataframe (set them to 0) on dataframe receipt.<br>*Defaults to `false`.*<br> **Datatype:** Boolean.
|
| `remove_entry_exit_signals` | Remove signal columns from the dataframe (set them to 0) on dataframe receipt.<br>*Defaults to `false`.*<br> **Datatype:** Boolean.
|
||||||
|
| `initial_candle_limit` | Initial candles to expect from the Producer.<br>*Defaults to `1500`.*<br> **Datatype:** Integer - Number of candles.
|
||||||
| `message_size_limit` | Size limit per message<br>*Defaults to `8`.*<br> **Datatype:** Integer - Megabytes.
|
| `message_size_limit` | Size limit per message<br>*Defaults to `8`.*<br> **Datatype:** Integer - Megabytes.
|
||||||
|
|
||||||
Instead of (or as well as) calculating indicators in `populate_indicators()` the follower instance listens on the connection to a producer instance's messages (or multiple producer instances in advanced configurations) and requests the producer's most recently analyzed dataframes for each pair in the active whitelist.
|
Instead of (or as well as) calculating indicators in `populate_indicators()` the follower instance listens on the connection to a producer instance's messages (or multiple producer instances in advanced configurations) and requests the producer's most recently analyzed dataframes for each pair in the active whitelist.
|
||||||
|
|||||||
@@ -26,56 +26,7 @@ In addition to the recursive formula check, this command also carries out a simp
|
|||||||
|
|
||||||
## Recursive-analysis command reference
|
## Recursive-analysis command reference
|
||||||
|
|
||||||
```
|
--8<-- "commands/recursive-analysis.md"
|
||||||
usage: freqtrade recursive-analysis [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH] [-s NAME]
|
|
||||||
[--strategy-path PATH]
|
|
||||||
[--recursive-strategy-search]
|
|
||||||
[--freqaimodel NAME]
|
|
||||||
[--freqaimodel-path PATH] [-i TIMEFRAME]
|
|
||||||
[--timerange TIMERANGE]
|
|
||||||
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
|
|
||||||
[-p PAIR]
|
|
||||||
[--freqai-backtest-live-models]
|
|
||||||
[--startup-candle STARTUP_CANDLES [STARTUP_CANDLES ...]]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
|
||||||
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
|
|
||||||
Storage format for downloaded candle (OHLCV) data.
|
|
||||||
(default: `feather`).
|
|
||||||
-p PAIR, --pairs PAIR
|
|
||||||
Limit command to this pair.
|
|
||||||
--startup-candle STARTUP_CANDLE [STARTUP_CANDLE ...]
|
|
||||||
Provide a space-separated list of startup_candle_count to
|
|
||||||
be checked. Default : `199 399 499 999 1999`.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
Strategy arguments:
|
|
||||||
-s NAME, --strategy NAME
|
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
|
||||||
--timerange TIMERANGE
|
|
||||||
Specify what timerange of data to use.
|
|
||||||
```
|
|
||||||
|
|
||||||
### Why are odd-numbered default startup candles used?
|
### Why are odd-numbered default startup candles used?
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
markdown==3.7
|
markdown==3.8
|
||||||
mkdocs==1.6.1
|
mkdocs==1.6.1
|
||||||
mkdocs-material==9.5.49
|
mkdocs-material==9.6.14
|
||||||
mdx_truly_sane_lists==1.3
|
mdx_truly_sane_lists==1.3
|
||||||
pymdown-extensions==10.12
|
pymdown-extensions==10.15
|
||||||
jinja2==3.1.5
|
jinja2==3.1.6
|
||||||
mike==2.1.3
|
mike==2.1.3
|
||||||
|
|||||||
@@ -268,6 +268,9 @@ show_config
|
|||||||
start
|
start
|
||||||
Start the bot if it's in the stopped state.
|
Start the bot if it's in the stopped state.
|
||||||
|
|
||||||
|
pause
|
||||||
|
Pause the bot if it's in the running state. If triggered on stopped state will handle open positions.
|
||||||
|
|
||||||
stats
|
stats
|
||||||
Return the stats report (durations, sell-reasons).
|
Return the stats report (durations, sell-reasons).
|
||||||
|
|
||||||
@@ -302,6 +305,19 @@ trades
|
|||||||
:param limit: Limits trades to the X last trades. Max 500 trades.
|
:param limit: Limits trades to the X last trades. Max 500 trades.
|
||||||
:param offset: Offset by this amount of trades.
|
:param offset: Offset by this amount of trades.
|
||||||
|
|
||||||
|
list_open_trades_custom_data
|
||||||
|
Return a dict containing open trades custom-datas
|
||||||
|
|
||||||
|
:param key: str, optional - Key of the custom-data
|
||||||
|
:param limit: Limits trades to X trades.
|
||||||
|
:param offset: Offset by this amount of trades.
|
||||||
|
|
||||||
|
list_custom_data
|
||||||
|
Return a dict containing custom-datas of a specified trade
|
||||||
|
|
||||||
|
:param trade_id: int - ID of the trade
|
||||||
|
:param key: str, optional - Key of the custom-data
|
||||||
|
|
||||||
version
|
version
|
||||||
Return the version of the bot.
|
Return the version of the bot.
|
||||||
|
|
||||||
@@ -320,6 +336,7 @@ All endpoints in the below table need to be prefixed with the base URL of the AP
|
|||||||
|-----------|--------|--------------------------|
|
|-----------|--------|--------------------------|
|
||||||
| `/ping` | GET | Simple command testing the API Readiness - requires no authentication.
|
| `/ping` | GET | Simple command testing the API Readiness - requires no authentication.
|
||||||
| `/start` | POST | Starts the trader.
|
| `/start` | POST | Starts the trader.
|
||||||
|
| `/pause` | POST | Pause the trader. Gracefully handle open trades according to their rules. Do not enter new positions.
|
||||||
| `/stop` | POST | Stops the trader.
|
| `/stop` | POST | Stops the trader.
|
||||||
| `/stopbuy` | POST | Stops the trader from opening new trades. Gracefully closes open trades according to their rules.
|
| `/stopbuy` | POST | Stops the trader from opening new trades. Gracefully closes open trades according to their rules.
|
||||||
| `/reload_config` | POST | Reloads the configuration file.
|
| `/reload_config` | POST | Reloads the configuration file.
|
||||||
|
|||||||
+6
-4
@@ -154,10 +154,10 @@ For example, simplified math:
|
|||||||
|
|
||||||
In summary: The stoploss will be adjusted to be always be -10% of the highest observed price.
|
In summary: The stoploss will be adjusted to be always be -10% of the highest observed price.
|
||||||
|
|
||||||
### Trailing stop loss, custom positive loss
|
### Trailing stop loss, different positive loss
|
||||||
|
|
||||||
You could also have a default stop loss when you are in the red with your buy (buy - fee), but once you hit a positive result (or an offset you define) the system will utilize a new stop loss, which can have a different value.
|
You could also have a default stop loss when you are in the red with your buy (buy - fee), but once you hit a positive result (or an offset you define) the system will utilize a new stop loss, with a different value.
|
||||||
For example, your default stop loss is -10%, but once you have more than 0% profit (example 0.1%) a different trailing stoploss will be used.
|
For example, your default stop loss is -10%, but once you have reached profitability (example 0.1%) a different trailing stoploss will be used.
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
If you want the stoploss to only be changed when you break even of making a profit (what most users want) please refer to next section with [offset enabled](#trailing-stop-loss-only-once-the-trade-has-reached-a-certain-offset).
|
If you want the stoploss to only be changed when you break even of making a profit (what most users want) please refer to next section with [offset enabled](#trailing-stop-loss-only-once-the-trade-has-reached-a-certain-offset).
|
||||||
@@ -208,7 +208,9 @@ Before this, `stoploss` is used for the trailing stoploss.
|
|||||||
|
|
||||||
You can also keep a static stoploss until the offset is reached, and then trail the trade to take profits once the market turns.
|
You can also keep a static stoploss until the offset is reached, and then trail the trade to take profits once the market turns.
|
||||||
|
|
||||||
If `trailing_only_offset_is_reached = True` then the trailing stoploss is only activated once the offset is reached. Until then, the stoploss remains at the configured `stoploss`.
|
If `trailing_only_offset_is_reached = True` then the trailing stoploss is only activated once the offset is reached. Until then, the stoploss remains at the configured `stoploss` and is not trailing.
|
||||||
|
Leaving this value as `trailing_only_offset_is_reached=False` will allow the trailing stoploss to start trailing as soon as the asset price increases above the initial entry price.
|
||||||
|
|
||||||
This option can be used with or without `trailing_stop_positive`, but uses `trailing_stop_positive_offset` as offset.
|
This option can be used with or without `trailing_stop_positive`, but uses `trailing_stop_positive_offset` as offset.
|
||||||
|
|
||||||
Configuration (offset is buy-price + 3%):
|
Configuration (offset is buy-price + 3%):
|
||||||
|
|||||||
@@ -79,6 +79,8 @@ import talib.abstract as ta
|
|||||||
|
|
||||||
class MyStrategy(IStrategy):
|
class MyStrategy(IStrategy):
|
||||||
|
|
||||||
|
timeframe = '15m'
|
||||||
|
|
||||||
# set the initial stoploss to -10%
|
# set the initial stoploss to -10%
|
||||||
stoploss = -0.10
|
stoploss = -0.10
|
||||||
|
|
||||||
@@ -163,18 +165,23 @@ If there is any significant difference, verify that your entry and exit signals
|
|||||||
|
|
||||||
## Controlling or monitoring a running bot
|
## Controlling or monitoring a running bot
|
||||||
|
|
||||||
Once your bot is running in dry or live mode, Freqtrade has five mechanisms to control or monitor a running bot:
|
Once your bot is running in dry or live mode, Freqtrade has six mechanisms to control or monitor a running bot:
|
||||||
|
|
||||||
- **[FreqUI](freq-ui.md)**: The easiest to get started with, FreqUI is a web interface to see and control current activity of your bot.
|
- **[FreqUI](freq-ui.md)**: The easiest to get started with, FreqUI is a web interface to see and control current activity of your bot.
|
||||||
- **[Telegram](telegram-usage.md)**: On mobile devices, Telegram integration is available to get alerts about your bot activity and to control certain aspects.
|
- **[Telegram](telegram-usage.md)**: On mobile devices, Telegram integration is available to get alerts about your bot activity and to control certain aspects.
|
||||||
- **[FTUI](https://github.com/freqtrade/ftui)**: FTUI is a terminal (command line) interface to Freqtrade, and allows monitoring of a running bot only.
|
- **[FTUI](https://github.com/freqtrade/ftui)**: FTUI is a terminal (command line) interface to Freqtrade, and allows monitoring of a running bot only.
|
||||||
- **[REST API](rest-api.md)**: The REST API allows programmers to develop their own tools to interact with a Freqtrade bot.
|
- **[freqtrade-client](rest-api.md#consuming-the-api)**: A python implementation of the REST API, making it easy to make requests and consume bot responses from your python apps or the command line.
|
||||||
|
- **[REST API endpoints](rest-api.md#available-endpoints)**: The REST API allows programmers to develop their own tools to interact with a Freqtrade bot.
|
||||||
- **[Webhooks](webhook-config.md)**: Freqtrade can send information to other services, e.g. discord, by webhooks.
|
- **[Webhooks](webhook-config.md)**: Freqtrade can send information to other services, e.g. discord, by webhooks.
|
||||||
|
|
||||||
### Logs
|
### Logs
|
||||||
|
|
||||||
Freqtrade generates extensive debugging logs to help you understand what's happening. Please familiarise yourself with the information and error messages you might see in your bot logs.
|
Freqtrade generates extensive debugging logs to help you understand what's happening. Please familiarise yourself with the information and error messages you might see in your bot logs.
|
||||||
|
|
||||||
|
Logging by default occurs on standard out (the command line). If you want to write out to a file instead, many freqtrade commands, including the `trade` command, accept the `--logfile` option to write to a file.
|
||||||
|
|
||||||
|
Check the [FAQ](faq.md#how-do-i-search-the-bot-logs-for-something) for examples.
|
||||||
|
|
||||||
## Final Thoughts
|
## Final Thoughts
|
||||||
|
|
||||||
Algo trading is difficult, and most public strategies are not good performers due to the time and effort to make a strategy work profitably in multiple scenarios.
|
Algo trading is difficult, and most public strategies are not good performers due to the time and effort to make a strategy work profitably in multiple scenarios.
|
||||||
|
|||||||
+329
-37
@@ -12,6 +12,7 @@ Currently available callbacks:
|
|||||||
* [`custom_stake_amount()`](#stake-size-management)
|
* [`custom_stake_amount()`](#stake-size-management)
|
||||||
* [`custom_exit()`](#custom-exit-signal)
|
* [`custom_exit()`](#custom-exit-signal)
|
||||||
* [`custom_stoploss()`](#custom-stoploss)
|
* [`custom_stoploss()`](#custom-stoploss)
|
||||||
|
* [`custom_roi()`](#custom-roi)
|
||||||
* [`custom_entry_price()` and `custom_exit_price()`](#custom-order-price-rules)
|
* [`custom_entry_price()` and `custom_exit_price()`](#custom-order-price-rules)
|
||||||
* [`check_entry_timeout()` and `check_exit_timeout()`](#custom-order-timeout-rules)
|
* [`check_entry_timeout()` and `check_exit_timeout()`](#custom-order-timeout-rules)
|
||||||
* [`confirm_trade_entry()`](#trade-entry-buy-order-confirmation)
|
* [`confirm_trade_entry()`](#trade-entry-buy-order-confirmation)
|
||||||
@@ -26,6 +27,9 @@ Currently available callbacks:
|
|||||||
|
|
||||||
--8<-- "includes/strategy-imports.md"
|
--8<-- "includes/strategy-imports.md"
|
||||||
|
|
||||||
|
--8<-- "includes/strategy-exit-comparisons.md"
|
||||||
|
|
||||||
|
|
||||||
## Bot start
|
## Bot start
|
||||||
|
|
||||||
A simple callback which is called once when the strategy is loaded.
|
A simple callback which is called once when the strategy is loaded.
|
||||||
@@ -121,7 +125,7 @@ Freqtrade will fall back to the `proposed_stake` value should your code raise an
|
|||||||
|
|
||||||
Called for open trade every throttling iteration (roughly every 5 seconds) until a trade is closed.
|
Called for open trade every throttling iteration (roughly every 5 seconds) until a trade is closed.
|
||||||
|
|
||||||
Allows to define custom exit signals, indicating that specified position should be sold. This is very useful when we need to customize exit conditions for each individual trade, or if you need trade data to make an exit decision.
|
Allows to define custom exit signals, indicating that specified position should be closed (full exit). This is very useful when we need to customize exit conditions for each individual trade, or if you need trade data to make an exit decision.
|
||||||
|
|
||||||
For example you could implement a 1:2 risk-reward ROI with `custom_exit()`.
|
For example you could implement a 1:2 risk-reward ROI with `custom_exit()`.
|
||||||
|
|
||||||
@@ -178,6 +182,8 @@ Returning `None` will be interpreted as "no desire to change", and is the only s
|
|||||||
|
|
||||||
Stoploss on exchange works similar to `trailing_stop`, and the stoploss on exchange is updated as configured in `stoploss_on_exchange_interval` ([More details about stoploss on exchange](stoploss.md#stop-loss-on-exchangefreqtrade)).
|
Stoploss on exchange works similar to `trailing_stop`, and the stoploss on exchange is updated as configured in `stoploss_on_exchange_interval` ([More details about stoploss on exchange](stoploss.md#stop-loss-on-exchangefreqtrade)).
|
||||||
|
|
||||||
|
If you're on futures markets, please take note of the [stoploss and leverage](stoploss.md#stoploss-and-leverage) section, as the stoploss value returned from `custom_stoploss` is the risk for this trade - not the relative price movement.
|
||||||
|
|
||||||
!!! Note "Use of dates"
|
!!! Note "Use of dates"
|
||||||
All time-based calculations should be done based on `current_time` - using `datetime.now()` or `datetime.utcnow()` is discouraged, as this will break backtesting support.
|
All time-based calculations should be done based on `current_time` - using `datetime.now()` or `datetime.utcnow()` is discouraged, as this will break backtesting support.
|
||||||
|
|
||||||
@@ -233,7 +239,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
|
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
|
||||||
:return float: New stoploss value, relative to the current_rate
|
:return float: New stoploss value, relative to the current_rate
|
||||||
"""
|
"""
|
||||||
return -0.04
|
return -0.04 * trade.leverage
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Time based trailing stop
|
#### Time based trailing stop
|
||||||
@@ -255,9 +261,9 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
# Make sure you have the longest interval first - these conditions are evaluated from top to bottom.
|
# Make sure you have the longest interval first - these conditions are evaluated from top to bottom.
|
||||||
if current_time - timedelta(minutes=120) > trade.open_date_utc:
|
if current_time - timedelta(minutes=120) > trade.open_date_utc:
|
||||||
return -0.05
|
return -0.05 * trade.leverage
|
||||||
elif current_time - timedelta(minutes=60) > trade.open_date_utc:
|
elif current_time - timedelta(minutes=60) > trade.open_date_utc:
|
||||||
return -0.10
|
return -0.10 * trade.leverage
|
||||||
return None
|
return None
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -284,9 +290,9 @@ class AwesomeStrategy(IStrategy):
|
|||||||
return stoploss_from_open(0.10, current_profit, is_short=trade.is_short, leverage=trade.leverage)
|
return stoploss_from_open(0.10, current_profit, is_short=trade.is_short, leverage=trade.leverage)
|
||||||
# Make sure you have the longest interval first - these conditions are evaluated from top to bottom.
|
# Make sure you have the longest interval first - these conditions are evaluated from top to bottom.
|
||||||
if current_time - timedelta(minutes=120) > trade.open_date_utc:
|
if current_time - timedelta(minutes=120) > trade.open_date_utc:
|
||||||
return -0.05
|
return -0.05 * trade.leverage
|
||||||
elif current_time - timedelta(minutes=60) > trade.open_date_utc:
|
elif current_time - timedelta(minutes=60) > trade.open_date_utc:
|
||||||
return -0.10
|
return -0.10 * trade.leverage
|
||||||
return None
|
return None
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -309,10 +315,10 @@ class AwesomeStrategy(IStrategy):
|
|||||||
**kwargs) -> float | None:
|
**kwargs) -> float | None:
|
||||||
|
|
||||||
if pair in ("ETH/BTC", "XRP/BTC"):
|
if pair in ("ETH/BTC", "XRP/BTC"):
|
||||||
return -0.10
|
return -0.10 * trade.leverage
|
||||||
elif pair in ("LTC/BTC"):
|
elif pair in ("LTC/BTC"):
|
||||||
return -0.05
|
return -0.05 * trade.leverage
|
||||||
return -0.15
|
return -0.15 * trade.leverage
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Trailing stoploss with positive offset
|
#### Trailing stoploss with positive offset
|
||||||
@@ -341,7 +347,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
desired_stoploss = current_profit / 2
|
desired_stoploss = current_profit / 2
|
||||||
|
|
||||||
# Use a minimum of 2.5% and a maximum of 5%
|
# Use a minimum of 2.5% and a maximum of 5%
|
||||||
return max(min(desired_stoploss, 0.05), 0.025)
|
return max(min(desired_stoploss, 0.05), 0.025) * trade.leverage
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Stepped stoploss
|
#### Stepped stoploss
|
||||||
@@ -497,6 +503,135 @@ The helper function `stoploss_from_absolute()` can be used to convert from an ab
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Custom ROI
|
||||||
|
|
||||||
|
Called for open trade every iteration (roughly every 5 seconds) until a trade is closed.
|
||||||
|
|
||||||
|
The usage of the custom ROI method must be enabled by setting `use_custom_roi=True` on the strategy object.
|
||||||
|
|
||||||
|
This method allows you to define a custom minimum ROI threshold for exiting a trade, expressed as a ratio (e.g., `0.05` for 5% profit). If both `minimal_roi` and `custom_roi` are defined, the lower of the two thresholds will trigger an exit. For example, if `minimal_roi` is set to `{"0": 0.10}` (10% at 0 minutes) and `custom_roi` returns `0.05`, the trade will exit when the profit reaches 5%. Also, if `custom_roi` returns `0.10` and `minimal_roi` is set to `{"0": 0.05}` (5% at 0 minutes), the trade will be closed when the profit reaches 5%.
|
||||||
|
|
||||||
|
The method must return a float representing the new ROI threshold as a ratio, or `None` to fall back to the `minimal_roi` logic. Returning `NaN` or `inf` values is considered invalid and will be treated as `None`, causing the bot to use the `minimal_roi` configuration.
|
||||||
|
|
||||||
|
### Custom ROI examples
|
||||||
|
|
||||||
|
The following examples illustrate how to use the `custom_roi` function to implement different ROI logics.
|
||||||
|
|
||||||
|
#### Custom ROI per side
|
||||||
|
|
||||||
|
Use different ROI thresholds depending on the `side`. In this example, 5% for long entries and 2% for short entries.
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Default imports
|
||||||
|
|
||||||
|
class AwesomeStrategy(IStrategy):
|
||||||
|
|
||||||
|
use_custom_roi = True
|
||||||
|
|
||||||
|
# ... populate_* methods
|
||||||
|
|
||||||
|
def custom_roi(self, pair: str, trade: Trade, current_time: datetime, trade_duration: int,
|
||||||
|
entry_tag: str | None, side: str, **kwargs) -> float | None:
|
||||||
|
"""
|
||||||
|
Custom ROI logic, returns a new minimum ROI threshold (as a ratio, e.g., 0.05 for +5%).
|
||||||
|
Only called when use_custom_roi is set to True.
|
||||||
|
|
||||||
|
If used at the same time as minimal_roi, an exit will be triggered when the lower
|
||||||
|
threshold is reached. Example: If minimal_roi = {"0": 0.01} and custom_roi returns 0.05,
|
||||||
|
an exit will be triggered if profit reaches 5%.
|
||||||
|
|
||||||
|
:param pair: Pair that's currently analyzed.
|
||||||
|
:param trade: trade object.
|
||||||
|
:param current_time: datetime object, containing the current datetime.
|
||||||
|
:param trade_duration: Current trade duration in minutes.
|
||||||
|
:param entry_tag: Optional entry_tag (buy_tag) if provided with the buy signal.
|
||||||
|
:param side: 'long' or 'short' - indicating the direction of the current trade.
|
||||||
|
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
|
||||||
|
:return float: New ROI value as a ratio, or None to fall back to minimal_roi logic.
|
||||||
|
"""
|
||||||
|
return 0.05 if side == "long" else 0.02
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Custom ROI per pair
|
||||||
|
|
||||||
|
Use different ROI thresholds depending on the `pair`.
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Default imports
|
||||||
|
|
||||||
|
class AwesomeStrategy(IStrategy):
|
||||||
|
|
||||||
|
use_custom_roi = True
|
||||||
|
|
||||||
|
# ... populate_* methods
|
||||||
|
|
||||||
|
def custom_roi(self, pair: str, trade: Trade, current_time: datetime, trade_duration: int,
|
||||||
|
entry_tag: str | None, side: str, **kwargs) -> float | None:
|
||||||
|
|
||||||
|
stake = trade.stake_currency
|
||||||
|
roi_map = {
|
||||||
|
f"BTC/{stake}": 0.02, # 2% for BTC
|
||||||
|
f"ETH/{stake}": 0.03, # 3% for ETH
|
||||||
|
f"XRP/{stake}": 0.04, # 4% for XRP
|
||||||
|
}
|
||||||
|
|
||||||
|
return roi_map.get(pair, 0.01) # 1% for any other pair
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Custom ROI per entry tag
|
||||||
|
|
||||||
|
Use different ROI thresholds depending on the `entry_tag` provided with the buy signal.
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Default imports
|
||||||
|
|
||||||
|
class AwesomeStrategy(IStrategy):
|
||||||
|
|
||||||
|
use_custom_roi = True
|
||||||
|
|
||||||
|
# ... populate_* methods
|
||||||
|
|
||||||
|
def custom_roi(self, pair: str, trade: Trade, current_time: datetime, trade_duration: int,
|
||||||
|
entry_tag: str | None, side: str, **kwargs) -> float | None:
|
||||||
|
|
||||||
|
roi_by_tag = {
|
||||||
|
"breakout": 0.08, # 8% if tag is "breakout"
|
||||||
|
"rsi_overbought": 0.05, # 5% if tag is "rsi_overbought"
|
||||||
|
"mean_reversion": 0.03, # 3% if tag is "mean_reversion"
|
||||||
|
}
|
||||||
|
|
||||||
|
return roi_by_tag.get(entry_tag, 0.01) # 1% if tag is unknown
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Custom ROI based on ATR
|
||||||
|
|
||||||
|
ROI value may be derived from indicators stored in dataframe. This example uses the ATR ratio as ROI.
|
||||||
|
|
||||||
|
``` python
|
||||||
|
# Default imports
|
||||||
|
# <...>
|
||||||
|
import talib.abstract as ta
|
||||||
|
|
||||||
|
class AwesomeStrategy(IStrategy):
|
||||||
|
|
||||||
|
use_custom_roi = True
|
||||||
|
|
||||||
|
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||||
|
# <...>
|
||||||
|
dataframe["atr"] = ta.ATR(dataframe, timeperiod=10)
|
||||||
|
|
||||||
|
def custom_roi(self, pair: str, trade: Trade, current_time: datetime, trade_duration: int,
|
||||||
|
entry_tag: str | None, side: str, **kwargs) -> float | None:
|
||||||
|
|
||||||
|
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
|
||||||
|
last_candle = dataframe.iloc[-1].squeeze()
|
||||||
|
atr_ratio = last_candle["atr"] / last_candle["close"]
|
||||||
|
|
||||||
|
return atr_ratio # Returns the ATR value as ratio
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Custom order price rules
|
## Custom order price rules
|
||||||
|
|
||||||
By default, freqtrade use the orderbook to automatically set an order price([Relevant documentation](configuration.md#prices-used-for-orders)), you also have the option to create custom order prices based on your strategy.
|
By default, freqtrade use the orderbook to automatically set an order price([Relevant documentation](configuration.md#prices-used-for-orders)), you also have the option to create custom order prices based on your strategy.
|
||||||
@@ -758,7 +893,7 @@ For performance reasons, it's disabled by default and freqtrade will show a warn
|
|||||||
|
|
||||||
Additional orders also result in additional fees and those orders don't count towards `max_open_trades`.
|
Additional orders also result in additional fees and those orders don't count towards `max_open_trades`.
|
||||||
|
|
||||||
This callback is **not** called when there is an open order (either buy or sell) waiting for execution.
|
This callback is also called when there is an open order (either buy or sell) waiting for execution - and will cancel the existing open order to place a new order if the amount, price or direction is different. Also partially filled orders will be canceled, and will be replaced with the new amount as returned by the callback.
|
||||||
|
|
||||||
`adjust_trade_position()` is called very frequently for the duration of a trade, so you must keep your implementation as performant as possible.
|
`adjust_trade_position()` is called very frequently for the duration of a trade, so you must keep your implementation as performant as possible.
|
||||||
|
|
||||||
@@ -767,10 +902,18 @@ Adjustment orders can be assigned with a tag by returning a 2 element Tuple, wit
|
|||||||
|
|
||||||
Modifications to leverage are not possible, and the stake-amount returned is assumed to be before applying leverage.
|
Modifications to leverage are not possible, and the stake-amount returned is assumed to be before applying leverage.
|
||||||
|
|
||||||
!!! Danger "Loose Logic"
|
The combined stake currently allocated to the position is held in `trade.stake_amount`. Therefore `trade.stake_amount` will always be updated on every additional entry and partial exit made through `adjust_trade_position()`.
|
||||||
On dry and live run, this function will be called every `throttle_process_secs` (default to 5s). If you have a loose logic, for example your logic for extra entry is only to check RSI of last candle is below 30, then when such condition fulfilled, your bot will do extra re-entry every 5 secs until either it run out of money, it hit the `max_position_adjustment` limit, or a new candle with RSI more than 30 arrived.
|
|
||||||
|
|
||||||
Same thing also can happen with partial exit. So be sure to have a strict logic and/or check for the last filled order.
|
!!! Danger "Loose Logic"
|
||||||
|
On dry and live run, this function will be called every `throttle_process_secs` (default to 5s). If you have a loose logic, (e.g. increase position if RSI of the last candle is below 30), your bot will do extra re-entry every 5 secs until you either it run out of money, hit the `max_position_adjustment` limit, or a new candle with RSI more than 30 arrived.
|
||||||
|
|
||||||
|
Same thing also can happen with partial exit.
|
||||||
|
So be sure to have a strict logic and/or check for the last filled order and if an order is already open.
|
||||||
|
|
||||||
|
!!! Warning "Performance with many position adjustments"
|
||||||
|
Position adjustments can be a good approach to increase a strategy's output - but it can also have drawbacks if using this feature extensively.
|
||||||
|
Each of the orders will be attached to the trade object for the duration of the trade - hence increasing memory usage.
|
||||||
|
Trades with long duration and 10s or even 100ds of position adjustments are therefore not recommended, and should be closed at regular intervals to not affect performance.
|
||||||
|
|
||||||
!!! Warning "Backtesting"
|
!!! Warning "Backtesting"
|
||||||
During backtesting this callback is called for each candle in `timeframe` or `timeframe_detail`, so run-time performance will be affected.
|
During backtesting this callback is called for each candle in `timeframe` or `timeframe_detail`, so run-time performance will be affected.
|
||||||
@@ -808,11 +951,6 @@ Back to the example above, since current rate is 200, the current USDT value of
|
|||||||
|
|
||||||
While `/stopentry` command stops the bot from entering new trades, the position adjustment feature will continue buying new orders on existing trades.
|
While `/stopentry` command stops the bot from entering new trades, the position adjustment feature will continue buying new orders on existing trades.
|
||||||
|
|
||||||
!!! Warning "Performance with many position adjustments"
|
|
||||||
Position adjustments can be a good approach to increase a strategy's output - but it can also have drawbacks if using this feature extensively.
|
|
||||||
Each of the orders will be attached to the trade object for the duration of the trade - hence increasing memory usage.
|
|
||||||
Trades with long duration and 10s or even 100ds of position adjustments are therefore not recommended, and should be closed at regular intervals to not affect performance.
|
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
# Default imports
|
# Default imports
|
||||||
|
|
||||||
@@ -874,6 +1012,9 @@ class DigDeeperStrategy(IStrategy):
|
|||||||
Return None for no action.
|
Return None for no action.
|
||||||
Optionally, return a tuple with a 2nd element with an order reason
|
Optionally, return a tuple with a 2nd element with an order reason
|
||||||
"""
|
"""
|
||||||
|
if trade.has_open_orders:
|
||||||
|
# Only act if no orders are open
|
||||||
|
return
|
||||||
|
|
||||||
if current_profit > 0.05 and trade.nr_of_successful_exits == 0:
|
if current_profit > 0.05 and trade.nr_of_successful_exits == 0:
|
||||||
# Take half of the profit at +5%
|
# Take half of the profit at +5%
|
||||||
@@ -932,24 +1073,25 @@ class DigDeeperStrategy(IStrategy):
|
|||||||
|
|
||||||
The total profit for this trade was 950$ on a 3350$ investment (`100@8$ + 100@9$ + 150@11$`). As such - the final relative profit is 28.35% (`950 / 3350`).
|
The total profit for this trade was 950$ on a 3350$ investment (`100@8$ + 100@9$ + 150@11$`). As such - the final relative profit is 28.35% (`950 / 3350`).
|
||||||
|
|
||||||
## Adjust Entry Price
|
## Adjust order Price
|
||||||
|
|
||||||
The `adjust_entry_price()` callback may be used by strategy developer to refresh/replace limit orders upon arrival of new candles.
|
The `adjust_order_price()` callback may be used by strategy developer to refresh/replace limit orders upon arrival of new candles.
|
||||||
Be aware that `custom_entry_price()` is still the one dictating initial entry limit order price target at the time of entry trigger.
|
This callback is called once every iteration unless the order has been (re)placed within the current candle - limiting the maximum (re)placement of each order to once per candle.
|
||||||
|
This also means that the first call will be at the start of the next candle after the initial order was placed.
|
||||||
|
|
||||||
|
Be aware that `custom_entry_price()`/`custom_exit_price()` is still the one dictating initial limit order price target at the time of the signal.
|
||||||
|
|
||||||
Orders can be cancelled out of this callback by returning `None`.
|
Orders can be cancelled out of this callback by returning `None`.
|
||||||
|
|
||||||
Returning `current_order_rate` will keep the order on the exchange "as is".
|
Returning `current_order_rate` will keep the order on the exchange "as is".
|
||||||
Returning any other price will cancel the existing order, and replace it with a new order.
|
Returning any other price will cancel the existing order, and replace it with a new order.
|
||||||
|
|
||||||
The trade open-date (`trade.open_date_utc`) will remain at the time of the very first order placed.
|
If the cancellation of the original order fails, then the order will not be replaced - though the order will most likely have been canceled on exchange. Having this happen on initial entries will result in the deletion of the order, while on position adjustment orders, it'll result in the trade size remaining as is.
|
||||||
Please make sure to be aware of this - and eventually adjust your logic in other callbacks to account for this, and use the date of the first filled order instead.
|
If the order has been partially filled, the order will not be replaced. You can however use [`adjust_trade_position()`](#adjust-trade-position) to adjust the trade size to the expected position size, should this be necessary / desired.
|
||||||
|
|
||||||
If the cancellation of the original order fails, then the order will not be replaced - though the order will most likely have been canceled on exchange. Having this happen on initial entries will result in the deletion of the order, while on position adjustment orders, it'll result in the trade size remaining as is.
|
|
||||||
|
|
||||||
!!! Warning "Regular timeout"
|
!!! Warning "Regular timeout"
|
||||||
Entry `unfilledtimeout` mechanism (as well as `check_entry_timeout()`) takes precedence over this.
|
Entry `unfilledtimeout` mechanism (as well as `check_entry_timeout()`/`check_exit_timeout()`) takes precedence over this callback.
|
||||||
Entry Orders that are cancelled via the above methods will not have this callback called. Be sure to update timeout values to match your expectations.
|
Orders that are cancelled via the above methods will not have this callback called. Be sure to update timeout values to match your expectations.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Default imports
|
# Default imports
|
||||||
@@ -958,14 +1100,26 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
# ... populate_* methods
|
# ... populate_* methods
|
||||||
|
|
||||||
def adjust_entry_price(self, trade: Trade, order: Order | None, pair: str,
|
def adjust_order_price(
|
||||||
current_time: datetime, proposed_rate: float, current_order_rate: float,
|
self,
|
||||||
entry_tag: str | None, side: str, **kwargs) -> float:
|
trade: Trade,
|
||||||
|
order: Order | None,
|
||||||
|
pair: str,
|
||||||
|
current_time: datetime,
|
||||||
|
proposed_rate: float,
|
||||||
|
current_order_rate: float,
|
||||||
|
entry_tag: str | None,
|
||||||
|
side: str,
|
||||||
|
is_entry: bool,
|
||||||
|
**kwargs,
|
||||||
|
) -> float | None:
|
||||||
"""
|
"""
|
||||||
Entry price re-adjustment logic, returning the user desired limit price.
|
Exit and entry order price re-adjustment logic, returning the user desired limit price.
|
||||||
This only executes when a order was already placed, still open (unfilled fully or partially)
|
This only executes when a order was already placed, still open (unfilled fully or partially)
|
||||||
and not timed out on subsequent candles after entry trigger.
|
and not timed out on subsequent candles after entry trigger.
|
||||||
|
|
||||||
|
For full documentation please go to https://www.freqtrade.io/en/latest/strategy-callbacks/
|
||||||
|
|
||||||
When not implemented by a strategy, returns current_order_rate as default.
|
When not implemented by a strategy, returns current_order_rate as default.
|
||||||
If current_order_rate is returned then the existing order is maintained.
|
If current_order_rate is returned then the existing order is maintained.
|
||||||
If None is returned then order gets canceled but not replaced by a new one.
|
If None is returned then order gets canceled but not replaced by a new one.
|
||||||
@@ -977,14 +1131,16 @@ class AwesomeStrategy(IStrategy):
|
|||||||
:param proposed_rate: Rate, calculated based on pricing settings in entry_pricing.
|
:param proposed_rate: Rate, calculated based on pricing settings in entry_pricing.
|
||||||
:param current_order_rate: Rate of the existing order in place.
|
:param current_order_rate: Rate of the existing order in place.
|
||||||
:param entry_tag: Optional entry_tag (buy_tag) if provided with the buy signal.
|
:param entry_tag: Optional entry_tag (buy_tag) if provided with the buy signal.
|
||||||
:param side: "long" or "short" - indicating the direction of the proposed trade
|
:param side: 'long' or 'short' - indicating the direction of the proposed trade
|
||||||
|
:param is_entry: True if the order is an entry order, False if it's an exit order.
|
||||||
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
|
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
|
||||||
:return float: New entry price value if provided
|
:return float or None: New entry price value if provided
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# Limit orders to use and follow SMA200 as price target for the first 10 minutes since entry trigger for BTC/USDT pair.
|
|
||||||
|
# Limit entry orders to use and follow SMA200 as price target for the first 10 minutes since entry trigger for BTC/USDT pair.
|
||||||
if (
|
if (
|
||||||
pair == "BTC/USDT"
|
is_entry
|
||||||
|
and pair == "BTC/USDT"
|
||||||
and entry_tag == "long_sma200"
|
and entry_tag == "long_sma200"
|
||||||
and side == "long"
|
and side == "long"
|
||||||
and (current_time - timedelta(minutes=10)) <= trade.open_date_utc
|
and (current_time - timedelta(minutes=10)) <= trade.open_date_utc
|
||||||
@@ -1001,6 +1157,26 @@ class AwesomeStrategy(IStrategy):
|
|||||||
return current_order_rate
|
return current_order_rate
|
||||||
```
|
```
|
||||||
|
|
||||||
|
!!! danger "Incompatibility with `adjust_*_price()`"
|
||||||
|
If you have both `adjust_order_price()` and `adjust_entry_price()`/`adjust_exit_price()` implemented, only `adjust_order_price()` will be used.
|
||||||
|
If you need to adjust entry/exit prices, you can either implement the logic in `adjust_order_price()`, or use the split `adjust_entry_price()` / `adjust_exit_price()` callbacks, but not both.
|
||||||
|
Mixing these is not supported and will raise an error during bot startup.
|
||||||
|
|
||||||
|
### Adjust Entry Price
|
||||||
|
|
||||||
|
The `adjust_entry_price()` callback may be used by strategy developer to refresh/replace entry limit orders upon arrival.
|
||||||
|
It's a sub-set of `adjust_order_price()` and is called only for entry orders.
|
||||||
|
All remaining behavior is identical to `adjust_order_price()`.
|
||||||
|
|
||||||
|
The trade open-date (`trade.open_date_utc`) will remain at the time of the very first order placed.
|
||||||
|
Please make sure to be aware of this - and eventually adjust your logic in other callbacks to account for this, and use the date of the first filled order instead.
|
||||||
|
|
||||||
|
### Adjust Exit Price
|
||||||
|
|
||||||
|
The `adjust_exit_price()` callback may be used by strategy developer to refresh/replace exit limit orders upon arrival.
|
||||||
|
It's a sub-set of `adjust_order_price()` and is called only for exit orders.
|
||||||
|
All remaining behavior is identical to `adjust_order_price()`.
|
||||||
|
|
||||||
## Leverage Callback
|
## Leverage Callback
|
||||||
|
|
||||||
When trading in markets that allow leverage, this method must return the desired Leverage (Defaults to 1 -> No leverage).
|
When trading in markets that allow leverage, this method must return the desired Leverage (Defaults to 1 -> No leverage).
|
||||||
@@ -1066,3 +1242,119 @@ class AwesomeStrategy(IStrategy):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Plot annotations callback
|
||||||
|
|
||||||
|
The plot annotations callback is called whenever freqUI requests data to display a chart.
|
||||||
|
This callback has no meaning in the trade cycle context and is only used for charting purposes.
|
||||||
|
|
||||||
|
The strategy can then return a list of `AnnotationType` objects to be displayed on the chart.
|
||||||
|
Depending on the content returned - the chart can display horizontal areas, vertical areas, or boxes.
|
||||||
|
|
||||||
|
The full object looks like this:
|
||||||
|
|
||||||
|
``` json
|
||||||
|
{
|
||||||
|
"type": "area", // Type of the annotation, currently only "area" is supported
|
||||||
|
"start": "2024-01-01 15:00:00", // Start date of the area
|
||||||
|
"end": "2024-01-01 16:00:00", // End date of the area
|
||||||
|
"y_start": 94000.2, // Price / y axis value
|
||||||
|
"y_end": 98000, // Price / y axis value
|
||||||
|
"color": "",
|
||||||
|
"label": "some label"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The below example will mark the chart with areas for the hours 8 and 15, with a grey color, highlighting the market open and close hours.
|
||||||
|
This is obviously a very basic example.
|
||||||
|
|
||||||
|
``` python
|
||||||
|
# Default imports
|
||||||
|
|
||||||
|
class AwesomeStrategy(IStrategy):
|
||||||
|
def plot_annotations(
|
||||||
|
self, pair: str, start_date: datetime, end_date: datetime, dataframe: DataFrame, **kwargs
|
||||||
|
) -> list[AnnotationType]:
|
||||||
|
"""
|
||||||
|
Retrieve area annotations for a chart.
|
||||||
|
Must be returned as array, with type, label, color, start, end, y_start, y_end.
|
||||||
|
All settings except for type are optional - though it usually makes sense to include either
|
||||||
|
"start and end" or "y_start and y_end" for either horizontal or vertical plots
|
||||||
|
(or all 4 for boxes).
|
||||||
|
:param pair: Pair that's currently analyzed
|
||||||
|
:param start_date: Start date of the chart data being requested
|
||||||
|
:param end_date: End date of the chart data being requested
|
||||||
|
:param dataframe: DataFrame with the analyzed data for the chart
|
||||||
|
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
|
||||||
|
:return: List of AnnotationType objects
|
||||||
|
"""
|
||||||
|
annotations = []
|
||||||
|
while start_dt < end_date:
|
||||||
|
start_dt += timedelta(hours=1)
|
||||||
|
if start_dt.hour in (8, 15):
|
||||||
|
annotations.append(
|
||||||
|
{
|
||||||
|
"type": "area",
|
||||||
|
"label": "Trade open and close hours",
|
||||||
|
"start": start_dt,
|
||||||
|
"end": start_dt + timedelta(hours=1),
|
||||||
|
# Omitting y_start and y_end will result in a vertical area spanning the whole height of the main Chart
|
||||||
|
"color": "rgba(133, 133, 133, 0.4)",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return annotations
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Entries will be validated, and won't be passed to the UI if they don't correspond to the expected schema and will log an error if they don't.
|
||||||
|
|
||||||
|
!!! Warning "Many annotations"
|
||||||
|
Using too many annotations can cause the UI to hang, especially when plotting large amounts of historic data.
|
||||||
|
Use the annotation feature with care.
|
||||||
|
|
||||||
|
### Plot annotations example
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
??? Info "Code used for the plot above"
|
||||||
|
This is an example code and should be treated as such.
|
||||||
|
|
||||||
|
``` python
|
||||||
|
# Default imports
|
||||||
|
|
||||||
|
class AwesomeStrategy(IStrategy):
|
||||||
|
def plot_annotations(
|
||||||
|
self, pair: str, start_date: datetime, end_date: datetime, dataframe: DataFrame, **kwargs
|
||||||
|
) -> list[AnnotationType]:
|
||||||
|
annotations = []
|
||||||
|
while start_dt < end_date:
|
||||||
|
start_dt += timedelta(hours=1)
|
||||||
|
if (start_dt.hour % 4) == 0:
|
||||||
|
mark_areas.append(
|
||||||
|
{
|
||||||
|
"type": "area",
|
||||||
|
"label": "4h",
|
||||||
|
"start": start_dt,
|
||||||
|
"end": start_dt + timedelta(hours=1),
|
||||||
|
"color": "rgba(133, 133, 133, 0.4)",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
elif (start_dt.hour % 2) == 0:
|
||||||
|
price = dataframe.loc[dataframe["date"] == start_dt, ["close"]].mean()
|
||||||
|
mark_areas.append(
|
||||||
|
{
|
||||||
|
"type": "area",
|
||||||
|
"label": "2h",
|
||||||
|
"start": start_dt,
|
||||||
|
"end": start_dt + timedelta(hours=1),
|
||||||
|
"y_end": price * 1.01,
|
||||||
|
"y_start": price * 0.99,
|
||||||
|
"color": "rgba(0, 255, 0, 0.4)",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return annotations
|
||||||
|
|
||||||
|
```
|
||||||
|
|||||||
@@ -513,7 +513,7 @@ By default, freqtrade will attempt to load strategies from all `.py` files withi
|
|||||||
Assuming your strategy is called `AwesomeStrategy`, stored in the file `user_data/strategies/AwesomeStrategy.py`, then you can start freqtrade in dry (or live, depending on your configuration) mode with:
|
Assuming your strategy is called `AwesomeStrategy`, stored in the file `user_data/strategies/AwesomeStrategy.py`, then you can start freqtrade in dry (or live, depending on your configuration) mode with:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
freqtrade trade --strategy AwesomeStrategy`
|
freqtrade trade --strategy AwesomeStrategy
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that we're using the class name, not the file name.
|
Note that we're using the class name, not the file name.
|
||||||
@@ -545,7 +545,7 @@ def informative_pairs(self):
|
|||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
A full sample can be found [in the DataProvider section](#complete-data-provider-sample).
|
A full sample can be found [in the DataProvider section](#complete-dataprovider-sample).
|
||||||
|
|
||||||
!!! Warning
|
!!! Warning
|
||||||
As these pairs will be refreshed as part of the regular whitelist refresh, it's best to keep this list short.
|
As these pairs will be refreshed as part of the regular whitelist refresh, it's best to keep this list short.
|
||||||
@@ -576,7 +576,7 @@ To easily define informative pairs, use the `@informative` decorator. All decora
|
|||||||
and do not have access to data from other informative pairs. However, all informative dataframes for each pair are merged and passed to main `populate_indicators()` method.
|
and do not have access to data from other informative pairs. However, all informative dataframes for each pair are merged and passed to main `populate_indicators()` method.
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
Do not use the `@informative` decorator if you need to use data from one informative pair when generating another informative pair. Instead, define informative pairs manually as described [in the DataProvider section](#complete-data-provider-sample).
|
Do not use the `@informative` decorator if you need to use data from one informative pair when generating another informative pair. Instead, define informative pairs manually as described [in the DataProvider section](#complete-dataprovider-sample).
|
||||||
|
|
||||||
When hyperopting, use of the hyperoptable parameter `.value` attribute is not supported. Please use the `.range` attribute. See [optimizing an indicator parameter](hyperopt.md#optimizing-an-indicator-parameter) for more information.
|
When hyperopting, use of the hyperoptable parameter `.value` attribute is not supported. Please use the `.range` attribute. See [optimizing an indicator parameter](hyperopt.md#optimizing-an-indicator-parameter) for more information.
|
||||||
|
|
||||||
@@ -710,7 +710,7 @@ Options:
|
|||||||
- Merge the dataframe without lookahead bias
|
- Merge the dataframe without lookahead bias
|
||||||
- Forward-fill (optional)
|
- Forward-fill (optional)
|
||||||
|
|
||||||
For a full sample, please refer to the [complete data provider example](#complete-data-provider-sample) below.
|
For a full sample, please refer to the [complete data provider example](#complete-dataprovider-sample) below.
|
||||||
|
|
||||||
All columns of the informative dataframe will be available on the returning dataframe in a renamed fashion:
|
All columns of the informative dataframe will be available on the returning dataframe in a renamed fashion:
|
||||||
|
|
||||||
@@ -1122,6 +1122,7 @@ The following list contains some common patterns which should be avoided to prev
|
|||||||
- don't use `.iloc[-1]` or any other absolute position in the dataframe within `populate_` functions, as this will be different between dry-run and backtesting. Absolute `iloc` indexing is safe to use in callbacks however - see [Strategy Callbacks](strategy-callbacks.md).
|
- don't use `.iloc[-1]` or any other absolute position in the dataframe within `populate_` functions, as this will be different between dry-run and backtesting. Absolute `iloc` indexing is safe to use in callbacks however - see [Strategy Callbacks](strategy-callbacks.md).
|
||||||
- don't use functions that use all dataframe or column values, e.g. `dataframe['mean_volume'] = dataframe['volume'].mean()`. As backtesting uses the full dataframe, at any point in the dataframe, the `'mean_volume'` series would include data from the future. Use rolling() calculations instead, e.g. `dataframe['volume'].rolling(<window>).mean()`.
|
- don't use functions that use all dataframe or column values, e.g. `dataframe['mean_volume'] = dataframe['volume'].mean()`. As backtesting uses the full dataframe, at any point in the dataframe, the `'mean_volume'` series would include data from the future. Use rolling() calculations instead, e.g. `dataframe['volume'].rolling(<window>).mean()`.
|
||||||
- don't use `.resample('1h')`. This uses the left border of the period interval, so moves data from an hour boundary to the start of the hour. Use `.resample('1h', label='right')` instead.
|
- don't use `.resample('1h')`. This uses the left border of the period interval, so moves data from an hour boundary to the start of the hour. Use `.resample('1h', label='right')` instead.
|
||||||
|
- don't use `.merge()` to combine longer timeframes onto shorter ones. Instead, use the [informative pair](#informative-pairs) helpers. (A plain merge can implicitly cause a lookahead bias as date refers to open date, not close date).
|
||||||
|
|
||||||
!!! Tip "Identifying problems"
|
!!! Tip "Identifying problems"
|
||||||
You should always use the two helper commands [lookahead-analysis](lookahead-analysis.md) and [recursive-analysis](recursive-analysis.md), which can each help you figure out problems with your strategy in different ways.
|
You should always use the two helper commands [lookahead-analysis](lookahead-analysis.md) and [recursive-analysis](recursive-analysis.md), which can each help you figure out problems with your strategy in different ways.
|
||||||
|
|||||||
+33
-16
@@ -81,6 +81,19 @@ Without this, the bot will always respond to the general channel in the group if
|
|||||||
|
|
||||||
Similar to the group-id - you can use `/tg_info` from the topic/thread to get the correct topic-id.
|
Similar to the group-id - you can use `/tg_info` from the topic/thread to get the correct topic-id.
|
||||||
|
|
||||||
|
#### Authorized users
|
||||||
|
|
||||||
|
For groups, it can be useful to limit who can send commands to the bot.
|
||||||
|
|
||||||
|
If `"authorized_users": []` is present and empty, no user will be allowed to control the bot.
|
||||||
|
In the below example, only the user with the id "1234567" is allowed to control the bot - all other users will only be able to receive messages.
|
||||||
|
|
||||||
|
```json
|
||||||
|
"chat_id": "-1001332619709",
|
||||||
|
"topic_id": "3",
|
||||||
|
"authorized_users": ["1234567"]
|
||||||
|
```
|
||||||
|
|
||||||
## Control telegram noise
|
## Control telegram noise
|
||||||
|
|
||||||
Freqtrade provides means to control the verbosity of your telegram bot.
|
Freqtrade provides means to control the verbosity of your telegram bot.
|
||||||
@@ -175,7 +188,7 @@ You can create your own keyboard in `config.json`:
|
|||||||
!!! Note "Supported Commands"
|
!!! Note "Supported Commands"
|
||||||
Only the following commands are allowed. Command arguments are not supported!
|
Only the following commands are allowed. Command arguments are not supported!
|
||||||
|
|
||||||
`/start`, `/stop`, `/status`, `/status table`, `/trades`, `/profit`, `/performance`, `/daily`, `/stats`, `/count`, `/locks`, `/balance`, `/stopentry`, `/reload_config`, `/show_config`, `/logs`, `/whitelist`, `/blacklist`, `/edge`, `/help`, `/version`, `/marketdir`
|
`/start`, `/pause`, `/stop`, `/status`, `/status table`, `/trades`, `/profit`, `/performance`, `/daily`, `/stats`, `/count`, `/locks`, `/balance`, `/stopentry`, `/reload_config`, `/show_config`, `/logs`, `/whitelist`, `/blacklist`, `/edge`, `/help`, `/version`, `/marketdir`
|
||||||
|
|
||||||
## Telegram commands
|
## Telegram commands
|
||||||
|
|
||||||
@@ -187,8 +200,8 @@ official commands. You can ask at any moment for help with `/help`.
|
|||||||
|----------|-------------|
|
|----------|-------------|
|
||||||
| **System commands**
|
| **System commands**
|
||||||
| `/start` | Starts the trader
|
| `/start` | Starts the trader
|
||||||
|
| `/pause | /stopentry | /stopbuy` | Pause the trader. Gracefully handle open trades according to their rules. Do not enter new positions.
|
||||||
| `/stop` | Stops the trader
|
| `/stop` | Stops the trader
|
||||||
| `/stopbuy | /stopentry` | Stops the trader from opening new trades. Gracefully closes open trades according to their rules.
|
|
||||||
| `/reload_config` | Reloads the configuration file
|
| `/reload_config` | Reloads the configuration file
|
||||||
| `/show_config` | Shows part of the current configuration with relevant settings to operation
|
| `/show_config` | Shows part of the current configuration with relevant settings to operation
|
||||||
| `/logs [limit]` | Show last log messages.
|
| `/logs [limit]` | Show last log messages.
|
||||||
@@ -237,25 +250,27 @@ Below, example of Telegram message you will receive for each command.
|
|||||||
|
|
||||||
> **Status:** `running`
|
> **Status:** `running`
|
||||||
|
|
||||||
|
### /pause | /stopentry | /stopbuy
|
||||||
|
|
||||||
|
> **Status:** `paused, no more entries will occur from now. Run /start to enable entries.`
|
||||||
|
|
||||||
|
Prevents the bot from opening new trades by changing the state to `paused`.
|
||||||
|
Open trades will continue to be managed according to their regular rules (ROI/exit signals, stop-loss, etc.).
|
||||||
|
Note that position adjustment remains active, but only on the exit side — meaning that when the bot is `paused`, it can only reduce the position size of open trades.
|
||||||
|
|
||||||
|
After this, give the bot time to close off open trades (can be checked via `/status table`).
|
||||||
|
Once all positions are closed, run `/stop` to completely stop the bot.
|
||||||
|
|
||||||
|
Use `/start` to resume the bot to the `running` state, allowing it to open new positions.
|
||||||
|
|
||||||
|
!!! Warning
|
||||||
|
The pause/stopentry signal is ONLY active while the bot is running, and is not persisted anyway, so restarting the bot will cause this to reset.
|
||||||
|
|
||||||
### /stop
|
### /stop
|
||||||
|
|
||||||
> `Stopping trader ...`
|
> `Stopping trader ...`
|
||||||
> **Status:** `stopped`
|
> **Status:** `stopped`
|
||||||
|
|
||||||
### /stopbuy
|
|
||||||
|
|
||||||
> **status:** `Setting max_open_trades to 0. Run /reload_config to reset.`
|
|
||||||
|
|
||||||
Prevents the bot from opening new trades by temporarily setting "max_open_trades" to 0. Open trades will be handled via their regular rules (ROI / Sell-signal, stoploss, ...).
|
|
||||||
|
|
||||||
After this, give the bot time to close off open trades (can be checked via `/status table`).
|
|
||||||
Once all positions are sold, run `/stop` to completely stop the bot.
|
|
||||||
|
|
||||||
`/reload_config` resets "max_open_trades" to the value set in the configuration and resets this command.
|
|
||||||
|
|
||||||
!!! Warning
|
|
||||||
The stop-buy signal is ONLY active while the bot is running, and is not persisted anyway, so restarting the bot will cause this to reset.
|
|
||||||
|
|
||||||
### /status
|
### /status
|
||||||
|
|
||||||
For each open trade, the bot will send you the following message.
|
For each open trade, the bot will send you the following message.
|
||||||
@@ -360,6 +375,8 @@ Return the performance of each crypto-currency the bot has sold.
|
|||||||
> 5. `STORJ/BTC 0.0009 BTC (27.24%) (1)`
|
> 5. `STORJ/BTC 0.0009 BTC (27.24%) (1)`
|
||||||
> ...
|
> ...
|
||||||
|
|
||||||
|
The relative performance is calculated against the total investment in the currency, aggregating all filled entries for the currency.
|
||||||
|
|
||||||
### /balance
|
### /balance
|
||||||
|
|
||||||
Return the balance of all crypto-currency your have on the exchange.
|
Return the balance of all crypto-currency your have on the exchange.
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ The following attributes / properties are available for each individual trade -
|
|||||||
| `close_date_utc` | datetime | Timestamp when trade was closed - in UTC. |
|
| `close_date_utc` | datetime | Timestamp when trade was closed - in UTC. |
|
||||||
| `close_profit` | float | Relative profit at the time of trade closure. `0.01` == 1% |
|
| `close_profit` | float | Relative profit at the time of trade closure. `0.01` == 1% |
|
||||||
| `close_profit_abs` | float | Absolute profit (in stake currency) at the time of trade closure. |
|
| `close_profit_abs` | float | Absolute profit (in stake currency) at the time of trade closure. |
|
||||||
|
| `realized_profit` | float | Absolute already realized profit (in stake currency) while the trade is still open. |
|
||||||
| `leverage` | float | Leverage used for this trade - defaults to 1.0 in spot markets. |
|
| `leverage` | float | Leverage used for this trade - defaults to 1.0 in spot markets. |
|
||||||
| `enter_tag` | string | Tag provided on entry via the `enter_tag` column in the dataframe. |
|
| `enter_tag` | string | Tag provided on entry via the `enter_tag` column in the dataframe. |
|
||||||
| `is_short` | boolean | True for short trades, False otherwise. |
|
| `is_short` | boolean | True for short trades, False otherwise. |
|
||||||
@@ -35,6 +36,7 @@ The following attributes / properties are available for each individual trade -
|
|||||||
| `trade_direction` | "long" / "short" | Trade direction in text - long or short. |
|
| `trade_direction` | "long" / "short" | Trade direction in text - long or short. |
|
||||||
| `nr_of_successful_entries` | int | Number of successful (filled) entry orders. |
|
| `nr_of_successful_entries` | int | Number of successful (filled) entry orders. |
|
||||||
| `nr_of_successful_exits` | int | Number of successful (filled) exit orders. |
|
| `nr_of_successful_exits` | int | Number of successful (filled) exit orders. |
|
||||||
|
| `has_open_orders` | boolean | Has the trade open orders (excluding stoploss orders). |
|
||||||
|
|
||||||
## Class methods
|
## Class methods
|
||||||
|
|
||||||
@@ -132,15 +134,17 @@ Most properties here can be None as they are dependent on the exchange response.
|
|||||||
|------------|-------------|-------------|
|
|------------|-------------|-------------|
|
||||||
| `trade` | Trade | Trade object this order is attached to |
|
| `trade` | Trade | Trade object this order is attached to |
|
||||||
| `ft_pair` | string | Pair this order is for |
|
| `ft_pair` | string | Pair this order is for |
|
||||||
| `ft_is_open` | boolean | is the order filled? |
|
| `ft_is_open` | boolean | is the order still open? |
|
||||||
| `order_type` | string | Order type as defined on the exchange - usually market, limit or stoploss |
|
| `order_type` | string | Order type as defined on the exchange - usually market, limit or stoploss |
|
||||||
| `status` | string | Status as defined by ccxt. Usually open, closed, expired or canceled |
|
| `status` | string | Status as defined by [ccxt's order structure](https://docs.ccxt.com/#/README?id=order-structure). Usually open, closed, expired, canceled or rejected |
|
||||||
| `side` | string | Buy or Sell |
|
| `side` | string | buy or sell |
|
||||||
| `price` | float | Price the order was placed at |
|
| `price` | float | Price the order was placed at |
|
||||||
| `average` | float | Average price the order filled at |
|
| `average` | float | Average price the order filled at |
|
||||||
| `amount` | float | Amount in base currency |
|
| `amount` | float | Amount in base currency |
|
||||||
| `filled` | float | Filled amount (in base currency) |
|
| `filled` | float | Filled amount (in base currency) (use `safe_filled` instead) |
|
||||||
| `remaining` | float | Remaining amount |
|
| `safe_filled` | float | Filled amount (in base currency) - guaranteed to not be None |
|
||||||
|
| `remaining` | float | Remaining amount (use `safe_remaining` instead) |
|
||||||
|
| `safe_remaining` | float | Remaining amount - either taken from the exchange or calculated. |
|
||||||
| `cost` | float | Cost of the order - usually average * filled (*Exchange dependent on futures, may contain the cost with or without leverage and may be in contracts.*) |
|
| `cost` | float | Cost of the order - usually average * filled (*Exchange dependent on futures, may contain the cost with or without leverage and may be in contracts.*) |
|
||||||
| `stake_amount` | float | Stake amount used for this order. *Added in 2023.7.* |
|
| `stake_amount` | float | Stake amount used for this order. *Added in 2023.7.* |
|
||||||
| `stake_amount_filled` | float | Filled Stake amount used for this order. *Added in 2024.11.* |
|
| `stake_amount_filled` | float | Filled Stake amount used for this order. *Added in 2024.11.* |
|
||||||
|
|||||||
+1
-1
@@ -45,4 +45,4 @@ Please refer to the corresponding installation sections (common problems linked
|
|||||||
|
|
||||||
Common problems and their solutions:
|
Common problems and their solutions:
|
||||||
|
|
||||||
* [ta-lib update on windows](windows_installation.md#2-install-ta-lib)
|
* [ta-lib update on windows](windows_installation.md#install-ta-lib)
|
||||||
|
|||||||
+20
-540
@@ -6,17 +6,9 @@ Besides the Live-Trade and Dry-Run run modes, the `backtesting`, `edge` and `hyp
|
|||||||
|
|
||||||
Creates the directory structure to hold your files for freqtrade.
|
Creates the directory structure to hold your files for freqtrade.
|
||||||
Will also create strategy and hyperopt examples for you to get started.
|
Will also create strategy and hyperopt examples for you to get started.
|
||||||
Can be used multiple times - using `--reset` will reset the sample strategy and hyperopt files to their default state.
|
Can be used multiple times - using `--reset` will reset the sample strategy and hyperopt files to their default state.
|
||||||
|
|
||||||
```
|
--8<-- "commands/create-userdir.md"
|
||||||
usage: freqtrade create-userdir [-h] [--userdir PATH] [--reset]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
--reset Reset sample files to their original state.
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! Warning
|
!!! Warning
|
||||||
Using `--reset` may result in loss of data, since this will overwrite all sample files without asking again.
|
Using `--reset` may result in loss of data, since this will overwrite all sample files without asking again.
|
||||||
@@ -38,15 +30,7 @@ optional arguments:
|
|||||||
|
|
||||||
Creates a new configuration file, asking some questions which are important selections for a configuration.
|
Creates a new configuration file, asking some questions which are important selections for a configuration.
|
||||||
|
|
||||||
```
|
--8<-- "commands/new-config.md"
|
||||||
usage: freqtrade new-config [-h] [-c PATH]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default: `config.json`). Multiple --config options may be used. Can be set to `-`
|
|
||||||
to read config from stdin.
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! Warning
|
!!! Warning
|
||||||
Only vital questions are asked. Freqtrade offers a lot more configuration possibilities, which are listed in the [Configuration documentation](configuration.md#configuration-parameters)
|
Only vital questions are asked. Freqtrade offers a lot more configuration possibilities, which are listed in the [Configuration documentation](configuration.md#configuration-parameters)
|
||||||
@@ -73,21 +57,7 @@ Especially useful with [split configuration files](configuration.md#multiple-con
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
```
|
--8<-- "commands/show-config.md"
|
||||||
usage: freqtrade show-config [-h] [--userdir PATH] [-c PATH]
|
|
||||||
[--show-sensitive]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
--show-sensitive Show secrets in the output.
|
|
||||||
```
|
|
||||||
|
|
||||||
``` output
|
``` output
|
||||||
Your combined configuration is:
|
Your combined configuration is:
|
||||||
@@ -120,23 +90,7 @@ The file will be named inline with your class name, and will not overwrite exist
|
|||||||
|
|
||||||
Results will be located in `user_data/strategies/<strategyclassname>.py`.
|
Results will be located in `user_data/strategies/<strategyclassname>.py`.
|
||||||
|
|
||||||
``` output
|
--8<-- "commands/new-strategy.md"
|
||||||
usage: freqtrade new-strategy [-h] [--userdir PATH] [-s NAME]
|
|
||||||
[--template {full,minimal,advanced}]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
-s NAME, --strategy NAME
|
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
|
||||||
--template {full,minimal,advanced}
|
|
||||||
Use a template which is either `minimal`, `full`
|
|
||||||
(containing multiple sample indicators) or `advanced`.
|
|
||||||
Default: `full`.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### Sample usage of new-strategy
|
### Sample usage of new-strategy
|
||||||
|
|
||||||
@@ -162,38 +116,7 @@ Use the `list-strategies` subcommand to see all strategies in one particular dir
|
|||||||
|
|
||||||
This subcommand is useful for finding problems in your environment with loading strategies: modules with strategies that contain errors and failed to load are printed in red (LOAD FAILED), while strategies with duplicate names are printed in yellow (DUPLICATE NAME).
|
This subcommand is useful for finding problems in your environment with loading strategies: modules with strategies that contain errors and failed to load are printed in red (LOAD FAILED), while strategies with duplicate names are printed in yellow (DUPLICATE NAME).
|
||||||
|
|
||||||
```
|
--8<-- "commands/list-strategies.md"
|
||||||
usage: freqtrade list-strategies [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH]
|
|
||||||
[--strategy-path PATH] [-1] [--no-color]
|
|
||||||
[--recursive-strategy-search]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
|
||||||
-1, --one-column Print output in one column.
|
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
|
||||||
useful if you are redirecting output to a file.
|
|
||||||
--recursive-strategy-search
|
|
||||||
Recursively search for a strategy in the strategies
|
|
||||||
folder.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! Warning
|
!!! Warning
|
||||||
Using these commands will try to load all python files from a directory. This can be a security risk if untrusted files reside in this directory, since all module-level code is executed.
|
Using these commands will try to load all python files from a directory. This can be a security risk if untrusted files reside in this directory, since all module-level code is executed.
|
||||||
@@ -224,36 +147,7 @@ It provides a quick list of all available loss functions in your environment.
|
|||||||
|
|
||||||
This subcommand can be useful for finding problems in your environment with loading loss functions: modules with Hyperopt-Loss functions that contain errors and failed to load are printed in red (LOAD FAILED), while hyperopt-Loss functions with duplicate names are printed in yellow (DUPLICATE NAME).
|
This subcommand can be useful for finding problems in your environment with loading loss functions: modules with Hyperopt-Loss functions that contain errors and failed to load are printed in red (LOAD FAILED), while hyperopt-Loss functions with duplicate names are printed in yellow (DUPLICATE NAME).
|
||||||
|
|
||||||
```
|
--8<-- "commands/list-hyperoptloss.md"
|
||||||
usage: freqtrade list-hyperoptloss [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH]
|
|
||||||
[--hyperopt-path PATH] [-1] [--no-color]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--hyperopt-path PATH Specify additional lookup path for Hyperopt Loss
|
|
||||||
functions.
|
|
||||||
-1, --one-column Print output in one column.
|
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
|
||||||
useful if you are redirecting output to a file.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
```
|
|
||||||
|
|
||||||
## List freqAI models
|
## List freqAI models
|
||||||
|
|
||||||
@@ -261,49 +155,13 @@ Use the `list-freqaimodels` subcommand to see all freqAI models available.
|
|||||||
|
|
||||||
This subcommand is useful for finding problems in your environment with loading freqAI models: modules with models that contain errors and failed to load are printed in red (LOAD FAILED), while models with duplicate names are printed in yellow (DUPLICATE NAME).
|
This subcommand is useful for finding problems in your environment with loading freqAI models: modules with models that contain errors and failed to load are printed in red (LOAD FAILED), while models with duplicate names are printed in yellow (DUPLICATE NAME).
|
||||||
|
|
||||||
```
|
--8<-- "commands/list-freqaimodels.md"
|
||||||
usage: freqtrade list-freqaimodels [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH]
|
|
||||||
[--freqaimodel-path PATH] [-1] [--no-color]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--freqaimodel-path PATH
|
|
||||||
Specify additional lookup path for freqaimodels.
|
|
||||||
-1, --one-column Print output in one column.
|
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
|
||||||
useful if you are redirecting output to a file.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## List Exchanges
|
## List Exchanges
|
||||||
|
|
||||||
Use the `list-exchanges` subcommand to see the exchanges available for the bot.
|
Use the `list-exchanges` subcommand to see the exchanges available for the bot.
|
||||||
|
|
||||||
```
|
--8<-- "commands/list-exchanges.md"
|
||||||
usage: freqtrade list-exchanges [-h] [-1] [-a]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-1, --one-column Print output in one column.
|
|
||||||
-a, --all Print all exchanges known to the ccxt library.
|
|
||||||
```
|
|
||||||
|
|
||||||
Example: see exchanges available for the bot:
|
Example: see exchanges available for the bot:
|
||||||
|
|
||||||
@@ -352,35 +210,7 @@ okx True Official spot, isolated futures
|
|||||||
|
|
||||||
Use the `list-timeframes` subcommand to see the list of timeframes available for the exchange.
|
Use the `list-timeframes` subcommand to see the list of timeframes available for the exchange.
|
||||||
|
|
||||||
```
|
--8<-- "commands/list-timeframes.md"
|
||||||
usage: freqtrade list-timeframes [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH]
|
|
||||||
[--exchange EXCHANGE] [-1]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
|
||||||
-1, --one-column Print output in one column.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
* Example: see the timeframes for the 'binance' exchange, set in the configuration file:
|
* Example: see the timeframes for the 'binance' exchange, set in the configuration file:
|
||||||
|
|
||||||
@@ -408,54 +238,7 @@ You can print info about any pair/market with these subcommands - and you can fi
|
|||||||
|
|
||||||
These subcommands have same usage and same set of available options:
|
These subcommands have same usage and same set of available options:
|
||||||
|
|
||||||
```
|
--8<-- "commands/list-pairs.md"
|
||||||
usage: freqtrade list-markets [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH] [--exchange EXCHANGE]
|
|
||||||
[--print-list] [--print-json] [-1] [--print-csv]
|
|
||||||
[--base BASE_CURRENCY [BASE_CURRENCY ...]]
|
|
||||||
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
|
|
||||||
[-a] [--trading-mode {spot,margin,futures}]
|
|
||||||
usage: freqtrade list-pairs [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH] [--exchange EXCHANGE]
|
|
||||||
[--print-list] [--print-json] [-1] [--print-csv]
|
|
||||||
[--base BASE_CURRENCY [BASE_CURRENCY ...]]
|
|
||||||
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]] [-a]
|
|
||||||
[--trading-mode {spot,margin,futures}]
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
|
||||||
--print-list Print list of pairs or market symbols. By default data
|
|
||||||
is printed in the tabular format.
|
|
||||||
--print-json Print list of pairs or market symbols in JSON format.
|
|
||||||
-1, --one-column Print output in one column.
|
|
||||||
--print-csv Print exchange pair or market data in the csv format.
|
|
||||||
--base BASE_CURRENCY [BASE_CURRENCY ...]
|
|
||||||
Specify base currency(-ies). Space-separated list.
|
|
||||||
--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]
|
|
||||||
Specify quote currency(-ies). Space-separated list.
|
|
||||||
-a, --all Print all pairs or market symbols. By default only
|
|
||||||
active ones are shown.
|
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
|
||||||
Select Trading mode
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
By default, only active pairs/markets are shown. Active pairs/markets are those that can currently be traded on the exchange.
|
By default, only active pairs/markets are shown. Active pairs/markets are those that can currently be traded on the exchange.
|
||||||
You can use the `-a`/`-all` option to see the list of all pairs/markets, including the inactive ones.
|
You can use the `-a`/`-all` option to see the list of all pairs/markets, including the inactive ones.
|
||||||
@@ -493,28 +276,7 @@ Use the `test-pairlist` subcommand to test the configuration of [dynamic pairlis
|
|||||||
Requires a configuration with specified `pairlists` attribute.
|
Requires a configuration with specified `pairlists` attribute.
|
||||||
Can be used to generate static pairlists to be used during backtesting / hyperopt.
|
Can be used to generate static pairlists to be used during backtesting / hyperopt.
|
||||||
|
|
||||||
```
|
--8<-- "commands/test-pairlist.md"
|
||||||
usage: freqtrade test-pairlist [-h] [--userdir PATH] [-v] [-c PATH]
|
|
||||||
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
|
|
||||||
[-1] [--print-json] [--exchange EXCHANGE]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]
|
|
||||||
Specify quote currency(-ies). Space-separated list.
|
|
||||||
-1, --one-column Print output in one column.
|
|
||||||
--print-json Print list of pairs or market symbols in JSON format.
|
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
|
|
||||||
@@ -530,17 +292,7 @@ freqtrade test-pairlist --config config.json --quote USDT BTC
|
|||||||
|
|
||||||
Please refer to the [corresponding documentation](advanced-setup.md#use-a-different-database-system) to learn about requirements for different database systems.
|
Please refer to the [corresponding documentation](advanced-setup.md#use-a-different-database-system) to learn about requirements for different database systems.
|
||||||
|
|
||||||
```
|
--8<-- "commands/convert-db.md"
|
||||||
usage: freqtrade convert-db [-h] [--db-url PATH] [--db-url-from PATH]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--db-url PATH Override trades database URL, this is useful in custom
|
|
||||||
deployments (default: `sqlite:///tradesv3.sqlite` for
|
|
||||||
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
|
|
||||||
Dry Run).
|
|
||||||
--db-url-from PATH Source db url to use when migrating a database.
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! Warning
|
!!! Warning
|
||||||
Please ensure to only use this on an empty target database. Freqtrade will perform a regular migration, but may fail if entries already existed.
|
Please ensure to only use this on an empty target database. Freqtrade will perform a regular migration, but may fail if entries already existed.
|
||||||
@@ -556,30 +308,7 @@ Freqtrade will start the webserver and allow FreqUI to start and control backtes
|
|||||||
This has the advantage that data will not be reloaded between backtesting runs (as long as timeframe and timerange remain identical).
|
This has the advantage that data will not be reloaded between backtesting runs (as long as timeframe and timerange remain identical).
|
||||||
FreqUI will also show the backtesting results.
|
FreqUI will also show the backtesting results.
|
||||||
|
|
||||||
```
|
--8<-- "commands/webserver.md"
|
||||||
usage: freqtrade webserver [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
|
|
||||||
[--userdir PATH]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### Webserver mode - docker
|
### Webserver mode - docker
|
||||||
|
|
||||||
@@ -609,37 +338,7 @@ Adding `--show-pair-list` outputs a sorted pair list you can easily copy/paste i
|
|||||||
??? Warning "Strategy overfitting"
|
??? Warning "Strategy overfitting"
|
||||||
Only using winning pairs can lead to an overfitted strategy, which will not work well on future data. Make sure to extensively test your strategy in dry-run before risking real money.
|
Only using winning pairs can lead to an overfitted strategy, which will not work well on future data. Make sure to extensively test your strategy in dry-run before risking real money.
|
||||||
|
|
||||||
```
|
--8<-- "commands/backtesting-show.md"
|
||||||
usage: freqtrade backtesting-show [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH]
|
|
||||||
[--export-filename PATH] [--show-pair-list]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--export-filename PATH
|
|
||||||
Save backtest results to the file with this filename.
|
|
||||||
Requires `--export` to be set as well. Example:
|
|
||||||
`--export-filename=user_data/backtest_results/backtest
|
|
||||||
_today.json`
|
|
||||||
--show-pair-list Show backtesting pairlist sorted by profit.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## Detailed backtest analysis
|
## Detailed backtest analysis
|
||||||
|
|
||||||
@@ -647,134 +346,13 @@ Advanced backtest result analysis.
|
|||||||
|
|
||||||
More details in the [Backtesting analysis](advanced-backtesting.md#analyze-the-buyentry-and-sellexit-tags) Section.
|
More details in the [Backtesting analysis](advanced-backtesting.md#analyze-the-buyentry-and-sellexit-tags) Section.
|
||||||
|
|
||||||
```
|
--8<-- "commands/backtesting-analysis.md"
|
||||||
usage: freqtrade backtesting-analysis [-h] [-v] [--logfile FILE] [-V]
|
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
|
||||||
[--export-filename PATH]
|
|
||||||
[--analysis-groups {0,1,2,3,4} [{0,1,2,3,4} ...]]
|
|
||||||
[--enter-reason-list ENTER_REASON_LIST [ENTER_REASON_LIST ...]]
|
|
||||||
[--exit-reason-list EXIT_REASON_LIST [EXIT_REASON_LIST ...]]
|
|
||||||
[--indicator-list INDICATOR_LIST [INDICATOR_LIST ...]]
|
|
||||||
[--timerange YYYYMMDD-[YYYYMMDD]]
|
|
||||||
[--rejected]
|
|
||||||
[--analysis-to-csv]
|
|
||||||
[--analysis-csv-path PATH]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--export-filename PATH, --backtest-filename PATH
|
|
||||||
Use this filename for backtest results.Requires
|
|
||||||
`--export` to be set as well. Example: `--export-filen
|
|
||||||
ame=user_data/backtest_results/backtest_today.json`
|
|
||||||
--analysis-groups {0,1,2,3,4} [{0,1,2,3,4} ...]
|
|
||||||
grouping output - 0: simple wins/losses by enter tag,
|
|
||||||
1: by enter_tag, 2: by enter_tag and exit_tag, 3: by
|
|
||||||
pair and enter_tag, 4: by pair, enter_ and exit_tag
|
|
||||||
(this can get quite large)
|
|
||||||
--enter-reason-list ENTER_REASON_LIST [ENTER_REASON_LIST ...]
|
|
||||||
Space separated list of entry signals to analyse.
|
|
||||||
Default: all. e.g. 'entry_tag_a entry_tag_b'
|
|
||||||
--exit-reason-list EXIT_REASON_LIST [EXIT_REASON_LIST ...]
|
|
||||||
Space separated list of exit signals to analyse.
|
|
||||||
Default: all. e.g.
|
|
||||||
'exit_tag_a roi stop_loss trailing_stop_loss'
|
|
||||||
--indicator-list INDICATOR_LIST [INDICATOR_LIST ...]
|
|
||||||
Space separated list of indicators to analyse. e.g.
|
|
||||||
'close rsi bb_lowerband profit_abs'
|
|
||||||
--timerange YYYYMMDD-[YYYYMMDD]
|
|
||||||
Timerange to filter trades for analysis,
|
|
||||||
start inclusive, end exclusive. e.g.
|
|
||||||
20220101-20220201
|
|
||||||
--rejected
|
|
||||||
Print out rejected trades table
|
|
||||||
--analysis-to-csv
|
|
||||||
Write out tables to individual CSVs, by default to
|
|
||||||
'user_data/backtest_results' unless '--analysis-csv-path' is given.
|
|
||||||
--analysis-csv-path [PATH]
|
|
||||||
Optional path where individual CSVs will be written. If not used,
|
|
||||||
CSVs will be written to 'user_data/backtest_results'.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## List Hyperopt results
|
## List Hyperopt results
|
||||||
|
|
||||||
You can list the hyperoptimization epochs the Hyperopt module evaluated previously with the `hyperopt-list` sub-command.
|
You can list the hyperoptimization epochs the Hyperopt module evaluated previously with the `hyperopt-list` sub-command.
|
||||||
|
|
||||||
```
|
--8<-- "commands/hyperopt-list.md"
|
||||||
usage: freqtrade hyperopt-list [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH] [--best]
|
|
||||||
[--profitable] [--min-trades INT]
|
|
||||||
[--max-trades INT] [--min-avg-time FLOAT]
|
|
||||||
[--max-avg-time FLOAT] [--min-avg-profit FLOAT]
|
|
||||||
[--max-avg-profit FLOAT]
|
|
||||||
[--min-total-profit FLOAT]
|
|
||||||
[--max-total-profit FLOAT]
|
|
||||||
[--min-objective FLOAT] [--max-objective FLOAT]
|
|
||||||
[--no-color] [--print-json] [--no-details]
|
|
||||||
[--hyperopt-filename PATH] [--export-csv FILE]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--best Select only best epochs.
|
|
||||||
--profitable Select only profitable epochs.
|
|
||||||
--min-trades INT Select epochs with more than INT trades.
|
|
||||||
--max-trades INT Select epochs with less than INT trades.
|
|
||||||
--min-avg-time FLOAT Select epochs above average time.
|
|
||||||
--max-avg-time FLOAT Select epochs below average time.
|
|
||||||
--min-avg-profit FLOAT
|
|
||||||
Select epochs above average profit.
|
|
||||||
--max-avg-profit FLOAT
|
|
||||||
Select epochs below average profit.
|
|
||||||
--min-total-profit FLOAT
|
|
||||||
Select epochs above total profit.
|
|
||||||
--max-total-profit FLOAT
|
|
||||||
Select epochs below total profit.
|
|
||||||
--min-objective FLOAT
|
|
||||||
Select epochs above objective.
|
|
||||||
--max-objective FLOAT
|
|
||||||
Select epochs below objective.
|
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
|
||||||
useful if you are redirecting output to a file.
|
|
||||||
--print-json Print output in JSON format.
|
|
||||||
--no-details Do not print best epoch details.
|
|
||||||
--hyperopt-filename FILENAME
|
|
||||||
Hyperopt result filename.Example: `--hyperopt-
|
|
||||||
filename=hyperopt_results_2020-09-27_16-20-48.pickle`
|
|
||||||
--export-csv FILE Export to CSV-File. This will disable table print.
|
|
||||||
Example: --export-csv hyperopt.csv
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
`hyperopt-list` will automatically use the latest available hyperopt results file.
|
`hyperopt-list` will automatically use the latest available hyperopt results file.
|
||||||
@@ -796,46 +374,7 @@ freqtrade hyperopt-list --profitable --no-details
|
|||||||
|
|
||||||
You can show the details of any hyperoptimization epoch previously evaluated by the Hyperopt module with the `hyperopt-show` subcommand.
|
You can show the details of any hyperoptimization epoch previously evaluated by the Hyperopt module with the `hyperopt-show` subcommand.
|
||||||
|
|
||||||
```
|
--8<-- "commands/hyperopt-show.md"
|
||||||
usage: freqtrade hyperopt-show [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH] [--best]
|
|
||||||
[--profitable] [-n INT] [--print-json]
|
|
||||||
[--hyperopt-filename FILENAME] [--no-header]
|
|
||||||
[--disable-param-export]
|
|
||||||
[--breakdown {day,week,month} [{day,week,month} ...]]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--best Select only best epochs.
|
|
||||||
--profitable Select only profitable epochs.
|
|
||||||
-n INT, --index INT Specify the index of the epoch to print details for.
|
|
||||||
--print-json Print output in JSON format.
|
|
||||||
--hyperopt-filename FILENAME
|
|
||||||
Hyperopt result filename.Example: `--hyperopt-
|
|
||||||
filename=hyperopt_results_2020-09-27_16-20-48.pickle`
|
|
||||||
--no-header Do not print epoch details header.
|
|
||||||
--disable-param-export
|
|
||||||
Disable automatic hyperopt parameter export.
|
|
||||||
--breakdown {day,week,month} [{day,week,month} ...]
|
|
||||||
Show backtesting breakdown per [day, week, month].
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
`hyperopt-show` will automatically use the latest available hyperopt results file.
|
`hyperopt-show` will automatically use the latest available hyperopt results file.
|
||||||
@@ -859,38 +398,7 @@ freqtrade hyperopt-show --best -n -1 --print-json --no-header
|
|||||||
|
|
||||||
Print selected (or all) trades from database to screen.
|
Print selected (or all) trades from database to screen.
|
||||||
|
|
||||||
```
|
--8<-- "commands/show-trades.md"
|
||||||
usage: freqtrade show-trades [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH] [--db-url PATH]
|
|
||||||
[--trade-ids TRADE_IDS [TRADE_IDS ...]]
|
|
||||||
[--print-json]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--db-url PATH Override trades database URL, this is useful in custom
|
|
||||||
deployments (default: `sqlite:///tradesv3.sqlite` for
|
|
||||||
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
|
|
||||||
Dry Run).
|
|
||||||
--trade-ids TRADE_IDS [TRADE_IDS ...]
|
|
||||||
Specify the list of trade ids.
|
|
||||||
--print-json Print output in JSON format.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
```
|
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
|
|
||||||
@@ -910,32 +418,4 @@ Your original strategy will remain available in the `user_data/strategies_orig_u
|
|||||||
Strategy updater will work on a "best effort" approach. Please do your due diligence and verify the results of the conversion.
|
Strategy updater will work on a "best effort" approach. Please do your due diligence and verify the results of the conversion.
|
||||||
We also recommend to run a python formatter (e.g. `black`) to format results in a sane manner.
|
We also recommend to run a python formatter (e.g. `black`) to format results in a sane manner.
|
||||||
|
|
||||||
```
|
--8<-- "commands/strategy-updater.md"
|
||||||
usage: freqtrade strategy-updater [-h] [-v] [--logfile FILE] [-V] [-c PATH]
|
|
||||||
[-d PATH] [--userdir PATH]
|
|
||||||
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
|
|
||||||
|
|
||||||
options:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
|
|
||||||
Provide a space-separated list of strategies to
|
|
||||||
be converted.
|
|
||||||
|
|
||||||
Common arguments:
|
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
|
||||||
--logfile FILE, --log-file FILE
|
|
||||||
Log to the file specified. Special values are:
|
|
||||||
'syslog', 'journald'. See the documentation for more
|
|
||||||
details.
|
|
||||||
-V, --version show program's version number and exit
|
|
||||||
-c PATH, --config PATH
|
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
|
||||||
exists). Multiple --config options may be used. Can be
|
|
||||||
set to `-` to read config from stdin.
|
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
|
||||||
Path to directory with historical backtesting data.
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
"""Freqtrade bot"""
|
"""Freqtrade bot"""
|
||||||
|
|
||||||
__version__ = "2024.12"
|
__version__ = "2025.5"
|
||||||
|
|
||||||
if "dev" in __version__:
|
if "dev" in __version__:
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import subprocess # noqa: S404
|
import subprocess # noqa: S404, RUF100
|
||||||
|
|
||||||
freqtrade_basedir = Path(__file__).parent
|
freqtrade_basedir = Path(__file__).parent
|
||||||
|
|
||||||
|
|||||||
@@ -1,63 +1,23 @@
|
|||||||
import logging
|
import logging
|
||||||
from pathlib import Path
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from freqtrade.enums import RunMode
|
from freqtrade.enums import RunMode
|
||||||
from freqtrade.exceptions import ConfigurationError, OperationalException
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def setup_analyze_configuration(args: dict[str, Any], method: RunMode) -> dict[str, Any]:
|
|
||||||
"""
|
|
||||||
Prepare the configuration for the entry/exit reason analysis module
|
|
||||||
:param args: Cli args from Arguments()
|
|
||||||
:param method: Bot running mode
|
|
||||||
:return: Configuration
|
|
||||||
"""
|
|
||||||
from freqtrade.configuration import setup_utils_configuration
|
|
||||||
|
|
||||||
config = setup_utils_configuration(args, method)
|
|
||||||
|
|
||||||
no_unlimited_runmodes = {
|
|
||||||
RunMode.BACKTEST: "backtesting",
|
|
||||||
}
|
|
||||||
if method in no_unlimited_runmodes.keys():
|
|
||||||
from freqtrade.data.btanalysis import get_latest_backtest_filename
|
|
||||||
|
|
||||||
if "exportfilename" in config:
|
|
||||||
if config["exportfilename"].is_dir():
|
|
||||||
btfile = Path(get_latest_backtest_filename(config["exportfilename"]))
|
|
||||||
signals_file = f"{config['exportfilename']}/{btfile.stem}_signals.pkl"
|
|
||||||
else:
|
|
||||||
if config["exportfilename"].exists():
|
|
||||||
btfile = Path(config["exportfilename"])
|
|
||||||
signals_file = f"{btfile.parent}/{btfile.stem}_signals.pkl"
|
|
||||||
else:
|
|
||||||
raise ConfigurationError(f"{config['exportfilename']} does not exist.")
|
|
||||||
else:
|
|
||||||
raise ConfigurationError("exportfilename not in config.")
|
|
||||||
|
|
||||||
if not Path(signals_file).exists():
|
|
||||||
raise OperationalException(
|
|
||||||
f"Cannot find latest backtest signals file: {signals_file}."
|
|
||||||
"Run backtesting with `--export signals`."
|
|
||||||
)
|
|
||||||
|
|
||||||
return config
|
|
||||||
|
|
||||||
|
|
||||||
def start_analysis_entries_exits(args: dict[str, Any]) -> None:
|
def start_analysis_entries_exits(args: dict[str, Any]) -> None:
|
||||||
"""
|
"""
|
||||||
Start analysis script
|
Start analysis script
|
||||||
:param args: Cli args from Arguments()
|
:param args: Cli args from Arguments()
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
from freqtrade.configuration import setup_utils_configuration
|
||||||
from freqtrade.data.entryexitanalysis import process_entry_exit_reasons
|
from freqtrade.data.entryexitanalysis import process_entry_exit_reasons
|
||||||
|
|
||||||
# Initialize configuration
|
# Initialize configuration
|
||||||
config = setup_analyze_configuration(args, RunMode.BACKTEST)
|
config = setup_utils_configuration(args, RunMode.BACKTEST)
|
||||||
|
|
||||||
logger.info("Starting freqtrade in analysis mode")
|
logger.info("Starting freqtrade in analysis mode")
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,17 @@ from freqtrade.commands.cli_options import AVAILABLE_CLI_OPTIONS
|
|||||||
from freqtrade.constants import DEFAULT_CONFIG
|
from freqtrade.constants import DEFAULT_CONFIG
|
||||||
|
|
||||||
|
|
||||||
ARGS_COMMON = ["verbosity", "logfile", "version", "config", "datadir", "user_data_dir"]
|
ARGS_COMMON = [
|
||||||
|
"verbosity",
|
||||||
|
"print_colorized",
|
||||||
|
"logfile",
|
||||||
|
"version",
|
||||||
|
"config",
|
||||||
|
"datadir",
|
||||||
|
"user_data_dir",
|
||||||
|
]
|
||||||
|
|
||||||
|
ARGS_MAIN = ["version_main"]
|
||||||
|
|
||||||
ARGS_STRATEGY = [
|
ARGS_STRATEGY = [
|
||||||
"strategy",
|
"strategy",
|
||||||
@@ -35,7 +45,8 @@ ARGS_COMMON_OPTIMIZE = [
|
|||||||
"pairs",
|
"pairs",
|
||||||
]
|
]
|
||||||
|
|
||||||
ARGS_BACKTEST = ARGS_COMMON_OPTIMIZE + [
|
ARGS_BACKTEST = [
|
||||||
|
*ARGS_COMMON_OPTIMIZE,
|
||||||
"position_stacking",
|
"position_stacking",
|
||||||
"enable_protections",
|
"enable_protections",
|
||||||
"dry_run_wallet",
|
"dry_run_wallet",
|
||||||
@@ -48,7 +59,8 @@ ARGS_BACKTEST = ARGS_COMMON_OPTIMIZE + [
|
|||||||
"freqai_backtest_live_models",
|
"freqai_backtest_live_models",
|
||||||
]
|
]
|
||||||
|
|
||||||
ARGS_HYPEROPT = ARGS_COMMON_OPTIMIZE + [
|
ARGS_HYPEROPT = [
|
||||||
|
*ARGS_COMMON_OPTIMIZE,
|
||||||
"hyperopt",
|
"hyperopt",
|
||||||
"hyperopt_path",
|
"hyperopt_path",
|
||||||
"position_stacking",
|
"position_stacking",
|
||||||
@@ -58,7 +70,6 @@ ARGS_HYPEROPT = ARGS_COMMON_OPTIMIZE + [
|
|||||||
"epochs",
|
"epochs",
|
||||||
"spaces",
|
"spaces",
|
||||||
"print_all",
|
"print_all",
|
||||||
"print_colorized",
|
|
||||||
"print_json",
|
"print_json",
|
||||||
"hyperopt_jobs",
|
"hyperopt_jobs",
|
||||||
"hyperopt_random_state",
|
"hyperopt_random_state",
|
||||||
@@ -67,20 +78,20 @@ ARGS_HYPEROPT = ARGS_COMMON_OPTIMIZE + [
|
|||||||
"disableparamexport",
|
"disableparamexport",
|
||||||
"hyperopt_ignore_missing_space",
|
"hyperopt_ignore_missing_space",
|
||||||
"analyze_per_epoch",
|
"analyze_per_epoch",
|
||||||
|
"early_stop",
|
||||||
]
|
]
|
||||||
|
|
||||||
ARGS_EDGE = ARGS_COMMON_OPTIMIZE + ["stoploss_range"]
|
ARGS_EDGE = [*ARGS_COMMON_OPTIMIZE, "stoploss_range"]
|
||||||
|
|
||||||
ARGS_LIST_STRATEGIES = [
|
ARGS_LIST_STRATEGIES = [
|
||||||
"strategy_path",
|
"strategy_path",
|
||||||
"print_one_column",
|
"print_one_column",
|
||||||
"print_colorized",
|
|
||||||
"recursive_strategy_search",
|
"recursive_strategy_search",
|
||||||
]
|
]
|
||||||
|
|
||||||
ARGS_LIST_FREQAIMODELS = ["freqaimodel_path", "print_one_column", "print_colorized"]
|
ARGS_LIST_FREQAIMODELS = ["freqaimodel_path", "print_one_column"]
|
||||||
|
|
||||||
ARGS_LIST_HYPEROPTS = ["hyperopt_path", "print_one_column", "print_colorized"]
|
ARGS_LIST_HYPEROPTS = ["hyperopt_path", "print_one_column"]
|
||||||
|
|
||||||
ARGS_BACKTEST_SHOW = ["exportfilename", "backtest_show_pair_list", "backtest_breakdown"]
|
ARGS_BACKTEST_SHOW = ["exportfilename", "backtest_show_pair_list", "backtest_breakdown"]
|
||||||
|
|
||||||
@@ -119,7 +130,7 @@ ARGS_BUILD_STRATEGY = ["user_data_dir", "strategy", "strategy_path", "template"]
|
|||||||
|
|
||||||
ARGS_CONVERT_DATA_TRADES = ["pairs", "format_from_trades", "format_to", "erase", "exchange"]
|
ARGS_CONVERT_DATA_TRADES = ["pairs", "format_from_trades", "format_to", "erase", "exchange"]
|
||||||
ARGS_CONVERT_DATA = ["pairs", "format_from", "format_to", "erase", "exchange"]
|
ARGS_CONVERT_DATA = ["pairs", "format_from", "format_to", "erase", "exchange"]
|
||||||
ARGS_CONVERT_DATA_OHLCV = ARGS_CONVERT_DATA + ["timeframes", "trading_mode", "candle_types"]
|
ARGS_CONVERT_DATA_OHLCV = [*ARGS_CONVERT_DATA, "timeframes", "trading_mode", "candle_types"]
|
||||||
|
|
||||||
ARGS_CONVERT_TRADES = [
|
ARGS_CONVERT_TRADES = [
|
||||||
"pairs",
|
"pairs",
|
||||||
@@ -185,7 +196,7 @@ ARGS_PLOT_PROFIT = [
|
|||||||
|
|
||||||
ARGS_CONVERT_DB = ["db_url", "db_url_from"]
|
ARGS_CONVERT_DB = ["db_url", "db_url_from"]
|
||||||
|
|
||||||
ARGS_INSTALL_UI = ["erase_ui_only", "ui_version"]
|
ARGS_INSTALL_UI = ["erase_ui_only", "ui_prerelease", "ui_version"]
|
||||||
|
|
||||||
ARGS_SHOW_TRADES = ["db_url", "trade_ids", "print_json"]
|
ARGS_SHOW_TRADES = ["db_url", "trade_ids", "print_json"]
|
||||||
|
|
||||||
@@ -202,7 +213,6 @@ ARGS_HYPEROPT_LIST = [
|
|||||||
"hyperopt_list_max_total_profit",
|
"hyperopt_list_max_total_profit",
|
||||||
"hyperopt_list_min_objective",
|
"hyperopt_list_min_objective",
|
||||||
"hyperopt_list_max_objective",
|
"hyperopt_list_max_objective",
|
||||||
"print_colorized",
|
|
||||||
"print_json",
|
"print_json",
|
||||||
"hyperopt_list_no_details",
|
"hyperopt_list_no_details",
|
||||||
"hyperoptexportfilename",
|
"hyperoptexportfilename",
|
||||||
@@ -342,7 +352,7 @@ class Arguments:
|
|||||||
self.parser = ArgumentParser(
|
self.parser = ArgumentParser(
|
||||||
prog="freqtrade", description="Free, open source crypto trading bot"
|
prog="freqtrade", description="Free, open source crypto trading bot"
|
||||||
)
|
)
|
||||||
self._build_args(optionlist=["version"], parser=self.parser)
|
self._build_args(optionlist=ARGS_MAIN, parser=self.parser)
|
||||||
|
|
||||||
from freqtrade.commands import (
|
from freqtrade.commands import (
|
||||||
start_analysis_entries_exits,
|
start_analysis_entries_exits,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Definition of cli arguments used in arguments.py
|
|||||||
|
|
||||||
from argparse import SUPPRESS, ArgumentTypeError
|
from argparse import SUPPRESS, ArgumentTypeError
|
||||||
|
|
||||||
from freqtrade import __version__, constants
|
from freqtrade import constants
|
||||||
from freqtrade.constants import HYPEROPT_LOSS_BUILTIN
|
from freqtrade.constants import HYPEROPT_LOSS_BUILTIN
|
||||||
from freqtrade.enums import CandleType
|
from freqtrade.enums import CandleType
|
||||||
|
|
||||||
@@ -48,7 +48,6 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
"--verbose",
|
"--verbose",
|
||||||
help="Verbose mode (-vv for more, -vvv to get all messages).",
|
help="Verbose mode (-vv for more, -vvv to get all messages).",
|
||||||
action="count",
|
action="count",
|
||||||
default=0,
|
|
||||||
),
|
),
|
||||||
"logfile": Arg(
|
"logfile": Arg(
|
||||||
"--logfile",
|
"--logfile",
|
||||||
@@ -60,8 +59,15 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
"version": Arg(
|
"version": Arg(
|
||||||
"-V",
|
"-V",
|
||||||
"--version",
|
"--version",
|
||||||
action="version",
|
help="show program's version number and exit",
|
||||||
version=f"%(prog)s {__version__}",
|
action="store_true",
|
||||||
|
),
|
||||||
|
"version_main": Arg(
|
||||||
|
# Copy of version - used to have -V available with and without subcommand.
|
||||||
|
"-V",
|
||||||
|
"--version",
|
||||||
|
help="show program's version number and exit",
|
||||||
|
action="store_true",
|
||||||
),
|
),
|
||||||
"config": Arg(
|
"config": Arg(
|
||||||
"-c",
|
"-c",
|
||||||
@@ -77,7 +83,8 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
"-d",
|
"-d",
|
||||||
"--datadir",
|
"--datadir",
|
||||||
"--data-dir",
|
"--data-dir",
|
||||||
help="Path to directory with historical backtesting data.",
|
help="Path to the base directory of the exchange with historical backtesting data. "
|
||||||
|
"To see futures data, use trading-mode additionally.",
|
||||||
metavar="PATH",
|
metavar="PATH",
|
||||||
),
|
),
|
||||||
"user_data_dir": Arg(
|
"user_data_dir": Arg(
|
||||||
@@ -218,7 +225,7 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
),
|
),
|
||||||
"backtest_breakdown": Arg(
|
"backtest_breakdown": Arg(
|
||||||
"--breakdown",
|
"--breakdown",
|
||||||
help="Show backtesting breakdown per [day, week, month].",
|
help="Show backtesting breakdown per [day, week, month, year].",
|
||||||
nargs="+",
|
nargs="+",
|
||||||
choices=constants.BACKTEST_BREAKDOWNS,
|
choices=constants.BACKTEST_BREAKDOWNS,
|
||||||
),
|
),
|
||||||
@@ -255,6 +262,13 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
metavar="INT",
|
metavar="INT",
|
||||||
default=constants.HYPEROPT_EPOCH,
|
default=constants.HYPEROPT_EPOCH,
|
||||||
),
|
),
|
||||||
|
"early_stop": Arg(
|
||||||
|
"--early-stop",
|
||||||
|
help="Early stop hyperopt if no improvement after (default: %(default)d) epochs.",
|
||||||
|
type=check_int_positive,
|
||||||
|
metavar="INT",
|
||||||
|
default=0, # 0 to disable by default
|
||||||
|
),
|
||||||
"spaces": Arg(
|
"spaces": Arg(
|
||||||
"--spaces",
|
"--spaces",
|
||||||
help="Specify which parameters to hyperopt. Space-separated list.",
|
help="Specify which parameters to hyperopt. Space-separated list.",
|
||||||
@@ -335,7 +349,7 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
help="Specify the class name of the hyperopt loss function class (IHyperOptLoss). "
|
help="Specify the class name of the hyperopt loss function class (IHyperOptLoss). "
|
||||||
"Different functions can generate completely different results, "
|
"Different functions can generate completely different results, "
|
||||||
"since the target for optimization is different. Built-in Hyperopt-loss-functions are: "
|
"since the target for optimization is different. Built-in Hyperopt-loss-functions are: "
|
||||||
f'{", ".join(HYPEROPT_LOSS_BUILTIN)}',
|
f"{', '.join(HYPEROPT_LOSS_BUILTIN)}",
|
||||||
metavar="NAME",
|
metavar="NAME",
|
||||||
),
|
),
|
||||||
"hyperoptexportfilename": Arg(
|
"hyperoptexportfilename": Arg(
|
||||||
@@ -457,7 +471,7 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
"format_from_trades": Arg(
|
"format_from_trades": Arg(
|
||||||
"--format-from",
|
"--format-from",
|
||||||
help="Source format for data conversion.",
|
help="Source format for data conversion.",
|
||||||
choices=constants.AVAILABLE_DATAHANDLERS + ["kraken_csv"],
|
choices=[*constants.AVAILABLE_DATAHANDLERS, "kraken_csv"],
|
||||||
required=True,
|
required=True,
|
||||||
),
|
),
|
||||||
"format_from": Arg(
|
"format_from": Arg(
|
||||||
@@ -521,6 +535,15 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
),
|
),
|
||||||
type=str,
|
type=str,
|
||||||
),
|
),
|
||||||
|
"ui_prerelease": Arg(
|
||||||
|
"--prerelease",
|
||||||
|
help=(
|
||||||
|
"Install the latest pre-release version of FreqUI. "
|
||||||
|
"This is not recommended for production use."
|
||||||
|
),
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
),
|
||||||
# Templating options
|
# Templating options
|
||||||
"template": Arg(
|
"template": Arg(
|
||||||
"--template",
|
"--template",
|
||||||
@@ -664,8 +687,7 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
"--ignore-missing-spaces",
|
"--ignore-missing-spaces",
|
||||||
"--ignore-unparameterized-spaces",
|
"--ignore-unparameterized-spaces",
|
||||||
help=(
|
help=(
|
||||||
"Suppress errors for any requested Hyperopt spaces "
|
"Suppress errors for any requested Hyperopt spaces that do not contain any parameters."
|
||||||
"that do not contain any parameters."
|
|
||||||
),
|
),
|
||||||
action="store_true",
|
action="store_true",
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -15,8 +15,7 @@ logger = logging.getLogger(__name__)
|
|||||||
def _check_data_config_download_sanity(config: Config) -> None:
|
def _check_data_config_download_sanity(config: Config) -> None:
|
||||||
if "days" in config and "timerange" in config:
|
if "days" in config and "timerange" in config:
|
||||||
raise ConfigurationError(
|
raise ConfigurationError(
|
||||||
"--days and --timerange are mutually exclusive. "
|
"--days and --timerange are mutually exclusive. You can only specify one or the other."
|
||||||
"You can only specify one or the other."
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if "pairs" not in config:
|
if "pairs" not in config:
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user