Categoria: AlgoTrading

In questa sezione puoi trovare tutto ciò che riguarda il trading automatico. Script, indicatori, strategie, tutto automatizzato

Come usare cTrader

Se sei qui è perché vuoi imparare come usare cTrader! Ciao, sono Drilon e sono un programmatore con la passione per la finanza personale ed in questo articolo ti spiegerò come uso cTrader.

Installazione

Per prima cosa bisogna scaricare il programma in locale nel nostro PC, per farlo bisogna aprire un account sui broker supportarti (Qui trovi la lista: https://ctrader.com/featured-brokers/).

Io personalmente uso questo broker, in Italia dovrebbe essere tra i migliori anche per le commissioni (https://www.icmarkets.eu/en/)

Una volta creato l’account e sei dentro potrai scaricarti cTrader andando su Download, scorri in basso e troverai il pulsante (cTrader c’è solo per Windows per il momento)

Impostiamo cTrader

Una volta scaricato, installato e avviato ti chiederà di accedere con i dati con cui ti sei registrato, una volta fatto avrai una schermata del genere:

Come puoi vedere dal lato sinistro ci sono diverse sezioni: Trade, Copy, Automate ed Analyze.

Trade è da dove possiamo operare manualmente e piazzare i trade dal lato destro con i vari takeProfit e stopLoss.

Copy ti permette di copiare altre persone e non fare più niente se non hai molto tempo a disposizione (però devi stare attento a cosa copi, con quanto budget e che leva).

Automate è la parte dove creiamo i nostri “bot” ed è la parte che ci interessa maggiormente.

Analyze invece sono statistiche del nostro profilo

Creare il primo bot

Spostandosi su Automate vedremo una cosa del genere (più o meno)

Nel lato sinistro ci sono le strategie automatiche, ne troverai sicuramente qualcuna di default se vuoi avere un’idea.

Per inserirne una ti basterà cliccare su “New”, sempre nella sezione di sinistra.

A questo punto ti creerà un nuovo bot ,che possiamo rinominare come ci pare, in fondo alla lista.

Cliccandoci ti si aprirà il relativo codice di partenza (se vuoi qualche guida su come scrivere il codice fammelo sapere su Telegram https://t.me/+0xQYD3WKIAA5Mjg8)

A questo punto possiamo rimpiazzare il codice con uno delle strategie che trovi sul sito che ho condiviso precedentemente.

Dopo di ché bisognerà cliccare sul pulsante Build in alto e aspettare che sotto compaia la scritta verde, se non dovesse comparire vuol dire che ci sono degli errori di codice!

A questo punto il nostro bot è pronto! Bisogna soltanto assegnarlo a qualcosa, come? Con il tasto + accanto al nome della strategia sempre nel pannello laterale.

Clicchiamo su EURUSD ad esempio e riclicchiamoci per andare nella parte di backtest

Come vedi nell’immagine c’è un tasto impostazioni dove possiamo scegliere il budget per il backtest, in basso invece troviamo un riquadro con i parametri da passare al bot per fare il backtest. Per lanciare il backtest basterà cliccare al tasto Play in alto a destra, accanto alla barra temporale

C’è un’altra sezione molto importante, Optimization

In questa sezione si può ottimizzare la strategia vedendo quali parametri rendono di più.

Una volta fatto tutto e impostato i parametri corretti alla strategia, puoi cliccare sul pulsantone verde di play accanto ad EURUSD e la strategia andrà effettivamente in live poi!

Se vuoi vedere delle strategie da utilizzare inizia da qui: https://www.investoinvestigando.it/una-strategia-per-sempre-algotrading/

Se hai dubbi o domande fammele pure su Telegram: https://t.me/+0xQYD3WKIAA5Mjg8

Seguimi su instagram: https://www.instagram.com/investoinvestigando.it/

Una strategia per sempre? – AlgoTrading

Ciao, oggi torno a parlarti di una strategia automatica che ho scritto e testato personalmente, siamo sempre a una strategia da utilizzare sempre. Sono Drilon e sono un programmatore con la passione per la finanza personale!

La strategia ha dato risultati veramente interessanti, utilizzabile per ogni tipologia di portafoglio.

Idea

L’idea di base è quella di una “toccata e fuga” poiché noi siamo dei piccoli pesci per il mercato, non possiamo immaginare di combattere gli squali. L’imitiamoci a prendere il nostro e stare tranquilli.

Attenzione però, non è scalping perché non si punta tanto in pochissimo tempo per poter guadagnare qualcosa.

L’idea è di prendere una piccola parte di un grande movimento, infatti l’obiettivo è quello di prendere 10/15 pips e fine.

Vedi questo grafico? Indica la probabilità di arrivare al target (lato sinistro asse delle Y) in un numero di candele (lato basso asse delle X). Quindi perchè puntare a fare 200 pips se statisticamente è provato che è molto difficile? Andiamo a fare operazioni quasi certe!

Quindi, tornando alla strategia, l’idea è di utilizzare un qualcosa che ci indichi il trend principale (Media Mobile Esponenziale) e qualcosa che ci indichi quando entrare a mercato e per quanto starci, il 100% di probabilità di arrivare a target non c’è! Utilizzerò lo Stochastic! Quindi avremo qualcosa del genere:

Come si opera?

Allora si entra a mercato quando le medie mobili esponenziali sono verso lo stesso trend e lo stochastic incrocia ed entra nella zona azzurra, con un piccolo dettaglio però, bisogna entrare a mercato solo se l’intreccio attuale dello stochastic è avvenuto seguendo il trend rispetto all’intreccio precedente.

Mi spiego meglio!

Esempio di operazione di SELL

Abbiamo le medie mobili esponenziali tutte tendenti verso il basso, entriamo nel punto 3 perché l’intreccio precedente dello stochastic è avvenuto nel punto 2 ed il prezzo nel punto 2 era maggiore rispetto al punto 3, quindi conferma il trend ribassista sul quale noi vogliamo puntare.

Nel punto 2 non si entra poiché c’è stato un intreccio precedente nel punto 1 che è avvenuto a un prezzo più basso, quindi nel punto 2 poteva esserci un’inversione (Poi è sceso ma è l’incertezza del mercato).

Se si guarda più indietro in realtà noi si sarebbe entrati nel punto 1 perché il precedente intreccio dello stochastic era a un prezzo più alto, ma questo era giusto per farti un esempio e capire la strategia.

Ma quando esco? L’obiettivo è 10 pips di target oppure quando lo stochastic arriva nella zona opposta alla nostra, nel caso del sell si esce quando lo stochastic arriva sotto i 20.

Stessa cosa, capovolta, per quanto riguarda il buy

Codice

Dopo aver fatto l’optimization questo è il risultato:

In 11 anni ha eseguito 181 ordini, di cui 170 andati a target e 11 chiusi in negativo!

Non male eh? Il profitto però, come vedi, non è altissimo, è di 228$ che in 11 anni fanno abbastanza schifo, però questo a noi ci serve solo come test per capire se la strategia funziona o no! Questo è stato fatto puntando sempre il minimo (0.01 lotti)

Vuoi sapere la cosa bella? Che ha un drawdown di soli 33$!

Quindi se hai un capitale di 100$ puoi già partire con questa strategia, se hai un capitale di 1k puoi aumentare i lotti e utilizzarne (0.1) e otterresti un guadagno di circa 2280$ rischiando 330$.

Quindi dipende anche dal budget personale!

Questi sono i parametri da utilizzare:

Poi comunque puoi sbizzarrirti come più credi, facendo altri test e altri parametri.

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class IIScalping : Robot
    {

        [Parameter("Source", Group = "Data series")]
        public DataSeries Source { get; set; }

        [Parameter(DefaultValue = 10)]
        public double takeProfit { get; set; }

        [Parameter(DefaultValue = 10)]
        public double stopLoss { get; set; }

        [Parameter(DefaultValue = 8)]
        public int hourEnter { get; set; }

        [Parameter(DefaultValue = 18)]
        public int hourExit { get; set; }

        [Parameter(DefaultValue = 60)]
        public int fastPeriod { get; set; }

        [Parameter(DefaultValue = 240)]
        public int slowPeriod { get; set; }

        [Parameter(DefaultValue = 0.01)]
        public double lots { get; set; }

        [Parameter(DefaultValue = 2)]
        public int multiplier { get; set; }

        [Parameter(DefaultValue = 1)]
        public int maxOrder { get; set; }

        [Parameter(DefaultValue = 8)]
        public int stochLength { get; set; }

        [Parameter(DefaultValue = 3)]
        public int stochParams { get; set; }

        private ExponentialMovingAverage emaFast;
        private ExponentialMovingAverage emaSlow;
        private StochasticOscillator stoch;
        
        double stochLevel = 0.0;


        protected override void OnStart()
        {
            // Put your initialization logic here

        }

        protected override void OnBar()
        {
            // Put your core logic here
            emaFast = Indicators.ExponentialMovingAverage(Source, fastPeriod);
            emaSlow = Indicators.ExponentialMovingAverage(Source, slowPeriod);
            stoch = Indicators.StochasticOscillator(stochLength, stochParams, stochParams, MovingAverageType.Exponential);
            
            
            int currentBar = Bars.Count - 1;
            bool check = checkTime();
            var positions = Positions.FindAll("Order");
            if (check == true)
            {
                

                //Open(TradeType.Buy, lots);
                
                if(emaFast.Result.LastValue > emaSlow.Result.LastValue && stoch.PercentK[currentBar] > stoch.PercentD[currentBar] && stoch.PercentK[currentBar - 1] <= 20 && stochLevel == 0.0){
                    stochLevel = Bars.LastBar.Close;
                }
                
                if(emaFast.Result.LastValue < emaSlow.Result.LastValue && stoch.PercentK[currentBar] < stoch.PercentD[currentBar] && stoch.PercentK[currentBar - 1] >= 80 && stochLevel == 0.0){
                    stochLevel = Bars.LastBar.Close;
                }

                if (emaFast.Result.LastValue > emaSlow.Result.LastValue && stoch.PercentK[currentBar] > stoch.PercentD[currentBar] && stoch.PercentK[currentBar - 1] <= 20 && Bars.LastBar.Close > stochLevel)
                {
                    stochLevel = 0.0;
                    //stopLoss = (Bars[currentBar-1].Close - Bars[currentBar-1].Low)*100000;
                    Open(TradeType.Buy, lots);
                }

                if (emaFast.Result.LastValue < emaSlow.Result.LastValue && stoch.PercentK[currentBar] < stoch.PercentD[currentBar] && stoch.PercentK[currentBar - 1] >= 80 && Bars.LastBar.Close < stochLevel)
                {
                    stochLevel = 0.0;
                    //stopLoss = (Bars[currentBar-1].High - Bars[currentBar-1].Close)*100000;
                    Open(TradeType.Sell, lots);
                }

            }
            
            if(positions.Length>0 && (positions[0].TradeType == TradeType.Buy)){
                if(stoch.PercentK[currentBar] >= 80){
                    Close(TradeType.Buy);
                }
            }
            
            
            if(positions.Length>0 && (positions[0].TradeType == TradeType.Buy)){
                if(stoch.PercentK[currentBar] <= 20){
                    Close(TradeType.Sell);
                }
            }

        }

        protected override void OnStop()
        {
            // Put your deinitialization logic here
        }

        private bool checkTime()
        {
            DateTime date = Server.Time;
            if (date.Hour >= hourEnter && date.Hour <= hourExit)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("Order", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType, double lots)
        {
            var position = Positions.FindAll("Order", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(lots);
            if (position == null || position.Length < maxOrder)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "Order", stopLoss, takeProfit);
        }
    }


}

Questo è il broker che utilizzo: https://www.icmarkets.eu/en/

Questa è un’altra strategia: https://www.investoinvestigando.it/algotrading-macd-ema/

AlgoTrading – MACD + EMA

AlgoTrading – MACD Ciao, oggi ti parlerò di una strategia profittevole nel lungo periodo! Senza perdere troppo tempo andiamo subito nel dettaglio.

Idea

L’idea di base è utilizzare il MACD come segnale per entrare a mercato ed una media mobile esponenziale come trend principale.

Strategia MACD

Come vediamo da questo grafico entreremo in SELL quando il prezzo è sotto la media mobile esponenziale ed il MACD ha intrecciato verso il basso ma nella parte superiore del grafico. Analogamente si procederà per il BUY

Programma da utilizzare

Il programma che uso per fare trading e cTrader ed è un programma dove si possono programmare bot per il trading automatico utilizzando il C# come linguaggio di programmazione. Qui puoi trovare una lista dei broker che ti permettono di utilizzare questo programma (LISTA) , io personalmente uso IC Markets.

Backtest

Una volta scritto il codice (che puoi scaricare in fondo a questa pagina) vado a fare dei backtest e delle ottimizzazioni dalla sezione “Optimization” per trovare le impostazioni migliori per questa strategia.

Le impostazioni migliori per questa strategia sono i seguenti:

WOW FIGO! Guadagno più di 1500€!!! Si però c’è una max equity drawdown (ovvero quanto il tuo portafoglio è sceso al massimo con questa strategia) di 1200€! Quindi ti faccio una semplice domanda, rischieresti mai 1200€ per guadagnarne FORSE (perchè nel trading non si ha mai la certezza) 1500€? Decisamente il gioco non vale la candela!

Diamo un’occhiata all’equity-line di questa strategia:

Come vediamo non è una crescita costante, è un po’ ballerina come cosa quindi direi proprio di andare a ignorare queste impostazioni per questa strategia.

Risultato migliore AlgoTrading – MACD

Proseguendo con i vari backtest si va a trovare qualcosa di interessante però:

Questa crescita quasi costante ci piace di più anche se ancora non è perfetta, ma soprattutto abbiamo diminuito il drawdown di molto, riducendo il rischio!

Come vediamo dall’immagine qui sopra adesso il rischio è di circa 350€ per un guadagno di 1400€, adesso iniziamo a ragionare!

Ancora però non sono soddisfatto, vado alla ricerca di una equityline migliore!

Finalmente una crescita costante nel tempo! Tenendo conto che questo risultato è stato ottenuto su un backtest di 11 anni, compreso anche il crollo che c’è stato durante il Covid-19!

Ok però vediamo che il guadagno si è ridotto a 99€ … che schifo! Vero il guadagno si è ridotto di molto però guarda un po’ il drawdown … 18€! Questo sicuramente è molto buono! Questi risultati sono stati ottenuti puntando il minimo ad ogni operazione, ovvero 0.01 lotti!

Adesso che sappiamo quanto è il minimo che dobbiamo avere nel portafoglio (consiglio sempre il doppio del drawdown, quindi almeno 36€) possiamo moltiplicare e aumentare i lotti fino a raggiungere il budget che noi abbiamo.

Se ad esempio hai un budget di 100€ ti basta moltiplicare per circa 3 volte la puntata, quindi andare a impostare 0.03 lotti e ottenere un guadagno di circa 300€ (99*3) e un max drawdown di 54€ (18*3).

Se invece hai 500€ puoi moltiplicare anche per 20 volte e andare a puntare 0.2 lotti ad ogni trade e ottenere un guadagno di circa 1980€ (99*20) con un max drawdown di 360€, capito?

Scommetto che ti sta iniziando a piacere! Dai ti lascio il codice del bot! Questa era la strategia AlgoTrading – MACD

Seguimi su Instragram: https://www.instagram.com/investoinvestigando.it/

Entra nel canale Telegram: https://t.me/+ANDlACweT31kMWNk

La strategia di trading del Turnaround Tuesday

Cos’è Turnaround Tuesday?

Il mercato azionario ha la tendenza a cambiare direzione e a muoversi nella direzione opposta rispetto alla mossa precedente prima del lunedì.

Ad esempio, se il mercato è in ribasso di lunedì, è probabile che otterrai rendimenti superiori alla media nei prossimi giorni. Al contrario, se lunedì è molto forte, il rendimento nei giorni successivi è sostanzialmente inferiore rispetto a una giornata in ribasso.

La madre di tutti i Turnaround Tuesdays!

Per darti un esempio di Turnaround Tuesday, guarda cosa è successo alla madre di tutti i Turnaround Tuesday: il Black Monday del 19 ottobre 1987.

Dopo una giornata drammatica lunedì 19 ottobre, il mercato è rimbalzato del 5,3% martedì e del 9,1% mercoledì!

Turnaround Tuesdays strategia di trading numero uno:

Testiamo la seguente strategia:

1) Oggi è lunedì.

2) La chiusura deve essere inferiore di almeno l’1% rispetto alla chiusura di venerdì.

3) Se uno e due sono veri, entra alla chiusura.

4) Uscita alla chiusura martedì.

Questa semplice strategia di trading sembra piuttosto buona:

  • Numero di scambi: 163
  • Guadagno medio per operazione: 0,7%
  • CAGR è 3,9%
  • Esposizione/tempo nel mercato: 2,25%
  • Rapporto di vincita: 63%
  • Guadagno medio per vincitore: 1,75%
  • Perdita media per trade in perdita: -1,05%

Vuoi sapere le altre condizioni della strategia? Diventa un sostenitore del Patreon e potrai avere accesso a tutti i contenuti!

Seguimi su Instragram: https://www.instagram.com/investoinvestigando.it/

Entra nel canale Telegram: https://t.me/+ANDlACweT31kMWNk

Ti consiglio anche di dare un’occhiata a questo articolo: https://www.investoinvestigando.it/10-stili-di-investimento-quale-stile-di-investimento-si-adatta-a-te/

Cosa cazzo è MQL5 – Guida MQL5 #0

MQL5 è il linguaggio di programmazione usato all’interno di MetaTrader5. Non sai cosa è MetaTrader5? é una piattaforma che viene utilizzata per fare trading… la più utilizzata. MetaTrader4 è la versione precedente che è un po’ limitata per quanto riguarda il lato della programmazione.

Andando nel dettaglio, cosa possiamo programmare con MQL5?

  • Expert Advisor: permette il trading automatico, è capace di aprire, modificare e chiudere ordini. Si può applicare un expert advisor ad ogni timeframe del grafico
  • Indicatore: mostra dati di analisi tecnica utilizzando linee, frecce, istogrammi ecc.. Possono essere inseriti più di uno per ogni timeframe del grafico.
  • Script: un programma specifico che fa un’unica cosa solo una volta

MetaEditor

MetaEditor è l’IDE per programmare in MQL5 che è già incluso in MetaTrader5 quando lo installate.

Ci sono altre due sezioni all’interno di MetaEditor, il Navigator dove possiamo visualizzare i file e le cartelle in una vista ad albero. Il Toolbox che contiene a sua volta altre tab dove possiamo vedere gli errori e altre informazioni utili.

MQL5 Wizard

Cosa è? é una funzionalità che ci permette di creare in modo semplice un programma MQL5

  • Expert Advisor (template): Crea un nuovo expert advisor con delle funzionalità base di un template
  • Expert Advisor (generate): Questo permette all’utente di creare un expert advisor senza nessun template di base, senza nessun codice già inserito, foglio bianco!
  • Custom Indicator: Permette di creare un indicatore partendo da un template
  • Script: Crea uno script
  • Library: Permette di creare una libreria che poi può essere utilizzata in altri programmi futuri
  • Include: Creerà un file include vuoto
  • New Class: Crea un file include con una classe partendo da un template

Compilazione

La compilazione è una “funzionalità” che verifica il codice scritto e ti dice se è tutto ok o ci sono errori all’interno. Per compilare basterà premere l’apposito pulsante nella parte superiore dell’interfaccia.

Sintassi

Mql5
Mql5

MQL5 è simile a altri linguaggi di programmazione moderni come il C++, C# o Java. Un’espressione o operazione deve finire con un punto e virgola (;).

Il nome che diamo alle variabili, classi o funzioni deve essere univoco!

I commenti si fanno con il // come hai visto nel codice qui sopra.

Se hai domande puoi farmele su instagram:

https://www.instagram.com/investoinvestigando.it/

Oppure anche qui sul blog 🙂

Prossimo capitolo (Ancora non disponibile)