-
Notifications
You must be signed in to change notification settings - Fork 0
/
lstm.txt
63 lines (50 loc) · 2.88 KB
/
lstm.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
http://monik.in/a-noobs-guide-to-implementing-rnn-lstm-using-tensorflow/
https://github.com/roatienza/Deep-Learning-Experiments/blob/master/Experiments/Tensorflow/RNN/rnn_words.py
https://medium.com/towards-data-science/lstm-by-example-using-tensorflow-feb0c1968537
https://medium.com/@TalPerry/deep-learning-the-stock-market-df853d139e02
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
http://karpathy.github.io/2015/05/21/rnn-effectiveness/
NETWORK
- Stacked LSTMs
INPUT:
- DataPeriod Array
- Price Delta (Candle Close - Candle Open)
- Volume Delta (Candle Close - Candle Open)
OUTPUT:
- DataPeriod Array(3) (The following 3 candles)
- Price Delta (Candle Close - Candle Open)
-> Probability (Buy/Sell)
TRAINING:
Trading Data X Days (Sollten möglichst viel Trading Data sein, desto mehr kann man trainieren)
-> Split into 24 hrs parts (Sollte gering sein, da wir Day traden und nur die Probability für einen geringen Zeitraum brauchen)
-> Split into 288 DataPeriods (24 hrs / 5 mins)
-> INPUT DataPeriod using Activation Function
-> Compare output with following 3 DataPeriod and do back propagation
Trading Data sollte möglichst in einem einzigen Market Trend liegen.
Es bringt nichts wenn Zeiträume trainiert werden, in denen das Volumen sehr gering ist und der Preis seitwärts verläuft.
Ni = (Pi / P0) - 1
Pi = P0(Ni + 1)
Notizen:
Anfangs habe ich mit 2 Wochen Chart Daten gearbeitet. Das sind 4032 Data Points (je 300 Sekunden).
Die Accuracy lag zwischen 41%-60%. Mir war unbewusst, dass 4032 Data Points zu viel waren um damit schnelle Ergebnisse zu erzielen.
Ich habe es sodann mit 96 Data Points (8 Stunden) erneurt probiert. Nach etwa 10000 Iterations lag deie Accuracy schon bei 100%.
Anfangs war es also eine 50/50 chance für das LSTM Netz richtig zu liegen, da es nur 2 outputs gibt.
97 data points = 10k iterations 100%
193 data points = 175k 41m immernoch 98%
4032 data points = 450000 50/50 lol
Test:
Mit den 97 Data Points (8hrs) habe ich nach 15k iterations (5.76min) eine genauigkeit von 100% und eine Average Loss von 0.00000% (ist das normal??)
nun habe ich den 98 und 99 Data Point, welcher nicht im trainingset vorhanden war, vorhergesagt -> Beide richtig!!!!
Datenset:
https://poloniex.com/public?command=returnChartData¤cyPair=BTC_ETH&start=1494525600&end=1494554400&period=300
Datenset (8hrs) + die nächsten beiden DataPoints (10mins)
https://poloniex.com/public?command=returnChartData¤cyPair=BTC_ETH&start=1494525600&end=1494555000&period=300
1494554700 hat ein positives Preisdelta, 1494555000 ein negatives
Output des Programms:
'''
timestamp: 84
[0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0]
, {1494554400 buy 0}, {1494554700 buy 0}, {1494555000 sell 1}
'''
Bei der ersten BTC_ETH_8hrs.json konnte ich eine genauigkeit von 100% erreichen. Bei der BTC_ETH_8hrs_now.json nur noch bis 99.3%.
Das erklärt warum bei den 193 datapoints sogar nach 175k iters nur 98% möglich waren.