[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 426

 
Elektronik:
Por favor, díganme cómo calcular el volumen total de todas las órdenes (lotes) utilizando el bucle OrderSelect( ) pasando por cada orden pieza por pieza).
Iniciar una variable con el volumen total en lotes e inicializarla a 0
  1. Recorrer los pedidos en un bucle
  2. Después de cada OrderSelect(), se incrementa el valor de la variable por el valor OrderLots().

Una vez finalizado el bucle, la variable contendrá el volumen total de todos los pedidos buscados

 
Elektronik:
Por favor, díganme cómo calcular el volumen total de todas las órdenes (lotes) pasando por cada orden individualmente con OrderSelect().
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
 


gracias pako:

lo hizo:)

int start()
{
int i=0;
double lots=0;
int kollots=0;
int nets=0;
int netp=0;
for(i=0; i<OrdersTotal(); i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;kollots=kollots+1;if(OrderStopLoss()<=0) nets=nets+1; if(OrderTakeProfit()<=0) netp=netp+1;
if((OrderType()==OP_BUY)){lots=lots+OrderLots();}
if((OrderType()==OP_SELL)){lots=lots-OrderLots();}
}
Comment("Общий объем: "+ DoubleToStr(lots,2));
}

¿CORRECTO?

 
Elektronik:



hacerlo así

//+------------------------------------------------------------------+
//|                                                     lots_kol.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  GetAmountLotFromOpenPos(); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  Comment("Количество лотoв                ",l);
  return(l);
}

так сделай

 

Buenas tardes, señores.

Soy principiante y tengo una pregunta: ¿cómo puedo optimizar mi robot correctamente?

Sé qué botones y casillas tengo que pulsar para ejecutar un comprobador de estrategias.

Me pregunto, ¿cómo averiguar para qué periodo optimizarlo? ¿Cómo averiguar cuánto tiempo funcionará "bien" el EA?

¿Cómo podemos calcularlo? No sólo puede funcionar el método de la perspicacia...

 
impus:

Buenas tardes, señores.

Soy principiante y tengo una pregunta: ¿cómo puedo optimizar mi robot correctamente?

Sé qué botones y casillas tengo que pulsar para ejecutar un comprobador de estrategias.

Me pregunto, ¿cómo averiguar para qué periodo optimizarlo? ¿Cómo averiguar cuánto tiempo funcionará "bien" el EA?

¿Cómo podemos calcularlo? No sólo puede funcionar el método de la perspicacia...

Busca en tu buscador local "pruebas de avance" o "OOS". Se ha discutido muchas veces.
 
impus:

Buenas tardes, señores.

Soy principiante y tengo una pregunta: ¿cómo puedo optimizar mi robot correctamente?

Sé qué botones y casillas tengo que pulsar para ejecutar un comprobador de estrategias.

Me pregunto, ¿cómo averiguar para qué periodo optimizarlo? ¿Cómo averiguar cuánto tiempo funcionará "bien" el EA?

¿Cómo podemos calcularlo? No sólo puede funcionar el método de la perspicacia...

Si no entiendes cómo optimizar un EA, no hagas la optimización, sino que resuelve tu TS, y averigua qué parámetros hay que optimizar.
 
Reshetov:
Busca en tu buscador local "pruebas de avance" o "OOS". Se ha discutido muchas veces.
Gracias. Lo investigaré.
 
impus:

Buenas tardes, señores.

Soy principiante y tengo una pregunta: ¿cómo puedo optimizar mi robot correctamente?

Sé qué botones y casillas hay que pulsar para ejecutar el probador de estrategias.

Me pregunto, ¿cómo averiguar para qué periodo optimizarlo? ¿Cómo averiguar cuánto tiempo funcionará "bien" el EA?

¿Cómo podemos calcularlo? No sólo puede funcionar el método de la perspicacia...

Véanse las referencias (de mi (séptimo en la página) puesto) aquí, en particular: "Robert Pardo "Desarrollo, prueba y optimización de sistemas de negociación para el operador de bolsa".
 

Hola.

Me pueden decir qué cambios hay que hacer en el código. Quiero que el histograma muestre sólo los valores de las barras bajistas.

El propio indicador https://www.mql5.com/ru/code/8920

int start()
{
    if (OpenTime != iOpen(Symbol(), PERIOD_M1, 0))
    {
        OpenTime = iOpen(Symbol(), PERIOD_M1, 0);

        int n, MaxVolume;
        double max = iHigh(Symbol(), PERIOD_M1, iHighest(Symbol(), PERIOD_M1, MODE_HIGH, MinutesCount, 0));
        double min = iLow(Symbol(), PERIOD_M1, iLowest(Symbol(), PERIOD_M1, MODE_LOW, MinutesCount, 0));
        int items = MathRound((max-min) / PricePoint);

        if (max == 0)
        {
            Alert("There is no minutes data. Please download M1.");
            return (0);
        }

        ArrayResize(Hist, items);      
        ArrayInitialize(Hist, 0);
        for (int i = 1; i <= MinutesCount; i++)
        {
            n = MathRound((iClose(Symbol(), PERIOD_M1, i)-min) / PricePoint);
            Hist[n] += (iVolume(Symbol(), PERIOD_M1, i));    
        }

        MaxVolume = Hist[ArrayMaximum(Hist)];
        DeleteObjects();
        for (i = 0; i <= items; i++)
        {
            DrawLine(i, min + i*PricePoint, Hist[i], MaxVolume);
        }
    }
        return(0);
}
Razón de la queja: