Buy stop Sell stop Grid advisor come classe - pagina 4

 
Vladimir Karputov:

Per il passo 35, i totali estesi:

Direzione_dei_trade_EURUSD_35

Qui possiamo vedere che

  • praticamente il 50% di tutti i casi sono quando la lunghezza degli scambi ininterrotti è uguale a "1". Così abbiamo situazioni del seguente tipo: abbiamo aperto Buy e poi invertito la posizione (cioè chiuso Buy con una perdita e aperto Sell) o questa situazione: abbiamo aperto Sell e poi invertito la posizione (cioè chiuso Sell con una perdita e aperto Buy). Così le situazioni con scambi ininterrotti di lunghezza "1" sono una perdita garantita.
  • Circa il 25% di tutti i casi con la lunghezza dei trade ininterrotti pari a "2", con il seguente esempio: abbiamo aperto Buy, poi aperto un altro Buy e invertito la posizione (cioè chiuso due Buy e aperto Sell - con conseguente perdita pari a zero).

Penso che queste categorie più numerose (lunghezza delle transazioni ininterrotte pari a "1" e "2") debbano essere pensate in modo più dettagliato per correggere la strategia di collocamento degli ordini pendenti Stop.


Controlliamo l'idea piramidale (nel caso in cui apriamo una posizione in direzione della precedente):

1. Variante dell'aumento della dimensione del lotto in progressione geometrica

Una progressione geometrica è una sequenza di numerib1, b2, b3,... (membri della progressione), in cui ogni numero successivo al secondo, si ottiene dal precedente moltiplicandolo per un certo numero q(denominatore della progressione), dove b1!=0, q!=0: b1, b2=b1*q, b3=b2*q.

2. Variante dell'aumento del lotto nella progressione aritmetica

La progressione aritmetica (algebrica) è una sequenza di numeri (membri della progressione) in cui ogni numero a partire dal secondo è ottenuto dal precedente aggiungendovi un numero costante d (passo, o differenza di progressione).

 

Con l'introduzione dei due tipi di regressione, diventa necessario controllare la dimensione del lotto calcolata. La funzione LotCheck sarà utilizzata per questo scopo. Esempio di utilizzo di questa funzione nello script:

//+------------------------------------------------------------------+
//|                                                     LotCheck.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#property description "Checking the volume of the lot"
#property script_show_inputs
//---
input double start_lot  = 0.85;
input double step_lot   = 0.354;
#include <Trade\SymbolInfo.mqh>  
CSymbolInfo    m_symbol;                     // symbol info object
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   m_symbol.Name(Symbol());
   m_symbol.Refresh();
//---
   Comment("");
   Comment(StringFormat("Symbol %s. Lots Min: %.2f, Lots Max: %.2f, Lots Step %.2f",
           m_symbol.Name(),m_symbol.LotsMin(),m_symbol.LotsMax(),m_symbol.LotsStep()));
//---
   double ext_start_lot = start_lot;
   double ext_step_lot  = step_lot;
//---
   for(int i=0;i<21;i++)
     {
      Comment(ChartGetString(0,CHART_COMMENT),"\n",
              "Input lot ",ext_start_lot,", lot check: ",DoubleToString(LotCheck(ext_start_lot),2));
      ext_start_lot+=ext_step_lot;
     }
  }
//+------------------------------------------------------------------+
//| Lot Check                                                        |
//+------------------------------------------------------------------+
double LotCheck(double lots)
  {
//--- calculate maximum volume
   double volume=NormalizeDouble(lots,2);
   double stepvol=m_symbol.LotsStep();
   if(stepvol>0.0)
      volume=stepvol*MathFloor(volume/stepvol);
//---
   double minvol=m_symbol.LotsMin();
   if(volume<minvol)
      volume=0.0;
//---
   double maxvol=m_symbol.LotsMax();
   if(volume>maxvol)
      volume=maxvol;
   return(volume);
  }
//+------------------------------------------------------------------+

Al fine di non sporcare il log del terminale, l'intero output è organizzato sul grafico:

LotCheck

File:
LotCheck.mq5  5 kb
 

Le professioni geometriche e aritmetiche sono state aggiunte alla classe EA. Implementato il calcolo dei lotti (per ora) per la progressione geometrica.

//+------------------------------------------------------------------+
//| 1.001:                                                           |
//|   when starting, sets Buy stop and sell stop                     |
//| 1.002:                                                           |
//|   OnTradeTransaction: if DEAL_ENTRY_IN delete all pending orders,|
//|   and, sets Buy stop and sell stop                               |
//| 1.003:                                                           |
//|   OnTradeTransaction: DEAL_ENTRY_IN                              |
//|      DEAL_TYPE_BUY => ClosePositions(POSITION_TYPE_SELL)         |
//|      DEAL_TYPE_SELL => ClosePositions(POSITION_TYPE_BUY)         |
//|   PlacesXXXX:                                                    |
//|      "RefreshRates()" is now inside the "PlacesXXXX"             |
//|   OnTradeTransaction:                                            |
//|      a "while" loop for "PlacesXXXX"                             |
//| 1.004:                                                           |
//|   add OnTester and save csv file                                 |
//| 1.005:                                                           |
//|   add Geometric and arithmetic progression                       |
//|      only a geometric progression is realized                    |
//+------------------------------------------------------------------+

ds

 

Confronto del trading(simbolo EURUSD, passo 35) con un lotto regolare e con progressione geometrica:

Buy stop Sell stop Grid advisor come classe: lotto regolare

Fig. 1: Un Expert Advisor Buy stop Sell stop Griglia come classe: un lotto regolare


Buy stop Sell stop Grid advisor come classe: lotto in progressione geometrica

Fig. 2. un Expert Advisor Buy stop Sell stop Griglia come classe: lotto a progressione geometrica


Buy stop Sell stop Grid advisor come classe: lotto in progressione aritmetica

Fig. 3: Classificatore del Buy stop Sell stop Grid Expert Advisor: lotto progressivo aritmetico


Mettiamola così: "Aumentare i lotti in progressione geometrica o aritmetica quando si tengono posizioni in una direzione è peggio che fare trading con un lotto costante".

 

Qualcosa che ho quando cerco di aggiornare i dati da Storage scrive:

2017.10.03 12:59:10.146 La memorizzazione non è riuscita a leggere i dati http (storage.mql5.com:443 lettura fallita [12152])

In generale, il mio lavoro con lo Storage non funziona affatto... C'è qualcosa che sto sbagliando...
 
George Merts:

Ricevo un messaggio quando cerco di aggiornare dal magazzino:

2017.10.03 12:59:10.146 La memorizzazione non è riuscita a leggere i dati http (storage.mql5.com:443 lettura fallita [12152])

In generale, il mio lavoro con Storage non funziona affatto... C'è qualcosa che sto sbagliando...

Mettiamoci su Skype e poi postiamo qui una soluzione al problema dello Storage ...

 
Vladimir Karputov:

Mettiamoci su Skype e poi postiamo qui la soluzione al problema del magazzino...

Nessun problema. Te l'ho mandato per e-mail di persona.

 

Quindi.

Ho Windows7 x64, il controllo dell'account è disattivato. Devo connettermi al Warehouse ogni volta che accedo al meta-editor.


 

Vladimir, per favore, aggiungi anche me al progetto. Grazie