Comprar stop Vender stop Grid conselheiro como uma classe - página 4

 
Vladimir Karputov:

Para a etapa 35, os totais estendidos:

Direção_de_operações_EURUSD_35

Aqui podemos ver que

  • praticamente 50% de todos os casos são quando a duração dos negócios ininterruptos é igual a "1". Portanto, temos situações do seguinte tipo: abrimos Comprar e depois revertemos a posição (ou seja, fechamos Comprar com prejuízo e abrimos Vender) ou esta situação: abrimos Vender e depois revertemos a posição (ou seja, fechamos Vender com prejuízo e abrimos Comprar). Assim, situações com negócios ininterruptos de comprimento "1" são uma perda garantida.
  • Aproximadamente 25% de todos os casos com a duração de negócios ininterruptos igual a "2", pelo seguinte exemplo: abrimos a Buy, depois abrimos outra Buy e revertemos a posição (isto é, fechamos duas Buy e abrimos Sell - resultando em uma perda igual a zero).

Acho que estas categorias mais numerosas (duração de negócios ininterruptos igual a "1" e "2") devem ser pensadas com mais detalhes a fim de corrigir a estratégia de colocar ordens Stop pendentes.


Vamos verificar a idéia da pirâmide (caso abramos uma posição na direção da anterior):

1. Variante de aumentar o tamanho do lote na progressão geométrica

Uma progressão geométrica é uma seqüência de númerosb1, b2, b3,... (Membros da progressão) em que cada número subseqüente a partir do segundo, é obtido a partir do anterior multiplicando-o por um certo número q(denominador da progressão), onde b1!=0, q!=0: b1, b2=b1*q, b3=b2*q.

2. Variante do aumento do lote na progressão aritmética

A progressão aritmética (algébrica) é uma seqüência de números (membros da progressão) na qual cada número começando com o segundo é obtido a partir do número anterior, acrescentando-lhe um número constante d (passo, ou diferença de progressão).

 

Com a introdução dos dois tipos de regressão, torna-se necessário verificar o tamanho do lote calculado. A função LotCheck será utilizada para este fim. Exemplo de utilização desta função no roteiro:

//+------------------------------------------------------------------+
//|                                                     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 não desperdiçar o registro terminal, toda a saída é organizada no gráfico:

LotCheck

Arquivos anexados:
LotCheck.mq5  5 kb
 

As profissões geométricas e aritméticas foram acrescentadas à classe EA. Cálculo de lote implementado (por enquanto) para a progressão 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

 

Comparação do comércio(símbolo EURUSD, passo 35) com um lote regular e com a progressão geométrica:

Comprar stop Vender stop Grid advisor como uma classe: lote regular

Fig. 1: Um consultor especializado Comprar parada Vender parada Grade como uma classe: um lote regular


Comprar stop Vender stop Grid advisor como uma classe: lote em progressão geométrica

Fig. 2. um Expert Advisor Buy stop Sell stop Grid como uma classe: progressão geométrica


Comprar stop Vender stop Grid advisor como uma classe: lote em progressão aritmética

Fig. 3: Classificador da parada de compra Parada de venda Parada de venda Consultor especialista em grade: lote progressivo aritmético


Digamos assim: "Aumentar os lotes em progressão geométrica ou progressão aritmética quando se mantém posições em uma direção é pior do que negociar com um lote constante".

 

Algo que eu tenho quando tento atualizar dados do Armazenamento que ele escreve:

2017.10.03 12:59:10.146 Armazenamento falhou na leitura de dados http (storage.mql5.com:443 read failed [12152])

Em geral, meu trabalho com o Armazenamento não funciona em nada. Algo que eu estou fazendo errado...
 
George Merts:

Estou recebendo uma mensagem quando tento atualizar a partir do Warehouse:

2017.10.03 12:59:10.146 Armazenamento falhou na leitura de dados http (storage.mql5.com:443 read failed [12152])

Em geral, meu trabalho com a Storage não funciona em nada. Algo que eu estou fazendo errado...

Vamos usar o Skype e depois publicar aqui uma solução para o problema do Armazenamento ...

 
Vladimir Karputov:

Vamos usar o Skype e depois postar aqui a solução para o problema do Warehouse ...

Não há problema. Enviei-o pessoalmente por e-mail.

 

Portanto.

Eu tenho Windows7 x64, o controle de conta está desativado. Eu tenho que me conectar ao Warehouse toda vez que me conecto ao meta-editor.


 

Vladimir, por favor, me adicione também ao projeto. Obrigado

Razão: