Buy stop Sell stop Grid advisor as a class - página 4

 
Vladimir Karputov:

Para el paso 35, los totales ampliados:

Dirección_de_las_operaciones_EURUSD_35

Aquí podemos ver que

  • prácticamente el 50% de los casos son cuando la duración de las operaciones ininterrumpidas es igual a "1". En otras palabras, tenemos situaciones como: abrimos la compra y luego revertimos la posición (es decir, cerramos la compra con pérdida y abrimos la venta) o esta situación: abrimos la venta y luego revertimos la posición (es decir, cerramos la venta con pérdida y abrimos la compra). Así, las situaciones con operaciones ininterrumpidas de longitud "1" son una pérdida garantizada.
  • Aproximadamente el 25% de todos los casos con la duración de las operaciones ininterrumpidas igual a "2", por el siguiente ejemplo: abrimos Compra, luego abrimos otra Compra e invertimos la posición (es decir, cerramos dos Compras y abrimos Ventas - resultando en una pérdida igual a cero).

Creo que estas categorías más numerosas (duración de las operaciones ininterrumpidas igual a "1" y "2") deben pensarse con más detalle para corregir la estrategia de colocación de órdenes pendientes de Stop.


Comprobemos la idea de la pirámide (en caso de abrir una posición en dirección a la anterior):

1. Variante de aumento del tamaño del lote en progresión geométrica

Una progresión geométrica es una secuencia de númerosb1, b2, b3,... (Miembros de la progresión), en la que cada número posterior al segundo, se obtiene a partir del anterior multiplicándolo por un determinado número q(denominador de la progresión), donde b1!=0, q!=0: b1, b2=b1*q, b3=b2*q.

2. Variante del aumento del lote en la progresión aritmética

La progresión aritmética (algebraica) es una secuencia de números (miembros de la progresión) en la que cada número que empieza por el segundo se obtiene a partir del anterior añadiéndole un número constante d (paso, o diferencia de la progresión).

 

Con la introducción de los dos tipos de regresión, se hace necesario comprobar el tamaño del lote calculado. Para ello se utilizará la función LotCheck. Ejemplo de uso de esta función en el 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);
  }
//+------------------------------------------------------------------+

Para no ensuciar el registro del terminal, toda la salida se organiza en el gráfico:

LotCheck

Archivos adjuntos:
LotCheck.mq5  5 kb
 

Se han añadido profesiones geométricas y aritméticas a la clase EA. Implementado el cálculo de lotes (por ahora) para la progresión geométrica.

//+------------------------------------------------------------------+
//| 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

 

Comparación de la negociación(símbolo EURUSD, paso 35) con un lote regular y con progresión geométrica:

Compra stop Venta stop Asesor de rejilla como clase: lote regular

Fig. 1: Un Asesor Experto Buy stop Sell stop Grid como clase: un lote regular


Buy stop Sell stop Grid advisor como clase: lote en progresión geométrica

Fig. 2. un Asesor Experto Buy stop Sell stop Grid como clase: progresión geométrica


Buy stop Sell stop Grid advisor como clase: lote en progresión aritmética

Fig. 3: Clasificador de la Parada de Compra Parada de Venta Asesor Experto: lote progresivo aritmético


Digámoslo así: "Aumentar los lotes en progresión geométrica o aritmética cuando se mantienen posiciones en una dirección es peor que operar con un lote constante".

 

Algo que tengo al intentar actualizar los datos de Storage it writes:

2017.10.03 12:59:10.146 El almacenamiento falló al leer los datos http (storage.mql5.com:443 read failed [12152])

En general, mi trabajo con Storage no funciona en absoluto... Algo estoy haciendo mal...
 
George Merts:

Me aparece un mensaje cuando intento actualizar desde el Almacén:

2017.10.03 12:59:10.146 El almacenamiento falló al leer los datos http (storage.mql5.com:443 read failed [12152])

En general, mi trabajo con Storage no funciona en absoluto... Algo estoy haciendo mal...

Vamos a Skype y luego publicar una solución al problema de almacenamiento aquí ...

 
Vladimir Karputov:

Vamos a hablar por Skype y luego publicar la solución al problema del Almacén aquí ...

No hay problema. Se lo envié por correo electrónico en persona.

 

Así que.

Tengo Windows7 x64, el control de cuentas está desactivado. Tengo que conectarme al Almacén cada vez que me conecto al meta-editor.


 

Vladimir, por favor, añádeme también al proyecto. Gracias