Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 935

 

Este fallo parece ocurrir si hay otras órdenes en el mercado pero de diferente tamaño.

Supongamos que tenemos 4 ventas de 1 lote y 4 compras de 1 lote. Y 1 compra 0,5 lotes.

¿Cómo evitarlo? Creo que esta función necesita un bucle.

 
EgorKim:

Este fallo parece ocurrir si hay otras órdenes en el mercado pero de diferente tamaño.

Supongamos que tenemos 4 ventas de 1 lote y 4 compras de 1 lote. Y 1 compra 0,5 lotes.

¿Cómo evitarlo? Tal vez, debería haber un bucle en esta función.

No sé dónde está la "drubashka". Su especialidad es trabajar con la biblioteca estándar. No sé qué es lo que está eligiendo.

      if(m_position.SelectByIndex(i))

Y sería demasiado perezoso para resolverlo.

Yo habría enfocado la solución de forma un poco diferente. Crearía dos matrices con entradas de posición de compra y venta por separado y cerraría las posiciones en el segundo bucle por parejas.

O podemos crear un array bidimensional. Pero hay que estar muy atento al distribuir los índices. Para que no haya lagunas...

 
Alexey Viktorov:

En algún lugar el baterista ha desaparecido. Lo suyo es trabajar a través de la biblioteca estándar. No sé lo que está eligiendo.

Sí, y soy demasiado perezoso para resolverlo.

Yo habría enfocado la solución de forma un poco diferente. Yo crearía dos matrices con entradas de posición de compra y venta por separado y las cerraría en el segundo bucle por parejas.

O podemos usar un array bidimensional. Pero tengo que estar muy atento al distribuir los índices. Para que no haya lagunas...

Yo también lo he pensado. ¿Puedes compartir el código con dos matrices? No puedo hacerlo yo mismo.

Como solución temporal, he creado un bucle limitado. No sé si este código es correcto o no, pero puede ser algo. Es cierto que se cierra de forma extraña con la división de lotes.

Al parecer, incluso los volúmenes del contador deben compararse para evitar la división. Me rindo.

void CloseBy()
  {
   int s=10;
   do // цикл
     {
      s--;
      ulong ticket_buy=ULONG_MAX;
      ulong ticket_sell=ULONG_MAX;
      for(int i=0;i<PositionsTotal();i++) // ATTENTION! Here, specially began a detour with "0"
         if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ticket_buy==ULONG_MAX)
               ticket_buy=m_position.Ticket();

            if(m_position.PositionType()==POSITION_TYPE_SELL && ticket_sell==ULONG_MAX)
               ticket_sell=m_position.Ticket();
           }
      if(ticket_buy!=ULONG_MAX && ticket_sell!=ULONG_MAX)
         m_trade.PositionCloseBy(ticket_buy,ticket_sell);
     }
   while(s>1);// цикл
   return;
  }
 
EgorKim:

Yo mismo he pensado en ello. ¿Puedes compartir el código con dos matrices?

No, por varias razones.

1. Yo no utilizo el cierre del contador.

2. No existe un código preparado, ni tampoco se desea escribirlo especialmente.

3. Ayer tuve una idea así. Ayer tuve una idea así. Hoy tengo otro, y mañana, Dios no lo quiera, tendré otro. En consecuencia, sólo escribo lo que tengo en mente en ese momento.

Y la razón principal: creo que ayudar y hacer el trabajo de otro, son dos grandes diferencias.

Sólo puedo ayudar. Pero no puedo ayudarte, casi no uso la biblioteca estándar y para entender tu código, necesito entender el SB.

 

Hola a todos

¿Puedes darme un ejemplo de un indicador o función que permita crear un indicador que sólo muestre el resultado en el gráfico en un determinado rango o zona del gráfico?

Por ejemplo, de la 1:00 a las 2:35 hora terminal, Y esta elección debe hacerse con el ratón directamente en el gráfico.


Concretamente necesito contar el número de velas de Bai o de Venta en el rango seleccionado.

 
Milhail Novgorodcev:

Hola a todos

¿Puedes darme un ejemplo de un indicador o función que permita crear un indicador que sólo muestre el resultado en el gráfico en un determinado rango o zona del gráfico?

Por ejemplo, de la 1:00 a las 2:35 hora terminal, Y esta elección debe hacerse con el ratón directamente en el gráfico.


En concreto, necesito contar el número de velas de compra o venta en el rango seleccionado.

Lo primero que me vino a la mente:

  • una secuencia de comandos, dos parámetros de entrada - tiempo desde- y tiempo hasta-
  • se dibuja un rectángulo manualmente y el script debe ser lanzado con el nombre del rectángulo en los parámetros de entrada
  • un Asesor Experto o un indicador que rastrea la creación de un rectángulo con un nombre determinado ...

 
Milhail Novgorodcev:

Hola a todos

¿Puedes darme un ejemplo de un indicador o función que permita crear un indicador que sólo muestre el resultado en el gráfico en un determinado rango o zona del gráfico?

Por ejemplo, de la 1:00 a las 2:35 hora terminal, Y esta elección debe hacerse con el ratón directamente en el gráfico.


En concreto, necesito contar el número de velas de compra o venta en el rango seleccionado.

¿Cuál es el problema?

En OnChartEvent () seasigna a dos variables, asu vez, la hora del clic del ratón en dos puntos (no la hora actual, sino la hora de la barra sobre la que se ha hecho clic) y, siempre que ambas variables no sean cero, se calcula este rango. Después de la salida de estas variables, se ponen a cero y esperan el siguiente clic del ratón.

El único problema que veo es si el primer clic se hace por error, cómo deshacerlo. Pero, creo que es posible llegar a algo con cuidado después de leer la documentación. Por ejemplo, pulsar una tecla o desplazar la rueda del ratón...

 

¡Por favor, ayuda!

Cansado de arreglar el script para hacer capturas de pantalla en el historial. Se supone que el script se desplaza hasta las 8 de la mañana cada día y hace una captura de pantalla.

El script no funciona como debería.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ChartSetInteger(0,CHART_SHIFT,false);
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
   int _bars=Bars(Symbol(),0);
 
   for(int i=0; i<_bars; i++)
     {
      MqlDateTime time_now;
      //datetime candle_time=iTime(NULL,_period,0);
      TimeToStruct(iTime(NULL,_Period,i),time_now);  // change time to struct

      if(time_now.hour==8 && time_now.min==0)
        {
         //--- прокрутим на 10 баров вправо от начала истории 
         ChartNavigate(0,CHART_BEGIN,i);
         Sleep(5000);
         //--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
         long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
         Print(first_bar);
         string name=_Sumbol_N(string(Symbol()))+"_"+Symbol()+"_"+TFMigrate(Period())+" "+string(time_now.year)+"."+string(time_now.mon)+"."+string(time_now.day)+" "+string(time_now.hour)+"."+string(time_now.min);

         ChartScreenShot(0,name+" 2560_1600.PNG",2560,1600,ALIGN_LEFT);
         //i=5;
        };
     };

//Print(iTime(NULL,_Period,0));

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string _Sumbol_N(string ft)
  {
   if(ft ==  "EURUSD" ) return("01");
   if(ft ==  "GBPUSD" ) return("02");

   return "";
  }
//+------------------------------------------------------------------+
string TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return("CURRENT");
      case 1: return("M1");
      case 5: return("M5");
      case 15: return("M15");
      case 30: return("M30");
      case 60: return("H1");
      case 240: return("H4");
      case 1440: return("D1");
      case 10080: return("W1");
      case 43200: return("MN1");

     }
  }
//+------------------------------------------------------------------+
 
oleg360:

¡Por favor, ayuda!

Cansado de arreglar el script para hacer capturas de pantalla en el historial. Se supone que el script se desplaza hasta las 8 de la mañana cada día y hace una captura de pantalla.

El script no funciona como debería.

Hasta ahora, la función de desplazamiento funciona de forma errática (o más bien funciona de forma imprevisible). El administrador lo está solucionando.

 
Vladimir Karputov:

Hasta ahora, la función de desplazamiento funciona mal (o más bien funciona de forma imprevisible). El administrador lo está solucionando.

Gracias.

Razón de la queja: