Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 367

 
Artyom Trishkin:

Sinceramente, nunca he utilizado estos recursos de SB. Pero lo que le impide mirar en el SB donde allí, por qué métodos, se fijan los colores. Lo que ha mostrado en el listado:

- son nombres de objetos - clases CPanel, CEdit, CBmpButton y CWndClient.

Y necesitas encontrar los nombres de los miembros de estas clases donde se almacenan los colores y usar qué métodos pueden ser inicializados o cambiados.

Y probablemente tendrás que inicializarlos primero y luego construir el objeto mismo.

Los colores se definen en Defines, y luego los objetos se colorean a través de ObjectSetInteger(). Por ahora también estoy pintando directamente con este método. Pero me gustaría probarlo a través de OOP. Por lo que veo, si no hay un método público separado para modificar, no hay manera de llegar al miembro privado. Es que no estoy tan versado en la herencia y los métodos virtuales, todavía estoy "nadando" y estudiando el tema. Vale, intentaré pedir al servicio de atención al cliente que haga un método público para colorear, y si es posible hacerlo de otra manera, quizás me digan cómo.
 
LRA:
Haga clic en el mensaje de error. El cursor indicará el nombre de la variable. Es necesario declararlo
Gracias.
 
Kedrov:
Gracias.

No debes publicar código descompilado en este foro. Entiendo que no has puesto código, sólo una imagen. Pero significa que está trabajando con productos de software robados. Aquí se desaconseja encarecidamente, es... cómo decirlo... una violación de la ética comunitaria. Aquí en el foro y los recursos la mayor parte de los usuarios del foro son programadores - escribimos nuestro propio código o utilizamos las obras públicas de nuestros colegas. Pero tú usas y rehaces el código robado de otro (quizá también el de otro aquí). En general, no es una buena idea comenzar sus actividades aquí.

 
Vasiliy Pushkaryov:
Los colores se definen en Defines, luego los objetos se colorean usando las funciones ObjectSetInteger(). En este momento también estoy pintando directamente con este método. Pero me gustaría probarlo a través de OOP. Por lo que veo, si no hay un método público separado para modificar, no hay manera de llegar al miembro privado. Es que no estoy tan versado en la herencia y los métodos virtuales, todavía estoy "nadando" y estudiando el tema. Vale, intentaré pedir en service-desk que hagan un método público para colorear, y si es posible de otra manera, quizás me digan cómo.

Temporalmente, copie esta clase en su Carpeta_Incluida y ponga las variables miembro dela clase que necesite para almacenar los colores y los métodos públicos para establecerlos y devolverlos.

Además, podrás hacer lo que necesites. Minus - cuando se actualiza el SB en la clase original, puede haber refinamientos, y usted no los tiene y tiene que copiar y pegar los métodos que necesita en la clase actualizada de nuevo.

... Pues es extraño que no haya posibilidad de cambiar el color tranquilamente - sin define ...

 

Por favor, ayuda - ¿cómo puedo obtener rápidamente e información sobre el volumen (número de lotes en total) de todas las posiciones abiertas en todos los instrumentos? Por favor, comparta la función.

 
Aleksey Vyazmikin:

Por favor, ayuda - ¿cómo puedo obtener rápidamente e información sobre el volumen (número de lotes en total) de todas las posiciones abiertas en todos los instrumentos? Por favor, comparta la función.


Función GetAmountLotFromOpenPos().

Esta función devuelve la cantidad de lotes de las posiciones abiertas. La selección más precisa de las posiciones contadas se especifica mediante parámetros externos:

  • sy- Nombre del instrumento de mercado. Si se establece este parámetro, la función sólo tendrá en cuenta las posiciones del símbolo especificado. El valor por defecto -"" significa cualquier instrumento del mercado.NULL significa el instrumento actual.
  • op- Operación comercial, tipo de posición. Valores válidos:OP_BUY,OP_SELL o-1. El valor por defecto-1 significa cualquier posición.
  • mn- Identificador de posición, MagicNumber. El valor por defecto-1 significa cualquier identificador.

 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 
Vladimir Zubov:

Gracias.

 

Por favor, aconsejar la siguiente pregunta: Zig-zag por umbral(profundidad(en puntos, Alto(Bajo) se forman después de pasar n-puntos, profundidad=Profundidad*Punto). Hay una cadena de puntos (ArrUp(ArrDn)) que muestra el dibujo de adición del zigzag, es decir, el último punto fue ArrUp, luego se baja la profundidad y se forma el primer punto ArrDn, tras él una serie de puntos ArrDn, a medida que el precio bajaba (dibujo de adición). Tenemos que construir el algoritmo de tal manera que haya una sangría de profundidad. Tal vez un bucle for, no puedo entenderlo.

//+------------------------------------------------------------------+
//|                                                       FastZZ.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yurich"
#property link      "https://login.mql5.com/ru/users/Yurich"
//---
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Gold
#property indicator_color4 DodgerBlue
#property indicator_width3 3
#property indicator_width4 3

//--- input parameters
extern int  Depth=10;
//---
double zzH[],zzL[];
double depth;
int last,direction,pbars;
datetime lastbar;
double ArrUp[];
double ArrDn[];
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,zzH);
   SetIndexBuffer(1,zzL);
   SetIndexBuffer(2,ArrUp);
   SetIndexBuffer(3,ArrDn);
   SetIndexStyle(0,DRAW_ZIGZAG);
   SetIndexStyle(1,DRAW_ZIGZAG);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(2,159);
   SetIndexArrow(3,159);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits);
//----
   depth=Depth*Point;
   direction=1;
   last=0;
   pbars=0;
   lastbar=0;
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  {
   int limit=Bars-IndicatorCounted()-1;
   if(lastbar!=Time[0])
     {
      lastbar=Time[0];
      last++;
     }
   if(MathAbs(Bars-pbars)>1) { last=Bars-1; limit=last;}
   pbars=Bars;
//---
   for(int i=limit; i>0; i--)
     {
      bool set=false;
      zzL[i]=0;
      zzH[i]=0;
      ArrUp[i]=EMPTY_VALUE;
      ArrDn[i]=EMPTY_VALUE;
      //---
      if(direction>0)
        {
         if(High[i]>zzH[last])
           {
            zzH[last]=0;
            zzH[i]=High[i];
            ArrUp[i]=High[i];
            if(Low[i]<High[last]-depth)
              {
               if(Open[i]<Close[i])
                 {
                  zzH[last]=High[last];
                  ArrUp[last]=High[last];
                 }
               else direction=-1;
               zzL[i]=Low[i];
               ArrDn[i]=Low[i];
              }
            last=i;
            set=true;
           }
         if(Low[i]<zzH[last]-depth && (!set || Open[i]>Close[i]))
           {
            zzL[i]=Low[i];
            ArrDn[i]=Low[i];
            if(High[i]>zzL[i]+depth && Open[i]<Close[i])
              {
               zzH[i]=High[i];
               ArrUp[i]=High[i];
              }
            else direction=-1;
            last=i;
           }
        }
      else //direction<0
        {
         if(Low[i]<zzL[last])
           {
            zzL[last]=0;
            zzL[i]=Low[i];
            ArrDn[i]=Low[i];
            if(High[i]>Low[last]+depth)
              {
               if(Open[i]>Close[i])
                 {
                  zzL[last]=Low[last];
                  ArrDn[last]=Low[last];
                 }
               else direction=1;
               zzH[i]=High[i];
               ArrUp[i]=High[i];
              }
            last=i;
            set=true;
           }
         if(High[i]>zzL[last]+depth && (!set || Open[i]<Close[i]))
           {
            zzH[i]=High[i];
            ArrUp[i]=High[i];
            if(Low[i]<zzH[i]-depth && Open[i]>Close[i])
              {
               zzL[i]=Low[i];
               ArrDn[i]=Low[i];
              }
            else direction=1;
            last=i;
           }
        }
     }
//----
   zzH[0]=0;
   zzL[0]=0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Hola a todos.

Enséñame cómo parar el EA y arrancar cuando aparezca una nueva vela.