Home Trading Sistematico Post

EA Semplice con Perceptron a Uno Strato per MetaTrader 4

Allegato
18987.zip (1.98 KB, Scarica 2 volte)

1. Cosa sono i Perceptron

I perceptron sono una tipologia di rete neurale semplice. Per un approfondimento, puoi consultare il lavoro di Dr. Mark Humphrys sui Reti Neurali a Strato Singolo.

Ho definito l'"Intelligenza Artificiale" come la logica del perceptron.


2. Algoritmo


2.1. Input

I valori w1, w2, w3 e w4 sono i pesi impostati in base all'ottimizzazione effettuata.

input int    x1 = 0;//peso1
input int   x2 = 0;//peso2
input int   x3 = 0;//peso3
input int    x4 = 0;//peso4


2.2. Perceptron

Per realizzare un EA semplice, la soglia è zero. L'output non cambia: "spara" 1, "non spara" 0.

La Regola

double w1 = x1 - 100;
double w2 = x2 - 100;
double w3 = x3 - 100;
double w4 = x4 - 100;

//Perceptron prima di una barra 2017/03/18
double a11 = ((iRSI(Symbol(), 0, 12,PRICE_MEDIAN,1))/100-0.5)*2;
double a21 = ((iRSI(Symbol(), 0, 36,PRICE_MEDIAN,1))/100-0.5)*2;
double a31 = ((iRSI(Symbol(), 0, 108,PRICE_MEDIAN,1))/100-0.5)*2;
double a41 = ((iRSI(Symbol(), 0, 324,PRICE_MEDIAN,1))/100-0.5)*2;
double Current_Percptron = (w1 * a11 + w2 * a21 + w3 * a31 + w4 * a41);

//Perceptron prima di due barre 2017/03/18
double a12 = ((iRSI(Symbol(), 0, 12,PRICE_MEDIAN,2))/100-0.5)*2;
double a22 = ((iRSI(Symbol(), 0, 36,PRICE_MEDIAN,2))/100-0.5)*2;
double a32 = ((iRSI(Symbol(), 0, 108,PRICE_MEDIAN,2))/100-0.5)*2;
double a42 = ((iRSI(Symbol(), 0, 324,PRICE_MEDIAN,2))/100-0.5)*2;
double Pre_Percptron = (w1 * a12 + w2 * a22 + w3 * a32 + w4 * a42);

Utilizzo l'RSI in questo EA, ma penso che anche altri oscillatori come RCI e W%R possano funzionare.


2.3. Apertura e Chiusura Ordini

Quando il perceptron precedente è sotto 0 e quello attuale è sopra 0, se esiste una posizione corta, viene chiusa.

Inoltre, l'EA invia un ordine long.

if(Pre_Percptron < 0 && Current_Percptron > 0) //segnale long
   {
      //Se esiste una posizione corta, chiudi l'ordine
      if(pos < 0)
      {
         ret = OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0);
         if(ret) pos = 0; //Se la chiusura riesce, lo stato della posizione è Zero
      }
      //Se non ci sono posizioni, invia ordine long
      if(pos == 0) Ticket = OrderSend(
                                       _Symbol,              // simbolo
                                       OP_BUY,                 // operazione
                                       Lots,              // volume
                                       Ask,               // prezzo
                                       0,            // slippage
                                       0,            // stop loss
                                       0,          // take profit
                                       Trade_Comment,        // commento
                                       MagicNumber,// numero magico
                                       0,        // scadenza ordine pendente
                                       Green  // colore
                                       );
   }

Al contrario, quando il perceptron attuale è sotto 0 e quello precedente è sopra 0, se c'è una posizione long, viene chiusa.

Inoltre, l'EA invia un ordine short.


3. Ottimizzazione

Carica il file "Slime_Mold_RSI_template.set" e scegli "open price only" come modello.

Input

Ottimizzazione


4. Commento e Numero Magico

Ho impostato il numero magico della durata usata per l'ottimizzazione; questo EA utilizza il numero magico nei commenti.

string Trade_Comment = IntegerToString(MagicNumber,5,' ') + "Giorni-Ottimizzazione";

Commento


5. Articolo Correlato

Puoi trovare ulteriori informazioni a questo link.

Post correlati

Commento (0)