bitreport-org / Bitreport

Automated technical analysis reports for cryptocurrencies 🚀
MIT License
8 stars 1 forks source link

Trading Bot #89

Open turbaszek opened 5 years ago

turbaszek commented 5 years ago

Bot:

Prophecy endpoint:

Related to #73

turbaszek commented 5 years ago

@Bombasarkadian co myślisz?

glowacki-dev commented 5 years ago

A nie robimy w końcu integracji z jakimś demo kontem? Czy to w osobnym tasku?

turbaszek commented 5 years ago

Może zrobimy to za jednym razem? Bot musiałby odpytywać tylko endpoint. Chyba, że faktycznie robimy sobie bota który żyje i trejduje i to jego sukces raportujemy

glowacki-dev commented 5 years ago

No tak bym właśnie widział. Spróbujmy raportować prawdziwe wyniki a nie symulację

turbaszek commented 5 years ago

Możemy zrobi taki endpoint:

GET /prophecy/bot_name/?budget=1000&coins=28.4

Wtedy:

  1. Jeśli są jakieś parametry to użyj ich do decyzji jak nie to odczytaj stan z bazy
  2. Podejmij decyzję i zapisz ją
  3. Wyślij odpowiedź z decyzją i statystykami
turbaszek commented 5 years ago

AT with DL

http://cs229.stanford.edu/proj2017/final-reports/5241098.pdf https://www.sciencedirect.com/science/article/pii/S2405918818300539 https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8305636 http://aaaquants.com/2017/08/27/machine-learning-lstm-networks/

Stacked LSTM

https://medium.com/@alexrachnog/neural-networks-for-algorithmic-trading-part-one-simple-time-series-forecasting-f992daa1045a

model = Sequential()
model.add(LSTM(input_shape = (EMB_SIZE,), input_dim=EMB_SIZE, output_dim=HIDDEN_RNN, return_sequences=True))
model.add(LSTM(input_shape = (EMB_SIZE,), input_dim=EMB_SIZE, output_dim=HIDDEN_RNN, return_sequences=False))
model.add(Dense(1))
model.add(Activation('linear'))

MSEs = 0.0246 -> mieliśmy lepsze ~0.012

Strategy

Tak jak rozmawialiśmy bot powinien być uniwersalny i jako jeden z argumentów przyjmować strategię, w stylu:

def strategy_name(actual_price: float, predicted_price: float, wallet: dict, **kwargs):
    # Wallet has to have form {'budget': float, 'coins': float} or something similar

    # Do some smart calculations
    # Return a decision: 'buy', 'sell', 'keep'

    return decision, wallet

Jeśli strategia przyjmowała by jakieś parametry opisujące warunki typu stop-loss to można by ją wrzucić w jakiś optymalizator tak aby znaleźć najlepsze parametry.