mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-11-29 08:33:07 +00:00
Compare commits
1580 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c8b934c1d | ||
|
|
10eef02e58 | ||
|
|
20380b616a | ||
|
|
94010287cc | ||
|
|
24ebe1a205 | ||
|
|
63ca884dbe | ||
|
|
a6005fde28 | ||
|
|
486a4ed5c0 | ||
|
|
fd4cd11de2 | ||
|
|
262cfedfc9 | ||
|
|
0e807d4a18 | ||
|
|
de8b3a89fd | ||
|
|
62e3f408a6 | ||
|
|
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 | ||
|
|
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 | ||
|
|
466e834680 | ||
|
|
5266f74708 | ||
|
|
243f219e22 | ||
|
|
0f5ef03dc9 | ||
|
|
c1e032a4f0 | ||
|
|
c460511574 | ||
|
|
8624a9c306 | ||
|
|
1f6a0dccd5 | ||
|
|
99ba489874 | ||
|
|
ea00260e79 | ||
|
|
fcc7c5cf5c | ||
|
|
4285602323 | ||
|
|
9e0b9962ce | ||
|
|
4d2863baf5 | ||
|
|
10969b7139 | ||
|
|
a4f3fe70c5 | ||
|
|
3903e4455c | ||
|
|
0f2d3f2638 | ||
|
|
3ed1454168 | ||
|
|
b6867d956c | ||
|
|
392486bc17 | ||
|
|
dfcf4ba7fd | ||
|
|
0f4330a6bb | ||
|
|
e5da4d4be1 | ||
|
|
44d9cb85a0 | ||
|
|
59f3d88c58 | ||
|
|
3e5ab8549f | ||
|
|
af28656138 | ||
|
|
0032f9a960 | ||
|
|
5ca31508fb | ||
|
|
a58fde367c | ||
|
|
3f41910eb4 | ||
|
|
9a201566f2 | ||
|
|
a180cb95dc | ||
|
|
fbb757fa2f | ||
|
|
6ee38adbb5 | ||
|
|
6f3dca44a3 | ||
|
|
a4ae5b74a4 | ||
|
|
fc970a1af4 | ||
|
|
10063b205c | ||
|
|
6c94b75172 | ||
|
|
7a619594f6 | ||
|
|
0682d12fe3 | ||
|
|
1119ee1cdd | ||
|
|
8fe1f3cb95 | ||
|
|
6121fb30a9 | ||
|
|
a40b2816a1 | ||
|
|
bb372e380d | ||
|
|
aa99baf268 | ||
|
|
606013a697 | ||
|
|
a88675b693 | ||
|
|
b08a93a287 | ||
|
|
2768155e7d | ||
|
|
9f2142135e | ||
|
|
258b85a860 | ||
|
|
b1bf56cfab | ||
|
|
d2d6c6fa81 | ||
|
|
b1fc271a7e | ||
|
|
37bbb0e0e0 | ||
|
|
2a9a3e020c | ||
|
|
cd2520603a | ||
|
|
b5748fee6e | ||
|
|
b092dfa2c9 | ||
|
|
2ad1fbd771 | ||
|
|
1ca594bbcb | ||
|
|
e66611c965 | ||
|
|
c5a95dc682 | ||
|
|
d7ccbfef20 | ||
|
|
79f35bb553 | ||
|
|
9e30e5c34c | ||
|
|
4963a9668f | ||
|
|
e59bd71c17 | ||
|
|
5750d05891 | ||
|
|
1810a911d4 | ||
|
|
51ae0f0377 | ||
|
|
215b648edf | ||
|
|
d73f01701e | ||
|
|
010b282679 | ||
|
|
6ef8291b2e | ||
|
|
b820810afe | ||
|
|
cef21860eb | ||
|
|
0c08656965 | ||
|
|
59b1460e30 | ||
|
|
b75ac1243a | ||
|
|
93af2b7b1d | ||
|
|
7092edfe4c | ||
|
|
0663335011 | ||
|
|
6cc0c2be91 | ||
|
|
4a256ed7ca | ||
|
|
2a526a815e | ||
|
|
0a81658881 | ||
|
|
5ac95a0507 | ||
|
|
cefacf4a6d | ||
|
|
c9aa202be8 | ||
|
|
77e36ed313 | ||
|
|
52933e977b | ||
|
|
cf4c29a57f | ||
|
|
90cd381efa | ||
|
|
9405f415d0 | ||
|
|
3dcc130903 | ||
|
|
9d022180e7 | ||
|
|
ba42d8d8c6 | ||
|
|
117887ff3a | ||
|
|
b62fa8190b | ||
|
|
eadd4a7bb2 | ||
|
|
a93a1b8b48 | ||
|
|
12cbe70371 | ||
|
|
ed3367244c | ||
|
|
b8b69eecb8 | ||
|
|
65acd5d827 | ||
|
|
4d6732cd19 | ||
|
|
dc5942115d | ||
|
|
c14492a6cf | ||
|
|
07682c396e | ||
|
|
84e5a9521d | ||
|
|
48b0ffac06 | ||
|
|
5c42c89505 | ||
|
|
d37e23f68e | ||
|
|
9953903193 | ||
|
|
48506f2945 | ||
|
|
503305cbdb | ||
|
|
0a27a7ad38 | ||
|
|
32f592444a | ||
|
|
daf655cd24 | ||
|
|
04813e452c | ||
|
|
b50d9f5c59 | ||
|
|
44c29aa998 | ||
|
|
2a45ff08e4 | ||
|
|
7b1ea81a27 | ||
|
|
d559572718 | ||
|
|
2c1400a9ff | ||
|
|
85af1c91a2 | ||
|
|
dcc8c8800f | ||
|
|
5a24292d34 | ||
|
|
c492dcc7ba | ||
|
|
c5f89f34fd | ||
|
|
1ef4b063ea | ||
|
|
d05cae10f7 | ||
|
|
478387531d | ||
|
|
0b9cca27e2 | ||
|
|
ca9589b2e8 | ||
|
|
e7b1a7e493 | ||
|
|
c112b84d0f | ||
|
|
40cb70fca1 | ||
|
|
0b0bbd4c42 | ||
|
|
4704f2b08e | ||
|
|
f9bd11f6fb | ||
|
|
0d73e961a4 | ||
|
|
e1f759e70e | ||
|
|
66380566c8 | ||
|
|
8cb69e4d5a | ||
|
|
8ee2c849b4 | ||
|
|
564d874869 | ||
|
|
d38fcd2db4 | ||
|
|
06e20b38b5 | ||
|
|
c8b7449b25 | ||
|
|
6edfebdfed | ||
|
|
c4b39a4fb1 | ||
|
|
cdcca3da1c | ||
|
|
44d1f169c3 | ||
|
|
d805ee6f3d | ||
|
|
ed2427852b | ||
|
|
5af894047e | ||
|
|
fced0c4952 | ||
|
|
609893f7ec | ||
|
|
3f795a8918 | ||
|
|
a5907db5d8 | ||
|
|
ad7b70a354 | ||
|
|
d992772492 | ||
|
|
7ba879c441 | ||
|
|
3fa2238e9c | ||
|
|
274136dacb | ||
|
|
d5d65cfd56 | ||
|
|
17c11d09fc | ||
|
|
6bf42173a1 | ||
|
|
c8649a77d2 | ||
|
|
d780d56b9a | ||
|
|
2587b549a0 | ||
|
|
dd805c4c25 | ||
|
|
5cd1892dee | ||
|
|
f575e56e46 | ||
|
|
af7974adda | ||
|
|
685811ef63 | ||
|
|
12ae36e99e | ||
|
|
abfe683763 | ||
|
|
a1ab8de593 | ||
|
|
b04c5aec88 | ||
|
|
b862927c8c | ||
|
|
5744e16a07 | ||
|
|
11f0a59031 | ||
|
|
8dfbf342fd | ||
|
|
5f947a86c7 | ||
|
|
0f18e78bb4 | ||
|
|
d0c5d614f7 | ||
|
|
e2e1c610d8 | ||
|
|
1e74aa3087 | ||
|
|
f54a141918 | ||
|
|
b54d8c53a7 | ||
|
|
23d6c362c4 | ||
|
|
41a548d625 | ||
|
|
016cabb7b2 | ||
|
|
9129266f54 | ||
|
|
e8376d5b79 | ||
|
|
cc7b1a5642 | ||
|
|
f11fe14cdd | ||
|
|
219e6b420e | ||
|
|
3a6ef8c34b | ||
|
|
4f318a5981 | ||
|
|
f978a5c754 | ||
|
|
f378e10752 | ||
|
|
30909d13ba | ||
|
|
8cd03c9624 | ||
|
|
8f617d01d4 | ||
|
|
569ac2bc5b | ||
|
|
c1be014499 | ||
|
|
7d1ac0248b | ||
|
|
aa8e504ef7 | ||
|
|
6963141eb8 | ||
|
|
3295b1c8de | ||
|
|
0159d25e48 | ||
|
|
abbfe04642 | ||
|
|
8cf3c7b826 | ||
|
|
0fb927e709 | ||
|
|
c00b248d1a | ||
|
|
d2b4d1e183 | ||
|
|
8fb9140c21 | ||
|
|
cb9d828ba0 | ||
|
|
467c0dfffa | ||
|
|
d887a4aa4a | ||
|
|
34835752f8 | ||
|
|
b9aa78b987 | ||
|
|
d8fa782f13 | ||
|
|
f3d7b249be | ||
|
|
097836d193 | ||
|
|
7552ad5edb | ||
|
|
e9cf0a71d8 | ||
|
|
cf731d7296 | ||
|
|
946e6fd4c2 | ||
|
|
fe9d1a053e | ||
|
|
6b1ac499ba | ||
|
|
0fc0b2a1be | ||
|
|
6887ed4bf7 | ||
|
|
8cb82df055 | ||
|
|
6788214671 | ||
|
|
4c2488ff65 | ||
|
|
05b101b612 | ||
|
|
65ab47dc63 | ||
|
|
23579df8da | ||
|
|
2b91be6237 | ||
|
|
f1fabb07bf | ||
|
|
8aea015452 | ||
|
|
83471228e7 | ||
|
|
e97a647b54 | ||
|
|
f5dceb0b09 | ||
|
|
d4fbdeee94 | ||
|
|
f529cfe8cf | ||
|
|
4d36aaff39 | ||
|
|
f07aec457a | ||
|
|
d898c80e65 | ||
|
|
2ff0abc6e7 | ||
|
|
0276e65f39 | ||
|
|
4cd8e6b444 | ||
|
|
58357a0746 | ||
|
|
d0223e6f48 | ||
|
|
142ea68dce | ||
|
|
654d2ab63d | ||
|
|
a30f281478 | ||
|
|
ae1baf5789 | ||
|
|
3c88bdc60c | ||
|
|
6d698e584b | ||
|
|
193b989342 | ||
|
|
8dc322d7f2 | ||
|
|
eee5d710e7 | ||
|
|
489db37bbd | ||
|
|
10b5d5e56b | ||
|
|
934bcf253e | ||
|
|
0683ba3a54 | ||
|
|
a85f200450 | ||
|
|
98e0a5f101 | ||
|
|
fb9e11b7b5 | ||
|
|
e77ca024d7 | ||
|
|
63f8217cd5 | ||
|
|
9f5cb3a07e | ||
|
|
e09d1b42f2 | ||
|
|
267d9333a1 | ||
|
|
ab39ac29e8 | ||
|
|
6c25feabf2 | ||
|
|
171157c100 | ||
|
|
3137d7cf2c | ||
|
|
6ab528748e | ||
|
|
621dfc136e | ||
|
|
9d07f5dc2e | ||
|
|
48dd86bd9b | ||
|
|
4879582896 | ||
|
|
6584f86bce | ||
|
|
82d517fcbb | ||
|
|
ff371c43e0 | ||
|
|
0bf0e1808c | ||
|
|
6be5947f69 | ||
|
|
b1d7d7304d | ||
|
|
1d0702e143 | ||
|
|
298ce335b9 | ||
|
|
e04f630f41 | ||
|
|
7dfee16e25 | ||
|
|
d6c21e2af6 | ||
|
|
ebae0a7248 | ||
|
|
fe834f00a2 | ||
|
|
3855d44bf5 | ||
|
|
ad8f621287 | ||
|
|
18305a5bf6 | ||
|
|
b0b73bf166 | ||
|
|
7a8971b9b6 | ||
|
|
c082e5f6a6 | ||
|
|
ef0703f209 | ||
|
|
196c122e0a | ||
|
|
57d5a55ca0 | ||
|
|
94e09f9fa0 | ||
|
|
2f4bd6a0c9 | ||
|
|
58d3555102 | ||
|
|
b032c329e3 | ||
|
|
73f00d2bc3 | ||
|
|
cf896bbb52 | ||
|
|
ba162e35c4 | ||
|
|
00e9178d5f | ||
|
|
62b0995f6a | ||
|
|
4107e5cc9a | ||
|
|
c841146968 | ||
|
|
6c9e6cc198 | ||
|
|
980bfddd8a | ||
|
|
06327e8f04 | ||
|
|
2290b44f82 | ||
|
|
c0cec2b9de | ||
|
|
e376889f3d | ||
|
|
8584cacb6e | ||
|
|
3ff19babf5 | ||
|
|
8b5aa08c57 | ||
|
|
cffcb2b985 | ||
|
|
1da8b68906 | ||
|
|
d53f4fb81b | ||
|
|
02fcd3b489 | ||
|
|
7b70a7a68a | ||
|
|
5060725ef5 | ||
|
|
6bf3218665 | ||
|
|
ab42f84daa | ||
|
|
29f86afaf4 | ||
|
|
ac5a3b9217 | ||
|
|
d7d73364e9 | ||
|
|
f83a57ae5c | ||
|
|
56d747818d | ||
|
|
309adb2ffd | ||
|
|
64b50d13fa | ||
|
|
16d2dbc9d7 | ||
|
|
73d53579d9 | ||
|
|
fbd6a58e3d | ||
|
|
4717f716de | ||
|
|
02a089cb64 | ||
|
|
0ada6fbd46 | ||
|
|
2c8840b7e0 | ||
|
|
8f15bce680 | ||
|
|
1510c5517b | ||
|
|
f6e2fcbf15 | ||
|
|
55247b4e12 | ||
|
|
f31b26b1ab | ||
|
|
2b350eb872 | ||
|
|
88d77658f8 | ||
|
|
cbbc386170 | ||
|
|
7f9226861a | ||
|
|
162c79029f | ||
|
|
5f363f5c9d | ||
|
|
bd5877ad49 | ||
|
|
71cf7aedb5 | ||
|
|
fa1e0af19f | ||
|
|
0a51006da2 | ||
|
|
4c365f6afc | ||
|
|
a49b0a922a | ||
|
|
a6199680cd | ||
|
|
9ff4298475 | ||
|
|
5793216d5c | ||
|
|
d1710826e6 | ||
|
|
675b996f57 | ||
|
|
21777a5804 | ||
|
|
b1ca00b037 | ||
|
|
e2a09f272a | ||
|
|
cf9c9fe278 | ||
|
|
0e77c89d79 | ||
|
|
7571ae19a0 | ||
|
|
69c1de7e4a | ||
|
|
09308e568d | ||
|
|
671821aeb3 | ||
|
|
7369331e2d | ||
|
|
e6e193f252 | ||
|
|
2bb111605c | ||
|
|
37aba6f7d5 | ||
|
|
3fc259bb9b | ||
|
|
15c1a8ee0b | ||
|
|
b4b6de4e0d | ||
|
|
5b0be7e1a9 | ||
|
|
92e64927b0 | ||
|
|
58cde3253d | ||
|
|
47262b9350 | ||
|
|
183909f474 | ||
|
|
06bb43b13e | ||
|
|
2ed8e1639f | ||
|
|
e78d5b7787 | ||
|
|
e0c6cc1563 | ||
|
|
472132c236 | ||
|
|
1262aa19ec | ||
|
|
e9e3f7ef16 | ||
|
|
d9d4c478cc | ||
|
|
0c79c32b0d | ||
|
|
db56fc158f | ||
|
|
af8d2490e2 | ||
|
|
fdc77bfd5b | ||
|
|
5572d37c7f | ||
|
|
57f2ab2f67 | ||
|
|
1cab52f555 | ||
|
|
748233ca70 | ||
|
|
f76108c5b5 | ||
|
|
09f94f7b56 | ||
|
|
a85b8d6edc | ||
|
|
52c9761e5b | ||
|
|
c2dbb9cb43 | ||
|
|
59c3743f77 | ||
|
|
98422f8476 | ||
|
|
8c6283a687 | ||
|
|
1fd492d838 | ||
|
|
fc63a713fd | ||
|
|
e97b9820a4 | ||
|
|
52f24af701 | ||
|
|
c3032feaf7 | ||
|
|
b30c1523e3 | ||
|
|
6e1c4c2efd | ||
|
|
3b542ea008 | ||
|
|
5841b56f2d | ||
|
|
85ea29c93c | ||
|
|
f7e979141b | ||
|
|
e0bdc68a9e | ||
|
|
e6cfde211b | ||
|
|
978aaa5c4b | ||
|
|
b67beaa35a | ||
|
|
19f23106e7 | ||
|
|
d8a2c59b04 | ||
|
|
dea785f562 | ||
|
|
ca42f86900 | ||
|
|
de9294d1f4 | ||
|
|
91b83519f5 | ||
|
|
3eb7f296aa | ||
|
|
f3b0e404f0 | ||
|
|
3ba3d7ffcf | ||
|
|
832fa88f08 | ||
|
|
6e9d349ceb | ||
|
|
8bd1524abc | ||
|
|
72f5633061 | ||
|
|
3b25bdc1cb | ||
|
|
3690609519 | ||
|
|
43c9d14ac2 | ||
|
|
83122fa58b | ||
|
|
f23da7ea75 | ||
|
|
7ef93e92e6 | ||
|
|
945f9f8c47 | ||
|
|
29b40d27e7 | ||
|
|
cd83ed699c | ||
|
|
02fcded368 | ||
|
|
18b0dfe28c | ||
|
|
69be62f1e6 | ||
|
|
7136c5b414 | ||
|
|
b637e7dde4 | ||
|
|
f545274a0e | ||
|
|
e8c122d5ed | ||
|
|
9457f63e01 | ||
|
|
df004a2c7a | ||
|
|
a698ee8bc8 | ||
|
|
1228ffe109 | ||
|
|
076a10887b | ||
|
|
fc3db2d29c | ||
|
|
971cdbb918 | ||
|
|
73adbe9e0c | ||
|
|
8363609637 | ||
|
|
705c3a408a | ||
|
|
228fc5ce73 | ||
|
|
09885535ac | ||
|
|
de139af5a5 | ||
|
|
d9c7790e82 | ||
|
|
aa03b7d9a0 | ||
|
|
8f9d0019e6 | ||
|
|
9e3fae1991 | ||
|
|
5dcb239253 | ||
|
|
9fcdea14d7 | ||
|
|
85dbe83154 | ||
|
|
ee48da2a0a | ||
|
|
f477389159 | ||
|
|
3bb7f78255 | ||
|
|
25aecfa9b2 | ||
|
|
f821e504c3 | ||
|
|
d66381863e | ||
|
|
68712c884e | ||
|
|
db9b31cb85 | ||
|
|
7090d4e5ba | ||
|
|
b2423fa390 | ||
|
|
83b87cb812 | ||
|
|
44dcb4cc78 | ||
|
|
64803a735d | ||
|
|
20e77bb5d9 | ||
|
|
f11e5128ad | ||
|
|
bbe13cafcb | ||
|
|
1acca87fbf | ||
|
|
2012bb7c53 | ||
|
|
14d384a30a | ||
|
|
927f5e2c8b | ||
|
|
d59bedf977 | ||
|
|
c61a71a36e | ||
|
|
46f2e693bc | ||
|
|
cbc4bb5420 | ||
|
|
49e85e0680 | ||
|
|
e8d724680a | ||
|
|
6d9ab5e9ff | ||
|
|
a6d513a0e6 | ||
|
|
d565c40f4b | ||
|
|
52b4ae5eae | ||
|
|
0f53dc1b7b | ||
|
|
5c4b9e59d1 | ||
|
|
a02f63dcc3 | ||
|
|
a3a94e6ea4 | ||
|
|
c039a45def | ||
|
|
3276dd6b94 | ||
|
|
de306de78b | ||
|
|
19f96d60e3 | ||
|
|
bfdbf0248c | ||
|
|
660863392b | ||
|
|
8baa0f7310 | ||
|
|
6b18c4f24c | ||
|
|
40f70a1cc0 | ||
|
|
c869dfea3f | ||
|
|
39b4263b8b | ||
|
|
cf7016b36d | ||
|
|
1893ac7ed6 | ||
|
|
a748d105ed | ||
|
|
fc307bcf5b | ||
|
|
03033a0684 | ||
|
|
7ca39a5c38 | ||
|
|
d7555e1f29 | ||
|
|
37726fba58 | ||
|
|
c4cf582c9d | ||
|
|
acc53065e5 | ||
|
|
9360c109a9 | ||
|
|
5d9af5a7da | ||
|
|
88e0fed4c4 | ||
|
|
98dcc08c6d | ||
|
|
702b50e7e9 | ||
|
|
8f946ea1b2 | ||
|
|
4e5ae0af84 | ||
|
|
ca00871362 | ||
|
|
a1d8658297 | ||
|
|
31814e8bf9 | ||
|
|
0028df2564 | ||
|
|
9b3764212f | ||
|
|
8128b85706 | ||
|
|
d7c88a38fc | ||
|
|
0b0b221c02 | ||
|
|
d9b8f46282 | ||
|
|
fbb64db3ae | ||
|
|
33d8e67a87 | ||
|
|
f05f173d23 | ||
|
|
81a622a9fa | ||
|
|
67415dd7e2 | ||
|
|
e8cd6b3be3 | ||
|
|
7e96e7af83 | ||
|
|
119b73ead2 | ||
|
|
365c454da1 | ||
|
|
b6d1f9f754 | ||
|
|
6719d9670d | ||
|
|
62234878a1 | ||
|
|
851a9a7620 | ||
|
|
61d9002cb1 | ||
|
|
84fc5dfcf7 | ||
|
|
e1b3ae208d | ||
|
|
60ec9739c2 | ||
|
|
c9fb3dfb1d | ||
|
|
8230d1b515 | ||
|
|
838b4f4e52 | ||
|
|
eae5b154c9 | ||
|
|
ebc870d2d4 | ||
|
|
986b1aadbf | ||
|
|
9ced73bf19 | ||
|
|
f0428d5c99 | ||
|
|
486a0d2c6e | ||
|
|
13cf6a1007 | ||
|
|
4c59bcc1bb | ||
|
|
057bb31d94 | ||
|
|
6258c0671b | ||
|
|
b3b45458f6 | ||
|
|
54047a98b3 | ||
|
|
6411dcbf72 | ||
|
|
1818215fee | ||
|
|
1ffceef9f0 | ||
|
|
be1426a5f6 | ||
|
|
3ebb819ba3 | ||
|
|
5f16e534ee | ||
|
|
8f8e6f16b4 | ||
|
|
b5592b88fa | ||
|
|
ba06269ed7 | ||
|
|
e450baeac4 | ||
|
|
3a81b6a08f | ||
|
|
b7a2efcd6a | ||
|
|
a605d50d69 | ||
|
|
27d894b8e9 | ||
|
|
14f1ef8e30 | ||
|
|
7b471d59c5 | ||
|
|
5ca102ffee | ||
|
|
0e04f79b6d | ||
|
|
c141b873c3 | ||
|
|
3cc97690a4 | ||
|
|
5b7f08137f | ||
|
|
00318be59f | ||
|
|
37c00d4eeb | ||
|
|
3300d25e57 | ||
|
|
f443b1426f | ||
|
|
96354ee1d8 | ||
|
|
41b725714f | ||
|
|
12560e983c | ||
|
|
44ff6d50ec | ||
|
|
29c1cca990 | ||
|
|
979f7ba78c | ||
|
|
b6dfe01628 | ||
|
|
d4cd5ba231 | ||
|
|
e7cf1e34cf | ||
|
|
c9718de24c | ||
|
|
c58b1f0fd2 | ||
|
|
b720ae5d75 | ||
|
|
3cea1a99b7 | ||
|
|
03eb079a5e | ||
|
|
899db2de78 | ||
|
|
22338d7058 | ||
|
|
db6d7714a4 | ||
|
|
2de4f425ff | ||
|
|
a71ab6e2ae | ||
|
|
0b6bf701ef | ||
|
|
38eb4eed97 | ||
|
|
bdb54f56d9 | ||
|
|
3eb2981fb4 | ||
|
|
835269825d | ||
|
|
12ab1cb2c4 | ||
|
|
07f0e3803a | ||
|
|
3d307fe8ff | ||
|
|
5cb4a65cbd | ||
|
|
84ce065f76 | ||
|
|
6398d7ff23 | ||
|
|
7e3f8ad012 | ||
|
|
8703c87880 | ||
|
|
7e010c88b9 | ||
|
|
dad921bf5b | ||
|
|
e020bafc38 | ||
|
|
ecf5e1ce6b | ||
|
|
31bcee1a13 | ||
|
|
6245127ce1 | ||
|
|
d1a4b9ad85 | ||
|
|
167e615f67 | ||
|
|
9c1b0471ca | ||
|
|
96a8a94309 | ||
|
|
d2960aae3c | ||
|
|
3f1a23615a | ||
|
|
78de0f3167 | ||
|
|
718e900a39 | ||
|
|
eff2a857c0 | ||
|
|
cf2b5cc24d | ||
|
|
7859fadf6b | ||
|
|
34588b7dc0 | ||
|
|
f6999898d5 | ||
|
|
821243ce7c | ||
|
|
44d0abb111 | ||
|
|
10fd2b291e | ||
|
|
5034c7c312 | ||
|
|
ff36ba7742 | ||
|
|
9b2fabfb3e | ||
|
|
4008eb20a3 | ||
|
|
e224ee8277 | ||
|
|
d236f97605 | ||
|
|
0efb966b68 | ||
|
|
63dfa52ea8 | ||
|
|
74507e9981 | ||
|
|
d24bef7883 | ||
|
|
59bf0c080a | ||
|
|
e8553cfac0 | ||
|
|
baadf62fc3 | ||
|
|
cf0f232635 | ||
|
|
e2ee7f7b2f | ||
|
|
76187d31cf | ||
|
|
c3bbedbc56 | ||
|
|
c4312fbb31 | ||
|
|
1bf71b47df | ||
|
|
67f26fa1ac | ||
|
|
dafabd5b99 | ||
|
|
878adfb0c0 | ||
|
|
3da9f6d0e3 | ||
|
|
f5fdd8a6ab | ||
|
|
47e4599fe2 | ||
|
|
81b432dc0e | ||
|
|
87c5668b14 | ||
|
|
84da133e95 | ||
|
|
80e254d46b | ||
|
|
7bce16f811 | ||
|
|
0d430be1fa | ||
|
|
3c76af9dab | ||
|
|
ad12a9eb99 | ||
|
|
12424aef69 | ||
|
|
091fe6be88 | ||
|
|
9432865bcd | ||
|
|
45bf046645 | ||
|
|
a8516ff0f5 | ||
|
|
2ceda2987c | ||
|
|
e99adc339e | ||
|
|
1aa863a92f | ||
|
|
c0754587bf | ||
|
|
a417698fcd | ||
|
|
7ecf1b18c1 | ||
|
|
9b8e485f00 | ||
|
|
e49b5b03db | ||
|
|
b5f503dbbb | ||
|
|
04d3633545 | ||
|
|
4e585c5c34 | ||
|
|
867aae868d | ||
|
|
1f237db2b5 | ||
|
|
04e8c3ceea | ||
|
|
592848ad03 | ||
|
|
22318eb80e | ||
|
|
c03f8afca1 | ||
|
|
88f8e0b8b1 | ||
|
|
8f6b831512 | ||
|
|
85a2c12768 | ||
|
|
1b8fd63853 | ||
|
|
ae325ff124 | ||
|
|
1698d96883 | ||
|
|
e35f5c9fde | ||
|
|
26a59e2cc5 | ||
|
|
56df7ad9fc | ||
|
|
52ae7c3615 | ||
|
|
c9e56ab04b | ||
|
|
cfa527e9af | ||
|
|
6cb17caf91 | ||
|
|
67a0040732 | ||
|
|
3913b450b6 | ||
|
|
13d61e15f4 | ||
|
|
7d46236900 | ||
|
|
a7e54967c3 | ||
|
|
a440e4ef79 | ||
|
|
b5a52129fb | ||
|
|
8e72e0ec07 | ||
|
|
8204ecc131 | ||
|
|
beaf5215b7 | ||
|
|
b3fa997bea | ||
|
|
eab5bfb475 | ||
|
|
9f5d4dd67f | ||
|
|
fc757f6cf7 | ||
|
|
fd619de1d3 | ||
|
|
4c0341b232 | ||
|
|
a3bcc9d91e | ||
|
|
d215e3ca68 | ||
|
|
493fa8541b | ||
|
|
930b5e07f8 | ||
|
|
5174717ca9 | ||
|
|
a7681fc712 | ||
|
|
7d1976ad05 | ||
|
|
d317f33f4e | ||
|
|
9e53b0742c | ||
|
|
4c78b8c6d1 | ||
|
|
b88db55db3 | ||
|
|
b8f8d1d4b1 | ||
|
|
c4cbf6de3b | ||
|
|
e7b0e3293d | ||
|
|
87c8e85068 | ||
|
|
c9ae5e1e9f | ||
|
|
3d9514d266 | ||
|
|
3d9cbf52b9 | ||
|
|
5b4043db85 | ||
|
|
661d36614f | ||
|
|
11cef55c03 | ||
|
|
667d08d003 | ||
|
|
ba780276a2 | ||
|
|
46db0bc08c | ||
|
|
0de3c6945b | ||
|
|
0bf30aaa6b | ||
|
|
faac205464 | ||
|
|
1d5d7048d6 | ||
|
|
033643c4ca | ||
|
|
8b8b5cfac4 | ||
|
|
9ad32fd846 | ||
|
|
d9766bfd7e | ||
|
|
186f2a8392 | ||
|
|
c6a43b0d0c | ||
|
|
a1513b7c7c | ||
|
|
6571ef4e45 | ||
|
|
a3f8a4f45e | ||
|
|
336111fbd4 | ||
|
|
f100ad12e0 | ||
|
|
7adc505a00 | ||
|
|
d781ee0596 | ||
|
|
0ea9240226 | ||
|
|
dbbdb7cd7e | ||
|
|
2f98d2a781 | ||
|
|
d9ea89857c | ||
|
|
a29a697012 | ||
|
|
430706529a | ||
|
|
9b1999bc02 | ||
|
|
196e82d3ab | ||
|
|
1761d0e65c | ||
|
|
9465723026 | ||
|
|
c9246bf946 | ||
|
|
4f0380bb2c | ||
|
|
41a4c7c39f | ||
|
|
e3bdf89cab | ||
|
|
0843f09c86 | ||
|
|
93afe00205 | ||
|
|
0f978bbcc7 | ||
|
|
88c49a9f7c | ||
|
|
83f285c913 | ||
|
|
24499c5ea9 | ||
|
|
d02b1f04e2 | ||
|
|
c818003399 | ||
|
|
306db6d026 | ||
|
|
b75ff4bdf5 | ||
|
|
60439c7d8e | ||
|
|
3518a4167c | ||
|
|
51dd7fa58e | ||
|
|
0a5549ebc9 | ||
|
|
607167ebe7 | ||
|
|
1183517c3a | ||
|
|
6d169784ed | ||
|
|
9b16cc6266 | ||
|
|
d56f46e1b1 | ||
|
|
6a5feacd38 | ||
|
|
0a91189e6a | ||
|
|
e9d9ebf156 | ||
|
|
1a85dc9b99 | ||
|
|
660af7ec70 | ||
|
|
102d44a7b8 | ||
|
|
549b0f8ef4 | ||
|
|
c6fe8ae70c | ||
|
|
9e1af0db63 | ||
|
|
43b6cb9bff | ||
|
|
9b7acf33c6 | ||
|
|
3914abda20 | ||
|
|
e47042d1cb | ||
|
|
a40a2f96b5 | ||
|
|
efc689a937 | ||
|
|
78bf40eaa9 | ||
|
|
578604619a | ||
|
|
6eac798d91 | ||
|
|
121bdbad84 | ||
|
|
aaeaa02406 | ||
|
|
5b2b2d1a5c | ||
|
|
9209d11084 | ||
|
|
60f54f1bc9 | ||
|
|
8b1de5d9b5 | ||
|
|
b2095481b3 | ||
|
|
a8e8517364 | ||
|
|
c9b31c62cd | ||
|
|
c72cf64c8a | ||
|
|
8c2f841972 | ||
|
|
0c1c750005 | ||
|
|
5c9ec37609 | ||
|
|
4dc20effb8 | ||
|
|
084d951ffd | ||
|
|
092fbe25b8 | ||
|
|
7d5d84763f | ||
|
|
33d98dfe8c | ||
|
|
256815e148 | ||
|
|
cdbfbb5504 | ||
|
|
753a88c409 | ||
|
|
eef6966a85 | ||
|
|
d1d6a30884 | ||
|
|
3a190a1c37 | ||
|
|
ae70902921 | ||
|
|
5418237919 | ||
|
|
42fcdb33a1 | ||
|
|
2098e69fb4 | ||
|
|
2415275e90 | ||
|
|
83fcc92f75 | ||
|
|
64a7ab6e2e | ||
|
|
a772e1f9ca | ||
|
|
7bbed1705c | ||
|
|
4cd4660357 | ||
|
|
d503724bda | ||
|
|
2756a1f1a0 | ||
|
|
883122a98b | ||
|
|
bd7f0383d1 | ||
|
|
aa8cefc110 | ||
|
|
48740f5032 | ||
|
|
35b81a2f38 | ||
|
|
4b582b9d7e | ||
|
|
d72f45a94b | ||
|
|
a71ed3ec5a | ||
|
|
95f709ae14 | ||
|
|
43b2ec1e3f | ||
|
|
92b2a6fa24 | ||
|
|
acb3941776 | ||
|
|
f8807cf659 | ||
|
|
ddeb64964d | ||
|
|
b2d6c5b6a7 | ||
|
|
c01996d1d1 | ||
|
|
271375d171 | ||
|
|
5693039f0d | ||
|
|
52304b37a2 | ||
|
|
3d6e186b30 | ||
|
|
fe8eabda37 | ||
|
|
a00032de53 | ||
|
|
b320358dc4 | ||
|
|
f81ab8e4d4 | ||
|
|
9a537248a4 | ||
|
|
eeed65b354 | ||
|
|
3c6711c590 | ||
|
|
90d8dfcf12 | ||
|
|
03b76f3c8a | ||
|
|
b9caed4392 | ||
|
|
6993a650b0 | ||
|
|
4000794af6 | ||
|
|
7c9e6779c6 | ||
|
|
ec6d9ec7de | ||
|
|
58fccadf08 | ||
|
|
34e7362132 | ||
|
|
fca39a7809 | ||
|
|
278404f47c | ||
|
|
64612712a5 | ||
|
|
9ffd0ad982 | ||
|
|
e703fec3af | ||
|
|
78e9eac64a | ||
|
|
2b1fc8725e | ||
|
|
b885c3dda3 | ||
|
|
aa2c1501da | ||
|
|
ed5c929b23 | ||
|
|
672a23dbcd | ||
|
|
24c09d0319 | ||
|
|
092275a981 | ||
|
|
3fe97e1709 | ||
|
|
1ad4f0c9b5 | ||
|
|
27a327402b | ||
|
|
e2adfe9eab | ||
|
|
67690c9e8e | ||
|
|
4c3c2eaa3b | ||
|
|
cf6c41f9db | ||
|
|
2e0a597ee4 | ||
|
|
628983d123 | ||
|
|
8ec5dd6def | ||
|
|
acc40c73f3 | ||
|
|
1d4658e978 | ||
|
|
b8bbf3b69e | ||
|
|
d8e41fa8b1 | ||
|
|
e9a6ba03f9 | ||
|
|
2e69e38adb | ||
|
|
c5ed876c09 | ||
|
|
96f737f13e | ||
|
|
f369151e8e | ||
|
|
d1b9990e4e | ||
|
|
ed7eb01d1b | ||
|
|
6601127693 | ||
|
|
43236c1cc4 | ||
|
|
65bbf7b2a2 | ||
|
|
74b8dca63e | ||
|
|
7db0e3ac3f | ||
|
|
f889c24497 | ||
|
|
852a1900b4 | ||
|
|
30a273c946 | ||
|
|
903614140a | ||
|
|
0fe772efa8 | ||
|
|
e6dedee56f | ||
|
|
66605e91aa | ||
|
|
137db2c86c | ||
|
|
9c28a6ff4a | ||
|
|
48a8d7de1c | ||
|
|
5fa96c944d | ||
|
|
fe270bd9ae | ||
|
|
a0912ad6b4 | ||
|
|
9ba0c54295 | ||
|
|
86721b88ce | ||
|
|
9bdee1b82d | ||
|
|
abe01f8f48 | ||
|
|
c5525d356e | ||
|
|
36ae564d26 | ||
|
|
cba6bd6ef5 | ||
|
|
4d40ffedff | ||
|
|
319e8d746f | ||
|
|
fe7a88362b | ||
|
|
8bf314202f | ||
|
|
ac8bc7dec2 | ||
|
|
0d5919392e | ||
|
|
1473abf19a | ||
|
|
45e75f3d09 | ||
|
|
5358f2fb9e | ||
|
|
c316d27444 | ||
|
|
0c0bb29f83 | ||
|
|
82bc3270e7 | ||
|
|
ec79b0b17b | ||
|
|
0560567058 | ||
|
|
3de740b35f | ||
|
|
b69f598e51 | ||
|
|
1ad177fca7 | ||
|
|
c3ad3ff348 | ||
|
|
ad578bb171 | ||
|
|
9538c49ac8 | ||
|
|
84d43db500 | ||
|
|
584bbd93e0 | ||
|
|
7e2d55743e | ||
|
|
bf2d0468f9 | ||
|
|
d2bc47cfe8 | ||
|
|
a194ef0b78 | ||
|
|
476960b5b7 | ||
|
|
d8c6c766b9 | ||
|
|
98f4bf2f65 | ||
|
|
f9c8b7f4ab | ||
|
|
a92532c0c9 | ||
|
|
bede81632d | ||
|
|
e975062e0e | ||
|
|
0cd051cee2 | ||
|
|
682980be49 | ||
|
|
878043ea3d | ||
|
|
757ae65189 | ||
|
|
cd63abba5b | ||
|
|
a0f00d0c83 | ||
|
|
915591c6d6 | ||
|
|
157cb7d982 | ||
|
|
cdcb21b841 | ||
|
|
2bf79a5298 | ||
|
|
ebefefa0eb | ||
|
|
a740883c8d | ||
|
|
da760075d2 | ||
|
|
b8833772a3 | ||
|
|
131c6e761e | ||
|
|
1fb0f2f048 | ||
|
|
2a25ac9d1f | ||
|
|
773bf765ad | ||
|
|
b0b866eec5 | ||
|
|
8cc928c841 | ||
|
|
4180420765 | ||
|
|
30945dc240 | ||
|
|
4ef87e3419 | ||
|
|
4785194527 | ||
|
|
8a742ce3ec | ||
|
|
27af9455f5 | ||
|
|
98ff572afe | ||
|
|
f77fedbea4 | ||
|
|
39c582dac2 | ||
|
|
8736728478 | ||
|
|
23cf9f47b0 | ||
|
|
b8feefc541 | ||
|
|
e3a6c71087 | ||
|
|
d6cc88fa99 | ||
|
|
428d451e55 | ||
|
|
aa67abad94 | ||
|
|
415b8354f4 | ||
|
|
51c596a21f | ||
|
|
5816a594fd | ||
|
|
f4d76aa360 | ||
|
|
56835f5f09 | ||
|
|
255ad7cac5 | ||
|
|
8c097a81ea | ||
|
|
3dc92b42fe | ||
|
|
1ed5a37280 | ||
|
|
cb36f2844e | ||
|
|
7b93b55b78 | ||
|
|
6837196e44 | ||
|
|
31680f3b59 | ||
|
|
91d9c9b4d5 | ||
|
|
d18d8cf0ea | ||
|
|
123909cdac | ||
|
|
f0eaccc6ac | ||
|
|
1d66ef2f2d | ||
|
|
8aefae3aff | ||
|
|
514558796b | ||
|
|
b00ca54707 | ||
|
|
0dbe507b26 | ||
|
|
4b70bea21f | ||
|
|
096a051b99 | ||
|
|
a3ca1ff1e9 | ||
|
|
28eabfe477 | ||
|
|
0a68b0515c | ||
|
|
566c0c8f72 | ||
|
|
69f0ea5199 | ||
|
|
3fea958faf | ||
|
|
333f2cb472 | ||
|
|
3d1acc65af | ||
|
|
5efc2a09e5 | ||
|
|
9dd887f2ff | ||
|
|
bfaf9e690d | ||
|
|
beebc1743a | ||
|
|
5ba592ff47 | ||
|
|
bb4db022f0 | ||
|
|
5907de90c1 | ||
|
|
25d8a9d1f8 | ||
|
|
b44e8199b5 | ||
|
|
91449d0c8b | ||
|
|
b228f177f3 | ||
|
|
9a40a2d4f2 | ||
|
|
cdc3dabba1 | ||
|
|
40ba2cbe79 | ||
|
|
7ede8af193 | ||
|
|
a835b8cc8f | ||
|
|
e54b47b857 | ||
|
|
c93c25829b | ||
|
|
1cdf8b29a5 | ||
|
|
b6eacf0771 | ||
|
|
4ea23c1bd8 | ||
|
|
70398820c0 | ||
|
|
04abc4d12f | ||
|
|
8491f46045 | ||
|
|
4aa909e587 | ||
|
|
9f5e4b5812 | ||
|
|
06eb5abf11 | ||
|
|
29e6e3b374 | ||
|
|
2fc97f83f4 | ||
|
|
1e761b4c7d | ||
|
|
a2ca136f1f | ||
|
|
94322664f2 | ||
|
|
cbd5c6d3e9 | ||
|
|
0428dc8381 | ||
|
|
01e7b0da46 | ||
|
|
b37dadcc05 | ||
|
|
8e6151fe65 | ||
|
|
9b346c0937 | ||
|
|
b09f80ca30 | ||
|
|
0e0af82290 | ||
|
|
c69b09cbff | ||
|
|
b8ba6cd970 | ||
|
|
004e30d6be | ||
|
|
b084efdd06 | ||
|
|
d377d8462f | ||
|
|
2bbec9f9b1 | ||
|
|
b326908487 | ||
|
|
b21156a886 | ||
|
|
85138b0bc8 | ||
|
|
418356f383 | ||
|
|
c6d7ae9d27 | ||
|
|
0d3ab37eb7 | ||
|
|
e0df0257d1 | ||
|
|
d23c1e8f92 | ||
|
|
670a40e67b | ||
|
|
3bbc6cbab1 | ||
|
|
15de53a22d | ||
|
|
59a44d6973 | ||
|
|
7561692352 | ||
|
|
f50a633f87 | ||
|
|
50f07e7b11 | ||
|
|
660623181a | ||
|
|
03ee3aaf40 | ||
|
|
ad295946c0 | ||
|
|
c28446dad0 | ||
|
|
ff9d1f2728 | ||
|
|
0b7cb2a1a8 | ||
|
|
92af01b0cb | ||
|
|
dc26d0d7ba | ||
|
|
2fe67edab3 | ||
|
|
167e43cbef | ||
|
|
d8cb407c25 | ||
|
|
9452afe3f7 | ||
|
|
8dc6d9ce7d | ||
|
|
bf4b8a318d | ||
|
|
20f6022050 | ||
|
|
65e6c737cd | ||
|
|
6d2572e347 | ||
|
|
52a35197c7 | ||
|
|
2b3a41db3e | ||
|
|
09c1459411 | ||
|
|
98f18b89da | ||
|
|
4249db4330 | ||
|
|
a7f46500ed | ||
|
|
c73fa2b0eb | ||
|
|
db4c4b971a | ||
|
|
e9ccc98ada | ||
|
|
11d6ec33b3 | ||
|
|
c3b6f4ca85 | ||
|
|
d37405a307 | ||
|
|
d7a9841328 | ||
|
|
cf3af42477 | ||
|
|
ad8e6e7d67 | ||
|
|
ae41ab101a | ||
|
|
f4881e7c6f | ||
|
|
94ef4380d4 | ||
|
|
7ebe1b8c14 | ||
|
|
79020bba28 | ||
|
|
95c250ebcc | ||
|
|
bfb14614cc | ||
|
|
12299d4810 | ||
|
|
c67a9d4e84 | ||
|
|
af422c7cd4 | ||
|
|
51bdecea53 | ||
|
|
0f505c6d7b | ||
|
|
ae72f10448 | ||
|
|
9f34153c84 | ||
|
|
c04cf6c5cb | ||
|
|
5112736385 | ||
|
|
11eaa6d77c | ||
|
|
6024903bde | ||
|
|
e96928588e | ||
|
|
94e38d4cdd | ||
|
|
d15921b3f2 | ||
|
|
6b8ca7217b | ||
|
|
2811a470aa | ||
|
|
1fccdd8cda | ||
|
|
33b421014d | ||
|
|
3c6e2b89a4 | ||
|
|
439658fcf1 | ||
|
|
c9acb1466c | ||
|
|
addd27faf8 | ||
|
|
5605bdc7a3 | ||
|
|
f1df7e9bdc | ||
|
|
4765656f87 | ||
|
|
c3a00b93c2 | ||
|
|
e5d2ba7835 | ||
|
|
8c1b119e84 | ||
|
|
593a54e6cb | ||
|
|
95fa7083a9 | ||
|
|
98e08df807 | ||
|
|
01da36f984 | ||
|
|
730bef2920 | ||
|
|
ae155c78c2 | ||
|
|
79ce1ddaef | ||
|
|
714822c93c | ||
|
|
9742216479 | ||
|
|
fb3787173f | ||
|
|
f720183281 | ||
|
|
4bc84acac6 | ||
|
|
14a8086677 | ||
|
|
686b96222e | ||
|
|
0962f37f55 | ||
|
|
2c17551b27 | ||
|
|
3f5a5e35c2 | ||
|
|
07c6d37ff0 | ||
|
|
916ea7acc0 | ||
|
|
eae7e865a5 | ||
|
|
776e5054aa | ||
|
|
bf2b8b280e | ||
|
|
7aa7027a34 | ||
|
|
d4713b2091 | ||
|
|
9b97be4aa4 | ||
|
|
621be11395 | ||
|
|
05af6df536 | ||
|
|
b7bda2355d | ||
|
|
b0976031ae | ||
|
|
d099f30a34 | ||
|
|
699be03bb7 | ||
|
|
ccf93cfdcd | ||
|
|
47358a8229 | ||
|
|
9856c2cfc4 | ||
|
|
df9669ba2c | ||
|
|
f970454cb4 | ||
|
|
69678574d4 | ||
|
|
53cab5074b | ||
|
|
c6c65b1799 | ||
|
|
bb9f64027a | ||
|
|
5f52fc4338 | ||
|
|
82e30c8519 | ||
|
|
6e2aa6b4b8 | ||
|
|
a1681cdd63 | ||
|
|
611a3ce138 | ||
|
|
396d933e34 | ||
|
|
0858e0a21e | ||
|
|
704e32b0dc | ||
|
|
f95cc960e1 | ||
|
|
1b00f512c1 | ||
|
|
d9ec66695c | ||
|
|
1a2578a4b7 | ||
|
|
e9ba0d2ce8 | ||
|
|
f714e306da | ||
|
|
6a4b641250 | ||
|
|
8d96844312 | ||
|
|
b7145debfb | ||
|
|
990dbb6c06 | ||
|
|
c6a66a8fac | ||
|
|
65ba67dedc | ||
|
|
824db78234 | ||
|
|
2fdf108198 | ||
|
|
63092d7d1a | ||
|
|
964d437c7a | ||
|
|
d49c556291 | ||
|
|
d6b2748293 | ||
|
|
e3a5831d64 | ||
|
|
08d5174d02 | ||
|
|
dacb926db5 | ||
|
|
c0e9173c9b | ||
|
|
f46308bbdb | ||
|
|
331db99a4e | ||
|
|
d84f32f27d | ||
|
|
ac28a44b92 | ||
|
|
003a41b920 | ||
|
|
bc4c693525 | ||
|
|
d4ba837641 | ||
|
|
4a1592dd92 | ||
|
|
ac145a0b65 | ||
|
|
50c00dcae6 | ||
|
|
95d964140b | ||
|
|
0a73a7eb52 | ||
|
|
0aecb24930 | ||
|
|
904f5303a6 | ||
|
|
585761e931 | ||
|
|
4d53797cba | ||
|
|
803677e884 | ||
|
|
17617c58d7 | ||
|
|
96d03ec13d | ||
|
|
4726afbebf | ||
|
|
97c937e554 | ||
|
|
b25520cf18 | ||
|
|
c6b46d75cb | ||
|
|
a554352ae0 | ||
|
|
a7fd03f1b7 | ||
|
|
ef96116c3f | ||
|
|
7edc50865f | ||
|
|
a881d3fd81 | ||
|
|
268683f8ea | ||
|
|
b6702d1d32 | ||
|
|
c3679910a4 | ||
|
|
19a2e06c0b | ||
|
|
8085e24dcd | ||
|
|
d351ed0173 | ||
|
|
3ebc5b136c | ||
|
|
103991746b | ||
|
|
7f0e5dd335 | ||
|
|
ecf9c173c4 | ||
|
|
b0e863dbbb | ||
|
|
8f8859a5f5 | ||
|
|
2ad921f99e | ||
|
|
3a481df45d | ||
|
|
6a580176ea | ||
|
|
910b3ad536 | ||
|
|
05cf4cab8e | ||
|
|
6752c3e288 | ||
|
|
faeda2a166 | ||
|
|
3d67e0893a |
@@ -32,7 +32,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@v6
|
- uses: peter-evans/create-pull-request@v7
|
||||||
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
|
||||||
|
|||||||
151
.github/workflows/ci.yml
vendored
151
.github/workflows/ci.yml
vendored
@@ -25,7 +25,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ "ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04" ]
|
os: [ "ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04" ]
|
||||||
python-version: ["3.9", "3.10", "3.11", "3.12"]
|
python-version: ["3.10", "3.11", "3.12"]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -35,6 +35,15 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v5
|
||||||
|
with:
|
||||||
|
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 +51,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: test-${{ matrix.os }}-${{ matrix.python-version }}-pip
|
|
||||||
|
|
||||||
- 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,24 +58,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'))
|
||||||
|
run: |
|
||||||
|
pytest --random-order
|
||||||
|
|
||||||
|
- name: Tests with Coveralls
|
||||||
|
if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-22.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.10' && matrix.os == 'ubuntu-22.04')
|
if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-22.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
|
||||||
@@ -85,6 +94,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
|
||||||
@@ -138,11 +152,8 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ "macos-12", "macos-13", "macos-14" ]
|
os: [ "macos-13", "macos-14", "macos-15" ]
|
||||||
python-version: ["3.9", "3.10", "3.11", "3.12"]
|
python-version: ["3.10", "3.11", "3.12"]
|
||||||
exclude:
|
|
||||||
- os: "macos-14"
|
|
||||||
python-version: "3.9"
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -153,6 +164,15 @@ 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@v5
|
||||||
|
with:
|
||||||
|
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
|
||||||
@@ -160,12 +180,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: ${{ matrix.os }}-${{ matrix.python-version }}-pip
|
|
||||||
|
|
||||||
- name: TA binary *nix
|
- name: TA binary *nix
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
if: steps.cache.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
@@ -193,17 +207,17 @@ jobs:
|
|||||||
rm /usr/local/bin/python3.11-config || true
|
rm /usr/local/bin/python3.11-config || true
|
||||||
rm /usr/local/bin/python3.12-config || true
|
rm /usr/local/bin/python3.12-config || true
|
||||||
|
|
||||||
brew install hdf5 c-blosc libomp
|
brew install libomp
|
||||||
|
|
||||||
- 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: |
|
||||||
@@ -263,7 +277,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ windows-latest ]
|
os: [ windows-latest ]
|
||||||
python-version: ["3.9", "3.10", "3.11", "3.12"]
|
python-version: ["3.10", "3.11", "3.12"]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -273,19 +287,25 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
- name: Pip cache (Windows)
|
- name: Install uv
|
||||||
uses: actions/cache@v4
|
uses: astral-sh/setup-uv@v5
|
||||||
with:
|
with:
|
||||||
path: ~\AppData\Local\pip\Cache
|
enable-cache: true
|
||||||
key: ${{ matrix.os }}-${{ matrix.python-version }}-pip
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache-dependency-glob: "requirements**.txt"
|
||||||
|
cache-suffix: "${{ matrix.python-version }}"
|
||||||
|
prune-cache: false
|
||||||
|
|
||||||
- name: Installation
|
- name: Installation
|
||||||
run: |
|
run: |
|
||||||
|
function uvpipFunction { uv pip $args }
|
||||||
|
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: |
|
||||||
@@ -406,6 +426,15 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v5
|
||||||
|
with:
|
||||||
|
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
|
||||||
@@ -413,11 +442,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: test-${{ matrix.os }}-${{ matrix.python-version }}-pip
|
|
||||||
|
|
||||||
- name: TA binary *nix
|
- name: TA binary *nix
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
if: steps.cache.outputs.cache-hit != 'true'
|
||||||
@@ -426,13 +450,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:
|
||||||
@@ -514,13 +538,40 @@ jobs:
|
|||||||
ft_client/dist
|
ft_client/dist
|
||||||
retention-days: 10
|
retention-days: 10
|
||||||
|
|
||||||
deploy-pypi:
|
deploy-test-pypi:
|
||||||
name: "Deploy to PyPI"
|
name: "Publish Python 🐍 distribution 📦 to TestPyPI"
|
||||||
needs: [ build ]
|
needs: [ build ]
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
if: (github.event_name == 'release')
|
if: (github.event_name == 'release')
|
||||||
environment:
|
environment:
|
||||||
name: release
|
name: testpypi
|
||||||
|
url: https://test.pypi.org/p/freqtrade
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Download artifact 📦
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: freqtrade*-build
|
||||||
|
path: dist
|
||||||
|
merge-multiple: true
|
||||||
|
|
||||||
|
- name: Publish to PyPI (Test)
|
||||||
|
uses: pypa/gh-action-pypi-publish@v1.12.4
|
||||||
|
with:
|
||||||
|
repository-url: https://test.pypi.org/legacy/
|
||||||
|
|
||||||
|
|
||||||
|
deploy-pypi:
|
||||||
|
name: "Publish Python 🐍 distribution 📦 to PyPI"
|
||||||
|
needs: [ build ]
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
if: (github.event_name == 'release')
|
||||||
|
environment:
|
||||||
|
name: pypi
|
||||||
url: https://pypi.org/p/freqtrade
|
url: https://pypi.org/p/freqtrade
|
||||||
permissions:
|
permissions:
|
||||||
id-token: write
|
id-token: write
|
||||||
@@ -535,14 +586,8 @@ jobs:
|
|||||||
path: dist
|
path: dist
|
||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
|
|
||||||
- name: Publish to PyPI (Test)
|
|
||||||
uses: pypa/gh-action-pypi-publish@v1.9.0
|
|
||||||
with:
|
|
||||||
repository-url: https://test.pypi.org/legacy/
|
|
||||||
|
|
||||||
- name: Publish to PyPI
|
- name: Publish to PyPI
|
||||||
uses: pypa/gh-action-pypi-publish@v1.9.0
|
uses: pypa/gh-action-pypi-publish@v1.12.4
|
||||||
|
|
||||||
|
|
||||||
deploy-docker:
|
deploy-docker:
|
||||||
|
|||||||
2
.github/workflows/pre-commit-update.yml
vendored
2
.github/workflows/pre-commit-update.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
|||||||
- name: Run auto-update
|
- name: Run auto-update
|
||||||
run: pre-commit autoupdate
|
run: pre-commit autoupdate
|
||||||
|
|
||||||
- uses: peter-evans/create-pull-request@v6
|
- uses: peter-evans/create-pull-request@v7
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.REPO_SCOPED_TOKEN }}
|
token: ${{ secrets.REPO_SCOPED_TOKEN }}
|
||||||
add-paths: .pre-commit-config.yaml
|
add-paths: .pre-commit-config.yaml
|
||||||
|
|||||||
@@ -9,21 +9,21 @@ repos:
|
|||||||
# stages: [push]
|
# stages: [push]
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||||
rev: "v1.11.2"
|
rev: "v1.14.1"
|
||||||
hooks:
|
hooks:
|
||||||
- id: mypy
|
- id: mypy
|
||||||
exclude: build_helpers
|
exclude: build_helpers
|
||||||
additional_dependencies:
|
additional_dependencies:
|
||||||
- types-cachetools==5.5.0.20240820
|
- types-cachetools==5.5.0.20240820
|
||||||
- types-filelock==3.2.7
|
- types-filelock==3.2.7
|
||||||
- types-requests==2.32.0.20240712
|
- types-requests==2.32.0.20241016
|
||||||
- types-tabulate==0.9.0.20240106
|
- types-tabulate==0.9.0.20241207
|
||||||
- types-python-dateutil==2.9.0.20240821
|
- types-python-dateutil==2.9.0.20241206
|
||||||
- SQLAlchemy==2.0.32
|
- SQLAlchemy==2.0.37
|
||||||
# stages: [push]
|
# stages: [push]
|
||||||
|
|
||||||
- repo: https://github.com/pycqa/isort
|
- repo: https://github.com/pycqa/isort
|
||||||
rev: "5.13.2"
|
rev: "6.0.0"
|
||||||
hooks:
|
hooks:
|
||||||
- id: isort
|
- id: isort
|
||||||
name: isort (python)
|
name: isort (python)
|
||||||
@@ -31,12 +31,13 @@ repos:
|
|||||||
|
|
||||||
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
||||||
# Ruff version.
|
# Ruff version.
|
||||||
rev: 'v0.6.2'
|
rev: 'v0.9.3'
|
||||||
hooks:
|
hooks:
|
||||||
- id: ruff
|
- id: ruff
|
||||||
|
- id: ruff-format
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.6.0
|
rev: v5.0.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
exclude: |
|
exclude: |
|
||||||
@@ -55,8 +56,13 @@ repos:
|
|||||||
.*\.md
|
.*\.md
|
||||||
)$
|
)$
|
||||||
|
|
||||||
|
- repo: https://github.com/stefmolin/exif-stripper
|
||||||
|
rev: 0.6.1
|
||||||
|
hooks:
|
||||||
|
- id: strip-exif
|
||||||
|
|
||||||
- repo: https://github.com/codespell-project/codespell
|
- repo: https://github.com/codespell-project/codespell
|
||||||
rev: v2.3.0
|
rev: v2.4.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: codespell
|
- id: codespell
|
||||||
additional_dependencies:
|
additional_dependencies:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM python:3.12.5-slim-bookworm as base
|
FROM python:3.12.7-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 \
|
||||||
|
|||||||
18
README.md
18
README.md
@@ -30,16 +30,20 @@ Please read the [exchange specific notes](docs/exchanges.md) to learn about even
|
|||||||
- [X] [Binance](https://www.binance.com/)
|
- [X] [Binance](https://www.binance.com/)
|
||||||
- [X] [Bitmart](https://bitmart.com/)
|
- [X] [Bitmart](https://bitmart.com/)
|
||||||
- [X] [BingX](https://bingx.com/invite/0EM9RX)
|
- [X] [BingX](https://bingx.com/invite/0EM9RX)
|
||||||
|
- [X] [Bybit](https://bybit.com/)
|
||||||
- [X] [Gate.io](https://www.gate.io/ref/6266643)
|
- [X] [Gate.io](https://www.gate.io/ref/6266643)
|
||||||
- [X] [HTX](https://www.htx.com/) (Former Huobi)
|
- [X] [HTX](https://www.htx.com/)
|
||||||
|
- [X] [Hyperliquid](https://hyperliquid.xyz/) (A decentralized exchange, or DEX)
|
||||||
- [X] [Kraken](https://kraken.com/)
|
- [X] [Kraken](https://kraken.com/)
|
||||||
- [X] [OKX](https://okx.com/) (Former OKEX)
|
- [X] [OKX](https://okx.com/)
|
||||||
|
- [X] [MyOKX](https://okx.com/) (OKX EEA)
|
||||||
- [ ] [potentially many others](https://github.com/ccxt/ccxt/). _(We cannot guarantee they will work)_
|
- [ ] [potentially many others](https://github.com/ccxt/ccxt/). _(We cannot guarantee they will work)_
|
||||||
|
|
||||||
### Supported Futures Exchanges (experimental)
|
### Supported Futures Exchanges (experimental)
|
||||||
|
|
||||||
- [X] [Binance](https://www.binance.com/)
|
- [X] [Binance](https://www.binance.com/)
|
||||||
- [X] [Gate.io](https://www.gate.io/ref/6266643)
|
- [X] [Gate.io](https://www.gate.io/ref/6266643)
|
||||||
|
- [X] [Hyperliquid](https://hyperliquid.xyz/) (A decentralized exchange, or DEX)
|
||||||
- [X] [OKX](https://okx.com/)
|
- [X] [OKX](https://okx.com/)
|
||||||
- [X] [Bybit](https://bybit.com/)
|
- [X] [Bybit](https://bybit.com/)
|
||||||
|
|
||||||
@@ -60,7 +64,7 @@ Please find the complete documentation on the [freqtrade website](https://www.fr
|
|||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- [x] **Based on Python 3.9+**: For botting on any operating system - Windows, macOS and Linux.
|
- [x] **Based on Python 3.10+**: For botting on any operating system - Windows, macOS and Linux.
|
||||||
- [x] **Persistence**: Persistence is achieved through sqlite.
|
- [x] **Persistence**: Persistence is achieved through sqlite.
|
||||||
- [x] **Dry-run**: Run the bot without paying money.
|
- [x] **Dry-run**: Run the bot without paying money.
|
||||||
- [x] **Backtesting**: Run a simulation of your buy/sell strategy.
|
- [x] **Backtesting**: Run a simulation of your buy/sell strategy.
|
||||||
@@ -86,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
|
||||||
@@ -116,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.
|
||||||
@@ -132,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
|
||||||
@@ -217,7 +221,7 @@ To run this bot we recommend you a cloud instance with a minimum of:
|
|||||||
|
|
||||||
### Software requirements
|
### Software requirements
|
||||||
|
|
||||||
- [Python >= 3.9](http://docs.python-guide.org/en/latest/starting/installation/)
|
- [Python >= 3.10](http://docs.python-guide.org/en/latest/starting/installation/)
|
||||||
- [pip](https://pip.pypa.io/en/stable/installing/)
|
- [pip](https://pip.pypa.io/en/stable/installing/)
|
||||||
- [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
|
- [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
|
||||||
- [TA-Lib](https://ta-lib.github.io/ta-lib-python/)
|
- [TA-Lib](https://ta-lib.github.io/ta-lib-python/)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
53
build_helpers/create_command_partials.py
Normal file
53
build_helpers/create_command_partials.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
import subprocess
|
||||||
|
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")
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
# vendored Wheels compiled via https://github.com/xmatthias/ta-lib-python/tree/ta_bundled_040
|
# vendored Wheels compiled via https://github.com/xmatthias/ta-lib-python/tree/ta_bundled_040
|
||||||
|
|
||||||
python -m pip install --upgrade pip wheel
|
python -m pip install --upgrade pip
|
||||||
|
python -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')"
|
||||||
|
|
||||||
$pyv = python -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')"
|
pip install -U wheel "numpy<2"
|
||||||
|
pip install --only-binary ta-lib --find-links=build_helpers\ ta-lib
|
||||||
|
|
||||||
pip install --find-links=build_helpers\ --prefer-binary TA-Lib
|
|
||||||
|
|
||||||
pip install -r requirements-dev.txt
|
pip install -r requirements-dev.txt
|
||||||
pip install -e .
|
pip install -e .
|
||||||
|
|||||||
Binary file not shown.
@@ -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"
|
||||||
@@ -102,8 +106,17 @@
|
|||||||
},
|
},
|
||||||
"dry_run_wallet": {
|
"dry_run_wallet": {
|
||||||
"description": "Initial wallet balance for dry run mode.",
|
"description": "Initial wallet balance for dry run mode.",
|
||||||
"type": "number",
|
"type": [
|
||||||
"default": 1000
|
"number",
|
||||||
|
"object"
|
||||||
|
],
|
||||||
|
"default": 1000,
|
||||||
|
"patternProperties": {
|
||||||
|
"^[a-zA-Z0-9]+$": {
|
||||||
|
"type": "number"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
},
|
},
|
||||||
"cancel_open_orders_on_exit": {
|
"cancel_open_orders_on_exit": {
|
||||||
"description": "Cancel open orders when exiting.",
|
"description": "Cancel open orders when exiting.",
|
||||||
@@ -579,57 +592,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"protections": {
|
|
||||||
"description": "Configuration for various protections.",
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"method": {
|
|
||||||
"description": "Method used for the protection.",
|
|
||||||
"type": "string",
|
|
||||||
"enum": [
|
|
||||||
"CooldownPeriod",
|
|
||||||
"LowProfitPairs",
|
|
||||||
"MaxDrawdown",
|
|
||||||
"StoplossGuard"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"stop_duration": {
|
|
||||||
"description": "Duration to lock the pair after a protection is triggered, in minutes.",
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0.0
|
|
||||||
},
|
|
||||||
"stop_duration_candles": {
|
|
||||||
"description": "Duration to lock the pair after a protection is triggered, in number of candles.",
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"unlock_at": {
|
|
||||||
"description": "Time when trading will be unlocked regularly. Format: HH:MM",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"trade_limit": {
|
|
||||||
"description": "Minimum number of trades required during lookback period.",
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"lookback_period": {
|
|
||||||
"description": "Period to look back for protection checks, in minutes.",
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 1
|
|
||||||
},
|
|
||||||
"lookback_period_candles": {
|
|
||||||
"description": "Period to look back for protection checks, in number of candles.",
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": [
|
|
||||||
"method"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"telegram": {
|
"telegram": {
|
||||||
"description": "Telegram settings.",
|
"description": "Telegram settings.",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -643,7 +605,11 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"chat_id": {
|
"chat_id": {
|
||||||
"description": "Telegram chat ID",
|
"description": "Telegram chat or group ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"topic_id": {
|
||||||
|
"description": "Telegram topic ID - only applicable for group chats",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"allow_custom_messages": {
|
"allow_custom_messages": {
|
||||||
@@ -733,12 +699,18 @@
|
|||||||
},
|
},
|
||||||
"exit_fill": {
|
"exit_fill": {
|
||||||
"description": "Telegram setting for exit fill signals.",
|
"description": "Telegram setting for exit fill signals.",
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"object"
|
||||||
|
],
|
||||||
|
"additionalProperties": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
"on",
|
"on",
|
||||||
"off",
|
"off",
|
||||||
"silent"
|
"silent"
|
||||||
],
|
]
|
||||||
|
},
|
||||||
"default": "on"
|
"default": "on"
|
||||||
},
|
},
|
||||||
"exit_cancel": {
|
"exit_cancel": {
|
||||||
@@ -1007,7 +979,7 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"x": {
|
"verbosity": {
|
||||||
"description": "Logging verbosity level.",
|
"description": "Logging verbosity level.",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
@@ -1083,7 +1055,6 @@
|
|||||||
"enum": [
|
"enum": [
|
||||||
"json",
|
"json",
|
||||||
"jsongz",
|
"jsongz",
|
||||||
"hdf5",
|
|
||||||
"feather",
|
"feather",
|
||||||
"parquet"
|
"parquet"
|
||||||
],
|
],
|
||||||
@@ -1095,7 +1066,6 @@
|
|||||||
"enum": [
|
"enum": [
|
||||||
"json",
|
"json",
|
||||||
"jsongz",
|
"jsongz",
|
||||||
"hdf5",
|
|
||||||
"feather",
|
"feather",
|
||||||
"parquet"
|
"parquet"
|
||||||
],
|
],
|
||||||
@@ -1434,6 +1404,11 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"default": "example"
|
"default": "example"
|
||||||
},
|
},
|
||||||
|
"wait_for_training_iteration_on_reload": {
|
||||||
|
"description": "Wait for the next training iteration to complete after /reload or ctrl+c.",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
"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",
|
||||||
|
|||||||
BIN
build_helpers/ta_lib-0.4.34-cp310-cp310-win_amd64.whl
Normal file
BIN
build_helpers/ta_lib-0.4.34-cp310-cp310-win_amd64.whl
Normal file
Binary file not shown.
BIN
build_helpers/ta_lib-0.4.34-cp311-cp311-linux_armv7l.whl
Normal file
BIN
build_helpers/ta_lib-0.4.34-cp311-cp311-linux_armv7l.whl
Normal file
Binary file not shown.
BIN
build_helpers/ta_lib-0.4.34-cp311-cp311-win_amd64.whl
Normal file
BIN
build_helpers/ta_lib-0.4.34-cp311-cp311-win_amd64.whl
Normal file
Binary file not shown.
BIN
build_helpers/ta_lib-0.4.34-cp312-cp312-win_amd64.whl
Normal file
BIN
build_helpers/ta_lib-0.4.34-cp312-cp312-win_amd64.whl
Normal file
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
FROM python:3.11.9-slim-bookworm as base
|
FROM python:3.11.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 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 \
|
||||||
|
|||||||
@@ -18,15 +18,13 @@ freqtrade backtesting -c <config.json> --timeframe <tf> --strategy <strategy_nam
|
|||||||
```
|
```
|
||||||
|
|
||||||
This will tell freqtrade to output a pickled dictionary of strategy, pairs and corresponding
|
This will tell freqtrade to output a pickled dictionary of strategy, pairs and corresponding
|
||||||
DataFrame of the candles that resulted in buy signals. Depending on how many buys your strategy
|
DataFrame of the candles that resulted in entry and exit signals.
|
||||||
makes, this file may get quite large, so periodically check your `user_data/backtest_results`
|
Depending on how many entries your strategy makes, this file may get quite large, so periodically check your `user_data/backtest_results` folder to delete old exports.
|
||||||
folder to delete old exports.
|
|
||||||
|
|
||||||
Before running your next backtest, make sure you either delete your old backtest results or run
|
Before running your next backtest, make sure you either delete your old backtest results or run
|
||||||
backtesting with the `--cache none` option to make sure no cached results are used.
|
backtesting with the `--cache none` option to make sure no cached results are used.
|
||||||
|
|
||||||
If all goes well, you should now see a `backtest-result-{timestamp}_signals.pkl` file in the
|
If all goes well, you should now see a `backtest-result-{timestamp}_signals.pkl` and `backtest-result-{timestamp}_exited.pkl` files in the `user_data/backtest_results` folder.
|
||||||
`user_data/backtest_results` folder.
|
|
||||||
|
|
||||||
To analyze the entry/exit tags, we now need to use the `freqtrade backtesting-analysis` command
|
To analyze the entry/exit tags, we now need to use the `freqtrade backtesting-analysis` command
|
||||||
with `--analysis-groups` option provided with space-separated arguments:
|
with `--analysis-groups` option provided with space-separated arguments:
|
||||||
@@ -103,6 +101,10 @@ The indicators have to be present in your strategy's main DataFrame (either for
|
|||||||
timeframe or for informative timeframes) otherwise they will simply be ignored in the script
|
timeframe or for informative timeframes) otherwise they will simply be ignored in the script
|
||||||
output.
|
output.
|
||||||
|
|
||||||
|
!!! Note "Indicator List"
|
||||||
|
The indicator values will be displayed for both entry and exit points. If `--indicator-list all` is specified,
|
||||||
|
only the indicators at the entry point will be shown to avoid excessively large lists, which could occur depending on the strategy.
|
||||||
|
|
||||||
There are a range of candle and trade-related fields that are included in the analysis so are
|
There are a range of candle and trade-related fields that are included in the analysis so are
|
||||||
automatically accessible by including them on the indicator-list, and these include:
|
automatically accessible by including them on the indicator-list, and these include:
|
||||||
|
|
||||||
@@ -118,6 +120,53 @@ automatically accessible by including them on the indicator-list, and these incl
|
|||||||
- **profit_ratio :** trade profit ratio
|
- **profit_ratio :** trade profit ratio
|
||||||
- **profit_abs :** absolute profit return of the trade
|
- **profit_abs :** absolute profit return of the trade
|
||||||
|
|
||||||
|
#### Sample Output for Indicator Values
|
||||||
|
|
||||||
|
```bash
|
||||||
|
freqtrade backtesting-analysis -c user_data/config.json --analysis-groups 0 --indicator-list chikou_span tenkan_sen
|
||||||
|
```
|
||||||
|
|
||||||
|
In this example,
|
||||||
|
we aim to display the `chikou_span` and `tenkan_sen` indicator values at both the entry and exit points of trades.
|
||||||
|
|
||||||
|
A sample output for indicators might look like this:
|
||||||
|
|
||||||
|
| pair | open_date | enter_reason | exit_reason | chikou_span (entry) | tenkan_sen (entry) | chikou_span (exit) | tenkan_sen (exit) |
|
||||||
|
|-----------|---------------------------|--------------|-------------|---------------------|--------------------|--------------------|-------------------|
|
||||||
|
| DOGE/USDT | 2024-07-06 00:35:00+00:00 | | exit_signal | 0.105 | 0.106 | 0.105 | 0.107 |
|
||||||
|
| BTC/USDT | 2024-08-05 14:20:00+00:00 | | roi | 54643.440 | 51696.400 | 54386.000 | 52072.010 |
|
||||||
|
|
||||||
|
As shown in the table, `chikou_span (entry)` represents the indicator value at the time of trade entry,
|
||||||
|
while `chikou_span (exit)` reflects its value at the time of exit.
|
||||||
|
This detailed view of indicator values enhances the analysis.
|
||||||
|
|
||||||
|
The `(entry)` and `(exit)` suffixes are added to indicators
|
||||||
|
to distinguish the values at the entry and exit points of the trade.
|
||||||
|
|
||||||
|
!!! Note "Trade-wide Indicators"
|
||||||
|
Certain trade-wide indicators do not have the `(entry)` or `(exit)` suffix. These indicators include: `pair`, `stake_amount`,
|
||||||
|
`max_stake_amount`, `amount`, `open_date`, `close_date`, `open_rate`, `close_rate`, `fee_open`, `fee_close`, `trade_duration`,
|
||||||
|
`profit_ratio`, `profit_abs`, `exit_reason`,`initial_stop_loss_abs`, `initial_stop_loss_ratio`, `stop_loss_abs`, `stop_loss_ratio`,
|
||||||
|
`min_rate`, `max_rate`, `is_open`, `enter_tag`, `leverage`, `is_short`, `open_timestamp`, `close_timestamp` and `orders`
|
||||||
|
|
||||||
|
#### Filtering Indicators Based on Entry or Exit Signals
|
||||||
|
|
||||||
|
The `--indicator-list` option, by default, displays indicator values for both entry and exit signals. To filter the indicator values exclusively for entry signals, you can use the `--entry-only` argument. Similarly, to display indicator values only at exit signals, use the `--exit-only` argument.
|
||||||
|
|
||||||
|
Example: Display indicator values at entry signals:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
freqtrade backtesting-analysis -c user_data/config.json --analysis-groups 0 --indicator-list chikou_span tenkan_sen --entry-only
|
||||||
|
```
|
||||||
|
|
||||||
|
Example: Display indicator values at exit signals:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
freqtrade backtesting-analysis -c user_data/config.json --analysis-groups 0 --indicator-list chikou_span tenkan_sen --exit-only
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
When using these filters, the indicator names will not be suffixed with `(entry)` or `(exit)`.
|
||||||
|
|
||||||
### Filtering the trade output by date
|
### Filtering the trade output by date
|
||||||
|
|
||||||
|
|||||||
@@ -37,8 +37,9 @@ class SuperDuperHyperOptLoss(IHyperOptLoss):
|
|||||||
min_date: datetime,
|
min_date: datetime,
|
||||||
max_date: datetime,
|
max_date: datetime,
|
||||||
config: Config,
|
config: Config,
|
||||||
processed: Dict[str, DataFrame],
|
processed: dict[str, DataFrame],
|
||||||
backtest_stats: Dict[str, Any],
|
backtest_stats: dict[str, Any],
|
||||||
|
starting_balance: float,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> float:
|
) -> float:
|
||||||
"""
|
"""
|
||||||
@@ -70,6 +71,7 @@ Currently, the arguments are:
|
|||||||
* `config`: Config object used (Note: Not all strategy-related parameters will be updated here if they are part of a hyperopt space).
|
* `config`: Config object used (Note: Not all strategy-related parameters will be updated here if they are part of a hyperopt space).
|
||||||
* `processed`: Dict of Dataframes with the pair as keys containing the data used for backtesting.
|
* `processed`: Dict of Dataframes with the pair as keys containing the data used for backtesting.
|
||||||
* `backtest_stats`: Backtesting statistics using the same format as the backtesting file "strategy" substructure. Available fields can be seen in `generate_strategy_stats()` in `optimize_reports.py`.
|
* `backtest_stats`: Backtesting statistics using the same format as the backtesting file "strategy" substructure. Available fields can be seen in `generate_strategy_stats()` in `optimize_reports.py`.
|
||||||
|
* `starting_balance`: Starting balance used for backtesting.
|
||||||
|
|
||||||
This function needs to return a floating point number (`float`). Smaller numbers will be interpreted as better results. The parameters and balancing for this is up to you.
|
This function needs to return a floating point number (`float`). Smaller numbers will be interpreted as better results. The parameters and balancing for this is up to you.
|
||||||
|
|
||||||
@@ -103,7 +105,7 @@ class MyAwesomeStrategy(IStrategy):
|
|||||||
SKDecimal(0.01, 0.20, decimals=3, name='roi_p3'),
|
SKDecimal(0.01, 0.20, decimals=3, name='roi_p3'),
|
||||||
]
|
]
|
||||||
|
|
||||||
def generate_roi_table(params: Dict) -> Dict[int, float]:
|
def generate_roi_table(params: Dict) -> dict[int, float]:
|
||||||
|
|
||||||
roi_table = {}
|
roi_table = {}
|
||||||
roi_table[0] = params['roi_p1'] + params['roi_p2'] + params['roi_p3']
|
roi_table[0] = params['roi_p1'] + params['roi_p2'] + params['roi_p3']
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ This guide walks you through utilizing public trade data for advanced orderflow
|
|||||||
|
|
||||||
!!! Warning "Experimental Feature"
|
!!! Warning "Experimental Feature"
|
||||||
The orderflow feature is currently in beta and may be subject to changes in future releases. Please report any issues or feedback on the [Freqtrade GitHub repository](https://github.com/freqtrade/freqtrade/issues).
|
The orderflow feature is currently in beta and may be subject to changes in future releases. Please report any issues or feedback on the [Freqtrade GitHub repository](https://github.com/freqtrade/freqtrade/issues).
|
||||||
|
It's also currently not been tested with freqAI - and combining these two features is considered out of scope at this point.
|
||||||
|
|
||||||
!!! Warning "Performance"
|
!!! Warning "Performance"
|
||||||
Orderflow requires raw trades data. This data is rather large, and can cause a slow initial startup, when freqtrade needs to download the trades data for the last X candles. Additionally, enabling this feature will cause increased memory usage. Please ensure to have sufficient resources available.
|
Orderflow requires raw trades data. This data is rather large, and can cause a slow initial startup, when freqtrade needs to download the trades data for the last X candles. Additionally, enabling this feature will cause increased memory usage. Please ensure to have sufficient resources available.
|
||||||
@@ -69,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:
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 51 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 12 KiB |
@@ -7,103 +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] [-i TIMEFRAME]
|
|
||||||
[--timerange TIMERANGE]
|
|
||||||
[--data-format-ohlcv {json,jsongz,hdf5}]
|
|
||||||
[--max-open-trades INT]
|
|
||||||
[--stake-amount STAKE_AMOUNT] [--fee FLOAT]
|
|
||||||
[-p PAIRS [PAIRS ...]] [--eps] [--dmmp]
|
|
||||||
[--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}]
|
|
||||||
|
|
||||||
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,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).
|
|
||||||
--dmmp, --disable-max-market-positions
|
|
||||||
Disable applying `max_open_trades` during backtest
|
|
||||||
(same as setting `max_open_trades` to a very high
|
|
||||||
number).
|
|
||||||
--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).
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## Test your strategy with Backtesting
|
## Test your strategy with Backtesting
|
||||||
|
|
||||||
@@ -293,6 +197,7 @@ A backtesting result will look like that:
|
|||||||
|-----------------------------+---------------------|
|
|-----------------------------+---------------------|
|
||||||
| Backtesting from | 2019-01-01 00:00:00 |
|
| Backtesting from | 2019-01-01 00:00:00 |
|
||||||
| Backtesting to | 2019-05-01 00:00:00 |
|
| Backtesting to | 2019-05-01 00:00:00 |
|
||||||
|
| Trading Mode | Spot |
|
||||||
| Max open trades | 3 |
|
| Max open trades | 3 |
|
||||||
| | |
|
| | |
|
||||||
| Total/Daily Avg Trades | 429 / 3.575 |
|
| Total/Daily Avg Trades | 429 / 3.575 |
|
||||||
@@ -398,6 +303,7 @@ It contains some useful key metrics about performance of your strategy on backte
|
|||||||
|-----------------------------+---------------------|
|
|-----------------------------+---------------------|
|
||||||
| Backtesting from | 2019-01-01 00:00:00 |
|
| Backtesting from | 2019-01-01 00:00:00 |
|
||||||
| Backtesting to | 2019-05-01 00:00:00 |
|
| Backtesting to | 2019-05-01 00:00:00 |
|
||||||
|
| Trading Mode | Spot |
|
||||||
| Max open trades | 3 |
|
| Max open trades | 3 |
|
||||||
| | |
|
| | |
|
||||||
| Total/Daily Avg Trades | 429 / 3.575 |
|
| Total/Daily Avg Trades | 429 / 3.575 |
|
||||||
@@ -452,6 +358,7 @@ It contains some useful key metrics about performance of your strategy on backte
|
|||||||
|
|
||||||
- `Backtesting from` / `Backtesting to`: Backtesting range (usually defined with the `--timerange` option).
|
- `Backtesting from` / `Backtesting to`: Backtesting range (usually defined with the `--timerange` option).
|
||||||
- `Max open trades`: Setting of `max_open_trades` (or `--max-open-trades`) - or number of pairs in the pairlist (whatever is lower).
|
- `Max open trades`: Setting of `max_open_trades` (or `--max-open-trades`) - or number of pairs in the pairlist (whatever is lower).
|
||||||
|
- `Trading Mode`: Spot or Futures trading.
|
||||||
- `Total/Daily Avg Trades`: Identical to the total trades of the backtest output table / Total trades divided by the backtesting duration in days (this will give you information about how many trades to expect from the strategy).
|
- `Total/Daily Avg Trades`: Identical to the total trades of the backtest output table / Total trades divided by the backtesting duration in days (this will give you information about how many trades to expect from the strategy).
|
||||||
- `Starting balance`: Start balance - as given by dry-run-wallet (config or command line).
|
- `Starting balance`: Start balance - as given by dry-run-wallet (config or command line).
|
||||||
- `Final balance`: Final balance - starting balance + absolute profit.
|
- `Final balance`: Final balance - starting balance + absolute profit.
|
||||||
@@ -555,6 +462,7 @@ Since backtesting lacks some detailed information about what happens within a ca
|
|||||||
- Stoploss
|
- Stoploss
|
||||||
- ROI
|
- ROI
|
||||||
- Trailing stoploss
|
- Trailing stoploss
|
||||||
|
- Position reversals (futures only) happen if an entry signal in the other direction than the closing trade triggers at the candle the existing trade closes.
|
||||||
|
|
||||||
Taking these assumptions, backtesting tries to mirror real trading as closely as possible. However, backtesting will **never** replace running a strategy in dry-run mode.
|
Taking these assumptions, backtesting tries to mirror real trading as closely as possible. However, backtesting will **never** replace running a strategy in dry-run mode.
|
||||||
Also, keep in mind that past results don't guarantee future success.
|
Also, keep in mind that past results don't guarantee future success.
|
||||||
@@ -569,7 +477,7 @@ These limits are usually listed in the exchange documentation as "trading rules"
|
|||||||
Backtesting (as well as live and dry-run) does honor these limits, and will ensure that a stoploss can be placed below this value - so the value will be slightly higher than what the exchange specifies.
|
Backtesting (as well as live and dry-run) does honor these limits, and will ensure that a stoploss can be placed below this value - so the value will be slightly higher than what the exchange specifies.
|
||||||
Freqtrade has however no information about historic limits.
|
Freqtrade has however no information about historic limits.
|
||||||
|
|
||||||
This can lead to situations where trading-limits are inflated by using a historic price, resulting in minimum amounts > 50$.
|
This can lead to situations where trading-limits are inflated by using a historic price, resulting in minimum amounts > 50\$.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
@@ -600,7 +508,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).
|
||||||
|
|
||||||
@@ -612,6 +525,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.
|
||||||
|
|||||||
@@ -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?
|
||||||
|
|
||||||
|
|||||||
66
docs/commands/backtesting-analysis.md
Normal file
66
docs/commands/backtesting-analysis.md
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
36
docs/commands/backtesting-show.md
Normal file
36
docs/commands/backtesting-show.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
```
|
||||||
|
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} [{day,week,month} ...]]
|
||||||
|
|
||||||
|
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} [{day,week,month} ...]
|
||||||
|
Show backtesting breakdown per [day, week, month].
|
||||||
|
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
107
docs/commands/backtesting.md
Normal file
107
docs/commands/backtesting.md
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
```
|
||||||
|
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} [{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,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).
|
||||||
|
--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 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.
|
||||||
|
|
||||||
|
```
|
||||||
52
docs/commands/convert-data.md
Normal file
52
docs/commands/convert-data.md
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
12
docs/commands/convert-db.md
Normal file
12
docs/commands/convert-db.md
Normal file
@@ -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.
|
||||||
|
|
||||||
|
```
|
||||||
41
docs/commands/convert-trade-data.md
Normal file
41
docs/commands/convert-trade-data.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
10
docs/commands/create-userdir.md
Normal file
10
docs/commands/create-userdir.md
Normal file
@@ -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.
|
||||||
|
|
||||||
|
```
|
||||||
70
docs/commands/download-data.md
Normal file
70
docs/commands/download-data.md
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
69
docs/commands/edge.md
Normal file
69
docs/commands/edge.md
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
```
|
||||||
|
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 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.
|
||||||
|
|
||||||
|
```
|
||||||
62
docs/commands/hyperopt-list.md
Normal file
62
docs/commands/hyperopt-list.md
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
43
docs/commands/hyperopt-show.md
Normal file
43
docs/commands/hyperopt-show.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
```
|
||||||
|
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} [{day,week,month} ...]]
|
||||||
|
|
||||||
|
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} [{day,week,month} ...]
|
||||||
|
Show backtesting breakdown per [day, week, month].
|
||||||
|
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
121
docs/commands/hyperopt.md
Normal file
121
docs/commands/hyperopt.md
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
```
|
||||||
|
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]
|
||||||
|
|
||||||
|
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,
|
||||||
|
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.
|
||||||
|
|
||||||
|
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 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.
|
||||||
|
|
||||||
|
```
|
||||||
11
docs/commands/install-ui.md
Normal file
11
docs/commands/install-ui.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
```
|
||||||
|
usage: freqtrade install-ui [-h] [--erase] [--ui-version UI_VERSION]
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--erase Clean UI folder, don't download new version.
|
||||||
|
--ui-version UI_VERSION
|
||||||
|
Specify a specific version of FreqUI to install. Not
|
||||||
|
specifying this installs the latest version.
|
||||||
|
|
||||||
|
```
|
||||||
48
docs/commands/list-data.md
Normal file
48
docs/commands/list-data.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
29
docs/commands/list-exchanges.md
Normal file
29
docs/commands/list-exchanges.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
31
docs/commands/list-freqaimodels.md
Normal file
31
docs/commands/list-freqaimodels.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
31
docs/commands/list-hyperoptloss.md
Normal file
31
docs/commands/list-hyperoptloss.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
46
docs/commands/list-markets.md
Normal file
46
docs/commands/list-markets.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
46
docs/commands/list-pairs.md
Normal file
46
docs/commands/list-pairs.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
34
docs/commands/list-strategies.md
Normal file
34
docs/commands/list-strategies.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
30
docs/commands/list-timeframes.md
Normal file
30
docs/commands/list-timeframes.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
108
docs/commands/lookahead-analysis.md
Normal file
108
docs/commands/lookahead-analysis.md
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
```
|
||||||
|
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 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.
|
||||||
|
|
||||||
|
```
|
||||||
51
docs/commands/main.md
Normal file
51
docs/commands/main.md
Normal file
@@ -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
|
||||||
|
|
||||||
|
```
|
||||||
12
docs/commands/new-config.md
Normal file
12
docs/commands/new-config.md
Normal file
@@ -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.
|
||||||
|
|
||||||
|
```
|
||||||
19
docs/commands/new-strategy.md
Normal file
19
docs/commands/new-strategy.md
Normal file
@@ -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`.
|
||||||
|
|
||||||
|
```
|
||||||
82
docs/commands/plot-dataframe.md
Normal file
82
docs/commands/plot-dataframe.md
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
```
|
||||||
|
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 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.
|
||||||
|
|
||||||
|
```
|
||||||
68
docs/commands/plot-profit.md
Normal file
68
docs/commands/plot-profit.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
```
|
||||||
|
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 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.
|
||||||
|
|
||||||
|
```
|
||||||
60
docs/commands/recursive-analysis.md
Normal file
60
docs/commands/recursive-analysis.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
```
|
||||||
|
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 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.
|
||||||
|
|
||||||
|
```
|
||||||
16
docs/commands/show-config.md
Normal file
16
docs/commands/show-config.md
Normal file
@@ -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.
|
||||||
|
|
||||||
|
```
|
||||||
37
docs/commands/show-trades.md
Normal file
37
docs/commands/show-trades.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
41
docs/commands/strategy-updater.md
Normal file
41
docs/commands/strategy-updater.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
22
docs/commands/test-pairlist.md
Normal file
22
docs/commands/test-pairlist.md
Normal file
@@ -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.
|
||||||
|
|
||||||
|
```
|
||||||
55
docs/commands/trade.md
Normal file
55
docs/commands/trade.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
```
|
||||||
|
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 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.
|
||||||
|
|
||||||
|
```
|
||||||
48
docs/commands/trades-to-ohlcv.md
Normal file
48
docs/commands/trades-to-ohlcv.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
27
docs/commands/webserver.md
Normal file
27
docs/commands/webserver.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
```
|
||||||
|
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 directory with historical backtesting data.
|
||||||
|
--userdir PATH, --user-data-dir PATH
|
||||||
|
Path to userdata directory.
|
||||||
|
|
||||||
|
```
|
||||||
@@ -39,13 +39,19 @@ Please note that Environment variables will overwrite corresponding settings in
|
|||||||
|
|
||||||
Common example:
|
Common example:
|
||||||
|
|
||||||
```
|
``` bash
|
||||||
FREQTRADE__TELEGRAM__CHAT_ID=<telegramchatid>
|
FREQTRADE__TELEGRAM__CHAT_ID=<telegramchatid>
|
||||||
FREQTRADE__TELEGRAM__TOKEN=<telegramToken>
|
FREQTRADE__TELEGRAM__TOKEN=<telegramToken>
|
||||||
FREQTRADE__EXCHANGE__KEY=<yourExchangeKey>
|
FREQTRADE__EXCHANGE__KEY=<yourExchangeKey>
|
||||||
FREQTRADE__EXCHANGE__SECRET=<yourExchangeSecret>
|
FREQTRADE__EXCHANGE__SECRET=<yourExchangeSecret>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Json lists are parsed as json - so you can use the following to set a list of pairs:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
export FREQTRADE__EXCHANGE__PAIR_WHITELIST='["BTC/USDT", "ETH/USDT"]'
|
||||||
|
```
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
Environment variables detected are logged at startup - so if you can't find why a value is not what you think it should be based on the configuration, make sure it's not loaded from an environment variable.
|
Environment variables detected are logged at startup - so if you can't find why a value is not what you think it should be based on the configuration, make sure it's not loaded from an environment variable.
|
||||||
|
|
||||||
@@ -54,7 +60,7 @@ FREQTRADE__EXCHANGE__SECRET=<yourExchangeSecret>
|
|||||||
|
|
||||||
??? Warning "Loading sequence"
|
??? Warning "Loading sequence"
|
||||||
Environment variables are loaded after the initial configuration. As such, you cannot provide the path to the configuration through environment variables. Please use `--config path/to/config.json` for that.
|
Environment variables are loaded after the initial configuration. As such, you cannot provide the path to the configuration through environment variables. Please use `--config path/to/config.json` for that.
|
||||||
This also applies to user_dir to some degree. while the user directory can be set through environment variables - the configuration will **not** be loaded from that location.
|
This also applies to `user_dir` to some degree. while the user directory can be set through environment variables - the configuration will **not** be loaded from that location.
|
||||||
|
|
||||||
### Multiple configuration files
|
### Multiple configuration files
|
||||||
|
|
||||||
@@ -146,10 +152,10 @@ Freqtrade can also load many options via command line (CLI) arguments (check out
|
|||||||
|
|
||||||
The prevalence for all Options is as follows:
|
The prevalence for all Options is as follows:
|
||||||
|
|
||||||
- CLI arguments override any other option
|
* CLI arguments override any other option
|
||||||
- [Environment Variables](#environment-variables)
|
* [Environment Variables](#environment-variables)
|
||||||
- Configuration files are used in sequence (the last file wins) and override Strategy configurations.
|
* Configuration files are used in sequence (the last file wins) and override Strategy configurations.
|
||||||
- Strategy configurations are only used if they are not set via configuration or command-line arguments. These options are marked with [Strategy Override](#parameters-in-the-strategy) in the below table.
|
* Strategy configurations are only used if they are not set via configuration or command-line arguments. These options are marked with [Strategy Override](#parameters-in-the-strategy) in the below table.
|
||||||
|
|
||||||
### Parameters table
|
### Parameters table
|
||||||
|
|
||||||
@@ -168,7 +174,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi
|
|||||||
| `timeframe` | The timeframe to use (e.g `1m`, `5m`, `15m`, `30m`, `1h` ...). Usually missing in configuration, and specified in the strategy. [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** String
|
| `timeframe` | The timeframe to use (e.g `1m`, `5m`, `15m`, `30m`, `1h` ...). Usually missing in configuration, and specified in the strategy. [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** String
|
||||||
| `fiat_display_currency` | Fiat currency used to show your profits. [More information below](#what-values-can-be-used-for-fiat_display_currency). <br> **Datatype:** String
|
| `fiat_display_currency` | Fiat currency used to show your profits. [More information below](#what-values-can-be-used-for-fiat_display_currency). <br> **Datatype:** String
|
||||||
| `dry_run` | **Required.** Define if the bot must be in Dry Run or production mode. <br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
| `dry_run` | **Required.** Define if the bot must be in Dry Run or production mode. <br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
||||||
| `dry_run_wallet` | Define the starting amount in stake currency for the simulated wallet used by the bot running in Dry Run mode.<br>*Defaults to `1000`.* <br> **Datatype:** Float
|
| `dry_run_wallet` | Define the starting amount in stake currency for the simulated wallet used by the bot running in Dry Run mode. [More information below](#dry-run-wallet)<br>*Defaults to `1000`.* <br> **Datatype:** Float or Dict
|
||||||
| `cancel_open_orders_on_exit` | Cancel open orders when the `/stop` RPC command is issued, `Ctrl+C` is pressed or the bot dies unexpectedly. When set to `true`, this allows you to use `/stop` to cancel unfilled and partially filled orders in the event of a market crash. It does not impact open positions. <br>*Defaults to `false`.* <br> **Datatype:** Boolean
|
| `cancel_open_orders_on_exit` | Cancel open orders when the `/stop` RPC command is issued, `Ctrl+C` is pressed or the bot dies unexpectedly. When set to `true`, this allows you to use `/stop` to cancel unfilled and partially filled orders in the event of a market crash. It does not impact open positions. <br>*Defaults to `false`.* <br> **Datatype:** Boolean
|
||||||
| `process_only_new_candles` | Enable processing of indicators only when new candles arrive. If false each loop populates the indicators, this will mean the same candle is processed many times creating system load but can be useful of your strategy depends on tick data not only candle. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
| `process_only_new_candles` | Enable processing of indicators only when new candles arrive. If false each loop populates the indicators, this will mean the same candle is processed many times creating system load but can be useful of your strategy depends on tick data not only candle. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
||||||
| `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
|
||||||
@@ -183,7 +189,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi
|
|||||||
| `margin_mode` | When trading with leverage, this determines if the collateral owned by the trader will be shared or isolated to each trading pair [leverage documentation](leverage.md). <br> **Datatype:** String
|
| `margin_mode` | When trading with leverage, this determines if the collateral owned by the trader will be shared or isolated to each trading pair [leverage documentation](leverage.md). <br> **Datatype:** String
|
||||||
| `liquidation_buffer` | A ratio specifying how large of a safety net to place between the liquidation price and the stoploss to prevent a position from reaching the liquidation price [leverage documentation](leverage.md). <br>*Defaults to `0.05`.* <br> **Datatype:** Float
|
| `liquidation_buffer` | A ratio specifying how large of a safety net to place between the liquidation price and the stoploss to prevent a position from reaching the liquidation price [leverage documentation](leverage.md). <br>*Defaults to `0.05`.* <br> **Datatype:** Float
|
||||||
| | **Unfilled timeout**
|
| | **Unfilled timeout**
|
||||||
| `unfilledtimeout.entry` | **Required.** How long (in minutes or seconds) the bot will wait for an unfilled entry order to complete, after which the order will be cancelled and repeated at current (new) price, as long as there is a signal. [Strategy Override](#parameters-in-the-strategy).<br> **Datatype:** Integer
|
| `unfilledtimeout.entry` | **Required.** How long (in minutes or seconds) the bot will wait for an unfilled entry order to complete, after which the order will be cancelled. [Strategy Override](#parameters-in-the-strategy).<br> **Datatype:** Integer
|
||||||
| `unfilledtimeout.exit` | **Required.** How long (in minutes or seconds) the bot will wait for an unfilled exit order to complete, after which the order will be cancelled and repeated at current (new) price, as long as there is a signal. [Strategy Override](#parameters-in-the-strategy).<br> **Datatype:** Integer
|
| `unfilledtimeout.exit` | **Required.** How long (in minutes or seconds) the bot will wait for an unfilled exit order to complete, after which the order will be cancelled and repeated at current (new) price, as long as there is a signal. [Strategy Override](#parameters-in-the-strategy).<br> **Datatype:** Integer
|
||||||
| `unfilledtimeout.unit` | Unit to use in unfilledtimeout setting. Note: If you set unfilledtimeout.unit to "seconds", "internals.process_throttle_secs" must be inferior or equal to timeout [Strategy Override](#parameters-in-the-strategy). <br> *Defaults to `"minutes"`.* <br> **Datatype:** String
|
| `unfilledtimeout.unit` | Unit to use in unfilledtimeout setting. Note: If you set unfilledtimeout.unit to "seconds", "internals.process_throttle_secs" must be inferior or equal to timeout [Strategy Override](#parameters-in-the-strategy). <br> *Defaults to `"minutes"`.* <br> **Datatype:** String
|
||||||
| `unfilledtimeout.exit_timeout_count` | How many times can exit orders time out. Once this number of timeouts is reached, an emergency exit is triggered. 0 to disable and allow unlimited order cancels. [Strategy Override](#parameters-in-the-strategy).<br>*Defaults to `0`.* <br> **Datatype:** Integer
|
| `unfilledtimeout.exit_timeout_count` | How many times can exit orders time out. Once this number of timeouts is reached, an emergency exit is triggered. 0 to disable and allow unlimited order cancels. [Strategy Override](#parameters-in-the-strategy).<br>*Defaults to `0`.* <br> **Datatype:** Integer
|
||||||
@@ -222,15 +228,14 @@ Mandatory parameters are marked as **Required**, which means that they are requi
|
|||||||
| `exchange.ccxt_async_config` | Additional CCXT parameters passed to the async ccxt instance. Parameters may differ from exchange to exchange and are documented in the [ccxt documentation](https://docs.ccxt.com/#/README?id=overriding-exchange-properties-upon-instantiation) <br> **Datatype:** Dict
|
| `exchange.ccxt_async_config` | Additional CCXT parameters passed to the async ccxt instance. Parameters may differ from exchange to exchange and are documented in the [ccxt documentation](https://docs.ccxt.com/#/README?id=overriding-exchange-properties-upon-instantiation) <br> **Datatype:** Dict
|
||||||
| `exchange.enable_ws` | Enable the usage of Websockets for the exchange. <br>[More information](#consuming-exchange-websockets).<br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
| `exchange.enable_ws` | Enable the usage of Websockets for the exchange. <br>[More information](#consuming-exchange-websockets).<br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
||||||
| `exchange.markets_refresh_interval` | The interval in minutes in which markets are reloaded. <br>*Defaults to `60` minutes.* <br> **Datatype:** Positive Integer
|
| `exchange.markets_refresh_interval` | The interval in minutes in which markets are reloaded. <br>*Defaults to `60` minutes.* <br> **Datatype:** Positive Integer
|
||||||
| `exchange.skip_pair_validation` | Skip pairlist validation on startup.<br>*Defaults to `false`*<br> **Datatype:** Boolean
|
|
||||||
| `exchange.skip_open_order_update` | Skips open order updates on startup should the exchange cause problems. Only relevant in live conditions.<br>*Defaults to `false`*<br> **Datatype:** Boolean
|
| `exchange.skip_open_order_update` | Skips open order updates on startup should the exchange cause problems. Only relevant in live conditions.<br>*Defaults to `false`*<br> **Datatype:** Boolean
|
||||||
| `exchange.unknown_fee_rate` | Fallback value to use when calculating trading fees. This can be useful for exchanges which have fees in non-tradable currencies. The value provided here will be multiplied with the "fee cost".<br>*Defaults to `None`<br> **Datatype:** float
|
| `exchange.unknown_fee_rate` | Fallback value to use when calculating trading fees. This can be useful for exchanges which have fees in non-tradable currencies. The value provided here will be multiplied with the "fee cost".<br>*Defaults to `None`<br> **Datatype:** float
|
||||||
| `exchange.log_responses` | Log relevant exchange responses. For debug mode only - use with care.<br>*Defaults to `false`*<br> **Datatype:** Boolean
|
| `exchange.log_responses` | Log relevant exchange responses. For debug mode only - use with care.<br>*Defaults to `false`*<br> **Datatype:** Boolean
|
||||||
|
| `exchange.only_from_ccxt` | Prevent data-download from data.binance.vision. Leaving this as false can greatly speed up downloads, but may be problematic if the site is not available.<br>*Defaults to `false`*<br> **Datatype:** Boolean
|
||||||
| `experimental.block_bad_exchanges` | Block exchanges known to not work with freqtrade. Leave on default unless you want to test if that exchange works now. <br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
| `experimental.block_bad_exchanges` | Block exchanges known to not work with freqtrade. Leave on default unless you want to test if that exchange works now. <br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
||||||
| | **Plugins**
|
| | **Plugins**
|
||||||
| `edge.*` | Please refer to [edge configuration document](edge.md) for detailed explanation of all possible configuration options.
|
| `edge.*` | Please refer to [edge configuration document](edge.md) for detailed explanation of all possible configuration options.
|
||||||
| `pairlists` | Define one or more pairlists to be used. [More information](plugins.md#pairlists-and-pairlist-handlers). <br>*Defaults to `StaticPairList`.* <br> **Datatype:** List of Dicts
|
| `pairlists` | Define one or more pairlists to be used. [More information](plugins.md#pairlists-and-pairlist-handlers). <br>*Defaults to `StaticPairList`.* <br> **Datatype:** List of Dicts
|
||||||
| `protections` | Define one or more protections to be used. [More information](plugins.md#protections). <br> **Datatype:** List of Dicts
|
|
||||||
| | **Telegram**
|
| | **Telegram**
|
||||||
| `telegram.enabled` | Enable the usage of Telegram. <br> **Datatype:** Boolean
|
| `telegram.enabled` | Enable the usage of Telegram. <br> **Datatype:** Boolean
|
||||||
| `telegram.token` | Your Telegram bot token. Only required if `telegram.enabled` is `true`. <br>**Keep it in secret, do not disclose publicly.** <br> **Datatype:** String
|
| `telegram.token` | Your Telegram bot token. Only required if `telegram.enabled` is `true`. <br>**Keep it in secret, do not disclose publicly.** <br> **Datatype:** String
|
||||||
@@ -297,10 +302,10 @@ Values set in the configuration file always overwrite values set in the strategy
|
|||||||
* `order_time_in_force`
|
* `order_time_in_force`
|
||||||
* `unfilledtimeout`
|
* `unfilledtimeout`
|
||||||
* `disable_dataframe_checks`
|
* `disable_dataframe_checks`
|
||||||
- `use_exit_signal`
|
* `use_exit_signal`
|
||||||
* `exit_profit_only`
|
* `exit_profit_only`
|
||||||
- `exit_profit_offset`
|
* `exit_profit_offset`
|
||||||
- `ignore_roi_if_entry_signal`
|
* `ignore_roi_if_entry_signal`
|
||||||
* `ignore_buying_expired_candle_after`
|
* `ignore_buying_expired_candle_after`
|
||||||
* `position_adjustment_enable`
|
* `position_adjustment_enable`
|
||||||
* `max_entry_position_adjustment`
|
* `max_entry_position_adjustment`
|
||||||
@@ -313,18 +318,37 @@ There are several methods to configure how much of the stake currency the bot wi
|
|||||||
|
|
||||||
The minimum stake amount will depend on exchange and pair and is usually listed in the exchange support pages.
|
The minimum stake amount will depend on exchange and pair and is usually listed in the exchange support pages.
|
||||||
|
|
||||||
Assuming the minimum tradable amount for XRP/USD is 20 XRP (given by the exchange), and the price is 0.6$, the minimum stake amount to buy this pair is `20 * 0.6 ~= 12`.
|
Assuming the minimum tradable amount for XRP/USD is 20 XRP (given by the exchange), and the price is 0.6\$, the minimum stake amount to buy this pair is `20 * 0.6 ~= 12`.
|
||||||
This exchange has also a limit on USD - where all orders must be > 10$ - which however does not apply in this case.
|
This exchange has also a limit on USD - where all orders must be > 10\$ - which however does not apply in this case.
|
||||||
|
|
||||||
To guarantee safe execution, freqtrade will not allow buying with a stake-amount of 10.1$, instead, it'll make sure that there's enough space to place a stoploss below the pair (+ an offset, defined by `amount_reserve_percent`, which defaults to 5%).
|
To guarantee safe execution, freqtrade will not allow buying with a stake-amount of 10.1\$, instead, it'll make sure that there's enough space to place a stoploss below the pair (+ an offset, defined by `amount_reserve_percent`, which defaults to 5%).
|
||||||
|
|
||||||
With a reserve of 5%, the minimum stake amount would be ~12.6$ (`12 * (1 + 0.05)`). If we take into account a stoploss of 10% on top of that - we'd end up with a value of ~14$ (`12.6 / (1 - 0.1)`).
|
With a reserve of 5%, the minimum stake amount would be ~12.6\$ (`12 * (1 + 0.05)`). If we take into account a stoploss of 10% on top of that - we'd end up with a value of ~14\$ (`12.6 / (1 - 0.1)`).
|
||||||
|
|
||||||
To limit this calculation in case of large stoploss values, the calculated minimum stake-limit will never be more than 50% above the real limit.
|
To limit this calculation in case of large stoploss values, the calculated minimum stake-limit will never be more than 50% above the real limit.
|
||||||
|
|
||||||
!!! Warning
|
!!! Warning
|
||||||
Since the limits on exchanges are usually stable and are not updated often, some pairs can show pretty high minimum limits, simply because the price increased a lot since the last limit adjustment by the exchange. Freqtrade adjusts the stake-amount to this value, unless it's > 30% more than the calculated/desired stake-amount - in which case the trade is rejected.
|
Since the limits on exchanges are usually stable and are not updated often, some pairs can show pretty high minimum limits, simply because the price increased a lot since the last limit adjustment by the exchange. Freqtrade adjusts the stake-amount to this value, unless it's > 30% more than the calculated/desired stake-amount - in which case the trade is rejected.
|
||||||
|
|
||||||
|
#### Dry-run wallet
|
||||||
|
|
||||||
|
When running in dry-run mode, the bot will use a simulated wallet to execute trades. The starting balance of this wallet is defined by `dry_run_wallet` (defaults to 1000).
|
||||||
|
For more complex scenarios, you can also assign a dictionary to `dry_run_wallet` to define the starting balance for each currency.
|
||||||
|
|
||||||
|
```json
|
||||||
|
"dry_run_wallet": {
|
||||||
|
"BTC": 0.01,
|
||||||
|
"ETH": 2,
|
||||||
|
"USDT": 1000
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Command line options (`--dry-run-wallet`) can be used to override the configuration value, but only for the float value, not for the dictionary. If you'd like to use the dictionary, please adjust the configuration file.
|
||||||
|
|
||||||
|
!!! Note
|
||||||
|
Balances not in stake-currency will not be used for trading, but are shown as part of the wallet balance.
|
||||||
|
On Cross-margin exchanges, the wallet balance may be used to calculate the available collateral for trading.
|
||||||
|
|
||||||
#### Tradable balance
|
#### Tradable balance
|
||||||
|
|
||||||
By default, the bot assumes that the `complete amount - 1%` is at it's disposal, and when using [dynamic stake amount](#dynamic-stake-amount), it will split the complete balance into `max_open_trades` buckets per trade.
|
By default, the bot assumes that the `complete amount - 1%` is at it's disposal, and when using [dynamic stake amount](#dynamic-stake-amount), it will split the complete balance into `max_open_trades` buckets per trade.
|
||||||
@@ -364,9 +388,9 @@ To overcome this, the option `amend_last_stake_amount` can be set to `True`, whi
|
|||||||
|
|
||||||
In the example above this would mean:
|
In the example above this would mean:
|
||||||
|
|
||||||
- Trade1: 400 USDT
|
* Trade1: 400 USDT
|
||||||
- Trade2: 400 USDT
|
* Trade2: 400 USDT
|
||||||
- Trade3: 200 USDT
|
* Trade3: 200 USDT
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
This option only applies with [Static stake amount](#static-stake-amount) - since [Dynamic stake amount](#dynamic-stake-amount) divides the balances evenly.
|
This option only applies with [Static stake amount](#static-stake-amount) - since [Dynamic stake amount](#dynamic-stake-amount) divides the balances evenly.
|
||||||
|
|||||||
@@ -11,86 +11,16 @@ Without provided configuration, `--exchange` becomes mandatory.
|
|||||||
You can use a relative timerange (`--days 20`) or an absolute starting point (`--timerange 20200101-`). For incremental downloads, the relative approach should be used.
|
You can use a relative timerange (`--days 20`) or an absolute starting point (`--timerange 20200101-`). For incremental downloads, the relative approach should be used.
|
||||||
|
|
||||||
!!! Tip "Tip: Updating existing data"
|
!!! Tip "Tip: Updating existing data"
|
||||||
If you already have backtesting data available in your data-directory and would like to refresh this data up to today, freqtrade will automatically calculate the data missing for the existing pairs and the download will occur from the latest available point until "now", neither --days or --timerange parameters are required. Freqtrade will keep the available data and only download the missing data.
|
If you already have backtesting data available in your data-directory and would like to refresh this data up to today, freqtrade will automatically calculate the missing timerange for the existing pairs and the download will occur from the latest available point until "now", neither `--days` or `--timerange` parameters are required. Freqtrade will keep the available data and only download the missing data.
|
||||||
If you are updating existing data after inserting new pairs that you have no data for, use `--new-pairs-days xx` parameter. Specified number of days will be downloaded for new pairs while old pairs will be updated with missing data only.
|
If you are updating existing data after inserting new pairs that you have no data for, use the `--new-pairs-days xx` parameter. Specified number of days will be downloaded for new pairs while old pairs will be updated with missing data only.
|
||||||
If you use `--days xx` parameter alone - data for specified number of days will be downloaded for _all_ pairs. Be careful, if specified number of days is smaller than gap between now and last downloaded candle - freqtrade will delete all existing data to avoid gaps in candle data.
|
|
||||||
|
|
||||||
### 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:
|
||||||
`freqtrade download-data --exchange binance --pairs .*/USDT <...>`. The provided "pairs" string will be expanded to contain all active pairs on the exchange.
|
`freqtrade download-data --exchange binance --pairs ".*/USDT" <...>`. The provided "pairs" string will be expanded to contain all active pairs on the exchange.
|
||||||
To also download data for inactive (delisted) pairs, add `--include-inactive-pairs` to the command.
|
To also download data for inactive (delisted) pairs, add `--include-inactive-pairs` to the command.
|
||||||
|
|
||||||
!!! Note "Startup period"
|
!!! Note "Startup period"
|
||||||
@@ -117,16 +47,17 @@ freqtrade download-data --exchange binance --pairs ETH/USDT XRP/USDT BTC/USDT
|
|||||||
or as regex (in this case, to download all active USDT pairs)
|
or as regex (in this case, to download all active USDT pairs)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
freqtrade download-data --exchange binance --pairs .*/USDT
|
freqtrade download-data --exchange binance --pairs ".*/USDT"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Other Notes
|
### Other Notes
|
||||||
|
|
||||||
* To use a different directory than the exchange specific default, use `--datadir user_data/data/some_directory`.
|
* To use a different directory than the exchange specific default, use `--datadir user_data/data/some_directory`.
|
||||||
* To change the exchange used to download the historical data from, please use a different configuration file (you'll probably need to adjust rate limits etc.)
|
* To change the exchange used to download the historical data from, either use `--exchange <exchange>` - or specify a different configuration file.
|
||||||
* To use `pairs.json` from some other directory, use `--pairs-file some_other_dir/pairs.json`.
|
* To use `pairs.json` from some other directory, use `--pairs-file some_other_dir/pairs.json`.
|
||||||
* To download historical candle (OHLCV) data for only 10 days, use `--days 10` (defaults to 30 days).
|
* To download historical candle (OHLCV) data for only 10 days, use `--days 10` (defaults to 30 days).
|
||||||
* To download historical candle (OHLCV) data from a fixed starting point, use `--timerange 20200101-` - which will download all data from January 1st, 2020.
|
* To download historical candle (OHLCV) data from a fixed starting point, use `--timerange 20200101-` - which will download all data from January 1st, 2020.
|
||||||
|
* Given starting points are ignored if data is already available, downloading only missing data up to today.
|
||||||
* Use `--timeframes` to specify what timeframe download the historical candle (OHLCV) data for. Default is `--timeframes 1m 5m` which will download 1-minute and 5-minute data.
|
* Use `--timeframes` to specify what timeframe download the historical candle (OHLCV) data for. Default is `--timeframes 1m 5m` which will download 1-minute and 5-minute data.
|
||||||
* To use exchange, timeframe and list of pairs as defined in your configuration file, use the `-c/--config` option. With this, the script uses the whitelist defined in the config as the list of currency pairs to download data for and does not require the pairs.json file. You can combine `-c/--config` with most other options.
|
* To use exchange, timeframe and list of pairs as defined in your configuration file, use the `-c/--config` option. With this, the script uses the whitelist defined in the config as the list of currency pairs to download data for and does not require the pairs.json file. You can combine `-c/--config` with most other options.
|
||||||
|
|
||||||
@@ -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
|
|
||||||
* `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
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,16 @@ Webhook terminology changed from "sell" to "exit", and from "buy" to "entry", re
|
|||||||
* `webhooksellfill`, `webhookexitfill` -> `exit_fill`
|
* `webhooksellfill`, `webhookexitfill` -> `exit_fill`
|
||||||
* `webhooksellcancel`, `webhookexitcancel` -> `exit_cancel`
|
* `webhooksellcancel`, `webhookexitcancel` -> `exit_cancel`
|
||||||
|
|
||||||
|
|
||||||
## Removal of `populate_any_indicators`
|
## Removal of `populate_any_indicators`
|
||||||
|
|
||||||
version 2023.3 saw the removal of `populate_any_indicators` in favor of split methods for feature engineering and targets. Please read the [migration document](strategy_migration.md#freqai-strategy) for full details.
|
version 2023.3 saw the removal of `populate_any_indicators` in favor of split methods for feature engineering and targets. Please read the [migration document](strategy_migration.md#freqai-strategy) for full details.
|
||||||
|
|
||||||
|
## Removal of `protections` from configuration
|
||||||
|
|
||||||
|
Setting protections from the configuration via `"protections": [],` has been removed in 2024.10, after having raised deprecation warnings for over 3 years.
|
||||||
|
|
||||||
|
## hdf5 data storage
|
||||||
|
|
||||||
|
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 before updating.
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ A similar setup can also be taken for Pycharm - using `freqtrade` as module name
|
|||||||

|

|
||||||
|
|
||||||
!!! Note "Startup directory"
|
!!! Note "Startup directory"
|
||||||
This assumes that you have the repository checked out, and the editor is started at the repository root level (so setup.py is at the top level of your repository).
|
This assumes that you have the repository checked out, and the editor is started at the repository root level (so pyproject.toml is at the top level of your repository).
|
||||||
|
|
||||||
## ErrorHandling
|
## ErrorHandling
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ Hopefully you also want to contribute this back upstream.
|
|||||||
|
|
||||||
Whatever your motivations are - This should get you off the ground in trying to develop a new Pairlist Handler.
|
Whatever your motivations are - This should get you off the ground in trying to develop a new Pairlist Handler.
|
||||||
|
|
||||||
First of all, have a look at the [VolumePairList](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/pairlist/VolumePairList.py) Handler, and best copy this file with a name of your new Pairlist Handler.
|
First of all, have a look at the [VolumePairList](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/plugins/pairlist/VolumePairList.py) Handler, and best copy this file with a name of your new Pairlist Handler.
|
||||||
|
|
||||||
This is a simple Handler, which however serves as a good example on how to start developing.
|
This is a simple Handler, which however serves as a good example on how to start developing.
|
||||||
|
|
||||||
@@ -205,7 +205,7 @@ This is called with each iteration of the bot (only if the Pairlist Handler is a
|
|||||||
|
|
||||||
It must return the resulting pairlist (which may then be passed into the chain of Pairlist Handlers).
|
It must return the resulting pairlist (which may then be passed into the chain of Pairlist Handlers).
|
||||||
|
|
||||||
Validations are optional, the parent class exposes a `_verify_blacklist(pairlist)` and `_whitelist_for_active_markets(pairlist)` to do default filtering. Use this if you limit your result to a certain number of pairs - so the end-result is not shorter than expected.
|
Validations are optional, the parent class exposes a `verify_blacklist(pairlist)` and `_whitelist_for_active_markets(pairlist)` to do default filtering. Use this if you limit your result to a certain number of pairs - so the end-result is not shorter than expected.
|
||||||
|
|
||||||
#### filter_pairlist
|
#### filter_pairlist
|
||||||
|
|
||||||
@@ -219,14 +219,14 @@ The default implementation in the base class simply calls the `_validate_pair()`
|
|||||||
|
|
||||||
If overridden, it must return the resulting pairlist (which may then be passed into the next Pairlist Handler in the chain).
|
If overridden, it must return the resulting pairlist (which may then be passed into the next Pairlist Handler in the chain).
|
||||||
|
|
||||||
Validations are optional, the parent class exposes a `_verify_blacklist(pairlist)` and `_whitelist_for_active_markets(pairlist)` to do default filters. Use this if you limit your result to a certain number of pairs - so the end result is not shorter than expected.
|
Validations are optional, the parent class exposes a `verify_blacklist(pairlist)` and `_whitelist_for_active_markets(pairlist)` to do default filters. Use this if you limit your result to a certain number of pairs - so the end result is not shorter than expected.
|
||||||
|
|
||||||
In `VolumePairList`, this implements different methods of sorting, does early validation so only the expected number of pairs is returned.
|
In `VolumePairList`, this implements different methods of sorting, does early validation so only the expected number of pairs is returned.
|
||||||
|
|
||||||
##### sample
|
##### sample
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
def filter_pairlist(self, pairlist: List[str], tickers: Dict) -> List[str]:
|
def filter_pairlist(self, pairlist: list[str], tickers: dict) -> List[str]:
|
||||||
# Generate dynamic whitelist
|
# Generate dynamic whitelist
|
||||||
pairs = self._calculate_pairlist(pairlist, tickers)
|
pairs = self._calculate_pairlist(pairlist, tickers)
|
||||||
return pairs
|
return pairs
|
||||||
@@ -241,7 +241,6 @@ No protection should use datetime directly, but use the provided `date_now` vari
|
|||||||
|
|
||||||
!!! Tip "Writing a new Protection"
|
!!! Tip "Writing a new Protection"
|
||||||
Best copy one of the existing Protections to have a good example.
|
Best copy one of the existing Protections to have a good example.
|
||||||
Don't forget to register your protection in `constants.py` under the variable `AVAILABLE_PROTECTIONS` - otherwise it will not be selectable.
|
|
||||||
|
|
||||||
#### Implementation of a new protection
|
#### Implementation of a new protection
|
||||||
|
|
||||||
@@ -481,15 +480,18 @@ Once the PR against stable is merged (best right after merging):
|
|||||||
|
|
||||||
### pypi
|
### pypi
|
||||||
|
|
||||||
!!! Note
|
!!! Warning "Manual Releases"
|
||||||
This process is now automated as part of Github Actions.
|
This process is automated as part of Github Actions.
|
||||||
|
Manual pypi pushes should not be necessary.
|
||||||
|
|
||||||
To create a pypi release, please run the following commands:
|
??? example "Manual release"
|
||||||
|
To manually create a pypi release, please run the following commands:
|
||||||
|
|
||||||
Additional requirement: `wheel`, `twine` (for uploading), account on pypi with proper permissions.
|
Additional requirement: `wheel`, `twine` (for uploading), account on pypi with proper permissions.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
python setup.py sdist bdist_wheel
|
pip install -U build
|
||||||
|
python -m build --sdist --wheel
|
||||||
|
|
||||||
# For pypi test (to check if some change to the installation did work)
|
# For pypi test (to check if some change to the installation did work)
|
||||||
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
|
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
|
||||||
|
|||||||
59
docs/edge.md
59
docs/edge.md
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -217,12 +238,12 @@ Kucoin supports [time_in_force](configuration.md#understand-order_time_in_force)
|
|||||||
For Kucoin, it is suggested to add `"KCS/<STAKE>"` to your blacklist to avoid issues, unless you are willing to maintain enough extra `KCS` on the account or unless you're willing to disable using `KCS` for fees.
|
For Kucoin, it is suggested to add `"KCS/<STAKE>"` to your blacklist to avoid issues, unless you are willing to maintain enough extra `KCS` on the account or unless you're willing to disable using `KCS` for fees.
|
||||||
Kucoin accounts may use `KCS` for fees, and if a trade happens to be on `KCS`, further trades may consume this position and make the initial `KCS` trade unsellable as the expected amount is not there anymore.
|
Kucoin accounts may use `KCS` for fees, and if a trade happens to be on `KCS`, further trades may consume this position and make the initial `KCS` trade unsellable as the expected amount is not there anymore.
|
||||||
|
|
||||||
## HTX (formerly Huobi)
|
## HTX
|
||||||
|
|
||||||
!!! Tip "Stoploss on Exchange"
|
!!! Tip "Stoploss on Exchange"
|
||||||
HTX supports `stoploss_on_exchange` and uses `stop-limit` orders. It provides great advantages, so we recommend to benefit from it by enabling stoploss on exchange.
|
HTX supports `stoploss_on_exchange` and uses `stop-limit` orders. It provides great advantages, so we recommend to benefit from it by enabling stoploss on exchange.
|
||||||
|
|
||||||
## OKX (former OKEX)
|
## OKX
|
||||||
|
|
||||||
OKX requires a passphrase for each api key, you will therefore need to add this key into the configuration so your exchange section looks as follows:
|
OKX requires a passphrase for each api key, you will therefore need to add this key into the configuration so your exchange section looks as follows:
|
||||||
|
|
||||||
@@ -236,6 +257,9 @@ OKX requires a passphrase for each api key, you will therefore need to add this
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you've registered with OKX on the host my.okx.com (OKX EAA)- you will need to use `"myokx"` as the exchange name.
|
||||||
|
Using the wrong exchange will result in the error "OKX Error 50119: API key doesn't exist" - as the 2 are separate entities.
|
||||||
|
|
||||||
!!! Warning
|
!!! Warning
|
||||||
OKX only provides 100 candles per api call. Therefore, the strategy will only have a pretty low amount of data available in backtesting mode.
|
OKX only provides 100 candles per api call. Therefore, the strategy will only have a pretty low amount of data available in backtesting mode.
|
||||||
|
|
||||||
@@ -252,21 +276,36 @@ OKX requires a passphrase for each api key, you will therefore need to add this
|
|||||||
Gate.io allows the use of `POINT` to pay for fees. As this is not a tradable currency (no regular market available), automatic fee calculations will fail (and default to a fee of 0).
|
Gate.io allows the use of `POINT` to pay for fees. As this is not a tradable currency (no regular market available), automatic fee calculations will fail (and default to a fee of 0).
|
||||||
The configuration parameter `exchange.unknown_fee_rate` can be used to specify the exchange rate between Point and the stake currency. Obviously, changing the stake-currency will also require changes to this value.
|
The configuration parameter `exchange.unknown_fee_rate` can be used to specify the exchange rate between Point and the stake currency. Obviously, changing the stake-currency will also require changes to this value.
|
||||||
|
|
||||||
|
Gate API keys require the following permissions on top of the market type you want to trade:
|
||||||
|
|
||||||
|
* "Spot Trade" _or_ "Perpetual Futures" (Read and Write) (either select both, or the one matching the market you want to trade)
|
||||||
|
* "Wallet" (read only)
|
||||||
|
* "Account" (read only)
|
||||||
|
|
||||||
|
Without these permissions, the bot will not start correctly and show errors like "permission missing".
|
||||||
|
|
||||||
## Bybit
|
## Bybit
|
||||||
|
|
||||||
Futures trading on bybit is currently supported for USDT markets, and will use isolated futures mode.
|
Futures trading on bybit is currently supported for USDT markets, and will use isolated futures mode.
|
||||||
Users with unified accounts (there's no way back) can create a Sub-account which will start as "non-unified", and can therefore use isolated futures.
|
|
||||||
On startup, freqtrade will set the position mode to "One-way Mode" for the whole (sub)account. This avoids making this call over and over again (slowing down bot operations), but means that changes to this setting may result in exceptions and errors
|
On startup, freqtrade will set the position mode to "One-way Mode" for the whole (sub)account. This avoids making this call over and over again (slowing down bot operations), but means that changes to this setting may result in exceptions and errors.
|
||||||
|
|
||||||
As bybit doesn't provide funding rate history, the dry-run calculation is used for live trades as well.
|
As bybit doesn't provide funding rate history, the dry-run calculation is used for live trades as well.
|
||||||
|
|
||||||
API Keys for live futures trading (Subaccount on non-unified) must have the following permissions:
|
API Keys for live futures trading must have the following permissions:
|
||||||
|
|
||||||
* Read-write
|
* Read-write
|
||||||
* Contract - Orders
|
* Contract - Orders
|
||||||
* Contract - Positions
|
* Contract - Positions
|
||||||
|
|
||||||
We do strongly recommend to limit all API keys to the IP you're going to use it from.
|
We do strongly recommend to limit all API keys to the IP you're going to use it from.
|
||||||
|
|
||||||
|
!!! Warning "Unified accounts"
|
||||||
|
Freqtrade assumes accounts to be dedicated to the bot.
|
||||||
|
We therefore recommend the usage of one subaccount per bot. This is especially important when using unified accounts.
|
||||||
|
Other configurations (multiple bots on one account, manual non-bot trades on the bot account) are not supported and may lead to unexpected behavior.
|
||||||
|
|
||||||
|
|
||||||
!!! Tip "Stoploss on Exchange"
|
!!! Tip "Stoploss on Exchange"
|
||||||
Bybit (futures only) supports `stoploss_on_exchange` and uses `stop-loss-limit` orders. It provides great advantages, so we recommend to benefit from it by enabling stoploss on exchange.
|
Bybit (futures only) supports `stoploss_on_exchange` and uses `stop-loss-limit` orders. It provides great advantages, so we recommend to benefit from it by enabling stoploss on exchange.
|
||||||
On futures, Bybit supports both `stop-limit` as well as `stop-market` orders. You can use either `"limit"` or `"market"` in the `order_types.stoploss` configuration setting to decide which type to use.
|
On futures, Bybit supports both `stop-limit` as well as `stop-market` orders. You can use either `"limit"` or `"market"` in the `order_types.stoploss` configuration setting to decide which type to use.
|
||||||
@@ -289,6 +328,41 @@ It's therefore required to pass the UID as well.
|
|||||||
!!! Warning "Necessary Verification"
|
!!! Warning "Necessary Verification"
|
||||||
Bitmart requires Verification Lvl2 to successfully trade on the spot market through the API - even though trading via UI works just fine with just Lvl1 verification.
|
Bitmart requires Verification Lvl2 to successfully trade on the spot market through the API - even though trading via UI works just fine with just Lvl1 verification.
|
||||||
|
|
||||||
|
## Hyperliquid
|
||||||
|
|
||||||
|
!!! Tip "Stoploss on Exchange"
|
||||||
|
Hyperliquid supports `stoploss_on_exchange` and uses `stop-loss-limit` orders. It provides great advantages, so we recommend to benefit from it.
|
||||||
|
|
||||||
|
Hyperliquid is a Decentralized Exchange (DEX). Decentralized exchanges work a bit different compared to normal exchanges. Instead of authenticating private API calls using an API key, private API calls need to be signed with the private key of your wallet (We recommend using an api Wallet for this, generated either on Hyperliquid or in your wallet of choice).
|
||||||
|
This needs to be configured like this:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"exchange": {
|
||||||
|
"name": "hyperliquid",
|
||||||
|
"walletAddress": "your_eth_wallet_address",
|
||||||
|
"privateKey": "your_api_private_key",
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
* walletAddress in hex format: `0x<40 hex characters>` - Can be easily copied from your wallet - and should be your wallet address, not your API Wallet Address.
|
||||||
|
* privateKey in hex format: `0x<64 hex characters>` - Use the key the API Wallet shows on creation.
|
||||||
|
|
||||||
|
Hyperliquid handles deposits and withdrawals on the Arbitrum One chain, a Layer 2 scaling solution built on top of Ethereum. Hyperliquid uses USDC as quote / collateral. The process of depositing USDC on Hyperliquid requires a couple of steps, see [how to start trading](https://hyperliquid.gitbook.io/hyperliquid-docs/onboarding/how-to-start-trading) for details on what steps are needed.
|
||||||
|
|
||||||
|
!!! Note "Hyperliquid general usage Notes"
|
||||||
|
Hyperliquid does not support market orders, however ccxt will simulate market orders by placing limit orders with a maximum slippage of 5%.
|
||||||
|
Unfortunately, hyperliquid only offers 5000 historic candles, so backtesting will either need to build candles historically (by waiting and downloading the data incrementally over time) - or will be limited to the last 5000 candles.
|
||||||
|
|
||||||
|
!!! Info "Some general best practices (non exhaustive)"
|
||||||
|
* Beware of supply chain attacks, like pip package poisoning etcetera. Whenever you use your private key, make sure your environment is safe.
|
||||||
|
* Don't use your actual wallet private key for trading. Use the Hyperliquid [API generator](https://app.hyperliquid.xyz/API) to create a separate API wallet.
|
||||||
|
* Don't store your actual wallet private key on the server you use for freqtrade. Use the API wallet private key instead. This key won't allow withdrawals, only trading.
|
||||||
|
* Always keep your mnemonic phrase and private key private.
|
||||||
|
* Don't use the same mnemonic as the one you had to backup when initializing a hardware wallet, using the same mnemonic basically deletes the security of your hardware wallet.
|
||||||
|
* 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.
|
||||||
|
|
||||||
## 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.
|
||||||
@@ -298,7 +372,7 @@ Should you experience constant errors with Nonce (like `InvalidNonce`), it is be
|
|||||||
* The Ocean (exchange id: `theocean`) exchange uses Web3 functionality and requires `web3` python package to be installed:
|
* The Ocean (exchange id: `theocean`) exchange uses Web3 functionality and requires `web3` python package to be installed:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ pip3 install web3
|
pip3 install web3
|
||||||
```
|
```
|
||||||
|
|
||||||
### Getting latest price / Incomplete candles
|
### Getting latest price / Incomplete candles
|
||||||
|
|||||||
27
docs/faq.md
27
docs/faq.md
@@ -40,12 +40,18 @@ This could be caused by the following reasons:
|
|||||||
* The installation did not complete successfully.
|
* The installation did not complete successfully.
|
||||||
* Please check the [Installation documentation](installation.md).
|
* Please check the [Installation documentation](installation.md).
|
||||||
|
|
||||||
|
### The bot starts, but in STOPPED mode
|
||||||
|
|
||||||
|
Make sure you set the `initial_state` config option to `"running"` in your config.json
|
||||||
|
|
||||||
### 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 +106,19 @@ You can use the `/stopentry` command in Telegram to prevent future trade entry,
|
|||||||
|
|
||||||
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).
|
||||||
|
|
||||||
|
### I'm getting "Impossible to load Strategy" when starting the bot
|
||||||
|
|
||||||
|
This error message is shown when the bot cannot load the strategy.
|
||||||
|
Usually, you can use `freqtrade list-strategies` to list all available strategies.
|
||||||
|
The output of this command will also include a status column, showing if the strategy can be loaded.
|
||||||
|
|
||||||
|
Please check the following:
|
||||||
|
|
||||||
|
* Are you using the correct strategy name? The strategy name is case-sensitive and must correspond to the Strategy class name (not the filename!).
|
||||||
|
* Is the strategy in the `user_data/strategies` directory, and has the file-ending `.py`?
|
||||||
|
* Does the bot show other warnings before this error? Maybe you're missing some dependencies for the strategy - which would be highlighted in the log.
|
||||||
|
* In case of docker - is the strategy directory mounted correctly (check the volumes part of the docker-compose file)?
|
||||||
|
|
||||||
### I'm getting "Missing data fillup" messages in the log
|
### I'm getting "Missing data fillup" messages in the log
|
||||||
|
|
||||||
This message is just a warning that the latest candles had missing candles in them.
|
This message is just a warning that the latest candles had missing candles in them.
|
||||||
@@ -116,6 +135,10 @@ This message is a warning that the candles had a price jump of > 30%.
|
|||||||
This might be a sign that the pair stopped trading, and some token exchange took place (e.g. COCOS in 2021 - where price jumped from 0.0000154 to 0.01621).
|
This might be a sign that the pair stopped trading, and some token exchange took place (e.g. COCOS in 2021 - where price jumped from 0.0000154 to 0.01621).
|
||||||
This message is often accompanied by ["Missing data fillup"](#im-getting-missing-data-fillup-messages-in-the-log) - as trading on such pairs is often stopped for some time.
|
This message is often accompanied by ["Missing data fillup"](#im-getting-missing-data-fillup-messages-in-the-log) - as trading on such pairs is often stopped for some time.
|
||||||
|
|
||||||
|
### I want to reset the bot's database
|
||||||
|
|
||||||
|
To reset the bot's database, you can either delete the database (by default `tradesv3.sqlite` or `tradesv3.dryrun.sqlite`), or use a different database url via `--db-url` (e.g. `sqlite:///mynewdatabase.sqlite`).
|
||||||
|
|
||||||
### I'm getting "Outdated history for pair xxx" in the log
|
### I'm getting "Outdated history for pair xxx" in the log
|
||||||
|
|
||||||
The bot is trying to tell you that it got an outdated last candle (not the last complete candle).
|
The bot is trying to tell you that it got an outdated last candle (not the last complete candle).
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ The plot configuration can be accessed via the "Plot Configurator" (Cog icon) bu
|
|||||||
|
|
||||||
### Settings
|
### Settings
|
||||||
|
|
||||||
|
|
||||||
Several UI related settings can be changed by accessing the settings page.
|
Several UI related settings can be changed by accessing the settings page.
|
||||||
|
|
||||||
Things you can change (among others):
|
Things you can change (among others):
|
||||||
|
|||||||
@@ -293,10 +293,10 @@ class MyCoolPyTorchClassifier(BasePyTorchClassifier):
|
|||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
config = self.freqai_info.get("model_training_parameters", {})
|
config = self.freqai_info.get("model_training_parameters", {})
|
||||||
self.learning_rate: float = config.get("learning_rate", 3e-4)
|
self.learning_rate: float = config.get("learning_rate", 3e-4)
|
||||||
self.model_kwargs: Dict[str, Any] = config.get("model_kwargs", {})
|
self.model_kwargs: dict[str, Any] = config.get("model_kwargs", {})
|
||||||
self.trainer_kwargs: Dict[str, Any] = config.get("trainer_kwargs", {})
|
self.trainer_kwargs: dict[str, Any] = config.get("trainer_kwargs", {})
|
||||||
|
|
||||||
def fit(self, data_dictionary: Dict, dk: FreqaiDataKitchen, **kwargs) -> Any:
|
def fit(self, data_dictionary: dict, dk: FreqaiDataKitchen, **kwargs) -> Any:
|
||||||
"""
|
"""
|
||||||
User sets up the training and test data to fit their desired model here
|
User sets up the training and test data to fit their desired model here
|
||||||
:param data_dictionary: the dictionary holding all data for train, test,
|
:param data_dictionary: the dictionary holding all data for train, test,
|
||||||
@@ -359,10 +359,10 @@ class PyTorchMLPRegressor(BasePyTorchRegressor):
|
|||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
config = self.freqai_info.get("model_training_parameters", {})
|
config = self.freqai_info.get("model_training_parameters", {})
|
||||||
self.learning_rate: float = config.get("learning_rate", 3e-4)
|
self.learning_rate: float = config.get("learning_rate", 3e-4)
|
||||||
self.model_kwargs: Dict[str, Any] = config.get("model_kwargs", {})
|
self.model_kwargs: dict[str, Any] = config.get("model_kwargs", {})
|
||||||
self.trainer_kwargs: Dict[str, Any] = config.get("trainer_kwargs", {})
|
self.trainer_kwargs: dict[str, Any] = config.get("trainer_kwargs", {})
|
||||||
|
|
||||||
def fit(self, data_dictionary: Dict, dk: FreqaiDataKitchen, **kwargs) -> Any:
|
def fit(self, data_dictionary: dict, dk: FreqaiDataKitchen, **kwargs) -> Any:
|
||||||
n_features = data_dictionary["train_features"].shape[-1]
|
n_features = data_dictionary["train_features"].shape[-1]
|
||||||
model = PyTorchMLPModel(
|
model = PyTorchMLPModel(
|
||||||
input_dim=n_features,
|
input_dim=n_features,
|
||||||
@@ -393,7 +393,7 @@ Here we create a `PyTorchMLPRegressor` class that implements the `fit` method. T
|
|||||||
|
|
||||||
For example, if you are using a binary classifier to predict price movements as up or down, you can set the class names as follows:
|
For example, if you are using a binary classifier to predict price movements as up or down, you can set the class names as follows:
|
||||||
```python
|
```python
|
||||||
def set_freqai_targets(self, dataframe: DataFrame, metadata: Dict, **kwargs) -> DataFrame:
|
def set_freqai_targets(self, dataframe: DataFrame, metadata: dict, **kwargs) -> DataFrame:
|
||||||
self.freqai.class_names = ["down", "up"]
|
self.freqai.class_names = ["down", "up"]
|
||||||
dataframe['&s-up_or_down'] = np.where(dataframe["close"].shift(-100) >
|
dataframe['&s-up_or_down'] = np.where(dataframe["close"].shift(-100) >
|
||||||
dataframe["close"], 'up', 'down')
|
dataframe["close"], 'up', 'down')
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ Mandatory parameters are marked as **Required** and have to be set in one of the
|
|||||||
| `write_metrics_to_disk` | Collect train timings, inference timings and cpu usage in json file. <br> **Datatype:** Boolean. <br> Default: `False`
|
| `write_metrics_to_disk` | Collect train timings, inference timings and cpu usage in json file. <br> **Datatype:** Boolean. <br> Default: `False`
|
||||||
| `data_kitchen_thread_count` | <br> Designate the number of threads you want to use for data processing (outlier methods, normalization, etc.). This has no impact on the number of threads used for training. If user does not set it (default), FreqAI will use max number of threads - 2 (leaving 1 physical core available for Freqtrade bot and FreqUI) <br> **Datatype:** Positive integer.
|
| `data_kitchen_thread_count` | <br> Designate the number of threads you want to use for data processing (outlier methods, normalization, etc.). This has no impact on the number of threads used for training. If user does not set it (default), FreqAI will use max number of threads - 2 (leaving 1 physical core available for Freqtrade bot and FreqUI) <br> **Datatype:** Positive integer.
|
||||||
| `activate_tensorboard` | <br> Indicate whether or not to activate tensorboard for the tensorboard enabled modules (currently Reinforcment Learning, XGBoost, Catboost, and PyTorch). Tensorboard needs Torch installed, which means you will need the torch/RL docker image or you need to answer "yes" to the install question about whether or not you wish to install Torch. <br> **Datatype:** Boolean. <br> Default: `True`.
|
| `activate_tensorboard` | <br> Indicate whether or not to activate tensorboard for the tensorboard enabled modules (currently Reinforcment Learning, XGBoost, Catboost, and PyTorch). Tensorboard needs Torch installed, which means you will need the torch/RL docker image or you need to answer "yes" to the install question about whether or not you wish to install Torch. <br> **Datatype:** Boolean. <br> Default: `True`.
|
||||||
|
| `wait_for_training_iteration_on_reload` | <br> When using /reload or ctrl-c, wait for the current training iteration to finish before completing graceful shutdown. If set to `False`, FreqAI will break the current training iteration, allowing you to shutdown gracefully more quickly, but you will lose your current training iteration. <br> **Datatype:** Boolean. <br> Default: `True`.
|
||||||
|
|
||||||
### Feature parameters
|
### Feature parameters
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
174
docs/hyperopt.md
174
docs/hyperopt.md
@@ -36,130 +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}]
|
|
||||||
[--max-open-trades INT]
|
|
||||||
[--stake-amount STAKE_AMOUNT] [--fee FLOAT]
|
|
||||||
[-p PAIRS [PAIRS ...]] [--hyperopt-path PATH]
|
|
||||||
[--eps] [--dmmp] [--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]
|
|
||||||
|
|
||||||
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: `json`).
|
|
||||||
--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).
|
|
||||||
--dmmp, --disable-max-market-positions
|
|
||||||
Disable applying `max_open_trades` during backtest
|
|
||||||
(same as setting `max_open_trades` to a very high
|
|
||||||
number).
|
|
||||||
--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 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.
|
|
||||||
--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
|
||||||
|
|
||||||
@@ -445,7 +322,6 @@ While this strategy is most likely too simple to provide consistent profit, it s
|
|||||||
|
|
||||||
Whether you are using `.range` functionality or the alternatives above, you should try to use space ranges as small as possible since this will improve CPU/RAM usage.
|
Whether you are using `.range` functionality or the alternatives above, you should try to use space ranges as small as possible since this will improve CPU/RAM usage.
|
||||||
|
|
||||||
|
|
||||||
## Optimizing protections
|
## Optimizing protections
|
||||||
|
|
||||||
Freqtrade can also optimize protections. How you optimize protections is up to you, and the following should be considered as example only.
|
Freqtrade can also optimize protections. How you optimize protections is up to you, and the following should be considered as example only.
|
||||||
@@ -589,14 +465,15 @@ Currently, the following loss functions are builtin:
|
|||||||
|
|
||||||
* `ShortTradeDurHyperOptLoss` - (default legacy Freqtrade hyperoptimization loss function) - Mostly for short trade duration and avoiding losses.
|
* `ShortTradeDurHyperOptLoss` - (default legacy Freqtrade hyperoptimization loss function) - Mostly for short trade duration and avoiding losses.
|
||||||
* `OnlyProfitHyperOptLoss` - takes only amount of profit into consideration.
|
* `OnlyProfitHyperOptLoss` - takes only amount of profit into consideration.
|
||||||
* `SharpeHyperOptLoss` - optimizes Sharpe Ratio calculated on trade returns relative to standard deviation.
|
* `SharpeHyperOptLoss` - Optimizes Sharpe Ratio calculated on trade returns relative to standard deviation.
|
||||||
* `SharpeHyperOptLossDaily` - optimizes Sharpe Ratio calculated on **daily** trade returns relative to standard deviation.
|
* `SharpeHyperOptLossDaily` - Optimizes Sharpe Ratio calculated on **daily** trade returns relative to standard deviation.
|
||||||
* `SortinoHyperOptLoss` - optimizes Sortino Ratio calculated on trade returns relative to **downside** standard deviation.
|
* `SortinoHyperOptLoss` - Optimizes Sortino Ratio calculated on trade returns relative to **downside** standard deviation.
|
||||||
* `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.
|
||||||
* `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.
|
||||||
|
|
||||||
Creation of a custom loss function is covered in the [Advanced Hyperopt](advanced-hyperopt.md) part of the documentation.
|
Creation of a custom loss function is covered in the [Advanced Hyperopt](advanced-hyperopt.md) part of the documentation.
|
||||||
|
|
||||||
@@ -867,18 +744,15 @@ You can use the `--print-all` command line option if you would like to see all r
|
|||||||
|
|
||||||
## Position stacking and disabling max market positions
|
## Position stacking and disabling max market positions
|
||||||
|
|
||||||
In some situations, you may need to run Hyperopt (and Backtesting) with the
|
In some situations, you may need to run Hyperopt (and Backtesting) with the `--eps`/`--enable-position-staking` argument, or you may need to set `max_open_trades` to a very high number to disable the limit on the number of open trades.
|
||||||
`--eps`/`--enable-position-staking` and `--dmmp`/`--disable-max-market-positions` arguments.
|
|
||||||
|
|
||||||
By default, hyperopt emulates the behavior of the Freqtrade Live Run/Dry Run, where only one
|
By default, hyperopt emulates the behavior of the Freqtrade Live Run/Dry Run, where only one
|
||||||
open trade is allowed for every traded pair. The total number of trades open for all pairs
|
open trade per pair is allowed. The total number of trades open for all pairs
|
||||||
is also limited by the `max_open_trades` setting. During Hyperopt/Backtesting this may lead to
|
is also limited by the `max_open_trades` setting. During Hyperopt/Backtesting this may lead to
|
||||||
some potential trades to be hidden (or masked) by previously open trades.
|
potential trades being hidden (or masked) by already open trades.
|
||||||
|
|
||||||
The `--eps`/`--enable-position-stacking` argument allows emulation of buying the same pair multiple times,
|
The `--eps`/`--enable-position-stacking` argument allows emulation of buying the same pair multiple times.
|
||||||
while `--dmmp`/`--disable-max-market-positions` disables applying `max_open_trades`
|
Using `--max-open-trades` with a very high number will disable the limit on the number of open trades.
|
||||||
during Hyperopt/Backtesting (which is equal to setting `max_open_trades` to a very high
|
|
||||||
number).
|
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
Dry/live runs will **NOT** use position stacking - therefore it does make sense to also validate the strategy without this as it's closer to reality.
|
Dry/live runs will **NOT** use position stacking - therefore it does make sense to also validate the strategy without this as it's closer to reality.
|
||||||
@@ -919,13 +793,39 @@ Your epochs should therefore be aligned to the possible values - or you should b
|
|||||||
|
|
||||||
After you run Hyperopt for the desired amount of epochs, you can later list all results for analysis, select only best or profitable once, and show the details for any of the epochs previously evaluated. This can be done with the `hyperopt-list` and `hyperopt-show` sub-commands. The usage of these sub-commands is described in the [Utils](utils.md#list-hyperopt-results) chapter.
|
After you run Hyperopt for the desired amount of epochs, you can later list all results for analysis, select only best or profitable once, and show the details for any of the epochs previously evaluated. This can be done with the `hyperopt-list` and `hyperopt-show` sub-commands. The usage of these sub-commands is described in the [Utils](utils.md#list-hyperopt-results) chapter.
|
||||||
|
|
||||||
|
## Output debug messages from your strategy
|
||||||
|
|
||||||
|
If you want to output debug messages from your strategy, you can use the `logging` module. By default, Freqtrade will output all messages with a level of `INFO` or higher.
|
||||||
|
|
||||||
|
|
||||||
|
``` python
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class MyAwesomeStrategy(IStrategy):
|
||||||
|
...
|
||||||
|
|
||||||
|
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||||
|
logger.info("This is a debug message")
|
||||||
|
...
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! Note "using print"
|
||||||
|
Messages printed via `print()` will not be shown in the hyperopt output unless parallelism is disabled (`-j 1`).
|
||||||
|
It is recommended to use the `logging` module instead.
|
||||||
|
|
||||||
## Validate backtesting results
|
## Validate backtesting results
|
||||||
|
|
||||||
Once the optimized strategy has been implemented into your strategy, you should backtest this strategy to make sure everything is working as expected.
|
Once the optimized strategy has been implemented into your strategy, you should backtest this strategy to make sure everything is working as expected.
|
||||||
|
|
||||||
To achieve same the results (number of trades, their durations, profit, etc.) as during Hyperopt, please use the same configuration and parameters (timerange, timeframe, ...) used for hyperopt `--dmmp`/`--disable-max-market-positions` and `--eps`/`--enable-position-stacking` for Backtesting.
|
To achieve same the results (number of trades, their durations, profit, etc.) as during Hyperopt, please use the same configuration and parameters (timerange, timeframe, ...) used for hyperopt for Backtesting.
|
||||||
|
|
||||||
### Why do my backtest results not match my hyperopt results?
|
### Why do my backtest results not match my hyperopt results?
|
||||||
|
|
||||||
Should results not match, check the following factors:
|
Should results not match, check the following factors:
|
||||||
|
|
||||||
* You may have added parameters to hyperopt in `populate_indicators()` where they will be calculated only once **for all epochs**. If you are, for example, trying to optimise multiple SMA timeperiod values, the hyperoptable timeperiod parameter should be placed in `populate_entry_trend()` which is calculated every epoch. See [Optimizing an indicator parameter](https://www.freqtrade.io/en/stable/hyperopt/#optimizing-an-indicator-parameter).
|
* You may have added parameters to hyperopt in `populate_indicators()` where they will be calculated only once **for all epochs**. If you are, for example, trying to optimise multiple SMA timeperiod values, the hyperoptable timeperiod parameter should be placed in `populate_entry_trend()` which is calculated every epoch. See [Optimizing an indicator parameter](https://www.freqtrade.io/en/stable/hyperopt/#optimizing-an-indicator-parameter).
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ It uses configuration from `exchange.pair_whitelist` and `exchange.pair_blacklis
|
|||||||
By default, only currently enabled pairs are allowed.
|
By default, only currently enabled pairs are allowed.
|
||||||
To skip pair validation against active markets, set `"allow_inactive": true` within the `StaticPairList` configuration.
|
To skip pair validation against active markets, set `"allow_inactive": true` within the `StaticPairList` configuration.
|
||||||
This can be useful for backtesting expired pairs (like quarterly spot-markets).
|
This can be useful for backtesting expired pairs (like quarterly spot-markets).
|
||||||
This option must be configured along with `exchange.skip_pair_validation` in the exchange configuration.
|
|
||||||
|
|
||||||
When used in a "follow-up" position (e.g. after VolumePairlist), all pairs in `'pair_whitelist'` will be added to the end of the pairlist.
|
When used in a "follow-up" position (e.g. after VolumePairlist), all pairs in `'pair_whitelist'` will be added to the end of the pairlist.
|
||||||
|
|
||||||
@@ -353,7 +352,7 @@ The optional `bearer_token` will be included in the requests Authorization Heade
|
|||||||
|
|
||||||
#### MarketCapPairList
|
#### MarketCapPairList
|
||||||
|
|
||||||
`MarketCapPairList` employs sorting/filtering of pairs by their marketcap rank based of CoinGecko. It will only recognize coins up to the coin placed at rank 250. The returned pairlist will be sorted based of their marketcap ranks.
|
`MarketCapPairList` employs sorting/filtering of pairs by their marketcap rank based of CoinGecko. The returned pairlist will be sorted based of their marketcap ranks.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"pairlists": [
|
"pairlists": [
|
||||||
@@ -361,14 +360,22 @@ The optional `bearer_token` will be included in the requests Authorization Heade
|
|||||||
"method": "MarketCapPairList",
|
"method": "MarketCapPairList",
|
||||||
"number_assets": 20,
|
"number_assets": 20,
|
||||||
"max_rank": 50,
|
"max_rank": 50,
|
||||||
"refresh_period": 86400
|
"refresh_period": 86400,
|
||||||
|
"categories": ["layer-1"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
`number_assets` defines the maximum number of pairs returned by the pairlist. `max_rank` will determine the maximum rank used in creating/filtering the pairlist. It's expected that some coins within the top `max_rank` marketcap will not be included in the resulting pairlist since not all pairs will have active trading pairs in your preferred market/stake/exchange combination.
|
`number_assets` defines the maximum number of pairs returned by the pairlist. `max_rank` will determine the maximum rank used in creating/filtering the pairlist. It's expected that some coins within the top `max_rank` marketcap will not be included in the resulting pairlist since not all pairs will have active trading pairs in your preferred market/stake/exchange combination.
|
||||||
|
While using a `max_rank` bigger than 250 is supported, it's not recommended, as it'll cause multiple API calls to CoinGecko, which can lead to rate limit issues.
|
||||||
|
|
||||||
`refresh_period` setting defines the period (in seconds) at which the marketcap rank data will be refreshed. Defaults to 86,400s (1 day). The pairlist cache (`refresh_period`) is applicable on both generating pairlists (first position in the list) and filtering instances (not the first position in the list).
|
The `refresh_period` setting defines the interval (in seconds) at which the marketcap rank data will be refreshed. The default is 86,400 seconds (1 day). The pairlist cache (`refresh_period`) applies to both generating pairlists (when in the first position in the list) and filtering instances (when not in the first position in the list).
|
||||||
|
|
||||||
|
The `categories` setting specifies the [coingecko categories](https://www.coingecko.com/en/categories) from which to select coins from. The default is an empty list `[]`, meaning no category filtering is applied.
|
||||||
|
If an incorrect category string is chosen, the plugin will print the available categories from CoinGecko and fail. The category should be the ID of the category, for example, for `https://www.coingecko.com/en/categories/layer-1`, the category ID would be `layer-1`. You can pass multiple categories such as `["layer-1", "meme-token"]` to select from several 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.
|
||||||
|
|
||||||
#### AgeFilter
|
#### AgeFilter
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,16 @@
|
|||||||
## Protections
|
## Protections
|
||||||
|
|
||||||
!!! Warning "Beta feature"
|
|
||||||
This feature is still in it's testing phase. Should you notice something you think is wrong please let us know via Discord or via Github Issue.
|
|
||||||
|
|
||||||
Protections will protect your strategy from unexpected events and market conditions by temporarily stop trading for either one pair, or for all pairs.
|
Protections will protect your strategy from unexpected events and market conditions by temporarily stop trading for either one pair, or for all pairs.
|
||||||
All protection end times are rounded up to the next candle to avoid sudden, unexpected intra-candle buys.
|
All protection end times are rounded up to the next candle to avoid sudden, unexpected intra-candle buys.
|
||||||
|
|
||||||
!!! Note
|
!!! Tip "Usage tips"
|
||||||
Not all Protections will work for all strategies, and parameters will need to be tuned for your strategy to improve performance.
|
Not all Protections will work for all strategies, and parameters will need to be tuned for your strategy to improve performance.
|
||||||
|
|
||||||
!!! Tip
|
|
||||||
Each Protection can be configured multiple times with different parameters, to allow different levels of protection (short-term / long-term).
|
Each Protection can be configured multiple times with different parameters, to allow different levels of protection (short-term / long-term).
|
||||||
|
|
||||||
!!! Note "Backtesting"
|
!!! Note "Backtesting"
|
||||||
Protections are supported by backtesting and hyperopt, but must be explicitly enabled by using the `--enable-protections` flag.
|
Protections are supported by backtesting and hyperopt, but must be explicitly enabled by using the `--enable-protections` flag.
|
||||||
|
|
||||||
!!! Warning "Setting protections from the configuration"
|
|
||||||
Setting protections from the configuration via `"protections": [],` key should be considered deprecated and will be removed in a future version.
|
|
||||||
It is also no longer guaranteed that your protections apply to the strategy in cases where the strategy defines [protections as property](hyperopt.md#optimizing-protections).
|
|
||||||
|
|
||||||
### Available Protections
|
### Available Protections
|
||||||
|
|
||||||
* [`StoplossGuard`](#stoploss-guard) Stop trading if a certain amount of stoploss occurred within a certain time window.
|
* [`StoplossGuard`](#stoploss-guard) Stop trading if a certain amount of stoploss occurred within a certain time window.
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ Freqtrade is a free and open source crypto trading bot written in Python. It is
|
|||||||
- Develop your Strategy: Write your strategy in python, using [pandas](https://pandas.pydata.org/). Example strategies to inspire you are available in the [strategy repository](https://github.com/freqtrade/freqtrade-strategies).
|
- Develop your Strategy: Write your strategy in python, using [pandas](https://pandas.pydata.org/). Example strategies to inspire you are available in the [strategy repository](https://github.com/freqtrade/freqtrade-strategies).
|
||||||
- Download market data: Download historical data of the exchange and the markets your may want to trade with.
|
- Download market data: Download historical data of the exchange and the markets your may want to trade with.
|
||||||
- Backtest: Test your strategy on downloaded historical data.
|
- Backtest: Test your strategy on downloaded historical data.
|
||||||
- Optimize: Find the best parameters for your strategy using hyperoptimization which employs machining learning methods. You can optimize buy, sell, take profit (ROI), stop-loss and trailing stop-loss parameters for your strategy.
|
- Optimize: Find the best parameters for your strategy using hyperoptimization which employs machine learning methods. You can optimize buy, sell, take profit (ROI), stop-loss and trailing stop-loss parameters for your strategy.
|
||||||
- Select markets: Create your static list or use an automatic one based on top traded volumes and/or prices (not available during backtesting). You can also explicitly blacklist markets you don't want to trade.
|
- Select markets: Create your static list or use an automatic one based on top traded volumes and/or prices (not available during backtesting). You can also explicitly blacklist markets you don't want to trade.
|
||||||
- Run: Test your strategy with simulated money (Dry-Run mode) or deploy it with real money (Live-Trade mode).
|
- Run: Test your strategy with simulated money (Dry-Run mode) or deploy it with real money (Live-Trade mode).
|
||||||
- Run using Edge (optional module): The concept is to find the best historical [trade expectancy](edge.md#expectancy) by markets based on variation of the stop-loss and then allow/reject markets to trade. The sizing of the trade is based on a risk of a percentage of your capital.
|
- Run using Edge (optional module): The concept is to find the best historical [trade expectancy](edge.md#expectancy) by markets based on variation of the stop-loss and then allow/reject markets to trade. The sizing of the trade is based on a risk of a percentage of your capital.
|
||||||
@@ -40,20 +40,24 @@ Freqtrade is a free and open source crypto trading bot written in Python. It is
|
|||||||
Please read the [exchange specific notes](exchanges.md) to learn about eventual, special configurations needed for each exchange.
|
Please read the [exchange specific notes](exchanges.md) to learn about eventual, special configurations needed for each exchange.
|
||||||
|
|
||||||
- [X] [Binance](https://www.binance.com/)
|
- [X] [Binance](https://www.binance.com/)
|
||||||
- [X] [Bitmart](https://bitmart.com/)
|
|
||||||
- [X] [BingX](https://bingx.com/invite/0EM9RX)
|
- [X] [BingX](https://bingx.com/invite/0EM9RX)
|
||||||
|
- [X] [Bitmart](https://bitmart.com/)
|
||||||
|
- [X] [Bybit](https://bybit.com/)
|
||||||
- [X] [Gate.io](https://www.gate.io/ref/6266643)
|
- [X] [Gate.io](https://www.gate.io/ref/6266643)
|
||||||
- [X] [HTX](https://www.htx.com/) (Former Huobi)
|
- [X] [HTX](https://www.htx.com/)
|
||||||
|
- [X] [Hyperliquid](https://hyperliquid.xyz/) (A decentralized exchange, or DEX)
|
||||||
- [X] [Kraken](https://kraken.com/)
|
- [X] [Kraken](https://kraken.com/)
|
||||||
- [X] [OKX](https://okx.com/) (Former OKEX)
|
- [X] [OKX](https://okx.com/)
|
||||||
|
- [X] [MyOKX](https://okx.com/) (OKX EEA)
|
||||||
- [ ] [potentially many others through <img alt="ccxt" width="30px" src="assets/ccxt-logo.svg" />](https://github.com/ccxt/ccxt/). _(We cannot guarantee they will work)_
|
- [ ] [potentially many others through <img alt="ccxt" width="30px" src="assets/ccxt-logo.svg" />](https://github.com/ccxt/ccxt/). _(We cannot guarantee they will work)_
|
||||||
|
|
||||||
### Supported Futures Exchanges (experimental)
|
### Supported Futures Exchanges (experimental)
|
||||||
|
|
||||||
- [X] [Binance](https://www.binance.com/)
|
- [X] [Binance](https://www.binance.com/)
|
||||||
- [X] [Gate.io](https://www.gate.io/ref/6266643)
|
|
||||||
- [X] [OKX](https://okx.com/)
|
|
||||||
- [X] [Bybit](https://bybit.com/)
|
- [X] [Bybit](https://bybit.com/)
|
||||||
|
- [X] [Gate.io](https://www.gate.io/ref/6266643)
|
||||||
|
- [X] [Hyperliquid](https://hyperliquid.xyz/) (A decentralized exchange, or DEX)
|
||||||
|
- [X] [OKX](https://okx.com/)
|
||||||
|
|
||||||
Please make sure to read the [exchange specific notes](exchanges.md), as well as the [trading with leverage](leverage.md) documentation before diving in.
|
Please make sure to read the [exchange specific notes](exchanges.md), as well as the [trading with leverage](leverage.md) documentation before diving in.
|
||||||
|
|
||||||
@@ -84,7 +88,7 @@ To run this bot we recommend you a linux cloud instance with a minimum of:
|
|||||||
|
|
||||||
Alternatively
|
Alternatively
|
||||||
|
|
||||||
- Python 3.9+
|
- Python 3.10+
|
||||||
- pip (pip3)
|
- pip (pip3)
|
||||||
- git
|
- git
|
||||||
- TA-Lib
|
- TA-Lib
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ The easiest way to install and run Freqtrade is to clone the bot Github reposito
|
|||||||
The `stable` branch contains the code of the last release (done usually once per month on an approximately one week old snapshot of the `develop` branch to prevent packaging bugs, so potentially it's more stable).
|
The `stable` branch contains the code of the last release (done usually once per month on an approximately one week old snapshot of the `develop` branch to prevent packaging bugs, so potentially it's more stable).
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
Python3.9 or higher and the corresponding `pip` are assumed to be available. The install-script will warn you and stop if that's not the case. `git` is also needed to clone the Freqtrade repository.
|
Python3.10 or higher and the corresponding `pip` are assumed to be available. The install-script will warn you and stop if that's not the case. `git` is also needed to clone the Freqtrade repository.
|
||||||
Also, python headers (`python<yourversion>-dev` / `python<yourversion>-devel`) must be available for the installation to complete successfully.
|
Also, python headers (`python<yourversion>-dev` / `python<yourversion>-devel`) must be available for the installation to complete successfully.
|
||||||
|
|
||||||
!!! Warning "Up-to-date clock"
|
!!! Warning "Up-to-date clock"
|
||||||
@@ -42,7 +42,7 @@ These requirements apply to both [Script Installation](#script-installation) and
|
|||||||
|
|
||||||
### Install guide
|
### Install guide
|
||||||
|
|
||||||
* [Python >= 3.9](http://docs.python-guide.org/en/latest/starting/installation/)
|
* [Python >= 3.10](http://docs.python-guide.org/en/latest/starting/installation/)
|
||||||
* [pip](https://pip.pypa.io/en/stable/installing/)
|
* [pip](https://pip.pypa.io/en/stable/installing/)
|
||||||
* [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
|
* [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
|
||||||
* [virtualenv](https://virtualenv.pypa.io/en/stable/installation.html) (Recommended)
|
* [virtualenv](https://virtualenv.pypa.io/en/stable/installation.html) (Recommended)
|
||||||
@@ -54,7 +54,7 @@ We've included/collected install instructions for Ubuntu, MacOS, and Windows. Th
|
|||||||
OS Specific steps are listed first, the common section below is necessary for all systems.
|
OS Specific steps are listed first, the common section below is necessary for all systems.
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
Python3.9 or higher and the corresponding pip are assumed to be available.
|
Python3.10 or higher and the corresponding pip are assumed to be available.
|
||||||
|
|
||||||
=== "Debian/Ubuntu"
|
=== "Debian/Ubuntu"
|
||||||
#### Install necessary dependencies
|
#### Install necessary dependencies
|
||||||
@@ -67,16 +67,28 @@ OS Specific steps are listed first, the common section below is necessary for al
|
|||||||
sudo apt install -y python3-pip python3-venv python3-dev python3-pandas git curl
|
sudo apt install -y python3-pip python3-venv python3-dev python3-pandas git curl
|
||||||
```
|
```
|
||||||
|
|
||||||
|
=== "MacOS"
|
||||||
|
#### Install necessary dependencies
|
||||||
|
|
||||||
|
Install [Homebrew](https://brew.sh/) if you don't have it already.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# install packages
|
||||||
|
brew install gettext libomp
|
||||||
|
```
|
||||||
|
!!! Note
|
||||||
|
The `setup.sh` script will install these dependencies for you - assuming brew is installed on your system.
|
||||||
|
|
||||||
=== "RaspberryPi/Raspbian"
|
=== "RaspberryPi/Raspbian"
|
||||||
The following assumes the latest [Raspbian Buster lite image](https://www.raspberrypi.org/downloads/raspbian/).
|
The following assumes the latest [Raspbian Buster lite image](https://www.raspberrypi.org/downloads/raspbian/).
|
||||||
This image comes with python3.9 preinstalled, making it easy to get freqtrade up and running.
|
This image comes with python3.11 preinstalled, making it easy to get freqtrade up and running.
|
||||||
|
|
||||||
Tested using a Raspberry Pi 3 with the Raspbian Buster lite image, all updates applied.
|
Tested using a Raspberry Pi 3 with the Raspbian Buster lite image, all updates applied.
|
||||||
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install python3-venv libatlas-base-dev cmake curl
|
sudo apt-get install python3-venv libatlas-base-dev cmake curl
|
||||||
# Use pywheels.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
|
||||||
|
|
||||||
git clone https://github.com/freqtrade/freqtrade.git
|
git clone https://github.com/freqtrade/freqtrade.git
|
||||||
@@ -150,9 +162,7 @@ Each time you open a new terminal, you must run `source .venv/bin/activate` to a
|
|||||||
source ./.venv/bin/activate
|
source ./.venv/bin/activate
|
||||||
```
|
```
|
||||||
|
|
||||||
### Congratulations
|
[You are now ready](#you-are-ready) to run the bot.
|
||||||
|
|
||||||
[You are ready](#you-are-ready), and run the bot
|
|
||||||
|
|
||||||
### Other options of /setup.sh script
|
### Other options of /setup.sh script
|
||||||
|
|
||||||
@@ -169,7 +179,7 @@ You can as well update, configure and reset the codebase of your bot with `./scr
|
|||||||
** --install **
|
** --install **
|
||||||
|
|
||||||
With this option, the script will install the bot and most dependencies:
|
With this option, the script will install the bot and most dependencies:
|
||||||
You will need to have git and python3.9+ installed beforehand for this to work.
|
You will need to have git and python3.10+ installed beforehand for this to work.
|
||||||
|
|
||||||
* Mandatory software as: `ta-lib`
|
* Mandatory software as: `ta-lib`
|
||||||
* Setup your virtualenv under `.venv/`
|
* Setup your virtualenv under `.venv/`
|
||||||
@@ -220,7 +230,7 @@ cd ..
|
|||||||
rm -rf ./ta-lib*
|
rm -rf ./ta-lib*
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Setup Python virtual environment (virtualenv)
|
### Setup Python virtual environment (virtualenv)
|
||||||
|
|
||||||
You will run freqtrade in separated `virtual environment`
|
You will run freqtrade in separated `virtual environment`
|
||||||
|
|
||||||
@@ -232,19 +242,18 @@ python3 -m venv .venv
|
|||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Install python dependencies
|
### Install python dependencies
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
python3 -m pip install -r requirements.txt
|
python3 -m pip install -r requirements.txt
|
||||||
|
# install freqtrade
|
||||||
python3 -m pip install -e .
|
python3 -m pip install -e .
|
||||||
```
|
```
|
||||||
|
|
||||||
### Congratulations
|
[You are now ready](#you-are-ready) to run the bot.
|
||||||
|
|
||||||
[You are ready](#you-are-ready), and run the bot
|
### (Optional) Post-installation Tasks
|
||||||
|
|
||||||
#### (Optional) Post-installation Tasks
|
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
If you run the bot on a server, you should consider using [Docker](docker_quickstart.md) or a terminal multiplexer like `screen` or [`tmux`](https://en.wikipedia.org/wiki/Tmux) to avoid that the bot is stopped on logout.
|
If you run the bot on a server, you should consider using [Docker](docker_quickstart.md) or a terminal multiplexer like `screen` or [`tmux`](https://en.wikipedia.org/wiki/Tmux) to avoid that the bot is stopped on logout.
|
||||||
@@ -333,9 +342,7 @@ cd build_helpers
|
|||||||
bash install_ta-lib.sh ${CONDA_PREFIX} nosudo
|
bash install_ta-lib.sh ${CONDA_PREFIX} nosudo
|
||||||
```
|
```
|
||||||
|
|
||||||
### Congratulations
|
[You are now ready](#you-are-ready) to run the bot.
|
||||||
|
|
||||||
[You are ready](#you-are-ready), and run the bot
|
|
||||||
|
|
||||||
### Important shortcuts
|
### Important shortcuts
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -29,39 +29,7 @@ Those 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:
|
|
||||||
--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
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! Note ""
|
!!! Note ""
|
||||||
The above Output was reduced to options `lookahead-analysis` adds on top of regular backtesting commands.
|
The above Output was reduced to options `lookahead-analysis` adds on top of regular backtesting commands.
|
||||||
@@ -101,3 +69,4 @@ This could lead to a false-negative (the strategy will then be reported as non-b
|
|||||||
- `lookahead-analysis` has access to everything that backtesting has too.
|
- `lookahead-analysis` has access to everything that backtesting has too.
|
||||||
Please don't provoke any configs like enabling position stacking.
|
Please don't provoke any configs like enabling position stacking.
|
||||||
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` amount and neither leftover money in your wallet.
|
||||||
|
- 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.
|
||||||
|
|||||||
128
docs/plotting.md
128
docs/plotting.md
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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.7
|
||||||
mkdocs==1.6.0
|
mkdocs==1.6.1
|
||||||
mkdocs-material==9.5.33
|
mkdocs-material==9.5.50
|
||||||
mdx_truly_sane_lists==1.3
|
mdx_truly_sane_lists==1.3
|
||||||
pymdown-extensions==10.9
|
pymdown-extensions==10.14.1
|
||||||
jinja2==3.1.4
|
jinja2==3.1.5
|
||||||
mike==2.1.3
|
mike==2.1.3
|
||||||
|
|||||||
120
docs/rest-api.md
120
docs/rest-api.md
@@ -88,8 +88,9 @@ Make sure that the following 2 lines are available in your docker-compose file:
|
|||||||
|
|
||||||
### Consuming the API
|
### Consuming the API
|
||||||
|
|
||||||
You can consume the API by using `freqtrade-client` (also available as `scripts/rest_client.py`).
|
We advise consuming the API by using the supported `freqtrade-client` package (also available as `scripts/rest_client.py`).
|
||||||
This command can be installed independent of the bot by using `pip install freqtrade-client`.
|
|
||||||
|
This command can be installed independent of any running freqtrade bot by using `pip install freqtrade-client`.
|
||||||
|
|
||||||
This module is designed to be lightweight, and only depends on the `requests` and `python-rapidjson` modules, skipping all heavy dependencies freqtrade otherwise needs.
|
This module is designed to be lightweight, and only depends on the `requests` and `python-rapidjson` modules, skipping all heavy dependencies freqtrade otherwise needs.
|
||||||
|
|
||||||
@@ -144,57 +145,6 @@ This method will work for all arguments - check the "show" command for a list of
|
|||||||
|
|
||||||
For a full list of available commands, please refer to the list below.
|
For a full list of available commands, please refer to the list below.
|
||||||
|
|
||||||
### Available endpoints
|
|
||||||
|
|
||||||
| Command | Description |
|
|
||||||
|----------|-------------|
|
|
||||||
| `ping` | Simple command testing the API Readiness - requires no authentication.
|
|
||||||
| `start` | Starts the trader.
|
|
||||||
| `stop` | Stops the trader.
|
|
||||||
| `stopbuy` | Stops the trader from opening new trades. Gracefully closes open trades according to their rules.
|
|
||||||
| `reload_config` | Reloads the configuration file.
|
|
||||||
| `trades` | List last trades. Limited to 500 trades per call.
|
|
||||||
| `trade/<tradeid>` | Get specific trade.
|
|
||||||
| `trades/<tradeid>` | DELETE - Remove trade from the database. Tries to close open orders. Requires manual handling of this trade on the exchange.
|
|
||||||
| `trades/<tradeid>/open-order` | DELETE - Cancel open order for this trade.
|
|
||||||
| `trades/<tradeid>/reload` | GET - Reload a trade from the Exchange. Only works in live, and can potentially help recover a trade that was manually sold on the exchange.
|
|
||||||
| `show_config` | Shows part of the current configuration with relevant settings to operation.
|
|
||||||
| `logs` | Shows last log messages.
|
|
||||||
| `status` | Lists all open trades.
|
|
||||||
| `count` | Displays number of trades used and available.
|
|
||||||
| `entries [pair]` | Shows profit statistics for each enter tags for given pair (or all pairs if pair isn't given). Pair is optional.
|
|
||||||
| `exits [pair]` | Shows profit statistics for each exit reasons for given pair (or all pairs if pair isn't given). Pair is optional.
|
|
||||||
| `mix_tags [pair]` | Shows profit statistics for each combinations of enter tag + exit reasons for given pair (or all pairs if pair isn't given). Pair is optional.
|
|
||||||
| `locks` | Displays currently locked pairs.
|
|
||||||
| `delete_lock <lock_id>` | Deletes (disables) the lock by id.
|
|
||||||
| `locks add <pair>, <until>, [side], [reason]` | Locks a pair until "until". (Until will be rounded up to the nearest timeframe).
|
|
||||||
| `profit` | Display a summary of your profit/loss from close trades and some stats about your performance.
|
|
||||||
| `forceexit <trade_id> [order_type] [amount]` | Instantly exits the given trade (ignoring `minimum_roi`), using the given order type ("market" or "limit", uses your config setting if not specified), and the chosen amount (full sell if not specified).
|
|
||||||
| `forceexit all` | Instantly exits all open trades (Ignoring `minimum_roi`).
|
|
||||||
| `forceenter <pair> [rate]` | Instantly enters the given pair. Rate is optional. (`force_entry_enable` must be set to True)
|
|
||||||
| `forceenter <pair> <side> [rate]` | Instantly longs or shorts the given pair. Rate is optional. (`force_entry_enable` must be set to True)
|
|
||||||
| `performance` | Show performance of each finished trade grouped by pair.
|
|
||||||
| `balance` | Show account balance per currency.
|
|
||||||
| `daily <n>` | Shows profit or loss per day, over the last n days (n defaults to 7).
|
|
||||||
| `weekly <n>` | Shows profit or loss per week, over the last n days (n defaults to 4).
|
|
||||||
| `monthly <n>` | Shows profit or loss per month, over the last n days (n defaults to 3).
|
|
||||||
| `stats` | Display a summary of profit / loss reasons as well as average holding times.
|
|
||||||
| `whitelist` | Show the current whitelist.
|
|
||||||
| `blacklist [pair]` | Show the current blacklist, or adds a pair to the blacklist.
|
|
||||||
| `edge` | Show validated pairs by Edge if it is enabled.
|
|
||||||
| `pair_candles` | Returns dataframe for a pair / timeframe combination while the bot is running. **Alpha**
|
|
||||||
| `pair_history` | Returns an analyzed dataframe for a given timerange, analyzed by a given strategy. **Alpha**
|
|
||||||
| `plot_config` | Get plot config from the strategy (or nothing if not configured). **Alpha**
|
|
||||||
| `strategies` | List strategies in strategy directory. **Alpha**
|
|
||||||
| `strategy <strategy>` | Get specific Strategy content. **Alpha**
|
|
||||||
| `available_pairs` | List available backtest data. **Alpha**
|
|
||||||
| `version` | Show version.
|
|
||||||
| `sysinfo` | Show information about the system load.
|
|
||||||
| `health` | Show bot health (last bot loop).
|
|
||||||
|
|
||||||
!!! Warning "Alpha status"
|
|
||||||
Endpoints labeled with *Alpha status* above may change at any time without notice.
|
|
||||||
|
|
||||||
Possible commands can be listed from the rest-client script using the `help` command.
|
Possible commands can be listed from the rest-client script using the `help` command.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
@@ -266,6 +216,14 @@ forceexit
|
|||||||
health
|
health
|
||||||
Provides a quick health check of the running bot.
|
Provides a quick health check of the running bot.
|
||||||
|
|
||||||
|
lock_add
|
||||||
|
Manually lock a specific pair
|
||||||
|
|
||||||
|
:param pair: Pair to lock
|
||||||
|
:param until: Lock until this date (format "2024-03-30 16:00:00Z")
|
||||||
|
:param side: Side to lock (long, short, *)
|
||||||
|
:param reason: Reason for the lock
|
||||||
|
|
||||||
locks
|
locks
|
||||||
Return current locks
|
Return current locks
|
||||||
|
|
||||||
@@ -353,6 +311,62 @@ whitelist
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Available endpoints
|
||||||
|
|
||||||
|
If you wish to call the REST API manually via another route, e.g. directly via `curl`, the table below shows the relevant URL endpoints and parameters.
|
||||||
|
All endpoints in the below table need to be prefixed with the base URL of the API, e.g. `http://127.0.0.1:8080/api/v1/` - so the command becomes `http://127.0.0.1:8080/api/v1/<command>`.
|
||||||
|
|
||||||
|
| Endpoint | Method | Description / Parameters |
|
||||||
|
|-----------|--------|--------------------------|
|
||||||
|
| `/ping` | GET | Simple command testing the API Readiness - requires no authentication.
|
||||||
|
| `/start` | POST | Starts the trader.
|
||||||
|
| `/stop` | POST | Stops the trader.
|
||||||
|
| `/stopbuy` | POST | Stops the trader from opening new trades. Gracefully closes open trades according to their rules.
|
||||||
|
| `/reload_config` | POST | Reloads the configuration file.
|
||||||
|
| `/trades` | GET | List last trades. Limited to 500 trades per call.
|
||||||
|
| `/trade/<tradeid>` | GET | Get specific trade.<br/>*Params:*<br/>- `tradeid` (`int`)
|
||||||
|
| `/trades/<tradeid>` | DELETE | Remove trade from the database. Tries to close open orders. Requires manual handling of this trade on the exchange.<br/>*Params:*<br/>- `tradeid` (`int`)
|
||||||
|
| `/trades/<tradeid>/open-order` | DELETE | Cancel open order for this trade.<br/>*Params:*<br/>- `tradeid` (`int`)
|
||||||
|
| `/trades/<tradeid>/reload` | POST | Reload a trade from the Exchange. Only works in live, and can potentially help recover a trade that was manually sold on the exchange.<br/>*Params:*<br/>- `tradeid` (`int`)
|
||||||
|
| `/show_config` | GET | Shows part of the current configuration with relevant settings to operation.
|
||||||
|
| `/logs` | GET | Shows last log messages.
|
||||||
|
| `/status` | GET | Lists all open trades.
|
||||||
|
| `/count` | GET | Displays number of trades used and available.
|
||||||
|
| `/entries` | GET | Shows profit statistics for each enter tags for given pair (or all pairs if pair isn't given). Pair is optional.<br/>*Params:*<br/>- `pair` (`str`)
|
||||||
|
| `/exits` | GET | Shows profit statistics for each exit reasons for given pair (or all pairs if pair isn't given). Pair is optional.<br/>*Params:*<br/>- `pair` (`str`)
|
||||||
|
| `/mix_tags` | GET | Shows profit statistics for each combinations of enter tag + exit reasons for given pair (or all pairs if pair isn't given). Pair is optional.<br/>*Params:*<br/>- `pair` (`str`)
|
||||||
|
| `/locks` | GET | Displays currently locked pairs.
|
||||||
|
| `/locks` | POST | Locks a pair until "until". (Until will be rounded up to the nearest timeframe). Side is optional and is either `long` or `short` (default is `long`). Reason is optional.<br/>*Params:*<br/>- `<pair>` (`str`)<br/>- `<until>` (`datetime`)<br/>- `[side]` (`str`)<br/>- `[reason]` (`str`)
|
||||||
|
| `/locks/<lockid>` | DELETE | Deletes (disables) the lock by id.<br/>*Params:*<br/>- `lockid` (`int`)
|
||||||
|
| `/profit` | GET | Display a summary of your profit/loss from close trades and some stats about your performance.
|
||||||
|
| `/forceexit` | POST | Instantly exits the given trade (ignoring `minimum_roi`), using the given order type ("market" or "limit", uses your config setting if not specified), and the chosen amount (full sell if not specified). If `all` is supplied as the `tradeid`, then all currently open trades will be forced to exit.<br/>*Params:*<br/>- `<tradeid>` (`int` or `str`)<br/>- `<ordertype>` (`str`)<br/>- `[amount]` (`float`)
|
||||||
|
| `/forceenter` | POST | Instantly enters the given pair. Side is optional and is either `long` or `short` (default is `long`). Rate is optional. (`force_entry_enable` must be set to True)<br/>*Params:*<br/>- `<pair>` (`str`)<br/>- `<side>` (`str`)<br/>- `[rate]` (`float`)
|
||||||
|
| `/performance` | GET | Show performance of each finished trade grouped by pair.
|
||||||
|
| `/balance` | GET | Show account balance per currency.
|
||||||
|
| `/daily` | GET | Shows profit or loss per day, over the last n days (n defaults to 7).<br/>*Params:*<br/>- `<n>` (`int`)
|
||||||
|
| `/weekly` | GET | Shows profit or loss per week, over the last n days (n defaults to 4).<br/>*Params:*<br/>- `<n>` (`int`)
|
||||||
|
| `/monthly` | GET | Shows profit or loss per month, over the last n days (n defaults to 3).<br/>*Params:*<br/>- `<n>` (`int`)
|
||||||
|
| `/stats` | GET | Display a summary of profit / loss reasons as well as average holding times.
|
||||||
|
| `/whitelist` | GET | Show the current whitelist.
|
||||||
|
| `/blacklist` | GET | Show the current blacklist.
|
||||||
|
| `/blacklist` | POST | Adds the specified pair to the blacklist.<br/>*Params:*<br/>- `pair` (`str`)
|
||||||
|
| `/blacklist` | DELETE | Deletes the specified list of pairs from the blacklist.<br/>*Params:*<br/>- `[pair,pair]` (`list[str]`)
|
||||||
|
| `/edge` | GET | Show validated pairs by Edge if it is enabled.
|
||||||
|
| `/pair_candles` | GET | Returns dataframe for a pair / timeframe combination while the bot is running. **Alpha**
|
||||||
|
| `/pair_candles` | POST | Returns dataframe for a pair / timeframe combination while the bot is running, filtered by a provided list of columns to return. **Alpha**<br/>*Params:*<br/>- `<column_list>` (`list[str]`)
|
||||||
|
| `/pair_history` | GET | Returns an analyzed dataframe for a given timerange, analyzed by a given strategy. **Alpha**
|
||||||
|
| `/pair_history` | POST | Returns an analyzed dataframe for a given timerange, analyzed by a given strategy, filtered by a provided list of columns to return. **Alpha**<br/>*Params:*<br/>- `<column_list>` (`list[str]`)
|
||||||
|
| `/plot_config` | GET | Get plot config from the strategy (or nothing if not configured). **Alpha**
|
||||||
|
| `/strategies` | GET | List strategies in strategy directory. **Alpha**
|
||||||
|
| `/strategy/<strategy>` | GET | Get specific Strategy content by strategy class name. **Alpha**<br/>*Params:*<br/>- `<strategy>` (`str`)
|
||||||
|
| `/available_pairs` | GET | List available backtest data. **Alpha**
|
||||||
|
| `/version` | GET | Show version.
|
||||||
|
| `/sysinfo` | GET | Show information about the system load.
|
||||||
|
| `/health` | GET | Show bot health (last bot loop).
|
||||||
|
|
||||||
|
!!! Warning "Alpha status"
|
||||||
|
Endpoints labeled with *Alpha status* above may change at any time without notice.
|
||||||
|
|
||||||
### Message WebSocket
|
### Message WebSocket
|
||||||
|
|
||||||
The API Server includes a websocket endpoint for subscribing to RPC messages from the freqtrade Bot.
|
The API Server includes a websocket endpoint for subscribing to RPC messages from the freqtrade Bot.
|
||||||
|
|||||||
@@ -31,11 +31,12 @@ The Order-type will be ignored if only one mode is available.
|
|||||||
| Binance | limit |
|
| Binance | limit |
|
||||||
| Binance Futures | market, limit |
|
| Binance Futures | market, limit |
|
||||||
| Bingx | market, limit |
|
| Bingx | market, limit |
|
||||||
| HTX (former Huobi) | limit |
|
| HTX | limit |
|
||||||
| kraken | market, limit |
|
| kraken | market, limit |
|
||||||
| Gate | limit |
|
| Gate | limit |
|
||||||
| Okx | limit |
|
| Okx | limit |
|
||||||
| Kucoin | stop-limit, stop-market|
|
| Kucoin | stop-limit, stop-market|
|
||||||
|
| Hyperliquid (futures only) | limit |
|
||||||
|
|
||||||
!!! Note "Tight stoploss"
|
!!! Note "Tight stoploss"
|
||||||
<ins>Do not set too low/tight stoploss value when using stop loss on exchange!</ins>
|
<ins>Do not set too low/tight stoploss value when using stop loss on exchange!</ins>
|
||||||
|
|||||||
196
docs/strategy-101.md
Normal file
196
docs/strategy-101.md
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
# Freqtrade Strategies 101: A Quick Start for Strategy Development
|
||||||
|
|
||||||
|
For the purposes of this quick start, we are assuming you are familiar with the basics of trading, and have read the
|
||||||
|
[Freqtrade basics](bot-basics.md) page.
|
||||||
|
|
||||||
|
## Required Knowledge
|
||||||
|
|
||||||
|
A strategy in Freqtrade is a Python class that defines the logic for buying and selling cryptocurrency `assets`.
|
||||||
|
|
||||||
|
Assets are defined as `pairs`, which represent the `coin` and the `stake`. The coin is the asset you are trading using another currency as the stake.
|
||||||
|
|
||||||
|
Data is supplied by the exchange in the form of `candles`, which are made up of a six values: `date`, `open`, `high`, `low`, `close` and `volume`.
|
||||||
|
|
||||||
|
`Technical analysis` functions analyse the candle data using various computational and statistical formulae, and produce secondary values called `indicators`.
|
||||||
|
|
||||||
|
Indicators are analysed on the asset pair candles to generate `signals`.
|
||||||
|
|
||||||
|
Signals are turned into `orders` on a cryptocurrency `exchange`, i.e. `trades`.
|
||||||
|
|
||||||
|
We use the terms `entry` and `exit` instead of `buying` and `selling` because Freqtrade supports both `long` and `short` trades.
|
||||||
|
|
||||||
|
- **long**: You buy the coin based on a stake, e.g. buying the coin BTC using USDT as your stake, and you make a profit by selling the coin at a higher rate than you paid for. In long trades, profits are made by the coin value going up versus the stake.
|
||||||
|
- **short**: You borrow capital from the exchange in the form of the coin, and you pay back the stake value of the coin later. In short trades profits are made by the coin value going down versus the stake (you pay the loan off at a lower rate).
|
||||||
|
|
||||||
|
Whilst Freqtrade supports spot and futures markets for certain exchanges, for simplicity we will focus on spot (long) trades only.
|
||||||
|
|
||||||
|
## Structure of a Basic Strategy
|
||||||
|
|
||||||
|
### Main dataframe
|
||||||
|
|
||||||
|
Freqtrade strategies use a tabular data structure with rows and columns known as a `dataframe` to generate signals to enter and exit trades.
|
||||||
|
|
||||||
|
Each pair in your configured pairlist has its own dataframe. Dataframes are indexed by the `date` column, e.g. `2024-06-31 12:00`.
|
||||||
|
|
||||||
|
The next 5 columns represent the `open`, `high`, `low`, `close` and `volume` (OHLCV) data.
|
||||||
|
|
||||||
|
### Populate indicator values
|
||||||
|
|
||||||
|
The `populate_indicators` function adds columns to the dataframe that represent the technical analysis indicator values.
|
||||||
|
|
||||||
|
Examples of common indicators include Relative Strength Index, Bollinger Bands, Money Flow Index, Moving Average, and Average True Range.
|
||||||
|
|
||||||
|
Columns are added to the dataframe by calling technical analysis functions, e.g. ta-lib's RSI function `ta.RSI()`, and assigning them to a column name, e.g. `rsi`
|
||||||
|
|
||||||
|
```python
|
||||||
|
dataframe['rsi'] = ta.RSI(dataframe)
|
||||||
|
```
|
||||||
|
|
||||||
|
??? Hint "Technical Analysis libraries"
|
||||||
|
Different libraries work in different ways to generate indicator values. Please check the documentation of each library to understand
|
||||||
|
how to integrate it into your strategy. You can also check the [Freqtrade example strategies](https://github.com/freqtrade/freqtrade-strategies) to give you ideas.
|
||||||
|
|
||||||
|
### Populate entry signals
|
||||||
|
|
||||||
|
The `populate_entry_trend` function defines conditions for an entry signal.
|
||||||
|
|
||||||
|
The dataframe column `enter_long` is added to the dataframe, and when a value of `1` is in this column, Freqtrade sees an entry signal.
|
||||||
|
|
||||||
|
??? Hint "Shorting"
|
||||||
|
To enter short trades, use the `enter_short` column.
|
||||||
|
|
||||||
|
### Populate exit signals
|
||||||
|
|
||||||
|
The `populate_exit_trend` function defines conditions for an exit signal.
|
||||||
|
|
||||||
|
The dataframe column `exit_long` is added to the dataframe, and when a value of `1` is in this column, Freqtrade sees an exit signal.
|
||||||
|
|
||||||
|
??? Hint "Shorting"
|
||||||
|
To exit short trades, use the `exit_short` column.
|
||||||
|
|
||||||
|
## A simple strategy
|
||||||
|
|
||||||
|
Here is a minimal example of a Freqtrade strategy:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from freqtrade.strategy import IStrategy
|
||||||
|
from pandas import DataFrame
|
||||||
|
import talib.abstract as ta
|
||||||
|
|
||||||
|
class MyStrategy(IStrategy):
|
||||||
|
|
||||||
|
# set the initial stoploss to -10%
|
||||||
|
stoploss = -0.10
|
||||||
|
|
||||||
|
# exit profitable positions at any time when the profit is greater than 1%
|
||||||
|
minimal_roi = {"0": 0.01}
|
||||||
|
|
||||||
|
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||||
|
# generate values for technical analysis indicators
|
||||||
|
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
|
||||||
|
|
||||||
|
return dataframe
|
||||||
|
|
||||||
|
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||||
|
# generate entry signals based on indicator values
|
||||||
|
dataframe.loc[
|
||||||
|
(dataframe['rsi'] < 30),
|
||||||
|
'enter_long'] = 1
|
||||||
|
|
||||||
|
return dataframe
|
||||||
|
|
||||||
|
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||||
|
# generate exit signals based on indicator values
|
||||||
|
dataframe.loc[
|
||||||
|
(dataframe['rsi'] > 70),
|
||||||
|
'exit_long'] = 1
|
||||||
|
|
||||||
|
return dataframe
|
||||||
|
```
|
||||||
|
|
||||||
|
## Making trades
|
||||||
|
|
||||||
|
When a signal is found (a `1` in an entry or exit column), Freqtrade will attempt to make an order, i.e. a `trade` or `position`.
|
||||||
|
|
||||||
|
Each new trade position takes up a `slot`. Slots represent the maximum number of concurrent new trades that can be opened.
|
||||||
|
|
||||||
|
The number of slots is defined by the `max_open_trades` [configuration](configuration.md) option.
|
||||||
|
|
||||||
|
However, there can be a range of scenarios where generating a signal does not always create a trade order. These include:
|
||||||
|
|
||||||
|
- not enough remaining stake to buy an asset, or funds in your wallet to sell an asset (including any fees)
|
||||||
|
- not enough remaining free slots for a new trade to be opened (the number of positions you have open equals the `max_open_trades` option)
|
||||||
|
- there is already an open trade for a pair (Freqtrade cannot stack positions - however it can [adjust existing positions](strategy-callbacks.md#adjust-trade-position))
|
||||||
|
- if an entry and exit signal is present on the same candle, they are considered as [colliding](strategy-customization.md#colliding-signals), and no order will be raised
|
||||||
|
- the strategy actively rejects the trade order due to logic you specify by using one of the relevant [entry](strategy-callbacks.md#trade-entry-buy-order-confirmation) or [exit](strategy-callbacks.md#trade-exit-sell-order-confirmation) callbacks
|
||||||
|
|
||||||
|
Read through the [strategy customization](strategy-customization.md) documentation for more details.
|
||||||
|
|
||||||
|
## Backtesting and forward testing
|
||||||
|
|
||||||
|
Strategy development can be a long and frustrating process, as turning our human "gut instincts" into a working computer-controlled
|
||||||
|
("algo") strategy is not always straightforward.
|
||||||
|
|
||||||
|
Therefore a strategy should be tested to verify that it is going to work as intended.
|
||||||
|
|
||||||
|
Freqtrade has two testing modes:
|
||||||
|
|
||||||
|
- **backtesting**: using historical data that you [download from an exchange](data-download.md), backtesting is a quick way to assess performance of a strategy. However, it can be very easy to distort results so a strategy will look a lot more profitable than it really is. Check the [backtesting documentation](backtesting.md) for more information.
|
||||||
|
- **dry run**: often referred to as _forward testing_, dry runs use real time data from the exchange. However, any signals that would result in trades are tracked as normal by Freqtrade, but do not have any trades opened on the exchange itself. Forward testing runs in real time, so whilst it takes longer to get results it is a much more reliable indicator of **potential** performance than backtesting.
|
||||||
|
|
||||||
|
Dry runs are enabled by setting `dry_run` to true in your [configuration](configuration.md#using-dry-run-mode).
|
||||||
|
|
||||||
|
!!! Warning "Backtests can be very inaccurate"
|
||||||
|
There are many reasons why backtest results may not match reality. Please check the [backtesting assumptions](backtesting.md#assumptions-made-by-backtesting) and [common strategy mistakes](strategy-customization.md#common-mistakes-when-developing-strategies) documentation.
|
||||||
|
Some websites that list and rank Freqtrade strategies show impressive backtest results. Do not assume these results are achieveable or realistic.
|
||||||
|
|
||||||
|
??? Hint "Useful commands"
|
||||||
|
Freqtrade includes two useful commands to check for basic flaws in strategies: [lookahead-analysis](lookahead-analysis.md) and [recursive-analysis](recursive-analysis.md).
|
||||||
|
|
||||||
|
### Assessing backtesting and dry run results
|
||||||
|
|
||||||
|
Always dry run your strategy after backtesting it to see if backtesting and dry run results are sufficiently similar.
|
||||||
|
|
||||||
|
If there is any significant difference, verify that your entry and exit signals are consistent and appear on the same candles between the two modes. However, there will always be differences between dry runs and backtests:
|
||||||
|
|
||||||
|
- Backtesting assumes all orders fill. In dry runs this might not be the case if using limit orders or there is no volume on the exchange.
|
||||||
|
- Following an entry signal on candle close, backtesting assumes trades enter at the next candle's open price (unless you have custom pricing callbacks in your strategy). In dry runs, there is often a delay between signals and trades opening.
|
||||||
|
This is because when new candles come in on your main timeframe, e.g. every 5 minutes, it takes time for Freqtrade to analyse all pair dataframes. Therefore, Freqtrade will attempt to open trades a few seconds (ideally a small a delay as possible)
|
||||||
|
after candle open.
|
||||||
|
- As entry rates in dry runs might not match backtesting, this means profit calculations will also differ. Therefore, it is normal if ROI, stoploss, trailing stoploss and callback exits are not identical.
|
||||||
|
- The more computational "lag" you have between new candles coming in and your signals being raised and trades being opened will result in greater price unpredictability. Make sure your computer is powerful enough to process the data for the number
|
||||||
|
of pairs you have in your pairlist within a reasonable time. Freqtrade will warn you in the logs if there are significant data processing delays.
|
||||||
|
|
||||||
|
## 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:
|
||||||
|
|
||||||
|
- **[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.
|
||||||
|
- **[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.
|
||||||
|
- **[Webhooks](webhook-config.md)**: Freqtrade can send information to other services, e.g. discord, by webhooks.
|
||||||
|
|
||||||
|
### 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.
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
Therefore, taking public strategies and using backtests as a way to assess performance is often problematic. However, Freqtrade provides useful ways to help you make decisions and do your due diligence.
|
||||||
|
|
||||||
|
There are many different ways to achieve profitability, and there is no one single tip, trick or config option that will fix a poorly performing strategy.
|
||||||
|
|
||||||
|
Freqtrade is an open source platform with a large and helpful community - make sure to visit our [discord channel](https://discord.gg/p7nuUNVfP7) to discuss your strategy with others!
|
||||||
|
|
||||||
|
As always, only invest what you are willing to lose.
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Developing a strategy in Freqtrade involves defining entry and exit signals based on technical indicators. By following the structure and methods outlined above, you can create and test your own trading strategies.
|
||||||
|
|
||||||
|
Common questions and answers are available on our [FAQ](faq.md).
|
||||||
|
|
||||||
|
To continue, refer to the more in-depth [Freqtrade strategy customization documentation](strategy-customization.md).
|
||||||
@@ -38,9 +38,9 @@ class AwesomeStrategy(IStrategy):
|
|||||||
trade.set_custom_data(key='entry_type', value=trade_entry_type)
|
trade.set_custom_data(key='entry_type', value=trade_entry_type)
|
||||||
return super().bot_loop_start(**kwargs)
|
return super().bot_loop_start(**kwargs)
|
||||||
|
|
||||||
def adjust_entry_price(self, trade: Trade, order: Optional[Order], pair: str,
|
def adjust_entry_price(self, trade: Trade, order: Order | None, pair: str,
|
||||||
current_time: datetime, proposed_rate: float, current_order_rate: float,
|
current_time: datetime, proposed_rate: float, current_order_rate: float,
|
||||||
entry_tag: Optional[str], side: str, **kwargs) -> float:
|
entry_tag: str | None, side: str, **kwargs) -> float:
|
||||||
# Limit orders to use and follow SMA200 as price target for the first 10 minutes since entry trigger for BTC/USDT pair.
|
# Limit 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'
|
pair == 'BTC/USDT'
|
||||||
|
|||||||
@@ -90,8 +90,8 @@ Called before entering a trade, makes it possible to manage your position size w
|
|||||||
|
|
||||||
class AwesomeStrategy(IStrategy):
|
class AwesomeStrategy(IStrategy):
|
||||||
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
|
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
|
||||||
proposed_stake: float, min_stake: Optional[float], max_stake: float,
|
proposed_stake: float, min_stake: float | None, max_stake: float,
|
||||||
leverage: float, entry_tag: Optional[str], side: str,
|
leverage: float, entry_tag: str | None, side: str,
|
||||||
**kwargs) -> float:
|
**kwargs) -> float:
|
||||||
|
|
||||||
dataframe, _ = self.dp.get_analyzed_dataframe(pair=pair, timeframe=self.timeframe)
|
dataframe, _ = self.dp.get_analyzed_dataframe(pair=pair, timeframe=self.timeframe)
|
||||||
@@ -166,6 +166,7 @@ Called for open trade every iteration (roughly every 5 seconds) until a trade is
|
|||||||
The usage of the custom stoploss method must be enabled by setting `use_custom_stoploss=True` on the strategy object.
|
The usage of the custom stoploss method must be enabled by setting `use_custom_stoploss=True` on the strategy object.
|
||||||
|
|
||||||
The stoploss price can only ever move upwards - if the stoploss value returned from `custom_stoploss` would result in a lower stoploss price than was previously set, it will be ignored. The traditional `stoploss` value serves as an absolute lower level and will be instated as the initial stoploss (before this method is called for the first time for a trade), and is still mandatory.
|
The stoploss price can only ever move upwards - if the stoploss value returned from `custom_stoploss` would result in a lower stoploss price than was previously set, it will be ignored. The traditional `stoploss` value serves as an absolute lower level and will be instated as the initial stoploss (before this method is called for the first time for a trade), and is still mandatory.
|
||||||
|
As custom stoploss acts as regular, changing stoploss, it will behave similar to `trailing_stop` - and trades exiting due to this will have the exit_reason of `"trailing_stop_loss"`.
|
||||||
|
|
||||||
The method must return a stoploss value (float / number) as a percentage of the current price.
|
The method must return a stoploss value (float / number) as a percentage of the current price.
|
||||||
E.g. If the `current_rate` is 200 USD, then returning `0.02` will set the stoploss price 2% lower, at 196 USD.
|
E.g. If the `current_rate` is 200 USD, then returning `0.02` will set the stoploss price 2% lower, at 196 USD.
|
||||||
@@ -212,7 +213,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
||||||
current_rate: float, current_profit: float, after_fill: bool,
|
current_rate: float, current_profit: float, after_fill: bool,
|
||||||
**kwargs) -> Optional[float]:
|
**kwargs) -> float | None:
|
||||||
"""
|
"""
|
||||||
Custom stoploss logic, returning the new distance relative to current_rate (as ratio).
|
Custom stoploss logic, returning the new distance relative to current_rate (as ratio).
|
||||||
e.g. returning -0.05 would create a stoploss 5% below current_rate.
|
e.g. returning -0.05 would create a stoploss 5% below current_rate.
|
||||||
@@ -250,7 +251,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
||||||
current_rate: float, current_profit: float, after_fill: bool,
|
current_rate: float, current_profit: float, after_fill: bool,
|
||||||
**kwargs) -> Optional[float]:
|
**kwargs) -> float | None:
|
||||||
|
|
||||||
# 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:
|
||||||
@@ -276,7 +277,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
||||||
current_rate: float, current_profit: float, after_fill: bool,
|
current_rate: float, current_profit: float, after_fill: bool,
|
||||||
**kwargs) -> Optional[float]:
|
**kwargs) -> float | None:
|
||||||
|
|
||||||
if after_fill:
|
if after_fill:
|
||||||
# After an additional order, start with a stoploss of 10% below the new open rate
|
# After an additional order, start with a stoploss of 10% below the new open rate
|
||||||
@@ -305,7 +306,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
||||||
current_rate: float, current_profit: float, after_fill: bool,
|
current_rate: float, current_profit: float, after_fill: bool,
|
||||||
**kwargs) -> Optional[float]:
|
**kwargs) -> float | None:
|
||||||
|
|
||||||
if pair in ("ETH/BTC", "XRP/BTC"):
|
if pair in ("ETH/BTC", "XRP/BTC"):
|
||||||
return -0.10
|
return -0.10
|
||||||
@@ -331,7 +332,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
||||||
current_rate: float, current_profit: float, after_fill: bool,
|
current_rate: float, current_profit: float, after_fill: bool,
|
||||||
**kwargs) -> Optional[float]:
|
**kwargs) -> float | None:
|
||||||
|
|
||||||
if current_profit < 0.04:
|
if current_profit < 0.04:
|
||||||
return None # return None to keep using the initial stoploss
|
return None # return None to keep using the initial stoploss
|
||||||
@@ -363,7 +364,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
||||||
current_rate: float, current_profit: float, after_fill: bool,
|
current_rate: float, current_profit: float, after_fill: bool,
|
||||||
**kwargs) -> Optional[float]:
|
**kwargs) -> float | None:
|
||||||
|
|
||||||
# evaluate highest to lowest, so that highest possible stop is used
|
# evaluate highest to lowest, so that highest possible stop is used
|
||||||
if current_profit > 0.40:
|
if current_profit > 0.40:
|
||||||
@@ -394,7 +395,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
||||||
current_rate: float, current_profit: float, after_fill: bool,
|
current_rate: float, current_profit: float, after_fill: bool,
|
||||||
**kwargs) -> Optional[float]:
|
**kwargs) -> float | None:
|
||||||
|
|
||||||
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
|
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
|
||||||
last_candle = dataframe.iloc[-1].squeeze()
|
last_candle = dataframe.iloc[-1].squeeze()
|
||||||
@@ -439,7 +440,7 @@ Stoploss values returned from `custom_stoploss()` must specify a percentage rela
|
|||||||
|
|
||||||
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
||||||
current_rate: float, current_profit: float, after_fill: bool,
|
current_rate: float, current_profit: float, after_fill: bool,
|
||||||
**kwargs) -> Optional[float]:
|
**kwargs) -> float | None:
|
||||||
|
|
||||||
# once the profit has risen above 10%, keep the stoploss at 7% above the open price
|
# once the profit has risen above 10%, keep the stoploss at 7% above the open price
|
||||||
if current_profit > 0.10:
|
if current_profit > 0.10:
|
||||||
@@ -482,7 +483,7 @@ The helper function `stoploss_from_absolute()` can be used to convert from an ab
|
|||||||
|
|
||||||
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
|
||||||
current_rate: float, current_profit: float, after_fill: bool,
|
current_rate: float, current_profit: float, after_fill: bool,
|
||||||
**kwargs) -> Optional[float]:
|
**kwargs) -> float | None:
|
||||||
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
|
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
|
||||||
trade_date = timeframe_to_prev_date(self.timeframe, trade.open_date_utc)
|
trade_date = timeframe_to_prev_date(self.timeframe, trade.open_date_utc)
|
||||||
candle = dataframe.iloc[-1].squeeze()
|
candle = dataframe.iloc[-1].squeeze()
|
||||||
@@ -519,8 +520,8 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
# ... populate_* methods
|
# ... populate_* methods
|
||||||
|
|
||||||
def custom_entry_price(self, pair: str, trade: Optional[Trade], current_time: datetime, proposed_rate: float,
|
def custom_entry_price(self, pair: str, trade: Trade | None, current_time: datetime, proposed_rate: float,
|
||||||
entry_tag: Optional[str], side: str, **kwargs) -> float:
|
entry_tag: str | None, side: str, **kwargs) -> float:
|
||||||
|
|
||||||
dataframe, last_updated = self.dp.get_analyzed_dataframe(pair=pair,
|
dataframe, last_updated = self.dp.get_analyzed_dataframe(pair=pair,
|
||||||
timeframe=self.timeframe)
|
timeframe=self.timeframe)
|
||||||
@@ -530,7 +531,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
def custom_exit_price(self, pair: str, trade: Trade,
|
def custom_exit_price(self, pair: str, trade: Trade,
|
||||||
current_time: datetime, proposed_rate: float,
|
current_time: datetime, proposed_rate: float,
|
||||||
current_profit: float, exit_tag: Optional[str], **kwargs) -> float:
|
current_profit: float, exit_tag: str | None, **kwargs) -> float:
|
||||||
|
|
||||||
dataframe, last_updated = self.dp.get_analyzed_dataframe(pair=pair,
|
dataframe, last_updated = self.dp.get_analyzed_dataframe(pair=pair,
|
||||||
timeframe=self.timeframe)
|
timeframe=self.timeframe)
|
||||||
@@ -662,7 +663,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
# ... populate_* methods
|
# ... populate_* methods
|
||||||
|
|
||||||
def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float,
|
def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float,
|
||||||
time_in_force: str, current_time: datetime, entry_tag: Optional[str],
|
time_in_force: str, current_time: datetime, entry_tag: str | None,
|
||||||
side: str, **kwargs) -> bool:
|
side: str, **kwargs) -> bool:
|
||||||
"""
|
"""
|
||||||
Called right before placing a entry order.
|
Called right before placing a entry order.
|
||||||
@@ -757,7 +758,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.
|
||||||
|
|
||||||
`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.
|
||||||
|
|
||||||
@@ -766,6 +767,22 @@ 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.
|
||||||
|
|
||||||
|
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()`.
|
||||||
|
|
||||||
|
!!! 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, 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.
|
||||||
|
|
||||||
|
!!! 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"
|
||||||
|
During backtesting this callback is called for each candle in `timeframe` or `timeframe_detail`, so run-time performance will be affected.
|
||||||
|
This can also cause deviating results between live and backtesting, since backtesting can adjust the trade only once per candle, whereas live could adjust the trade multiple times per candle.
|
||||||
|
|
||||||
### Increase position
|
### Increase position
|
||||||
|
|
||||||
The strategy is expected to return a positive **stake_amount** (in stake currency) between `min_stake` and `max_stake` if and when an additional entry order should be made (position is increased -> buy order for long trades, sell order for short trades).
|
The strategy is expected to return a positive **stake_amount** (in stake currency) between `min_stake` and `max_stake` if and when an additional entry order should be made (position is increased -> buy order for long trades, sell order for short trades).
|
||||||
@@ -775,16 +792,22 @@ If there are not enough funds in the wallet (the return value is above `max_stak
|
|||||||
|
|
||||||
Additional entries are ignored once you have reached the maximum amount of extra entries that you have set on `max_entry_position_adjustment`, but the callback is called anyway looking for partial exits.
|
Additional entries are ignored once you have reached the maximum amount of extra entries that you have set on `max_entry_position_adjustment`, but the callback is called anyway looking for partial exits.
|
||||||
|
|
||||||
|
!!! Note "About stake size"
|
||||||
|
Using fixed stake size means it will be the amount used for the first order, just like without position adjustment.
|
||||||
|
If you wish to buy additional orders with DCA, then make sure to leave enough funds in the wallet for that.
|
||||||
|
Using `"unlimited"` stake amount with DCA orders requires you to also implement the `custom_stake_amount()` callback to avoid allocating all funds to the initial order.
|
||||||
|
|
||||||
### Decrease position
|
### Decrease position
|
||||||
|
|
||||||
The strategy is expected to return a negative stake_amount (in stake currency) for a partial exit.
|
The strategy is expected to return a negative stake_amount (in stake currency) for a partial exit.
|
||||||
Returning the full owned stake at that point (`-trade.stake_amount`) results in a full exit.
|
Returning the full owned stake at that point (`-trade.stake_amount`) results in a full exit.
|
||||||
Returning a value more than the above (so remaining stake_amount would become negative) will result in the bot ignoring the signal.
|
Returning a value more than the above (so remaining stake_amount would become negative) will result in the bot ignoring the signal.
|
||||||
|
|
||||||
!!! Note "About stake size"
|
For a partial exit, it's important to know that the formula used to calculate the amount of the coin for the partial exit order is `amount to be exited partially = negative_stake_amount * trade.amount / trade.stake_amount`, where `negative_stake_amount` is the value returned from the `adjust_trade_position` function. As seen in the formula, the formula doesn't care about current profit/loss of the position. It only cares about `trade.amount` and `trade.stake_amount` which aren't affected by the price movement at all.
|
||||||
Using fixed stake size means it will be the amount used for the first order, just like without position adjustment.
|
|
||||||
If you wish to buy additional orders with DCA, then make sure to leave enough funds in the wallet for that.
|
For example, let's say you buy 2 SHITCOIN/USDT at open rate of 50, which means the trade's stake amount is 100 USDT. Now the price raises to 200 and you want to sell half of it. In that case, you have to return -50% of `trade.stake_amount` (0.5 * 100 USDT) which equals to -50. The bot will calculate the amount it needed to sell, which is `50 * 2 / 100` which equals 1 SHITCOIN/USDT. If you return -200 (50% of 2 * 200), the bot will ignore it since `trade.stake_amount` is only 100 USDT but you asked to sell 200 USDT which means you are asking to sell 4 SHITCOIN/USDT.
|
||||||
Using `"unlimited"` stake amount with DCA orders requires you to also implement the `custom_stake_amount()` callback to avoid allocating all funds to the initial order.
|
|
||||||
|
Back to the example above, since current rate is 200, the current USDT value of your trade is now 400 USDT. Let's say you want to partially sell 100 USDT to take out the initial investment and leave the profit in the trade hoping that the price keeps rising. In that case, you have to do a different approach. First, you need to calculate the exact amount you needed to sell. In this case, since you want to sell 100 USDT worth based of current rate, the exact amount you need to partially sell is `100 * 2 / 400` which equals 0.5 SHITCOIN/USDT. Since we know now the exact amount we want to sell (0.5), the value you need to return in the `adjust_trade_position` function is `-amount to be exited partially * trade.stake_amount / trade.amount`, which equals -25. The bot will sell 0.5 SHITCOIN/USDT, keeping 1.5 in trade. You will receive 100 USDT from the partial exit.
|
||||||
|
|
||||||
!!! Warning "Stoploss calculation"
|
!!! Warning "Stoploss calculation"
|
||||||
Stoploss is still calculated from the initial opening price, not averaged price.
|
Stoploss is still calculated from the initial opening price, not averaged price.
|
||||||
@@ -792,15 +815,6 @@ Returning a value more than the above (so remaining stake_amount would become ne
|
|||||||
|
|
||||||
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 "Backtesting"
|
|
||||||
During backtesting this callback is called for each candle in `timeframe` or `timeframe_detail`, so run-time performance will be affected.
|
|
||||||
This can also cause deviating results between live and backtesting, since backtesting can adjust the trade only once per candle, whereas live could adjust the trade multiple times per candle.
|
|
||||||
|
|
||||||
!!! 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
|
||||||
|
|
||||||
@@ -820,8 +834,8 @@ class DigDeeperStrategy(IStrategy):
|
|||||||
|
|
||||||
# This is called when placing the initial order (opening trade)
|
# This is called when placing the initial order (opening trade)
|
||||||
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
|
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
|
||||||
proposed_stake: float, min_stake: Optional[float], max_stake: float,
|
proposed_stake: float, min_stake: float | None, max_stake: float,
|
||||||
leverage: float, entry_tag: Optional[str], side: str,
|
leverage: float, entry_tag: str | None, side: str,
|
||||||
**kwargs) -> float:
|
**kwargs) -> float:
|
||||||
|
|
||||||
# We need to leave most of the funds for possible further DCA orders
|
# We need to leave most of the funds for possible further DCA orders
|
||||||
@@ -830,11 +844,11 @@ class DigDeeperStrategy(IStrategy):
|
|||||||
|
|
||||||
def adjust_trade_position(self, trade: Trade, current_time: datetime,
|
def adjust_trade_position(self, trade: Trade, current_time: datetime,
|
||||||
current_rate: float, current_profit: float,
|
current_rate: float, current_profit: float,
|
||||||
min_stake: Optional[float], max_stake: float,
|
min_stake: float | None, max_stake: float,
|
||||||
current_entry_rate: float, current_exit_rate: float,
|
current_entry_rate: float, current_exit_rate: float,
|
||||||
current_entry_profit: float, current_exit_profit: float,
|
current_entry_profit: float, current_exit_profit: float,
|
||||||
**kwargs
|
**kwargs
|
||||||
) -> Union[Optional[float], Tuple[Optional[float], Optional[str]]]:
|
) -> float | None | tuple[float | None, str | None]:
|
||||||
"""
|
"""
|
||||||
Custom trade adjustment logic, returning the stake amount that a trade should be
|
Custom trade adjustment logic, returning the stake amount that a trade should be
|
||||||
increased or decreased.
|
increased or decreased.
|
||||||
@@ -890,7 +904,7 @@ class DigDeeperStrategy(IStrategy):
|
|||||||
# Hope you have a deep wallet!
|
# Hope you have a deep wallet!
|
||||||
try:
|
try:
|
||||||
# This returns first order stake size
|
# This returns first order stake size
|
||||||
stake_amount = filled_entries[0].stake_amount
|
stake_amount = filled_entries[0].stake_amount_filled
|
||||||
# This then calculates current safety order size
|
# This then calculates current safety order size
|
||||||
stake_amount = stake_amount * (1 + (count_of_entries * 0.25))
|
stake_amount = stake_amount * (1 + (count_of_entries * 0.25))
|
||||||
return stake_amount, "1/3rd_increase"
|
return stake_amount, "1/3rd_increase"
|
||||||
@@ -923,6 +937,9 @@ class DigDeeperStrategy(IStrategy):
|
|||||||
## Adjust Entry Price
|
## Adjust Entry Price
|
||||||
|
|
||||||
The `adjust_entry_price()` callback may be used by strategy developer to refresh/replace limit orders upon arrival of new candles.
|
The `adjust_entry_price()` callback may be used by strategy developer to refresh/replace limit orders upon arrival of new candles.
|
||||||
|
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()` is still the one dictating initial entry limit order price target at the time of entry trigger.
|
Be aware that `custom_entry_price()` is still the one dictating initial entry limit order price target at the time of entry trigger.
|
||||||
|
|
||||||
Orders can be cancelled out of this callback by returning `None`.
|
Orders can be cancelled out of this callback by returning `None`.
|
||||||
@@ -934,6 +951,7 @@ The trade open-date (`trade.open_date_utc`) will remain at the time of the very
|
|||||||
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.
|
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 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.
|
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.
|
||||||
|
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 full, expected position size, should this be necessary / desired.
|
||||||
|
|
||||||
!!! 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()`) takes precedence over this.
|
||||||
@@ -946,9 +964,9 @@ class AwesomeStrategy(IStrategy):
|
|||||||
|
|
||||||
# ... populate_* methods
|
# ... populate_* methods
|
||||||
|
|
||||||
def adjust_entry_price(self, trade: Trade, order: Optional[Order], pair: str,
|
def adjust_entry_price(self, trade: Trade, order: Order | None, pair: str,
|
||||||
current_time: datetime, proposed_rate: float, current_order_rate: float,
|
current_time: datetime, proposed_rate: float, current_order_rate: float,
|
||||||
entry_tag: Optional[str], side: str, **kwargs) -> float:
|
entry_tag: str | None, side: str, **kwargs) -> float:
|
||||||
"""
|
"""
|
||||||
Entry price re-adjustment logic, returning the user desired limit price.
|
Entry 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)
|
||||||
@@ -975,7 +993,7 @@ class AwesomeStrategy(IStrategy):
|
|||||||
pair == "BTC/USDT"
|
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
|
||||||
):
|
):
|
||||||
# just cancel the order if it has been filled more than half of the amount
|
# just cancel the order if it has been filled more than half of the amount
|
||||||
if order.filled > order.remaining:
|
if order.filled > order.remaining:
|
||||||
@@ -1003,7 +1021,7 @@ For markets / exchanges that don't support leverage, this method is ignored.
|
|||||||
|
|
||||||
class AwesomeStrategy(IStrategy):
|
class AwesomeStrategy(IStrategy):
|
||||||
def leverage(self, pair: str, current_time: datetime, current_rate: float,
|
def leverage(self, pair: str, current_time: datetime, current_rate: float,
|
||||||
proposed_leverage: float, max_leverage: float, entry_tag: Optional[str], side: str,
|
proposed_leverage: float, max_leverage: float, entry_tag: str | None, side: str,
|
||||||
**kwargs) -> float:
|
**kwargs) -> float:
|
||||||
"""
|
"""
|
||||||
Customize leverage for each new trade. This method is only called in futures mode.
|
Customize leverage for each new trade. This method is only called in futures mode.
|
||||||
|
|||||||
@@ -2,52 +2,93 @@
|
|||||||
|
|
||||||
This page explains how to customize your strategies, add new indicators and set up trading rules.
|
This page explains how to customize your strategies, add new indicators and set up trading rules.
|
||||||
|
|
||||||
Please familiarize yourself with [Freqtrade basics](bot-basics.md) first, which provides overall info on how the bot operates.
|
If you haven't already, please familiarize yourself with:
|
||||||
|
|
||||||
|
- the [Freqtrade strategy 101](strategy-101.md), which provides a quick start to strategy development
|
||||||
|
- the [Freqtrade bot basics](bot-basics.md), which provides overall info on how the bot operates
|
||||||
|
|
||||||
## Develop your own strategy
|
## Develop your own strategy
|
||||||
|
|
||||||
The bot includes a default strategy file.
|
The bot includes a default strategy file.
|
||||||
|
|
||||||
Also, several other strategies are available in the [strategy repository](https://github.com/freqtrade/freqtrade-strategies).
|
Also, several other strategies are available in the [strategy repository](https://github.com/freqtrade/freqtrade-strategies).
|
||||||
|
|
||||||
You will however most likely have your own idea for a strategy.
|
You will however most likely have your own idea for a strategy.
|
||||||
This document intends to help you convert your strategy idea into your own strategy.
|
|
||||||
|
|
||||||
To get started, use `freqtrade new-strategy --strategy AwesomeStrategy` (you can obviously use your own naming for your strategy).
|
This document intends to help you convert your ideas into a working strategy.
|
||||||
This will create a new strategy file from a template, which will be located under `user_data/strategies/AwesomeStrategy.py`.
|
|
||||||
|
### Generating a strategy template
|
||||||
|
|
||||||
|
To get started, you can use the command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
freqtrade new-strategy --strategy AwesomeStrategy
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a new strategy called `AwesomeStrategy` from a template, which will be located using the filename `user_data/strategies/AwesomeStrategy.py`.
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
This is just a template file, which will most likely not be profitable out of the box.
|
There is a difference between the *name* of the strategy and the filename. In most commands, Freqtrade uses the *name* of the strategy, *not the filename*.
|
||||||
|
|
||||||
|
!!! Note
|
||||||
|
The `new-strategy` command generates starting examples which will not be profitable out of the box.
|
||||||
|
|
||||||
??? Hint "Different template levels"
|
??? Hint "Different template levels"
|
||||||
`freqtrade new-strategy` has an additional parameter, `--template`, which controls the amount of pre-build information you get in the created strategy. Use `--template minimal` to get an empty strategy without any indicator examples, or `--template advanced` to get a template with most callbacks defined.
|
`freqtrade new-strategy` has an additional parameter, `--template`, which controls the amount of pre-build information you get in the created strategy. Use `--template minimal` to get an empty strategy without any indicator examples, or `--template advanced` to get a template with more complicated features defined.
|
||||||
|
|
||||||
### Anatomy of a strategy
|
### Anatomy of a strategy
|
||||||
|
|
||||||
A strategy file contains all the information needed to build a good strategy:
|
A strategy file contains all the information needed to build the strategy logic:
|
||||||
|
|
||||||
|
- Candle data in OHLCV format
|
||||||
- Indicators
|
- Indicators
|
||||||
- Entry strategy rules
|
- Entry logic
|
||||||
- Exit strategy rules
|
- Signals
|
||||||
- Minimal ROI recommended
|
- Exit logic
|
||||||
- Stoploss strongly recommended
|
- Signals
|
||||||
|
- Minimal ROI
|
||||||
|
- Callbacks ("custom functions")
|
||||||
|
- Stoploss
|
||||||
|
- Fixed/absolute
|
||||||
|
- Trailing
|
||||||
|
- Callbacks ("custom functions")
|
||||||
|
- Pricing [optional]
|
||||||
|
- Position adjustment [optional]
|
||||||
|
|
||||||
The bot also include a sample strategy called `SampleStrategy` you can update: `user_data/strategies/sample_strategy.py`.
|
The bot includes a sample strategy called `SampleStrategy` that you can use as a basis: `user_data/strategies/sample_strategy.py`.
|
||||||
You can test it with the parameter: `--strategy SampleStrategy`
|
You can test it with the parameter: `--strategy SampleStrategy`. Remember that you use the strategy class name, not the filename.
|
||||||
|
|
||||||
Additionally, there is an attribute called `INTERFACE_VERSION`, which defines the version of the strategy interface the bot should use.
|
Additionally, there is an attribute called `INTERFACE_VERSION`, which defines the version of the strategy interface the bot should use.
|
||||||
The current version is 3 - which is also the default when it's not set explicitly in the strategy.
|
The current version is 3 - which is also the default when it's not set explicitly in the strategy.
|
||||||
|
|
||||||
Future versions will require this to be set.
|
You may see older strategies set to interface version 2, and these will need to be updated to v3 terminology as future versions will require this to be set.
|
||||||
|
|
||||||
|
Starting the bot in dry or live mode is accomplished using the `trade` command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
freqtrade trade --strategy AwesomeStrategy
|
freqtrade trade --strategy AwesomeStrategy
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Bot modes
|
||||||
|
|
||||||
|
Freqtrade strategies can be processed by the Freqtrade bot in 5 main modes:
|
||||||
|
|
||||||
|
- backtesting
|
||||||
|
- hyperopting
|
||||||
|
- dry ("forward testing")
|
||||||
|
- live
|
||||||
|
- FreqAI (not covered here)
|
||||||
|
|
||||||
|
Check the [configuration documentation](configuration.md) about how to set the bot to dry or live mode.
|
||||||
|
|
||||||
|
**Always use dry mode when testing as this gives you an idea of how your strategy will work in reality without risking capital.**
|
||||||
|
|
||||||
|
## Diving in deeper
|
||||||
**For the following section we will use the [user_data/strategies/sample_strategy.py](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/templates/sample_strategy.py)
|
**For the following section we will use the [user_data/strategies/sample_strategy.py](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/templates/sample_strategy.py)
|
||||||
file as reference.**
|
file as reference.**
|
||||||
|
|
||||||
!!! Note "Strategies and Backtesting"
|
!!! Note "Strategies and Backtesting"
|
||||||
To avoid problems and unexpected differences between Backtesting and dry/live modes, please be aware
|
To avoid problems and unexpected differences between backtesting and dry/live modes, please be aware
|
||||||
that during backtesting the full time range is passed to the `populate_*()` methods at once.
|
that during backtesting the full time range is passed to the `populate_*()` methods at once.
|
||||||
It is therefore best to use vectorized operations (across the whole dataframe, not loops) and
|
It is therefore best to use vectorized operations (across the whole dataframe, not loops) and
|
||||||
avoid index referencing (`df.iloc[-1]`), but instead use `df.shift()` to get to the previous candle.
|
avoid index referencing (`df.iloc[-1]`), but instead use `df.shift()` to get to the previous candle.
|
||||||
@@ -57,12 +98,20 @@ file as reference.**
|
|||||||
needs to take care to avoid having the strategy utilize data from the future.
|
needs to take care to avoid having the strategy utilize data from the future.
|
||||||
Some common patterns for this are listed in the [Common Mistakes](#common-mistakes-when-developing-strategies) section of this document.
|
Some common patterns for this are listed in the [Common Mistakes](#common-mistakes-when-developing-strategies) section of this document.
|
||||||
|
|
||||||
|
??? Hint "Lookahead and recursive analysis"
|
||||||
|
Freqtrade includes two helpful commands to help assess common lookahead (using future data) and
|
||||||
|
recursive bias (variance in indicator values) issues. Before running a strategy in dry or live more,
|
||||||
|
you should always use these commands first. Please check the relevant documentation for
|
||||||
|
[lookahead](lookahead-analysis.md) and [recursive](recursive-analysis.md) analysis.
|
||||||
|
|
||||||
### Dataframe
|
### Dataframe
|
||||||
|
|
||||||
Freqtrade uses [pandas](https://pandas.pydata.org/) to store/provide the candlestick (OHLCV) data.
|
Freqtrade uses [pandas](https://pandas.pydata.org/) to store/provide the candlestick (OHLCV) data.
|
||||||
Pandas is a great library developed for processing large amounts of data.
|
Pandas is a great library developed for processing large amounts of data in tabular format.
|
||||||
|
|
||||||
Each row in a dataframe corresponds to one candle on a chart, with the latest candle always being the last in the dataframe (sorted by date).
|
Each row in a dataframe corresponds to one candle on a chart, with the latest complete candle always being the last in the dataframe (sorted by date).
|
||||||
|
|
||||||
|
If we were to look at the first few rows of the main dataframe using the pandas `head()` function, we would see:
|
||||||
|
|
||||||
```output
|
```output
|
||||||
> dataframe.head()
|
> dataframe.head()
|
||||||
@@ -74,20 +123,16 @@ Each row in a dataframe corresponds to one candle on a chart, with the latest ca
|
|||||||
4 2021-11-09 23:45:00+00:00 67160.48 67160.48 66901.26 66943.37 111.39292
|
4 2021-11-09 23:45:00+00:00 67160.48 67160.48 66901.26 66943.37 111.39292
|
||||||
```
|
```
|
||||||
|
|
||||||
Pandas provides fast ways to calculate metrics. To benefit from this speed, it's advised to not use loops, but use vectorized methods instead.
|
A dataframe is a table where columns are not single values, but a series of data values. As such, simple python comparisons like the following will not work:
|
||||||
|
|
||||||
Vectorized operations perform calculations across the whole range of data and are therefore, compared to looping through each row, a lot faster when calculating indicators.
|
|
||||||
|
|
||||||
As a dataframe is a table, simple python comparisons like the following will not work
|
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
if dataframe['rsi'] > 30:
|
if dataframe['rsi'] > 30:
|
||||||
dataframe['enter_long'] = 1
|
dataframe['enter_long'] = 1
|
||||||
```
|
```
|
||||||
|
|
||||||
The above section will fail with `The truth value of a Series is ambiguous. [...]`.
|
The above section will fail with `The truth value of a Series is ambiguous [...]`.
|
||||||
|
|
||||||
This must instead be written in a pandas-compatible way, so the operation is performed across the whole dataframe.
|
This must instead be written in a pandas-compatible way, so the operation is performed across the whole dataframe, i.e. `vectorisation`.
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
dataframe.loc[
|
dataframe.loc[
|
||||||
@@ -97,13 +142,38 @@ This must instead be written in a pandas-compatible way, so the operation is per
|
|||||||
|
|
||||||
With this section, you have a new column in your dataframe, which has `1` assigned whenever RSI is above 30.
|
With this section, you have a new column in your dataframe, which has `1` assigned whenever RSI is above 30.
|
||||||
|
|
||||||
|
Freqtrade uses this new column as an entry signal, where it is assumed that a trade will subsequently open on the next open candle.
|
||||||
|
|
||||||
|
Pandas provides fast ways to calculate metrics, i.e. "vectorisation". To benefit from this speed, it is advised to not use loops, but use vectorized methods instead.
|
||||||
|
|
||||||
|
Vectorized operations perform calculations across the whole range of data and are therefore, compared to looping through each row, a lot faster when calculating indicators.
|
||||||
|
|
||||||
|
??? Hint "Signals vs Trades"
|
||||||
|
- Signals are generated from indicators at candle close, and are intentions to enter a trade.
|
||||||
|
- Trades are orders that are executed (on the exchange in live mode) where a trade will then open as close to next candle open as possible.
|
||||||
|
|
||||||
|
!!! Warning "Trade order assumptions"
|
||||||
|
In backtesting, signals are generated on candle close. Trades are then initiated immeditely on next candle open.
|
||||||
|
|
||||||
|
In dry and live, this may be delayed due to all pair dataframes needing to be analysed first, then trade processing
|
||||||
|
for each of those pairs happens. This means that in dry/live you need to be mindful of having as low a computation
|
||||||
|
delay as possible, usually by running a low number of pairs and having a CPU with a good clock speed.
|
||||||
|
|
||||||
|
#### Why can't I see "real time" candle data?
|
||||||
|
|
||||||
|
Freqtrade does not store incomplete/unfinished candles in the dataframe.
|
||||||
|
|
||||||
|
The use of incomplete data for making strategy decisions is called "repainting" and you might see other platforms allow this.
|
||||||
|
|
||||||
|
Freqtrade does not. Only complete/finished candle data is available in the dataframe.
|
||||||
|
|
||||||
### Customize Indicators
|
### Customize Indicators
|
||||||
|
|
||||||
Buy and sell signals need indicators. You can add more indicators by extending the list contained in the method `populate_indicators()` from your strategy file.
|
Entry and exit signals need indicators. You can add more indicators by extending the list contained in the method `populate_indicators()` from your strategy file.
|
||||||
|
|
||||||
You should only add the indicators used in either `populate_entry_trend()`, `populate_exit_trend()`, or to populate another indicator, otherwise performance may suffer.
|
You should only add the indicators used in either `populate_entry_trend()`, `populate_exit_trend()`, or to populate another indicator, otherwise performance may suffer.
|
||||||
|
|
||||||
It's important to always return the dataframe without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected.
|
It's important to always return the dataframe from these three functions without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected.
|
||||||
|
|
||||||
Sample:
|
Sample:
|
||||||
|
|
||||||
@@ -124,7 +194,7 @@ def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame
|
|||||||
stoch = ta.STOCHF(dataframe)
|
stoch = ta.STOCHF(dataframe)
|
||||||
dataframe['fastd'] = stoch['fastd']
|
dataframe['fastd'] = stoch['fastd']
|
||||||
dataframe['fastk'] = stoch['fastk']
|
dataframe['fastk'] = stoch['fastk']
|
||||||
dataframe['blower'] = ta.BBANDS(dataframe, nbdevup=2, nbdevdn=2)['lowerband']
|
dataframe['bb_lower'] = ta.BBANDS(dataframe, nbdevup=2, nbdevdn=2)['lowerband']
|
||||||
dataframe['sma'] = ta.SMA(dataframe, timeperiod=40)
|
dataframe['sma'] = ta.SMA(dataframe, timeperiod=40)
|
||||||
dataframe['tema'] = ta.TEMA(dataframe, timeperiod=9)
|
dataframe['tema'] = ta.TEMA(dataframe, timeperiod=9)
|
||||||
dataframe['mfi'] = ta.MFI(dataframe)
|
dataframe['mfi'] = ta.MFI(dataframe)
|
||||||
@@ -145,6 +215,8 @@ def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame
|
|||||||
dataframe['plus_di'] = ta.PLUS_DI(dataframe)
|
dataframe['plus_di'] = ta.PLUS_DI(dataframe)
|
||||||
dataframe['minus_dm'] = ta.MINUS_DM(dataframe)
|
dataframe['minus_dm'] = ta.MINUS_DM(dataframe)
|
||||||
dataframe['minus_di'] = ta.MINUS_DI(dataframe)
|
dataframe['minus_di'] = ta.MINUS_DI(dataframe)
|
||||||
|
|
||||||
|
# remember to always return the dataframe
|
||||||
return dataframe
|
return dataframe
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -164,11 +236,13 @@ Additional technical libraries can be installed as necessary, or custom indicato
|
|||||||
|
|
||||||
### Strategy startup period
|
### Strategy startup period
|
||||||
|
|
||||||
Most indicators have an instable startup period, in which they are either not available (NaN), or the calculation is incorrect. This can lead to inconsistencies, since Freqtrade does not know how long this instable period should be.
|
Some indicators have an unstable startup period in which there isn't enough candle data to calculate any values (NaN), or the calculation is incorrect. This can lead to inconsistencies, since Freqtrade does not know how long this unstable period is and uses whatever indicator values are in the dataframe.
|
||||||
|
|
||||||
To account for this, the strategy can be assigned the `startup_candle_count` attribute.
|
To account for this, the strategy can be assigned the `startup_candle_count` attribute.
|
||||||
|
|
||||||
This should be set to the maximum number of candles that the strategy requires to calculate stable indicators. In the case where a user includes higher timeframes with informative pairs, the `startup_candle_count` does not necessarily change. The value is the maximum period (in candles) that any of the informatives timeframes need to compute stable indicators.
|
This should be set to the maximum number of candles that the strategy requires to calculate stable indicators. In the case where a user includes higher timeframes with informative pairs, the `startup_candle_count` does not necessarily change. The value is the maximum period (in candles) that any of the informatives timeframes need to compute stable indicators.
|
||||||
|
|
||||||
You can use [recursive-analysis](recursive-analysis.md) to check and find the correct `startup_candle_count` to be used.
|
You can use [recursive-analysis](recursive-analysis.md) to check and find the correct `startup_candle_count` to be used. When recursive analysis shows a variance of 0%, then you can be sure that you have enough startup candle data.
|
||||||
|
|
||||||
In this example strategy, this should be set to 400 (`startup_candle_count = 400`), since the minimum needed history for ema100 calculation to make sure the value is correct is 400 candles.
|
In this example strategy, this should be set to 400 (`startup_candle_count = 400`), since the minimum needed history for ema100 calculation to make sure the value is correct is 400 candles.
|
||||||
|
|
||||||
@@ -195,19 +269,22 @@ Let's try to backtest 1 month (January 2019) of 5m candles using an example stra
|
|||||||
freqtrade backtesting --timerange 20190101-20190201 --timeframe 5m
|
freqtrade backtesting --timerange 20190101-20190201 --timeframe 5m
|
||||||
```
|
```
|
||||||
|
|
||||||
Assuming `startup_candle_count` is set to 400, backtesting knows it needs 400 candles to generate valid buy signals. It will load data from `20190101 - (400 * 5m)` - which is ~2018-12-30 11:40:00.
|
Assuming `startup_candle_count` is set to 400, backtesting knows it needs 400 candles to generate valid entry signals. It will load data from `20190101 - (400 * 5m)` - which is ~2018-12-30 11:40:00.
|
||||||
If this data is available, indicators will be calculated with this extended timerange. The instable startup period (up to 2019-01-01 00:00:00) will then be removed before starting backtesting.
|
|
||||||
|
|
||||||
!!! Note
|
If this data is available, indicators will be calculated with this extended timerange. The unstable startup period (up to 2019-01-01 00:00:00) will then be removed before backtesting is carried out.
|
||||||
If data for the startup period is not available, then the timerange will be adjusted to account for this startup period - so Backtesting would start at 2019-01-02 09:20:00.
|
|
||||||
|
!!! Note "Unavailable startup candle data"
|
||||||
|
If data for the startup period is not available, then the timerange will be adjusted to account for this startup period. In our example, backtesting would then start from 2019-01-02 09:20:00.
|
||||||
|
|
||||||
### Entry signal rules
|
### Entry signal rules
|
||||||
|
|
||||||
Edit the method `populate_entry_trend()` in your strategy file to update your entry strategy.
|
Edit the method `populate_entry_trend()` in your strategy file to update your entry strategy.
|
||||||
|
|
||||||
It's important to always return the dataframe without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected.
|
It's important to always return the dataframe without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected. The strategy may then produce invalid values, or cease to work entirely.
|
||||||
|
|
||||||
This method will also define a new column, `"enter_long"` (`"enter_short"` for shorts), which needs to contain 1 for entries, and 0 for "no action". `enter_long` is a mandatory column that must be set even if the strategy is shorting only.
|
This method will also define a new column, `"enter_long"` (`"enter_short"` for shorts), which needs to contain `1` for entries, and `0` for "no action". `enter_long` is a mandatory column that must be set even if the strategy is shorting only.
|
||||||
|
|
||||||
|
You can name your entry signals by using the `"enter_tag"` column, which can help debug and assess your strategy later.
|
||||||
|
|
||||||
Sample from `user_data/strategies/sample_strategy.py`:
|
Sample from `user_data/strategies/sample_strategy.py`:
|
||||||
|
|
||||||
@@ -232,12 +309,15 @@ def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFram
|
|||||||
```
|
```
|
||||||
|
|
||||||
??? Note "Enter short trades"
|
??? Note "Enter short trades"
|
||||||
Short-entries can be created by setting `enter_short` (corresponds to `enter_long` for long trades).
|
Short entries can be created by setting `enter_short` (corresponds to `enter_long` for long trades).
|
||||||
The `enter_tag` column remains identical.
|
The `enter_tag` column remains identical.
|
||||||
Short-trades need to be supported by your exchange and market configuration!
|
Shorting needs to be supported by your exchange and market configuration!
|
||||||
Please make sure to set [`can_short`]() appropriately on your strategy if you intend to short.
|
Also, make sure you set [`can_short`](#can-short) appropriately on your strategy if you intend to short.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
# allow both long and short trades
|
||||||
|
can_short = True
|
||||||
|
|
||||||
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||||
dataframe.loc[
|
dataframe.loc[
|
||||||
(
|
(
|
||||||
@@ -261,17 +341,21 @@ def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFram
|
|||||||
```
|
```
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
Buying requires sellers to buy from - therefore volume needs to be > 0 (`dataframe['volume'] > 0`) to make sure that the bot does not buy/sell in no-activity periods.
|
Buying requires sellers to buy from. Therefore volume needs to be > 0 (`dataframe['volume'] > 0`) to make sure that the bot does not buy/sell in no-activity periods.
|
||||||
|
|
||||||
### Exit signal rules
|
### Exit signal rules
|
||||||
|
|
||||||
Edit the method `populate_exit_trend()` into your strategy file to update your exit strategy.
|
Edit the method `populate_exit_trend()` into your strategy file to update your exit strategy.
|
||||||
|
|
||||||
The exit-signal can be suppressed by setting `use_exit_signal` to false in the configuration or strategy.
|
The exit-signal can be suppressed by setting `use_exit_signal` to false in the configuration or strategy.
|
||||||
|
|
||||||
`use_exit_signal` will not influence [signal collision rules](#colliding-signals) - which will still apply and can prevent entries.
|
`use_exit_signal` will not influence [signal collision rules](#colliding-signals) - which will still apply and can prevent entries.
|
||||||
|
|
||||||
It's important to always return the dataframe without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected.
|
It's important to always return the dataframe without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected. The strategy may then produce invalid values, or cease to work entirely.
|
||||||
|
|
||||||
This method will also define a new column, `"exit_long"` (`"exit_short"` for shorts), which needs to contain 1 for exits, and 0 for "no action".
|
This method will also define a new column, `"exit_long"` (`"exit_short"` for shorts), which needs to contain `1` for exits, and `0` for "no action".
|
||||||
|
|
||||||
|
You can name your exit signals by using the `"exit_tag"` column, which can help debug and assess your strategy later.
|
||||||
|
|
||||||
Sample from `user_data/strategies/sample_strategy.py`:
|
Sample from `user_data/strategies/sample_strategy.py`:
|
||||||
|
|
||||||
@@ -295,11 +379,15 @@ def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame
|
|||||||
```
|
```
|
||||||
|
|
||||||
??? Note "Exit short trades"
|
??? Note "Exit short trades"
|
||||||
Short-exits can be created by setting `exit_short` (corresponds to `exit_long`).
|
Short exits can be created by setting `exit_short` (corresponds to `exit_long`).
|
||||||
The `exit_tag` column remains identical.
|
The `exit_tag` column remains identical.
|
||||||
Short-trades need to be supported by your exchange and market configuration!
|
Shorting needs to be supported by your exchange and market configuration!
|
||||||
|
Also, make sure you set [`can_short`](#can-short) appropriately on your strategy if you intend to short.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
# allow both long and short trades
|
||||||
|
can_short = True
|
||||||
|
|
||||||
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||||
dataframe.loc[
|
dataframe.loc[
|
||||||
(
|
(
|
||||||
@@ -322,9 +410,9 @@ def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame
|
|||||||
|
|
||||||
### Minimal ROI
|
### Minimal ROI
|
||||||
|
|
||||||
This dict defines the minimal Return On Investment (ROI) a trade should reach before exiting, independent from the exit signal.
|
The `minimal_roi` strategy variable defines the minimal Return On Investment (ROI) a trade should reach before exiting, independent from the exit signal.
|
||||||
|
|
||||||
It is of the following format, with the dict key (left side of the colon) being the minutes passed since the trade opened, and the value (right side of the colon) being the percentage.
|
It is of the following format, i.e. a python `dict`, with the dict key (left side of the colon) being the minutes passed since the trade opened, and the value (right side of the colon) being the percentage.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
minimal_roi = {
|
minimal_roi = {
|
||||||
@@ -344,14 +432,19 @@ The above configuration would therefore mean:
|
|||||||
|
|
||||||
The calculation does include fees.
|
The calculation does include fees.
|
||||||
|
|
||||||
|
#### Disabling minimal ROI
|
||||||
|
|
||||||
To disable ROI completely, set it to an empty dictionary:
|
To disable ROI completely, set it to an empty dictionary:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
minimal_roi = {}
|
minimal_roi = {}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Using calculations in minimal ROI
|
||||||
|
|
||||||
To use times based on candle duration (timeframe), the following snippet can be handy.
|
To use times based on candle duration (timeframe), the following snippet can be handy.
|
||||||
This will allow you to change the timeframe for the strategy, and ROI times will still be set as candles (e.g. after 3 candles ...)
|
|
||||||
|
This will allow you to change the timeframe for the strategy, but the minimal ROI times will still be set as candles, e.g. after 3 candles.
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
from freqtrade.exchange import timeframe_to_minutes
|
from freqtrade.exchange import timeframe_to_minutes
|
||||||
@@ -368,9 +461,9 @@ class AwesomeStrategy(IStrategy):
|
|||||||
```
|
```
|
||||||
|
|
||||||
??? info "Orders that don't fill immediately"
|
??? info "Orders that don't fill immediately"
|
||||||
`minimal_roi` will take the `trade.open_date` as reference, which is the time the trade was initialized / the first order for this trade was placed.
|
`minimal_roi` will take the `trade.open_date` as reference, which is the time the trade was initialized, i.e. when the first order for this trade was placed.
|
||||||
This will also hold true for limit orders that don't fill immediately (usually in combination with "off-spot" prices through `custom_entry_price()`), as well as for cases where the initial order is replaced through `adjust_entry_price()`.
|
This will also hold true for limit orders that don't fill immediately (usually in combination with "off-spot" prices through `custom_entry_price()`), as well as for cases where the initial order price is replaced through `adjust_entry_price()`.
|
||||||
The time used will still be from the initial `trade.open_date` (when the initial order was first placed), not from the newly placed order date.
|
The time used will still be from the initial `trade.open_date` (when the initial order was first placed), not from the newly placed or adjusted order date.
|
||||||
|
|
||||||
### Stoploss
|
### Stoploss
|
||||||
|
|
||||||
@@ -386,35 +479,44 @@ For the full documentation on stoploss features, look at the dedicated [stoploss
|
|||||||
|
|
||||||
### Timeframe
|
### Timeframe
|
||||||
|
|
||||||
This is the set of candles the bot should download and use for the analysis.
|
This is the periodicity of candles the bot should use in the strategy.
|
||||||
|
|
||||||
Common values are `"1m"`, `"5m"`, `"15m"`, `"1h"`, however all values supported by your exchange should work.
|
Common values are `"1m"`, `"5m"`, `"15m"`, `"1h"`, however all values supported by your exchange should work.
|
||||||
|
|
||||||
Please note that the same entry/exit signals may work well with one timeframe, but not with the others.
|
Please note that the same entry/exit signals may work well with one timeframe, but not with others.
|
||||||
|
|
||||||
This setting is accessible within the strategy methods as the `self.timeframe` attribute.
|
This setting is accessible within the strategy methods as the `self.timeframe` attribute.
|
||||||
|
|
||||||
### Can short
|
### Can short
|
||||||
|
|
||||||
To use short signals in futures markets, you will have to let us know to do so by setting `can_short=True`.
|
To use short signals in futures markets, you will have to set `can_short = True`.
|
||||||
|
|
||||||
Strategies which enable this will fail to load on spot markets.
|
Strategies which enable this will fail to load on spot markets.
|
||||||
Disabling of this will have short signals ignored (also in futures markets).
|
|
||||||
|
If you have `1` values in the `enter_short` column to raise short signals, setting `can_short = False` (which is the default) will mean that these short signals are ignored, even if you have specified futures markets in your configuration.
|
||||||
|
|
||||||
### Metadata dict
|
### Metadata dict
|
||||||
|
|
||||||
The metadata-dict (available for `populate_entry_trend`, `populate_exit_trend`, `populate_indicators`) contains additional information.
|
The `metadata` dict (available for `populate_entry_trend`, `populate_exit_trend`, `populate_indicators`) contains additional information.
|
||||||
Currently this is `pair`, which can be accessed using `metadata['pair']` - and will return a pair in the format `XRP/BTC`.
|
Currently this is `pair`, which can be accessed using `metadata['pair']`, and will return a pair in the format `XRP/BTC` (or `XRP/BTC:BTC` for futures markets).
|
||||||
|
|
||||||
The Metadata-dict should not be modified and does not persist information across multiple calls.
|
The metadata dict should not be modified and does not persist information across multiple functions in your strategy.
|
||||||
Instead, have a look at the [Storing information](strategy-advanced.md#storing-information-persistent) section.
|
|
||||||
|
Instead, please check the [Storing information](strategy-advanced.md#storing-information-persistent) section.
|
||||||
|
|
||||||
--8<-- "includes/strategy-imports.md"
|
--8<-- "includes/strategy-imports.md"
|
||||||
|
|
||||||
## Strategy file loading
|
## Strategy file loading
|
||||||
|
|
||||||
By default, freqtrade will attempt to load strategies from all `.py` files within `user_data/strategies`.
|
By default, freqtrade will attempt to load strategies from all `.py` files within the `userdir` (default `user_data/strategies`).
|
||||||
|
|
||||||
Assuming your strategy is called `AwesomeStrategy`, stored in the file `user_data/strategies/AwesomeStrategy.py`, then you can start freqtrade with `freqtrade trade --strategy AwesomeStrategy`.
|
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:
|
||||||
Note that we're using the class-name, not the file name.
|
|
||||||
|
```bash
|
||||||
|
freqtrade trade --strategy AwesomeStrategy`
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that we're using the class name, not the file name.
|
||||||
|
|
||||||
You can use `freqtrade list-strategies` to see a list of all strategies Freqtrade is able to load (all strategies in the correct folder).
|
You can use `freqtrade list-strategies` to see a list of all strategies Freqtrade is able to load (all strategies in the correct folder).
|
||||||
It will also include a "status" field, highlighting potential problems.
|
It will also include a "status" field, highlighting potential problems.
|
||||||
@@ -426,9 +528,11 @@ It will also include a "status" field, highlighting potential problems.
|
|||||||
|
|
||||||
### Get data for non-tradeable pairs
|
### Get data for non-tradeable pairs
|
||||||
|
|
||||||
Data for additional, informative pairs (reference pairs) can be beneficial for some strategies.
|
Data for additional, informative pairs (reference pairs) can be beneficial for some strategies to see data on a wider timeframe.
|
||||||
|
|
||||||
OHLCV data for these pairs will be downloaded as part of the regular whitelist refresh process and is available via `DataProvider` just as other pairs (see below).
|
OHLCV data for these pairs will be downloaded as part of the regular whitelist refresh process and is available via `DataProvider` just as other pairs (see below).
|
||||||
These parts will **not** be traded unless they are also specified in the pair whitelist, or have been selected by Dynamic Whitelisting.
|
|
||||||
|
These pairs will **not** be traded unless they are also specified in the pair whitelist, or have been selected by Dynamic Whitelisting, e.g. `VolumePairlist`.
|
||||||
|
|
||||||
The pairs need to be specified as tuples in the format `("pair", "timeframe")`, with pair as the first and timeframe as the second argument.
|
The pairs need to be specified as tuples in the format `("pair", "timeframe")`, with pair as the first and timeframe as the second argument.
|
||||||
|
|
||||||
@@ -441,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.
|
||||||
@@ -468,18 +572,24 @@ A full sample can be found [in the DataProvider section](#complete-data-provider
|
|||||||
|
|
||||||
### Informative pairs decorator (`@informative()`)
|
### Informative pairs decorator (`@informative()`)
|
||||||
|
|
||||||
In most common case it is possible to easily define informative pairs by using a decorator. All decorated `populate_indicators_*` methods run in isolation,
|
To easily define informative pairs, use the `@informative` decorator. All decorated `populate_indicators_*` methods run in isolation,
|
||||||
not having access to data from other informative pairs, in the end all informative dataframes 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.
|
||||||
When hyperopting, use of hyperoptable parameter `.value` attribute is not supported. Please use `.range` attribute. See [optimizing an indicator parameter](hyperopt.md#optimizing-an-indicator-parameter)
|
|
||||||
for more information.
|
!!! 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-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.
|
||||||
|
|
||||||
??? info "Full documentation"
|
??? info "Full documentation"
|
||||||
``` python
|
``` python
|
||||||
def informative(timeframe: str, asset: str = '',
|
def informative(
|
||||||
fmt: Optional[Union[str, Callable[[KwArg(str)], str]]] = None,
|
timeframe: str,
|
||||||
|
asset: str = "",
|
||||||
|
fmt: str | Callable[[Any], str] | None = None,
|
||||||
*,
|
*,
|
||||||
candle_type: Optional[CandleType] = None,
|
candle_type: CandleType | str | None = None,
|
||||||
ffill: bool = True) -> Callable[[PopulateIndicators], PopulateIndicators]:
|
ffill: bool = True,
|
||||||
|
) -> Callable[[PopulateIndicators], PopulateIndicators]:
|
||||||
"""
|
"""
|
||||||
A decorator for populate_indicators_Nn(self, dataframe, metadata), allowing these functions to
|
A decorator for populate_indicators_Nn(self, dataframe, metadata), allowing these functions to
|
||||||
define informative indicators.
|
define informative indicators.
|
||||||
@@ -568,10 +678,6 @@ for more information.
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! Note
|
|
||||||
Do not use `@informative` decorator if you need to use data of one informative pair when generating another informative pair. Instead, define informative pairs
|
|
||||||
manually as described [in the DataProvider section](#complete-data-provider-sample).
|
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
Use string formatting when accessing informative dataframes of other pairs. This will allow easily changing stake currency in config without having to adjust strategy code.
|
Use string formatting when accessing informative dataframes of other pairs. This will allow easily changing stake currency in config without having to adjust strategy code.
|
||||||
|
|
||||||
@@ -592,22 +698,19 @@ for more information.
|
|||||||
Alternatively column renaming may be used to remove stake currency from column names: `@informative('1h', 'BTC/{stake}', fmt='{base}_{column}_{timeframe}')`.
|
Alternatively column renaming may be used to remove stake currency from column names: `@informative('1h', 'BTC/{stake}', fmt='{base}_{column}_{timeframe}')`.
|
||||||
|
|
||||||
!!! Warning "Duplicate method names"
|
!!! Warning "Duplicate method names"
|
||||||
Methods tagged with `@informative()` decorator must always have unique names! Re-using same name (for example when copy-pasting already defined informative method)
|
Methods tagged with the `@informative()` decorator must always have unique names! Reusing the same name (for example when copy-pasting already defined informative methods) will overwrite previously defined methods and not produce any errors due to limitations of Python programming language. In such cases you will find that indicators created in methods higher up in the strategy file are not available in the dataframe. Carefully review method names and make sure they are unique!
|
||||||
will overwrite previously defined method and not produce any errors due to limitations of Python programming language. In such cases you will find that indicators
|
|
||||||
created in earlier-defined methods are not available in the dataframe. Carefully review method names and make sure they are unique!
|
|
||||||
|
|
||||||
### *merge_informative_pair()*
|
### *merge_informative_pair()*
|
||||||
|
|
||||||
This method helps you merge an informative pair to a regular dataframe without lookahead bias.
|
This method helps you merge an informative pair to the regular main dataframe safely and consistently, without lookahead bias.
|
||||||
It's there to help you merge the dataframe in a safe and consistent way.
|
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
- Rename the columns for you to create unique columns
|
- Rename the columns to create unique columns
|
||||||
- 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:
|
||||||
|
|
||||||
@@ -654,20 +757,20 @@ All columns of the informative dataframe will be available on the returning data
|
|||||||
```
|
```
|
||||||
|
|
||||||
!!! Warning "Informative timeframe < timeframe"
|
!!! Warning "Informative timeframe < timeframe"
|
||||||
Using informative timeframes smaller than the dataframe timeframe is not recommended with this method, as it will not use any of the additional information this would provide.
|
Using informative timeframes smaller than the main dataframe timeframe is not recommended with this method, as it will not use any of the additional information this would provide.
|
||||||
To use the more detailed information properly, more advanced methods should be applied (which are out of scope for freqtrade documentation, as it'll depend on the respective need).
|
To use the more detailed information properly, more advanced methods should be applied (which are out of scope for this documentation).
|
||||||
|
|
||||||
## Additional data (DataProvider)
|
## Additional data (DataProvider)
|
||||||
|
|
||||||
The strategy provides access to the `DataProvider`. This allows you to get additional data to use in your strategy.
|
The strategy provides access to the `DataProvider`. This allows you to get additional data to use in your strategy.
|
||||||
|
|
||||||
All methods return `None` in case of failure (do not raise an exception).
|
All methods return `None` in case of failure, i.e. failures do not raise an exception.
|
||||||
|
|
||||||
Please always check the mode of operation to select the correct method to get data (samples see below).
|
Please always check the mode of operation to select the correct method to get data (see below for examples).
|
||||||
|
|
||||||
!!! Warning "Hyperopt"
|
!!! Warning "Hyperopt Limitations"
|
||||||
Dataprovider is available during hyperopt, however it can only be used in `populate_indicators()` within a strategy.
|
The DataProvider is available during hyperopt, however it can only be used in `populate_indicators()` **within a strategy**, not within a hyperopt class file.
|
||||||
It is not available in `populate_buy()` and `populate_sell()` methods, nor in `populate_indicators()`, if this method located in the hyperopt file.
|
It is also not available in `populate_entry_trend()` and `populate_exit_trend()` methods.
|
||||||
|
|
||||||
### Possible options for DataProvider
|
### Possible options for DataProvider
|
||||||
|
|
||||||
@@ -693,30 +796,31 @@ for pair, timeframe in self.dp.available_pairs:
|
|||||||
|
|
||||||
### *current_whitelist()*
|
### *current_whitelist()*
|
||||||
|
|
||||||
Imagine you've developed a strategy that trades the `5m` timeframe using signals generated from a `1d` timeframe on the top 10 volume pairs by volume.
|
Imagine you've developed a strategy that trades the `5m` timeframe using signals generated from a `1d` timeframe on the top 10 exchange pairs by volume.
|
||||||
|
|
||||||
The strategy might look something like this:
|
The strategy logic might look something like this:
|
||||||
|
|
||||||
*Scan through the top 10 pairs by volume using the `VolumePairList` every 5 minutes and use a 14 day RSI to buy and sell.*
|
*Scan through the top 10 pairs by volume using the `VolumePairList` every 5 minutes and use a 14 day RSI to enter and exit.*
|
||||||
|
|
||||||
Due to the limited available data, it's very difficult to resample `5m` candles into daily candles for use in a 14 day RSI. Most exchanges limit us to just 500-1000 candles which effectively gives us around 1.74 daily candles. We need 14 days at least!
|
Due to the limited available data, it's very difficult to resample `5m` candles into daily candles for use in a 14 day RSI. Most exchanges limit users to just 500-1000 candles which effectively gives us around 1.74 daily candles. We need 14 days at least!
|
||||||
|
|
||||||
Since we can't resample the data we will have to use an informative pair; and since the whitelist will be dynamic we don't know which pair(s) to use.
|
Since we can't resample the data we will have to use an informative pair, and since the whitelist will be dynamic we don't know which pair(s) to use! We have a problem!
|
||||||
|
|
||||||
This is where calling `self.dp.current_whitelist()` comes in handy.
|
This is where calling `self.dp.current_whitelist()` comes in handy to retrieve only those pairs in the whitelist.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def informative_pairs(self):
|
def informative_pairs(self):
|
||||||
|
|
||||||
# get access to all pairs available in whitelist.
|
# get access to all pairs available in whitelist.
|
||||||
pairs = self.dp.current_whitelist()
|
pairs = self.dp.current_whitelist()
|
||||||
# Assign tf to each pair so they can be downloaded and cached for strategy.
|
# Assign timeframe to each pair so they can be downloaded and cached for strategy.
|
||||||
informative_pairs = [(pair, '1d') for pair in pairs]
|
informative_pairs = [(pair, '1d') for pair in pairs]
|
||||||
return informative_pairs
|
return informative_pairs
|
||||||
```
|
```
|
||||||
|
|
||||||
??? Note "Plotting with current_whitelist"
|
??? Note "Plotting with current_whitelist"
|
||||||
Current whitelist is not supported for `plot-dataframe`, as this command is usually used by providing an explicit pairlist - and would therefore make the return values of this method misleading.
|
Current whitelist is not supported for `plot-dataframe`, as this command is usually used by providing an explicit pairlist and would therefore make the return values of this method misleading.
|
||||||
|
It's also not supported for FreqUI visualization in [webserver mode](utils.md#webserver-mode), as the configuration for webserver mode doesn't require a pairlist to be set.
|
||||||
|
|
||||||
### *get_pair_dataframe(pair, timeframe)*
|
### *get_pair_dataframe(pair, timeframe)*
|
||||||
|
|
||||||
@@ -757,7 +861,7 @@ if self.dp.runmode.value in ('live', 'dry_run'):
|
|||||||
dataframe['best_ask'] = ob['asks'][0][0]
|
dataframe['best_ask'] = ob['asks'][0][0]
|
||||||
```
|
```
|
||||||
|
|
||||||
The orderbook structure is aligned with the order structure from [ccxt](https://github.com/ccxt/ccxt/wiki/Manual#order-book-structure), so the result will look as follows:
|
The orderbook structure is aligned with the order structure from [ccxt](https://github.com/ccxt/ccxt/wiki/Manual#order-book-structure), so the result will be formatted as follows:
|
||||||
|
|
||||||
``` js
|
``` js
|
||||||
{
|
{
|
||||||
@@ -775,7 +879,7 @@ The orderbook structure is aligned with the order structure from [ccxt](https://
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Therefore, using `ob['bids'][0][0]` as demonstrated above will result in using the best bid price. `ob['bids'][0][1]` would look at the amount at this orderbook position.
|
Therefore, using `ob['bids'][0][0]` as demonstrated above will use the best bid price. `ob['bids'][0][1]` would look at the amount at this orderbook position.
|
||||||
|
|
||||||
!!! Warning "Warning about backtesting"
|
!!! Warning "Warning about backtesting"
|
||||||
The order book is not part of the historic data which means backtesting and hyperopt will not work correctly if this method is used, as the method will return up-to-date values.
|
The order book is not part of the historic data which means backtesting and hyperopt will not work correctly if this method is used, as the method will return up-to-date values.
|
||||||
@@ -792,12 +896,12 @@ if self.dp.runmode.value in ('live', 'dry_run'):
|
|||||||
|
|
||||||
!!! Warning
|
!!! Warning
|
||||||
Although the ticker data structure is a part of the ccxt Unified Interface, the values returned by this method can
|
Although the ticker data structure is a part of the ccxt Unified Interface, the values returned by this method can
|
||||||
vary for different exchanges. For instance, many exchanges do not return `vwap` values, some exchanges
|
vary for different exchanges. For instance, many exchanges do not return `vwap` values, and some exchanges
|
||||||
does not always fills in the `last` field (so it can be None), etc. So you need to carefully verify the ticker
|
do not always fill in the `last` field (so it can be None), etc. So you need to carefully verify the ticker
|
||||||
data returned from the exchange and add appropriate error handling / defaults.
|
data returned from the exchange and add appropriate error handling / defaults.
|
||||||
|
|
||||||
!!! Warning "Warning about backtesting"
|
!!! Warning "Warning about backtesting"
|
||||||
This method will always return up-to-date values - so usage during backtesting / hyperopt without runmode checks will lead to wrong results.
|
This method will always return up-to-date / real-time values. As such, usage during backtesting / hyperopt without runmode checks will lead to wrong results, e.g. your whole dataframe will contain the same single value in all rows.
|
||||||
|
|
||||||
### Send Notification
|
### Send Notification
|
||||||
|
|
||||||
@@ -816,7 +920,7 @@ Notifications will only be sent in trading modes (Live/Dry-run) - so this method
|
|||||||
!!! Warning "Spamming"
|
!!! Warning "Spamming"
|
||||||
You can spam yourself pretty good by setting `always_send=True` in this method. Use this with great care and only in conditions you know will not happen throughout a candle to avoid a message every 5 seconds.
|
You can spam yourself pretty good by setting `always_send=True` in this method. Use this with great care and only in conditions you know will not happen throughout a candle to avoid a message every 5 seconds.
|
||||||
|
|
||||||
### Complete Data-provider sample
|
### Complete DataProvider sample
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from freqtrade.strategy import IStrategy, merge_informative_pair
|
from freqtrade.strategy import IStrategy, merge_informative_pair
|
||||||
@@ -883,14 +987,14 @@ class SampleStrategy(IStrategy):
|
|||||||
|
|
||||||
## Additional data (Wallets)
|
## Additional data (Wallets)
|
||||||
|
|
||||||
The strategy provides access to the `wallets` object. This contains the current balances on the exchange.
|
The strategy provides access to the `wallets` object. This contains the current balances of your wallets/accounts on the exchange.
|
||||||
|
|
||||||
!!! Note "Backtesting / Hyperopt"
|
!!! Note "Backtesting / Hyperopt"
|
||||||
Wallets behaves differently depending on the function it's called.
|
Wallets behaves differently depending on the function from which it is called.
|
||||||
Within `populate_*()` methods, it'll return the full wallet as configured.
|
Within `populate_*()` methods, it'll return the full wallet as configured.
|
||||||
Within [callbacks](strategy-callbacks.md), you'll get the wallet state corresponding to the actual simulated wallet at that point in the simulation process.
|
Within [callbacks](strategy-callbacks.md), you'll get the wallet state corresponding to the actual simulated wallet at that point in the simulation process.
|
||||||
|
|
||||||
Please always check if `wallets` is available to avoid failures during backtesting.
|
Always check if `wallets` is available to avoid failures during backtesting.
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
if self.wallets:
|
if self.wallets:
|
||||||
@@ -909,15 +1013,15 @@ if self.wallets:
|
|||||||
|
|
||||||
## Additional data (Trades)
|
## Additional data (Trades)
|
||||||
|
|
||||||
A history of Trades can be retrieved in the strategy by querying the database.
|
A history of trades can be retrieved in the strategy by querying the database.
|
||||||
|
|
||||||
At the top of the file, import Trade.
|
At the top of the file, import the required object:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
```
|
```
|
||||||
|
|
||||||
The following example queries for the current pair and trades from today, however other filters can easily be added.
|
The following example queries trades from today for the current pair (`metadata['pair']`). Other filters can easily be added.
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
trades = Trade.get_trades_proxy(pair=metadata['pair'],
|
trades = Trade.get_trades_proxy(pair=metadata['pair'],
|
||||||
@@ -935,7 +1039,9 @@ For a full list of available methods, please consult the [Trade object](trade-ob
|
|||||||
|
|
||||||
## Prevent trades from happening for a specific pair
|
## Prevent trades from happening for a specific pair
|
||||||
|
|
||||||
Freqtrade locks pairs automatically for the current candle (until that candle is over) when a pair is sold, preventing an immediate re-buy of that pair.
|
Freqtrade locks pairs automatically for the current candle (until that candle is over) when a pair exits, preventing an immediate re-entry of that pair.
|
||||||
|
|
||||||
|
This is to prevent "waterfalls" of many and frequent trades within a single candle.
|
||||||
|
|
||||||
Locked pairs will show the message `Pair <pair> is currently locked.`.
|
Locked pairs will show the message `Pair <pair> is currently locked.`.
|
||||||
|
|
||||||
@@ -946,7 +1052,7 @@ Sometimes it may be desired to lock a pair after certain events happen (e.g. mul
|
|||||||
Freqtrade has an easy method to do this from within the strategy, by calling `self.lock_pair(pair, until, [reason])`.
|
Freqtrade has an easy method to do this from within the strategy, by calling `self.lock_pair(pair, until, [reason])`.
|
||||||
`until` must be a datetime object in the future, after which trading will be re-enabled for that pair, while `reason` is an optional string detailing why the pair was locked.
|
`until` must be a datetime object in the future, after which trading will be re-enabled for that pair, while `reason` is an optional string detailing why the pair was locked.
|
||||||
|
|
||||||
Locks can also be lifted manually, by calling `self.unlock_pair(pair)` or `self.unlock_reason(<reason>)` - providing reason the pair was locked with.
|
Locks can also be lifted manually, by calling `self.unlock_pair(pair)` or `self.unlock_reason(<reason>)`, providing the reason the pair was unlocked.
|
||||||
`self.unlock_reason(<reason>)` will unlock all pairs currently locked with the provided reason.
|
`self.unlock_reason(<reason>)` will unlock all pairs currently locked with the provided reason.
|
||||||
|
|
||||||
To verify if a pair is currently locked, use `self.is_pair_locked(pair)`.
|
To verify if a pair is currently locked, use `self.is_pair_locked(pair)`.
|
||||||
@@ -955,7 +1061,7 @@ To verify if a pair is currently locked, use `self.is_pair_locked(pair)`.
|
|||||||
Locked pairs will always be rounded up to the next candle. So assuming a `5m` timeframe, a lock with `until` set to 10:18 will lock the pair until the candle from 10:15-10:20 will be finished.
|
Locked pairs will always be rounded up to the next candle. So assuming a `5m` timeframe, a lock with `until` set to 10:18 will lock the pair until the candle from 10:15-10:20 will be finished.
|
||||||
|
|
||||||
!!! Warning
|
!!! Warning
|
||||||
Manually locking pairs is not available during backtesting, only locks via Protections are allowed.
|
Manually locking pairs is not available during backtesting. Only locks via Protections are allowed.
|
||||||
|
|
||||||
#### Pair locking example
|
#### Pair locking example
|
||||||
|
|
||||||
@@ -965,7 +1071,7 @@ from datetime import timedelta, datetime, timezone
|
|||||||
# Put the above lines a the top of the strategy file, next to all the other imports
|
# Put the above lines a the top of the strategy file, next to all the other imports
|
||||||
# --------
|
# --------
|
||||||
|
|
||||||
# Within populate indicators (or populate_buy):
|
# Within populate indicators (or populate_entry_trend):
|
||||||
if self.config['runmode'].value in ('live', 'dry_run'):
|
if self.config['runmode'].value in ('live', 'dry_run'):
|
||||||
# fetch closed trades for the last 2 days
|
# fetch closed trades for the last 2 days
|
||||||
trades = Trade.get_trades_proxy(
|
trades = Trade.get_trades_proxy(
|
||||||
@@ -978,9 +1084,9 @@ if self.config['runmode'].value in ('live', 'dry_run'):
|
|||||||
self.lock_pair(metadata['pair'], until=datetime.now(timezone.utc) + timedelta(hours=12))
|
self.lock_pair(metadata['pair'], until=datetime.now(timezone.utc) + timedelta(hours=12))
|
||||||
```
|
```
|
||||||
|
|
||||||
## Print created dataframe
|
## Print the main dataframe
|
||||||
|
|
||||||
To inspect the created dataframe, you can issue a print-statement in either `populate_entry_trend()` or `populate_exit_trend()`.
|
To inspect the current main dataframe, you can issue a print-statement in either `populate_entry_trend()` or `populate_exit_trend()`.
|
||||||
You may also want to print the pair so it's clear what data is currently shown.
|
You may also want to print the pair so it's clear what data is currently shown.
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
@@ -1000,29 +1106,30 @@ def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFram
|
|||||||
return dataframe
|
return dataframe
|
||||||
```
|
```
|
||||||
|
|
||||||
Printing more than a few rows is also possible (simply use `print(dataframe)` instead of `print(dataframe.tail())`), however not recommended, as that will be very verbose (~500 lines per pair every 5 seconds).
|
Printing more than a few rows is also possible by using `print(dataframe)` instead of `print(dataframe.tail())`. However this is not recommended, as can results in a lot of output (~500 lines per pair every 5 seconds).
|
||||||
|
|
||||||
## Common mistakes when developing strategies
|
## Common mistakes when developing strategies
|
||||||
|
|
||||||
### Peeking into the future while backtesting
|
### Looking into the future while backtesting
|
||||||
|
|
||||||
Backtesting analyzes the whole time-range at once for performance reasons. Because of this, strategy authors need to make sure that strategies do not look-ahead into the future.
|
Backtesting analyzes the whole dataframe timerange at once for performance reasons. Because of this, strategy authors need to make sure that strategies do not lookahead into the future, i.e. using data that would not be available in dry or live mode.
|
||||||
This is a common pain-point, which can cause huge differences between backtesting and dry/live run methods, since they all use data which is not available during dry/live runs, so these strategies will perform well during backtesting, but will fail / perform badly in real conditions.
|
|
||||||
|
|
||||||
The following lists some common patterns which should be avoided to prevent frustration:
|
This is a common pain-point, which can cause huge differences between backtesting and dry/live run methods. Strategies that look into the future will perform well during backtesting, often with incredible profits or winrates, but will fail or perform badly in real conditions.
|
||||||
|
|
||||||
|
The following list contains some common patterns which should be avoided to prevent frustration:
|
||||||
|
|
||||||
- don't use `shift(-1)` or other negative values. This uses data from the future in backtesting, which is not available in dry or live modes.
|
- don't use `shift(-1)` or other negative values. This uses data from the future in backtesting, which is not available in dry or live modes.
|
||||||
- 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 `dataframe['volume'].mean()`. This uses the full DataFrame for backtesting, including data from the future. Use `dataframe['volume'].rolling(<window>).mean()` instead
|
- 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 interval, so moves data from an hour 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.
|
||||||
|
|
||||||
!!! Tip "Identifying problems"
|
!!! Tip "Identifying problems"
|
||||||
You may also want to check the 2 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.
|
||||||
Please treat them as what they are - helpers to identify most common problems. A negative result of each does not guarantee that there's none of the above errors included.
|
Please treat them as what they are - helpers to identify most common problems. A negative result of each does not guarantee that there are none of the above errors included.
|
||||||
|
|
||||||
### Colliding signals
|
### Colliding signals
|
||||||
|
|
||||||
When conflicting signals collide (e.g. both `'enter_long'` and `'exit_long'` are 1), freqtrade will do nothing and ignore the entry signal. This will avoid trades that enter, and exit immediately. Obviously, this can potentially lead to missed entries.
|
When conflicting signals collide (e.g. both `'enter_long'` and `'exit_long'` are set to `1`), freqtrade will do nothing and ignore the entry signal. This will avoid trades that enter, and exit immediately. Obviously, this can potentially lead to missed entries.
|
||||||
|
|
||||||
The following rules apply, and entry signals will be ignored if more than one of the 3 signals is set:
|
The following rules apply, and entry signals will be ignored if more than one of the 3 signals is set:
|
||||||
|
|
||||||
@@ -1031,11 +1138,11 @@ The following rules apply, and entry signals will be ignored if more than one of
|
|||||||
|
|
||||||
## Further strategy ideas
|
## Further strategy ideas
|
||||||
|
|
||||||
To get additional Ideas for strategies, head over to the [strategy repository](https://github.com/freqtrade/freqtrade-strategies). Feel free to use them as they are - but results will depend on the current market situation, pairs used etc. - therefore please backtest the strategy for your exchange/desired pairs first, evaluate carefully, use at your own risk.
|
To get additional ideas for strategies, head over to the [strategy repository](https://github.com/freqtrade/freqtrade-strategies). Feel free to use them as examples, but results will depend on the current market situation, pairs used, etc. Therefore, these strategies should be considered only for learning purposes, not real world trading. Please backtest the strategy for your exchange/desired pairs first, then dry run to evaluate carefully, and use at your own risk.
|
||||||
Feel free to use any of them as inspiration for your own strategies.
|
|
||||||
We're happy to accept Pull Requests containing new Strategies to that repo.
|
|
||||||
|
|
||||||
## Next step
|
Feel free to use any of them as inspiration for your own strategies. We're happy to accept Pull Requests containing new strategies to the repository.
|
||||||
|
|
||||||
|
## Next steps
|
||||||
|
|
||||||
Now you have a perfect strategy you probably want to backtest it.
|
Now you have a perfect strategy you probably want to backtest it.
|
||||||
Your next step is to learn [How to use the Backtesting](backtesting.md).
|
Your next step is to learn [how to use backtesting](backtesting.md).
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ print(stats["strategy"][strategy]["pairlist"])
|
|||||||
# Get market change (average change of all pairs from start to end of the backtest period)
|
# Get market change (average change of all pairs from start to end of the backtest period)
|
||||||
print(stats["strategy"][strategy]["market_change"])
|
print(stats["strategy"][strategy]["market_change"])
|
||||||
# Maximum drawdown ()
|
# Maximum drawdown ()
|
||||||
print(stats["strategy"][strategy]["max_drawdown"])
|
print(stats["strategy"][strategy]["max_drawdown_abs"])
|
||||||
# Maximum drawdown start and end
|
# Maximum drawdown start and end
|
||||||
print(stats["strategy"][strategy]["drawdown_start"])
|
print(stats["strategy"][strategy]["drawdown_start"])
|
||||||
print(stats["strategy"][strategy]["drawdown_end"])
|
print(stats["strategy"][strategy]["drawdown_end"])
|
||||||
@@ -215,7 +215,7 @@ trades.groupby("pair")["exit_reason"].value_counts()
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Analyze the loaded trades for trade parallelism
|
## Analyze the loaded trades for trade parallelism
|
||||||
This can be useful to find the best `max_open_trades` parameter, when used with backtesting in conjunction with `--disable-max-market-positions`.
|
This can be useful to find the best `max_open_trades` parameter, when used with backtesting in conjunction with a very high `max_open_trades` setting.
|
||||||
|
|
||||||
`analyze_trade_parallelism()` returns a timeseries dataframe with an "open_trades" column, specifying the number of open trades for each candle.
|
`analyze_trade_parallelism()` returns a timeseries dataframe with an "open_trades" column, specifying the number of open trades for each candle.
|
||||||
|
|
||||||
|
|||||||
@@ -214,8 +214,8 @@ class AwesomeStrategy(IStrategy):
|
|||||||
``` python hl_lines="4"
|
``` python hl_lines="4"
|
||||||
class AwesomeStrategy(IStrategy):
|
class AwesomeStrategy(IStrategy):
|
||||||
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
|
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
|
||||||
proposed_stake: float, min_stake: Optional[float], max_stake: float,
|
proposed_stake: float, min_stake: float | None, max_stake: float,
|
||||||
entry_tag: Optional[str], side: str, **kwargs) -> float:
|
entry_tag: str | None, side: str, **kwargs) -> float:
|
||||||
# ...
|
# ...
|
||||||
return proposed_stake
|
return proposed_stake
|
||||||
```
|
```
|
||||||
@@ -237,7 +237,7 @@ After:
|
|||||||
``` python hl_lines="4"
|
``` python hl_lines="4"
|
||||||
class AwesomeStrategy(IStrategy):
|
class AwesomeStrategy(IStrategy):
|
||||||
def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float,
|
def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float,
|
||||||
time_in_force: str, current_time: datetime, entry_tag: Optional[str],
|
time_in_force: str, current_time: datetime, entry_tag: str | None,
|
||||||
side: str, **kwargs) -> bool:
|
side: str, **kwargs) -> bool:
|
||||||
return True
|
return True
|
||||||
```
|
```
|
||||||
@@ -280,8 +280,8 @@ After:
|
|||||||
|
|
||||||
``` python hl_lines="3"
|
``` python hl_lines="3"
|
||||||
class AwesomeStrategy(IStrategy):
|
class AwesomeStrategy(IStrategy):
|
||||||
def custom_entry_price(self, pair: str, trade: Optional[Trade], current_time: datetime, proposed_rate: float,
|
def custom_entry_price(self, pair: str, trade: Trade | None, current_time: datetime, proposed_rate: float,
|
||||||
entry_tag: Optional[str], side: str, **kwargs) -> float:
|
entry_tag: str | None, side: str, **kwargs) -> float:
|
||||||
return proposed_rate
|
return proposed_rate
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -312,7 +312,7 @@ After:
|
|||||||
``` python hl_lines="5 7"
|
``` python hl_lines="5 7"
|
||||||
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
|
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
|
||||||
current_rate: float, current_profit: float, after_fill: bool,
|
current_rate: float, current_profit: float, after_fill: bool,
|
||||||
**kwargs) -> Optional[float]:
|
**kwargs) -> float | None:
|
||||||
# once the profit has risen above 10%, keep the stoploss at 7% above the open price
|
# once the profit has risen above 10%, keep the stoploss at 7% above the open price
|
||||||
if current_profit > 0.10:
|
if current_profit > 0.10:
|
||||||
return stoploss_from_open(0.07, current_profit, is_short=trade.is_short)
|
return stoploss_from_open(0.07, current_profit, is_short=trade.is_short)
|
||||||
@@ -329,7 +329,7 @@ After:
|
|||||||
`order_time_in_force` attributes changed from `"buy"` to `"entry"` and `"sell"` to `"exit"`.
|
`order_time_in_force` attributes changed from `"buy"` to `"entry"` and `"sell"` to `"exit"`.
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
order_time_in_force: Dict = {
|
order_time_in_force: dict = {
|
||||||
"buy": "gtc",
|
"buy": "gtc",
|
||||||
"sell": "gtc",
|
"sell": "gtc",
|
||||||
}
|
}
|
||||||
@@ -338,7 +338,7 @@ After:
|
|||||||
After:
|
After:
|
||||||
|
|
||||||
``` python hl_lines="2 3"
|
``` python hl_lines="2 3"
|
||||||
order_time_in_force: Dict = {
|
order_time_in_force: dict = {
|
||||||
"entry": "GTC",
|
"entry": "GTC",
|
||||||
"exit": "GTC",
|
"exit": "GTC",
|
||||||
}
|
}
|
||||||
@@ -780,7 +780,7 @@ class MyCoolFreqaiModel(BaseRegressionModel):
|
|||||||
|
|
||||||
def predict(
|
def predict(
|
||||||
self, unfiltered_df: DataFrame, dk: FreqaiDataKitchen, **kwargs
|
self, unfiltered_df: DataFrame, dk: FreqaiDataKitchen, **kwargs
|
||||||
) -> Tuple[DataFrame, npt.NDArray[np.int_]]:
|
) -> tuple[DataFrame, npt.NDArray[np.int_]]:
|
||||||
|
|
||||||
# ... your custom stuff
|
# ... your custom stuff
|
||||||
|
|
||||||
|
|||||||
@@ -15,3 +15,7 @@
|
|||||||
.md-version__list {
|
.md-version__list {
|
||||||
font-weight: 500 !important;
|
font-weight: 500 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#available-endpoints ~ .md-typeset__scrollwrap .md-typeset__table th:first-of-type {
|
||||||
|
width: 35% !important;
|
||||||
|
}
|
||||||
|
|||||||
@@ -45,22 +45,42 @@ Get your "Id", you will use it for the config parameter `chat_id`.
|
|||||||
|
|
||||||
#### Use Group id
|
#### Use Group id
|
||||||
|
|
||||||
You can use bots in telegram groups by just adding them to the group. You can find the group id by first adding a [RawDataBot](https://telegram.me/rawdatabot) to your group. The Group id is shown as id in the `"chat"` section, which the RawDataBot will send to you:
|
To get the group ID, you can add the bot to the group, start freqtrade, and issue a `/tg_info` command.
|
||||||
|
This will return the group id to you, without having to use some random bot.
|
||||||
|
While "chat_id" is still required, it doesn't need to be set to this particular group id for this command.
|
||||||
|
|
||||||
|
The response will also contain the "topic_id" if necessary - both in a format ready to copy/paste into your configuration.
|
||||||
|
|
||||||
``` json
|
``` json
|
||||||
"chat":{
|
{
|
||||||
"id":-1001332619709
|
"enabled": true,
|
||||||
|
"token": "********",
|
||||||
|
"chat_id": "-1001332619709",
|
||||||
|
"topic_id": "122"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
For the Freqtrade configuration, you can then use the full value (including `-` if it's there) as string:
|
For the Freqtrade configuration, you can then use the full value (including `-` ) as string:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"chat_id": "-1001332619709"
|
"chat_id": "-1001332619709"
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! Warning "Using telegram groups"
|
!!! Warning "Using telegram groups"
|
||||||
When using telegram groups, you're giving every member of the telegram group access to your freqtrade bot and to all commands possible via telegram. Please make sure that you can trust everyone in the telegram group to avoid unpleasant surprises.
|
When using telegram groups, you're giving every member of the telegram group access to your freqtrade bot and to all commands possible via telegram. Please make sure that you can trust everyone in the telegram group to avoid unpleasant surprises.
|
||||||
|
|
||||||
|
##### Group Topic ID
|
||||||
|
|
||||||
|
To use a specific topic in a group, you can use the `topic_id` parameter in the configuration. This will allow you to use the bot in a specific topic in a group.
|
||||||
|
Without this, the bot will always respond to the general channel in the group if topics are enabled for a group chat.
|
||||||
|
|
||||||
|
```json
|
||||||
|
"chat_id": "-1001332619709",
|
||||||
|
"topic_id": "3"
|
||||||
|
```
|
||||||
|
|
||||||
|
Similar to the group-id - you can use `/tg_info` from the topic/thread to get the correct topic-id.
|
||||||
|
|
||||||
## 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.
|
||||||
@@ -93,9 +113,12 @@ Example configuration showing the different settings:
|
|||||||
"trailing_stop_loss": "on",
|
"trailing_stop_loss": "on",
|
||||||
"stop_loss": "on",
|
"stop_loss": "on",
|
||||||
"stoploss_on_exchange": "on",
|
"stoploss_on_exchange": "on",
|
||||||
"custom_exit": "silent",
|
"custom_exit": "silent", // custom_exit without specifying an exit reason
|
||||||
"partial_exit": "on"
|
"partial_exit": "on",
|
||||||
|
// "custom_exit_message": "silent", // Disable individual custom exit reasons
|
||||||
|
"*": "off" // Disable all other exit reasons
|
||||||
},
|
},
|
||||||
|
// "exit": "off", // Simplistic configuration to disable all exit messages
|
||||||
"exit_cancel": "on",
|
"exit_cancel": "on",
|
||||||
"exit_fill": "off",
|
"exit_fill": "off",
|
||||||
"protection_trigger": "off",
|
"protection_trigger": "off",
|
||||||
@@ -108,16 +131,16 @@ Example configuration showing the different settings:
|
|||||||
},
|
},
|
||||||
```
|
```
|
||||||
|
|
||||||
`entry` notifications are sent when the order is placed, while `entry_fill` notifications are sent when the order is filled on the exchange.
|
* `entry` notifications are sent when the order is placed, while `entry_fill` notifications are sent when the order is filled on the exchange.
|
||||||
`exit` notifications are sent when the order is placed, while `exit_fill` notifications are sent when the order is filled on the exchange.
|
* `exit` notifications are sent when the order is placed, while `exit_fill` notifications are sent when the order is filled on the exchange.
|
||||||
`*_fill` notifications are off by default and must be explicitly enabled.
|
Exit messages (`exit` and `exit_fill`) can be further controlled at individual exit reasons level, with the specific exit reason as the key. the default for all exit reasons is `on` - but can be configured via special `*` key - which will act as a wildcard for all exit reasons that are not explicitly defined.
|
||||||
`protection_trigger` notifications are sent when a protection triggers and `protection_trigger_global` notifications trigger when global protections are triggered.
|
* `*_fill` notifications are off by default and must be explicitly enabled.
|
||||||
`strategy_msg` - Receive notifications from the strategy, sent via `self.dp.send_msg()` from the strategy [more details](strategy-customization.md#send-notification).
|
* `protection_trigger` notifications are sent when a protection triggers and `protection_trigger_global` notifications trigger when global protections are triggered.
|
||||||
`show_candle` - show candle values as part of entry/exit messages. Only possible values are `"ohlc"` or `"off"`.
|
* `strategy_msg` - Receive notifications from the strategy, sent via `self.dp.send_msg()` from the strategy [more details](strategy-customization.md#send-notification).
|
||||||
|
* `show_candle` - show candle values as part of entry/exit messages. Only possible values are `"ohlc"` or `"off"`.
|
||||||
`balance_dust_level` will define what the `/balance` command takes as "dust" - Currencies with a balance below this will be shown.
|
* `balance_dust_level` will define what the `/balance` command takes as "dust" - Currencies with a balance below this will be shown.
|
||||||
`allow_custom_messages` completely disable strategy messages.
|
* `allow_custom_messages` completely disable strategy messages.
|
||||||
`reload` allows you to disable reload-buttons on selected messages.
|
* `reload` allows you to disable reload-buttons on selected messages.
|
||||||
|
|
||||||
## Create a custom keyboard (command shortcut buttons)
|
## Create a custom keyboard (command shortcut buttons)
|
||||||
|
|
||||||
@@ -296,12 +319,12 @@ Return a summary of your profit/loss and performance.
|
|||||||
|
|
||||||
The relative profit of `1.2%` is the average profit per trade.
|
The relative profit of `1.2%` is the average profit per trade.
|
||||||
The relative profit of `15.2 Σ%` is be based on the starting capital - so in this case, the starting capital was `0.00485701 * 1.152 = 0.00738 BTC`.
|
The relative profit of `15.2 Σ%` is be based on the starting capital - so in this case, the starting capital was `0.00485701 * 1.152 = 0.00738 BTC`.
|
||||||
Starting capital is either taken from the `available_capital` setting, or calculated by using current wallet size - profits.
|
**Starting capital(**) is either taken from the `available_capital` setting, or calculated by using current wallet size - profits.
|
||||||
Profit Factor is calculated as gross profits / gross losses - and should serve as an overall metric for the strategy.
|
**Profit Factor** is calculated as gross profits / gross losses - and should serve as an overall metric for the strategy.
|
||||||
Expectancy corresponds to the average return per currency unit at risk, i.e. the winrate and the risk-reward ratio (the average gain of winning trades compared to the average loss of losing trades).
|
**Expectancy** corresponds to the average return per currency unit at risk, i.e. the winrate and the risk-reward ratio (the average gain of winning trades compared to the average loss of losing trades).
|
||||||
Expectancy Ratio is expected profit or loss of a subsequent trade based on the performance of all past trades.
|
**Expectancy Ratio** is expected profit or loss of a subsequent trade based on the performance of all past trades.
|
||||||
Max drawdown corresponds to the backtesting metric `Absolute Drawdown (Account)` - calculated as `(Absolute Drawdown) / (DrawdownHigh + startingBalance)`.
|
**Max drawdown** corresponds to the backtesting metric `Absolute Drawdown (Account)` - calculated as `(Absolute Drawdown) / (DrawdownHigh + startingBalance)`.
|
||||||
Bot started date will refer to the date the bot was first started. For older bots, this will default to the first trade's open date.
|
**Bot started date** will refer to the date the bot was first started. For older bots, this will default to the first trade's open date.
|
||||||
|
|
||||||
### /forceexit <trade_id>
|
### /forceexit <trade_id>
|
||||||
|
|
||||||
@@ -337,6 +360,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.
|
||||||
@@ -345,7 +370,7 @@ Return the balance of all crypto-currency your have on the exchange.
|
|||||||
> **Available:** 3.05890234
|
> **Available:** 3.05890234
|
||||||
> **Balance:** 3.05890234
|
> **Balance:** 3.05890234
|
||||||
> **Pending:** 0.0
|
> **Pending:** 0.0
|
||||||
|
>
|
||||||
> **Currency:** CVC
|
> **Currency:** CVC
|
||||||
> **Available:** 86.64180098
|
> **Available:** 86.64180098
|
||||||
> **Balance:** 86.64180098
|
> **Balance:** 86.64180098
|
||||||
@@ -356,6 +381,7 @@ Return the balance of all crypto-currency your have on the exchange.
|
|||||||
Per default `/daily` will return the 7 last days. The example below if for `/daily 3`:
|
Per default `/daily` will return the 7 last days. The example below if for `/daily 3`:
|
||||||
|
|
||||||
> **Daily Profit over the last 3 days:**
|
> **Daily Profit over the last 3 days:**
|
||||||
|
|
||||||
```
|
```
|
||||||
Day (count) USDT USD Profit %
|
Day (count) USDT USD Profit %
|
||||||
-------------- ------------ ---------- ----------
|
-------------- ------------ ---------- ----------
|
||||||
@@ -370,6 +396,7 @@ Per default `/weekly` will return the 8 last weeks, including the current week.
|
|||||||
from Monday. The example below if for `/weekly 3`:
|
from Monday. The example below if for `/weekly 3`:
|
||||||
|
|
||||||
> **Weekly Profit over the last 3 weeks (starting from Monday):**
|
> **Weekly Profit over the last 3 weeks (starting from Monday):**
|
||||||
|
|
||||||
```
|
```
|
||||||
Monday (count) Profit BTC Profit USD Profit %
|
Monday (count) Profit BTC Profit USD Profit %
|
||||||
------------- -------------- ------------ ----------
|
------------- -------------- ------------ ----------
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ The following attributes / properties are available for each individual trade -
|
|||||||
| `open_rate` | float | Rate this trade was entered at (Avg. entry rate in case of trade-adjustments). |
|
| `open_rate` | float | Rate this trade was entered at (Avg. entry rate in case of trade-adjustments). |
|
||||||
| `close_rate` | float | Close rate - only set when is_open = False. |
|
| `close_rate` | float | Close rate - only set when is_open = False. |
|
||||||
| `stake_amount` | float | Amount in Stake (or Quote) currency. |
|
| `stake_amount` | float | Amount in Stake (or Quote) currency. |
|
||||||
| `amount` | float | Amount in Asset / Base currency that is currently owned. |
|
| `amount` | float | Amount in Asset / Base currency that is currently owned. Will be 0.0 until the initial order fills. |
|
||||||
| `open_date` | datetime | Timestamp when trade was opened **use `open_date_utc` instead** |
|
| `open_date` | datetime | Timestamp when trade was opened **use `open_date_utc` instead** |
|
||||||
| `open_date_utc` | datetime | Timestamp when trade was opened - in UTC. |
|
| `open_date_utc` | datetime | Timestamp when trade was opened - in UTC. |
|
||||||
| `close_date` | datetime | Timestamp when trade was closed **use `close_date_utc` instead** |
|
| `close_date` | datetime | Timestamp when trade was closed **use `close_date_utc` instead** |
|
||||||
@@ -130,20 +130,21 @@ Most properties here can be None as they are dependent on the exchange response.
|
|||||||
|
|
||||||
| Attribute | DataType | Description |
|
| Attribute | DataType | Description |
|
||||||
|------------|-------------|-------------|
|
|------------|-------------|-------------|
|
||||||
`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 filled? |
|
||||||
`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. Usually open, closed, expired or canceled |
|
||||||
`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) |
|
||||||
`remaining` | float | Remaining amount
|
| `remaining` | float | Remaining amount |
|
||||||
`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.* |
|
||||||
`order_date` | datetime | Order creation date **use `order_date_utc` instead**
|
| `stake_amount_filled` | float | Filled Stake amount used for this order. *Added in 2024.11.* |
|
||||||
`order_date_utc` | datetime | Order creation date (in UTC)
|
| `order_date` | datetime | Order creation date **use `order_date_utc` instead** |
|
||||||
`order_fill_date` | datetime | Order fill date **use `order_fill_utc` instead**
|
| `order_date_utc` | datetime | Order creation date (in UTC) |
|
||||||
`order_fill_date_utc` | datetime | Order fill date
|
| `order_fill_date` | datetime | Order fill date **use `order_fill_utc` instead** |
|
||||||
|
| `order_fill_date_utc` | datetime | Order fill date |
|
||||||
|
|||||||
537
docs/utils.md
537
docs/utils.md
@@ -8,15 +8,7 @@ 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.
|
||||||
@@ -216,55 +139,29 @@ Example: Search dedicated strategy path.
|
|||||||
freqtrade list-strategies --strategy-path ~/.freqtrade/strategies/
|
freqtrade list-strategies --strategy-path ~/.freqtrade/strategies/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## List Hyperopt-Loss functions
|
||||||
|
|
||||||
|
Use the `list-hyperoptloss` subcommand to see all hyperopt loss functions available.
|
||||||
|
|
||||||
|
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).
|
||||||
|
|
||||||
|
--8<-- "commands/list-hyperoptloss.md"
|
||||||
|
|
||||||
## List freqAI models
|
## List freqAI models
|
||||||
|
|
||||||
Use the `list-freqaimodels` subcommand to see all freqAI models available.
|
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:
|
||||||
|
|
||||||
@@ -313,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:
|
||||||
|
|
||||||
@@ -369,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.
|
||||||
@@ -454,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
|
||||||
|
|
||||||
@@ -491,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.
|
||||||
@@ -517,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
|
||||||
|
|
||||||
@@ -570,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
|
||||||
|
|
||||||
@@ -608,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.
|
||||||
@@ -757,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.
|
||||||
@@ -820,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
|
||||||
|
|
||||||
@@ -871,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.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ We **strongly** recommend that Windows users use [Docker](docker_quickstart.md)
|
|||||||
If that is not possible, try using the Windows Linux subsystem (WSL) - for which the Ubuntu instructions should work.
|
If that is not possible, try using the Windows Linux subsystem (WSL) - for which the Ubuntu instructions should work.
|
||||||
Otherwise, please follow the instructions below.
|
Otherwise, please follow the instructions below.
|
||||||
|
|
||||||
All instructions assume that python 3.9+ is installed and available.
|
All instructions assume that python 3.10+ is installed and available.
|
||||||
|
|
||||||
## Clone the git repository
|
## Clone the git repository
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ cd freqtrade
|
|||||||
|
|
||||||
Install ta-lib according to the [ta-lib documentation](https://github.com/TA-Lib/ta-lib-python#windows).
|
Install ta-lib according to the [ta-lib documentation](https://github.com/TA-Lib/ta-lib-python#windows).
|
||||||
|
|
||||||
As compiling from source on windows has heavy dependencies (requires a partial visual studio installation), Freqtrade provides these dependencies (in the binary wheel format) for the latest 3 Python versions (3.9, 3.10, 3.11 and 3.12) and for 64bit Windows.
|
As compiling from source on windows has heavy dependencies (requires a partial visual studio installation), Freqtrade provides these dependencies (in the binary wheel format) for the latest 3 Python versions (3.10, 3.11 and 3.12) and for 64bit Windows.
|
||||||
These Wheels are also used by CI running on windows, and are therefore tested together with freqtrade.
|
These Wheels are also used by CI running on windows, and are therefore tested together with freqtrade.
|
||||||
|
|
||||||
Other versions must be downloaded from the above link.
|
Other versions must be downloaded from the above link.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"""Freqtrade bot"""
|
"""Freqtrade bot"""
|
||||||
|
|
||||||
__version__ = "2024.8"
|
__version__ = "2025.1"
|
||||||
|
|
||||||
if "dev" in __version__:
|
if "dev" in __version__:
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
__main__.py for Freqtrade
|
__main__.py for Freqtrade
|
||||||
To launch Freqtrade as a module
|
To launch Freqtrade as a module
|
||||||
|
|
||||||
> python -m freqtrade (with Python >= 3.9)
|
> python -m freqtrade (with Python >= 3.10)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from freqtrade import main
|
from freqtrade import main
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ from freqtrade.commands.hyperopt_commands import start_hyperopt_list, start_hype
|
|||||||
from freqtrade.commands.list_commands import (
|
from freqtrade.commands.list_commands import (
|
||||||
start_list_exchanges,
|
start_list_exchanges,
|
||||||
start_list_freqAI_models,
|
start_list_freqAI_models,
|
||||||
|
start_list_hyperopt_loss_functions,
|
||||||
start_list_markets,
|
start_list_markets,
|
||||||
start_list_strategies,
|
start_list_strategies,
|
||||||
start_list_timeframes,
|
start_list_timeframes,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user