diff --git a/longterm_baseline.py b/longterm_baseline.py index 8a4c86104f65cb46d24146a620b1f47fc3f526f3..957d7441d726c4e03d30c14500a918ec148a399c 100644 --- a/longterm_baseline.py +++ b/longterm_baseline.py @@ -2,14 +2,7 @@ import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim -import pickle - -# [(Snapshot_Time, [(buy_price1, amount1), ...] , [(sell_price1, amount1), ...]), ...] -# [(1620457034392, [(56000, 0.01), (55900, 1), (55700, 30), ...] , [(57000, 0.01), (57100, 1), ...] ), (1620457034394, [...]), ...] -# The snapshots should has almost identical time-interval. Good for LSTM. -# Time axis: [history, older, newer, ..., latest] -realtime_shortterm_dataset_depth = [] -realtime_shortterm_dataset_depth_size = 1024 +import pickle, numpy, math # [(Trade_Time, PRICE, AMOUNT), ...] # [(1620457034392, 56000, 0.5), (1620457034394, 56001, 0.05), ...] @@ -18,6 +11,13 @@ realtime_shortterm_dataset_depth_size = 1024 realtime_shortterm_dataset_aggtrade = [] realtime_shortterm_dataset_aggtrade_size = 1024*1024 +# [(Snapshot_Time, [(buy_price1, amount1), ...] , [(sell_price1, amount1), ...]), ...] +# [(1620457034392, [(56000, 0.01), (55900, 1), (55700, 30), ...] , [(57000, 0.01), (57100, 1), ...] ), (1620457034394, [...]), ...] +# The snapshots should has almost identical time-interval. Good for LSTM. +# Time axis: [history, older, newer, ..., latest] +realtime_shortterm_dataset_depth = [] +realtime_shortterm_dataset_depth_size = 1024 + # The trading thread would not start working, before finish analysing longterm dataset. # Time-interval for longterm dataset is 1 minute. longterm_dataset = [] @@ -35,7 +35,7 @@ def load_realtime_dataset_on_start(): class LSTM_Shortterm_Predictor(nn.Module): def __init__(self, input_dim): super(LSTM_Shortterm_Predictor, self).__init__() - self.lstm_idim = 16 + self.lstm_idim = 10 # this is the length of depth_to_impulsive_score_vector() self.lstm_odim = 128 # The input would be a tuple containing complex information. @@ -51,7 +51,7 @@ class LSTM_Shortterm_Predictor(nn.Module): self.out = nn.Linear(self.lstm_odim, 1) def forward(self, sample_seq): - input_seq = sample_seq.view(len(sample_seq), 1, lstm_idim) + input_seq = sample_seq.view(len(sample_seq), 1, self.lstm_idim) lstm_in = self.serializer(input_seq) lstm_out, _ = self.lstm(lstm_in) predict_shortterm_trend = self.out(torch.tanh(lstm_out[-1:])) @@ -82,18 +82,33 @@ def learn_once(depth_seq, trend_answer_score): i = torch.tensor(input_seq, dtype=torch.float) o = model(i) - loss = torch.square(o - trend_answer_score) + loss = abs(o - trend_answer_score) loss.backward(retain_graph=True) optimizer.step() - return loss.to_list()[0] + return float(loss) load_realtime_dataset_on_start() -for i in range(300): - print("DEBUG: l=", realtime_shortterm_dataset_depth[i+256]) - answer = realtime_shortterm_dataset_depth[i+256][1][0][0] - realtime_shortterm_dataset_depth[i][1][0][0] +losses = [] +for i in range(2000): + answer = numpy.average([realtime_shortterm_dataset_depth[i+di][1][0][0] for di in (256,512,768,1024,2000,5000)]) - realtime_shortterm_dataset_depth[i][1][0][0] print("answer=", answer) - loss = learn_once(realtime_shortterm_dataset_depth[i], answer) + loss = learn_once(realtime_shortterm_dataset_depth[i:i+128], answer) print("Loss=", loss) + losses += [loss] + +##################### +import matplotlib.pyplot as plt +import matplotlib.cm as cm +import numpy as np +x = numpy.arange(len(losses)) +colors = cm.rainbow(np.linspace(0, 1, 10)) +for index, y in enumerate(losses): + plt.scatter(index, y, color=colors[1]) +#for x, y in guess_xy: +# plt.scatter(x, y, color=colors[6]) +plt.show() + +