Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 367

 
Artyom Trishkin:

Honestamente, nunca usei estes recursos da SB. Mas o que o impede de olhar na SB onde, por quais métodos, as cores são definidas. O que você mostrou na lista:

- são nomes de objetos - classes CPanel, CEdit, CBmpButton e CWndClient.

E você precisa encontrar nomes de membros dessas classes onde as cores são armazenadas e usar quais métodos podem ser inicializados ou alterados.

E provavelmente você terá que inicializá-los primeiro e depois construir o próprio objeto.

As cores são definidas em Defines e depois os objetos são coloridos através de ObjectSetInteger(). Por enquanto, também estou pintando diretamente com este método. Mas eu gostaria de tentar através do OOP. Como vejo, se não houver um método público separado para modificar, não há como chegar até o membro privado. Não sou muito versado em herança e métodos virtuais, ainda estou "nadando" e estudando o assunto. Ok, vou tentar pedir ao serviço de assistência técnica para fazer um método público de coloração, e se for possível fazê-lo de outra forma, talvez eles me digam como.
 
LRA:
Clique na mensagem de erro. O cursor indicará o nome da variável. Precisa ser declarado
Obrigado!
 
Kedrov:
Obrigado!

Você não deve postar código descompilado neste fórum. Eu entendo que você não postou código, apenas uma foto. Mas isso significa que você está trabalhando com produtos de software roubados. Isto aqui é fortemente desencorajado - é... como hei-de dizer... uma violação da ética comunitária. Aqui no fórum e nos recursos a maior parte dos usuários do fórum são programadores - nós escrevemos nosso próprio código ou usamos obras públicas de nossos colegas. Mas você usa e refaz o código roubado de outra pessoa (talvez outra pessoa também esteja aqui). Em geral, não é uma boa idéia iniciar suas atividades aqui.

 
Vasiliy Pushkaryov:
As cores são definidas em Defines, depois os objetos são coloridos usando as funções ObjectSetInteger(). No momento, também estou pintando diretamente com este método. Mas eu gostaria de tentar através do OOP. Como vejo, se não houver um método público separado para modificar, não há como chegar até o membro privado. Não sou muito versado em herança e métodos virtuais, ainda estou "nadando" e estudando o assunto. Ok, vou tentar pedir na área de serviço para fazer um método público para colorir, e se isso for possível de outra forma, talvez eles me digam como.

Temporariamente, copie esta classe para seu Incluir seu_folder e coloque nas variáveis de membro declasse que você precisa para armazenar as cores e métodos públicos para defini-las e devolvê-las.

Além disso - você poderá fazer o que já precisa. Menos - quando você atualiza a SB na classe original, pode haver aperfeiçoamentos, e você terá que copiar e colar novamente os métodos necessários para a classe atualizada.

... Bem, é estranho que não haja possibilidade de mudar a cor silenciosamente - sem definir ...

 

Como posso obter rapidamente informações sobre o volume (número de lotes totais) de todas as posições em aberto em todos os instrumentos? Por favor, compartilhe a função.

 
Aleksey Vyazmikin:

Como posso obter rapidamente informações sobre o volume (número de lotes totais) de todas as posições em aberto em todos os instrumentos? Por favor, compartilhe a função.


Função GetAmountLotFromOpenPos().

Esta função retorna a quantidade de muitas das posições em aberto. Uma seleção mais precisa das posições contadas é especificada por parâmetros externos:

  • sy- Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do símbolo especificado. O valor padrão -"" significa qualquer instrumento de mercado.NULL significa o instrumento atual.
  • op- Operação comercial, tipo de posição. Valores válidos:OP_BUY,OP_SELL ou-1. O valor padrão-1 significa qualquer posição.
  • mn- Identificador de posição, MagicNumber. O valor padrão-1 significa qualquer 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:

Obrigado.

 

Favor informar a seguinte pergunta: Zig-zag por limiar(em pontos, Alto(Baixo) são formados depois de passar n pontos, profundidade=Depth*Point). Há uma cadeia de pontos (ArrUp(ArrDn)) que mostra o desenho da adição do ziguezague, ou seja, o último ponto foi ArrUp, depois a profundidade é baixada e o primeiro ponto ArrDn é formado, depois dele uma série de pontos ArrDn, à medida que o preço desceu (desenho da adição). Temos que construir o algoritmo de tal forma que haja um indentação de profundidade. Talvez um loop, eu não consigo descobrir.

//+------------------------------------------------------------------+
//|                                                       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);
  }
//+------------------------------------------------------------------+
 

Olá a todos.

Ensine-me como parar a EA e começar quando uma nova vela aparece.

Razão: