A Step-By-Step Guide To Building a Trading Bot In Any Programming Language

Da qui, possiamo iniziare a determinare come sarà la nostra architettura.

Prima di tutto, abbiamo bisogno di una variabile per indicare lo stato in cui il Bot è attualmente. Questo è sia BUY che SELL. Un booleano o un enum dovrebbe andare bene per questo scopo.

Poi abbiamo bisogno di impostare le nostre soglie di acquisto e di vendita. Queste indicano la percentuale di diminuzione o aumento del prezzo dall’ultima operazione che abbiamo fatto.

Per esempio, se ho comprato il bene a 100$, e il suo prezzo è ora a 102$, abbiamo un aumento del 2%. Se abbiamo una soglia SELL impostata su un aumento dell’1%, il nostro bot venderà, perché ha ottenuto un profitto superiore alla nostra soglia.

Nel nostro caso, queste soglie saranno costanti. Ne abbiamo bisogno di 4, due per ogni stato:

Soglie di acquisto (se il bot è in stato di vendita)

  • DIP_THRESHOLD : Compra il bene se il suo prezzo è diminuito di più della soglia. L’idea di questo è di seguire la strategia “compra basso, vendi alto”, dove si cerca di comprare un bene quando è sottovalutato, aspettandosi che il suo valore aumenti per poter vendere.
  • UPWARD_TREND_THRESHOLD : Compra il bene se il suo prezzo è aumentato di più della soglia. Questo va contro la filosofia “compra basso, vendi alto”, ma mira a identificare quando il prezzo sta salendo e non vogliamo perdere l’opportunità di comprare prima che salga ancora di più.

Ecco un’illustrazione che potrebbe aiutare:

Image By Author

Se abbiamo eseguito un’operazione SELL nel punto segnato “SELL” nell’immagine sopra, ora abbiamo le nostre soglie impostate per l’operazione di acquisto.

Se il prezzo andrà mai sotto la linea verde inferiore o sopra la linea verde superiore eseguiremo un’operazione di ACQUISTO. In questo caso, abbiamo superato prima la soglia superiore, quindi abbiamo comprato in base alla soglia BUY_DIP_THRESHOLD .

Soglie di VENDITA (Se il Bot è in stato di ACQUISTO)

  • PROFIT_THRESHOLD : Vende il bene se il suo prezzo è aumentato sopra la soglia da quando lo abbiamo comprato. Questo è il modo in cui traiamo profitto. Vendiamo ad un prezzo più alto di quello che abbiamo comprato.
  • STOP_LOSS_THRESHOLD : Idealmente, vorremmo che il nostro bot vendesse solo quando ottiene un profitto. Tuttavia, forse il mercato sta scendendo significativamente e vogliamo uscire prima che sia troppo tardi e poi comprare ad un prezzo più basso. Pertanto, questa soglia viene utilizzata per vendere in perdita, ma con l’obiettivo di impedire che accada una perdita maggiore.

Ecco un’illustrazione:

Image By Author

Qui, abbiamo comprato al punto segnato con “BUY”. Poi, abbiamo incontrato la nostra soglia superiore prima di quella inferiore, il che significa che abbiamo venduto il nostro bene per un profitto. Questo è il modo in cui i bot di trading fanno soldi.

Ora abbiamo già un’idea di base di come funziona il bot, quindi passiamo a un po’ di (pseudo)codice.

Funzioni helper dell’API

La prima cosa di cui il nostro bot ha bisogno sono alcune funzioni helper per ottenere dati dall’API della borsa. Abbiamo bisogno di:

Quanto sopra dovrebbe essere autoesplicativo, ma è necessario assicurarsi di essere a conoscenza di quali valute l’API POSTrichiede quando si fa un’operazione di acquisto o vendita.

Spesso, quando stai scambiando USD per oro, per esempio, puoi specificare quanto oro comprare o quanto USD vendere. Ottenere le valute giuste è molto importante.

Ciclo del Bot

Ora che abbiamo le nostre funzioni di aiuto, iniziamo a definire il flusso di lavoro del bot. La prima cosa di cui abbiamo bisogno è un ciclo infinito con un certo tempo di sospensione. Diciamo che vogliamo che il bot cerchi di fare un’operazione ogni 30 secondi. Ecco come potrebbe essere:

Poi, impostiamo le variabili e le costanti di cui abbiamo parlato, così come il flusso decisionale. Funzioni di aiuto API a parte, il nostro codice finirebbe per essere qualcosa del genere:

Nota: I valori delle soglie qui sono solo valori arbitrari. Dovreste scegliere i vostri in base alla vostra strategia.

Se quanto sopra è accoppiato con le funzioni helper e la funzione loop, che potrebbe anche essere main, ora dovremmo avere i pilastri di base di un bot funzionante.

Ad ogni iterazione, il nostro bot controllerà il suo stato attuale (COMPRA o VENDI) e tenterà di fare un trade in base alle soglie hardcoded. Aggiornerà quindi lo stato di ACQUISTO/ VENDITA e l’ultimo prezzo per un’operazione.

Poi rifà tutto da capo.

Step 5: Lucidare il Bot

Foto di Matthew Dockery

L’architettura di base del nostro bot è pronta, ma ci sono probabilmente alcune cose che potremmo ancora voler considerare di aggiungere.

Logs

Quando ho costruito per la prima volta una variante di questo bot, una cosa che era essenziale per me era avere una registrazione costante delle azioni del bot sia sul terminale che su un file di log separato.

Ad ogni passo, avrei creato dei log come:

 USD Balance = 22.15$
Bought 0.002 BTC for 22.15 USD
Last Operation Price updated to 11,171.40 (BTC/USD)
Could not perform SELL operation - Insufficient balance

I log che andavano nel file avrebbero avuto anche un timestamp aggiunto, così quando accedevo al server dopo un giorno intero e trovavo un errore, per esempio, potevo risalire esattamente a dove era successo, così come scoprire tutto quello che il bot faceva lungo la strada.

Questa dovrebbe essere una questione di impostare una funzione createLog che viene chiamata ad ogni passo. Qualcosa del genere:

Identificare le tendenze

L’obiettivo principale del nostro bot dovrebbe essere quello di comprare ad un prezzo basso e vendere con profitto. Tuttavia, abbiamo due soglie che contraddicono questa idea: UPWARD_TREND_THRESHOLD e STOP_LOSS_THRESHOLD.

Queste soglie dovrebbero dirci quando dovremmo vendere in perdita o comprare ad un aumento di prezzo. L’idea è che cerchiamo di identificare le tendenze che non rientrano nella strategia generale, ma che possono essere dannose o vantaggiose per noi, quindi dovremmo agire.

Tuttavia, il modo in cui l’ho strutturato sopra è abbastanza limitato. Un’istantanea statica di un prezzo è lontana dall’indicare una tendenza.

Per fortuna, senza troppi problemi, puoi rendere questo un po’ più affidabile.

Tutto quello che devi fare è anche tenere traccia di più prezzi che solo lastOpPrice. Si potrebbe, per esempio, tenere traccia del prezzo 10 o 20 iterazioni fa, e confrontarlo con il prezzo attuale invece di lastOpPrice . Questo sarebbe probabilmente migliore nell’identificare una tendenza perché controlla i rapidi spostamenti di prezzo piuttosto che uno spostamento avvenuto in un lungo periodo di tempo.

Database?

Mentre è in esecuzione, questo semplice bot non ha effettivamente bisogno di un database, poiché sta gestendo pochissimi dati e può mantenere tutte le informazioni in memoria.

Tuttavia, cosa succede quando il bot fallisce, per esempio? Come potrebbe determinare il lastOpPrice senza che tu lo controlli manualmente?

Per evitare il lavoro manuale da parte tua, potresti voler tenere una sorta di database leggero per tenere traccia di alcune cose, come lastOpPrice .

In questo modo, quando il bot si avvia, invece di usare i valori di default, controllerà effettivamente i valori memorizzati e continuerà da lì.

A seconda di quanto semplice vuoi fare questo, puoi anche considerare un “database” di .txt o json file, dato che potresti comunque memorizzare solo pochi valori.

Dashboard

Foto di Luke Chesser

Se vuoi facilitare la visualizzazione delle operazioni del tuo bot, così come gestirlo senza dover andare ad armeggiare manualmente con il codice, potresti considerare di collegare il tuo bot ad una dashboard.

Questo richiederebbe che il tuo bot fosse collegato a un server web/API proprio che ti permetta di controllare le sue funzionalità.

In questo modo, potresti cambiare le soglie più facilmente, per esempio.

Ci sono molti modelli di dashboard gratuiti disponibili, quindi non devi nemmeno crearne uno tuo. Controlla Start Bootstrap e Creative Tim per alcuni esempi.

Testare le strategie sui dati passati

Molte borse ti offrono l’accesso ai dati dei prezzi passati, così come di solito puoi facilmente ottenere quei dati altrove se ne hai bisogno.

Questo è molto utile se vuoi testare la tua strategia prima di metterla in azione. Puoi eseguire una simulazione del tuo bot con dati passati e “soldi finti” per vedere quanto bene avrebbero funzionato le tue soglie definite e regolarle per l’affare reale.

Punti aggiuntivi su soglie e ordini

Ci sono alcune cose a cui devi fare attenzione quando piazzi gli ordini.

In primo luogo, dovresti capire che ci sono due tipi di ordini: ordini limite e ordini di mercato. Dovresti davvero leggere un po’ di più se non hai familiarità con i concetti, ma ti darò una panoramica di base qui.

Gli ordini di mercato sono ordini che vengono eseguiti al prezzo corrente di mercato, eseguendo effettivamente immediatamente nella maggior parte dei casi.

Gli ordini limite, d’altra parte, si verificano quando si inserisce un ordine per un prezzo inferiore al prezzo di mercato (nel caso di un ordine BUY) o superiore al prezzo di mercato (nel caso di un ordine SELL). Questi non sono garantiti per l’esecuzione, dato che il prezzo potrebbe non raggiungere la soglia che hai impostato.

Il vantaggio degli ordini limite è che puoi anticipare i movimenti del mercato e piazzare un ordine riguardo a dove ti aspetti che il mercato vada prima che tale movimento accada.

Inoltre, gli ordini limite sono solitamente soggetti a commissioni più basse rispetto agli ordini di mercato. Questo perché gli ordini di mercato sono soggetti a quella che viene comunemente chiamata una “tassa per l’acquirente”, mentre gli ordini limite sono soggetti a “tasse per il produttore”.

La ragione dei nomi e delle rispettive tasse è che gli ordini di mercato stanno solo accettando (“prendendo”) il prezzo corrente di mercato, mentre gli ordini limite fuori dal prezzo di mercato stanno aggiungendo liquidità e quindi “facendo un mercato”, per cui sono “ricompensati” con tasse più basse.

Nota che il bot in questo articolo è più adatto per gli ordini di mercato.

Infine, sul tema delle commissioni, quando imposti il tuo PROFIT_THRESHOLD, ricordati di prendere in considerazione le commissioni.

Per ottenere un profitto, è necessario eseguire un’operazione di ACQUISTO e poi un’operazione di VENDITA, che ti lascia soggetto a 2 commissioni.

Come tale, è necessario assicurarsi di vendere per un profitto solo quando si è in grado di coprire almeno le commissioni, altrimenti si sta effettivamente facendo una perdita.

Pensaci, assumendo che le commissioni siano piatte, se compri un asset per 100.00$, incorrendo in una commissione di 0.50$, e poi lo vendi per 100.75$, sempre con una commissione di 0.50$, avresti fatto un profitto lordo dello 0.75%, ma, in realtà, avresti una perdita netta dello 0.25%.

Ora immagina che il tuo bot venda sempre in perdita netta. Perderesti un sacco di soldi piuttosto rapidamente…

Osservazioni finali

Questo è tutto per il nostro bot. Spero che questo tutorial sia stato utile.

L’idea era quella di concentrarsi su tutti i concetti che devi conoscere per costruire un trading bot anche se non hai mai fatto trading prima, non insegnarti a programmare.

Il presupposto è che tutti i lettori siano in grado di fare richieste HTTP nel loro linguaggio di scelta, quindi sarebbe meglio concentrarsi su altri aspetti.

È il primo tutorial che scrivo in questo modo (basato sullo pseudocodice), quindi fatemi sapere cosa ne pensate del concetto.

Grazie per aver letto! E se pensi che questo articolo sia stato utile, sentiti libero di sostenermi con qualche applauso 👏👏.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.