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

 
HELLO PEOPLE ! Ajude POR FAVOR a ter um informante, ele precisa ser REMOVIDO ... Posso fazer para contar o lucro líquido, sem trocas, comissões? Muito obrigado de antemão
Arquivos anexados:
 
ANDREY:

Bom dia a todos!
Pergunta sobre a declaração for() em mql4. O cabeçalho deste operador aumenta ou diminui gradualmente o valor de algumas variáveis

for(int A=14; A>=0;A--) ou for(int A=0; A<14;A++) ou for(int A=0; A<14;A=+2) Os tamanhos das variáveis A aumentam, ou diminuem, sempre os mesmos nos exemplos dados 1 ou 2.

PERGUNTA: Se uma variável é um valor de tempo (1 (minuto),5,15,30,60,240,1440), é óbvio que os tamanhos de aumentar ou diminuir esta variável não podem ser iguais. Neste caso, como formatar o cabeçalho para que a variável A comece com 1 e depois seja incrementada a cada iteração pelo número necessário de minutos, de forma não uniforme.

O exemplo com a variável A é um caso especial. Em geral, como posso formatar um loop se a variável no cabeçalho do loop precisa ser alterada de forma não uniforme nos intervalos desejados?
Ou há algum outro operador a ser usado para estes casos? Mas, como me parece que outros operadores são muito volumosos em comparação com o for. Por favor, me ajude a resolver meu problema exatamente com a ajuda de para declaração , e exatamente com seu cabeçalho. Porque para resolver meu problema dentro do corpo de para declaração , é claro, você pode usar se declarações, mas será muito complicado epara declaraçãoterá que fazer 1440 iterações por causa da filtragem de 7 valores corretos.
Obrigado.

Há aqui um erro. Deve ser para(int A=0; A<14;A+=2)

A coisa mais fácil que posso pensar é colocar os períodos na matriz

ENUM_TIMEFRAMES per[] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1};
/********************Script program start function*******************/
void OnStart()
 {
  for(int i = 0; i < ArraySize(per); i++)
   {
    Print(EnumToString(per[i]));
   }
 }/******************************************************************/

/*****************************End program****************************/


 
Alexey Viktorov:

A coisa mais fácil de se pensar é marcar os períodos em uma série

Obrigado, eu também poderia usá-lo)

 
Alexey Viktorov:

Há aqui um erro. Deve ser para(int A=0; A<14;A+=2)

A coisa mais fácil que posso pensar é armazenar os períodos em uma matriz


Muito obrigado pela dica. Acabou sendo muito mais simples do que eu pensava.
Eu não entendo apenas uma coisa. O nome da matriz é per. E ENUM_TIMEFRAMES é um identificador de um tipo de variável? Não encontrei tal identificador na referência mql4. Há apenas

Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
 
ANDREY:

Muito obrigado pela dica. Acabou sendo muito mais fácil do que eu pensava.
Só há uma coisa que eu não entendi. O nome da matriz por. E ENUM_TIMEFRAMES é um identificador do tipo de variável? Não encontrei tal identificador na referência mql4. Há apenas

aqui

Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
 
MakarFX:

aqui

Eu entendi corretamente que você me enviou informações sobre o mql 5 ? Ou esta informação também se aplica ao mql 4 ?

 
ANDREY:

Eu entendi corretamente que você me enviou informações sobre o mql 5? Ou esta informação também se aplica ao mql 4 ?

Eu corrigi isso.
 
MakarFX:
Eu corrigi isso.

Obrigado.

 
ANDREY:

Obrigado.

Pequena recomendação: Acostume-se imediatamente ao ENUM_TIMEFRAMES e esqueça a representação numérica como número de minutos.

Primeiro PERÍODO_W1 é mais informativo que 10080, é mais claro que é uma semana.

Em segundo lugar, em mql5 o período não corresponde ao número de minutos e não será um problema desnecessário durante a migração para mql5, e é inevitável.

Bem, se você realmente precisa do número de minutos em um período, então você pode

int  PeriodSeconds( 
   ENUM_TIMEFRAMES  period=PERIOD_CURRENT      // период графика 
   );
Print(PeriodSeconds(PERIOD_W1)/60); // = 10080
 
Pessoal, ajudem-me a anexar um alerta ao indicador.
#property copyright "Subu"
#property link      "http://www.google.com"
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_chart_window

double UpArrow[];
double DownArrow[];
extern int ShiftArrow = -2;
extern bool FilterBullBearCandle = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, UpArrow);
   SetIndexEmptyValue(0,0.0);
   SetIndexShift(0,ShiftArrow);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, DownArrow);
   SetIndexEmptyValue(1,0.0);
   SetIndexShift(1,ShiftArrow);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit, i, counter;
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
//----
    for(i = 0; i <= limit; i++) {
      DownArrow[i] = 0;
      UpArrow[i] = 0;
   if(High[i+2]>High[i+1] && Low[i+2]>Low[i+1] && High[i+2]>High[i+3] && Low[i+2]>Low[i+3])
      if( Open[i+1]>Close[i+1] && Close[i+2] > Close[i+1])
         if(FilterBullBearCandle)
            {
               if( Open[i+2]>Close[i+2])
                  DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
             }
         else
             DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
   if(High[i+2]<High[i+1] && Low[i+2]<Low[i+1] && High[i+2]<High[i+3] && Low[i+2]<Low[i+3])
      if( Open[i+1]<Close[i+1] && Close[i+2] < Close[i+1])
          if(FilterBullBearCandle)
            {
               if( Open[i+2]<Close[i+2] ) 
                  UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
                  
            }
         else
            UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
            
      }
//----
   return(0);
  }
Razão: