[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 101

 
Zhunko:
Esclarecerão os comentários anteriores.
Obrigado
 

Olá a todos!

Por favor, ajude-me a entender este exemplo da cartilha MQL4. Este é o lugar:

Sublinhei em vermelho o que não entendo. Por que o IndicatorCounted() retorna 299 no Tick 3 ? A vela anterior não mudou desde a última chamada indicadora (Tick 2), e é a 300ª vela. Portanto, a função deve retornar 300.

E mais uma pergunta: você poderia me dizer se nesta foto Abrir o último bar é o preço que veio no Carrapato 2 ou no Carrapato 3 ?

Graças a todos, que não passarão pelo sofrimento :-))

 
Skander:

Olá a todos!

Ajude-me com um exemplo do tutorial da MQL4. Este é o lugar:

Sublinhei em vermelho o que eu não entendia. Por que o IndicatorCounted() irá retornar 299 no Tick 3 ? Afinal de contas

No tempo t2 a barra ainda não é considerada terminada, porque tecnicamente o período de tempo ainda não terminou. Não temos como determinar antecipadamente se este é o último tique da barra ou se haverá mais tiquetaques antes que a próxima barra comece. E conseqüentemente, o Indicador Contado retorna o que deve retornar de acordo com a documentação: o número de barras contadas no tempo t2 excluindo a barra zero (novamente no tempo t2), ou seja, 300-1=299.

 
alsu:

No tempo t2 a barra ainda não é considerada terminada, porque tecnicamente o período de tempo ainda não terminou. Não temos como determinar antecipadamente se este é o último tique da barra ou se haverá mais tiquetaques antes que a próxima barra comece. E conseqüentemente, o Indicador Contado retorna o que deve retornar de acordo com a documentação: o número de barras contadas no tempo t2 excluindo a barra zero (novamente no tempo t2), ou seja, 300-1=299.


Entendo o que você quer dizer: você descreve a situação no tempo t2, mas o livro didático diz que no tempo t3 a função Indicador Contado retorna o mesmo número que no tempo t2. Não está claro para mim, por que ele faz isso? Este fragmento aqui:

Ou a situação no momento t2 é descrita aqui?

 
Skander:

Entendo o que você quer dizer: você descreve a situação no tempo t2, mas o livro didático diz que no tempo t3 a função Indicador Contado retorna o mesmo número que no tempo t2. Não está claro para mim, por que ele faz isso? Este parágrafo aqui:

Ou a situação no momento t2 é descrita aqui?

Não, no tempo t3. A questão é que t3 é o primeiro tique de uma barra, e isso significa que, como ainda não foram feitos cálculos sobre ele, o valor de IndicatorCounted() ainda não teve tempo de mudar - isso só acontece após o início da função() terminar seu trabalho. Isto é bastante lógico - a função dá o número de barras calculadas, portanto não faz sentido alterar seu valor até que pelo menos uma marca da barra dada tenha sido calculada. Portanto, no momento t3, ainda vemos o valor 299, mas no próximo tick será 300.

É mais claro?

 
Pessoal, por favor, avisem o que é um arquivo de cabeçalho (MQH), ele pode ser criado no editor. A ajuda do editor não diz nada sobre isso.
 
Las-tochka:
Pessoal, digam-me o que é um arquivo de cabeçalho (MQH), ele pode ser criado no editor. A ajuda do editor não diz nada sobre isso.

Biblioteca Com funções, você pode criá-lo no MetaEditor, Bloco de Notas ...

A compilação não é necessária.A inclusão inclui as funções necessárias no especialista ao compilar, e a biblioteca ex4 daLibraries é compilada e importada (ou seja, constantemente acessa-a para os f-ms necessários).
 
Las-tochka:
O pessoal aconselha o que é, arquivo de cabeçalho (MQH), você pode criá-lo no editor. A ajuda do editor não diz nada sobre isso.


Acho que o arquivo de cabeçalho em MKL também vale a pena ver sob este ângulo:

como sabemos, não há aulas no idioma, mas isto é conveniente. Algum tipo de classe pode ser criado com um arquivo de cabeçalho. Nele, criamos um ambiente que descreve o objeto (variáveis) e define funções que irão funcionar com este ambiente. Bastante útil (assumindo que o projeto seja suficientemente complexo).

 
220Volt: Como você sabe, não há aulas no idioma, mas é conveniente. Você pode criar alguma semblante de uma classe usando um arquivo de cabeçalho. Nele, criamos um ambiente que descreve o objeto (variáveis) e define funções que irão funcionar com este ambiente. Bastante conveniente (desde que o projeto seja bastante complexo).

Você poderia ser um pouco mais específico? Você poderia me dar um exemplo, por favor?

Para um iniciante como Las-tochk'i, estas suas cartas inteligentes não dizem absolutamente nada.

 
Mathemat:

Você pode ser mais específico? Por favor, dê-nos um exemplo de algum tipo.

Para um iniciante como Las-tochk' i, estas suas cartas inteligentes não dizem absolutamente nada.

Eu não acho que alguém estaria interessado em pesquisar o código de outra pessoa, um exemplo de tal classe:

//+------------------------------------------------------------------+
//|                                                  WaveCounter.mq4 |
//|                                                             Паха |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Паха"

#define wC_SHADECOLOR   C'121,0,0'
#define wC_NAMEPART  "WaveCounter"
//#define NEW_LINE_COLOR  DarkKhaki
#define NEW_LINE_STILE  2
#define NEW_LINE_RAY 0
#define SCARP_LINE_STILE   1
//#define SCARP_LINE_COLOR White

#include <WaveCounterCore.mqh>
///////////////////////////////////////////////////////////////////// Var
string wC_sName = "";
int wC_iTimeframe;
int wC_iDirection;
bool wC_bFirst;
int iwC_iLockBar;
double wC_dSizePorog[][2];
//------------------------ rez
int wC_iMoveBar[2];
double wC_dMovePrice[2];
bool wC_bScarp;
int wC_iStop;
/////////////////////////////////////////////////////////////////////
/*
//-------------------------------------------------- private
bool wC_vn_getWaveSizeArray();
//-------------------------------------------------- public
string wC_Create(bool bSizeFilter,
                  bool bAddToExtr);
bool wC_Check(string &sName, 
               bool bFromBegin, 
               bool bFirst);
bool wC_IsScarp();
int wC_IsStop();
bool wC_Redraw();
*/
/////////////////////////////////////////////////////////////////////

string wC_Create(bool bSizeFilter,
                  bool bAddToExtr)
   {
   //----
   string sShadeName[2] = {"wC_Shade1", "wC_Shade2"};
   
   //--//
      if(ObjectFind(sShadeName[0]) < 0)
         {
         Shade_create( sShadeName[0], wC_SHADECOLOR );
         return("");
         }
      
      if(ObjectFind(sShadeName[1]) < 0)
         {
         Shade_create( sShadeName[1], wC_SHADECOLOR );
         return("");
         }
   //--\\
   
   if( ! Shade_attach(sShadeName, false) ) 
      return("");      
   if( ! Shade_direction(wC_iDirection, 0, 1) )
      return("");
   if( ! Shade_minTimeframe(0) )
      return("");
   wC_iTimeframe = Shade_getTimeframe();
   int iCorrectIndex[2] = {0, 1};
   Shade_correctKoord(iCorrectIndex); 
   
   datetime datPoint0;
   double dPoint0, dPoint1;
   if(wC_iDirection == 2)
      {
      if( ! Shade_getPointTimePrice(0, CONTMOV1,  false, datPoint0, dPoint0) )
         return("");
      }
   else
      {
      if( ! Shade_getPointTimePrice(0, CONTMOV1,  true, datPoint0, dPoint0) )
         return("");
      } 

   if(bSizeFilter)
      {
      if( ! wC_vn_getWaveSizeArray() )
         return("");
         
      int iIndexPoroga[1];
      if( ! MyInputBox("Индекс порога", iIndexPoroga) )
         return("");
      if( iIndexPoroga[0] < 0  || iIndexPoroga[0] + 1 > ArrayRange(wC_dSizePorog, 0) )
         {
         Alert("Недопустимый индекс");
         return("");
         }
         
      if(wC_iDirection == 2)
         dPoint1 = dPoint0 + wC_dSizePorog[ iIndexPoroga[0] ][0] * dPoint0;
      else
         dPoint1 = dPoint0 - wC_dSizePorog[ iIndexPoroga[0] ][0] * dPoint0;
      iwC_iLockBar = MYEMPTY;
      }
   else
      {
      if(wC_iDirection == 2)
         {
         if( ! Shade_getPoint(1, CONTMOV2, true, iwC_iLockBar) )
            return(false);
         dPoint1 = iHigh(NULL, wC_iTimeframe, iwC_iLockBar);
         }
      else
         {
         if( ! Shade_getPoint(1, CONTMOV2, false, iwC_iLockBar) )
            return(false);
         dPoint1 = iLow(NULL, wC_iTimeframe, iwC_iLockBar); 
         }
      if(dPoint1 == 0)
         return(false);
      if(bAddToExtr)
         iwC_iLockBar --;
      }

   if( ! Fun_partOfName(wC_sName) )
      return("");   
   wC_sName = StringConcatenate(wC_sName, wC_NAMEPART);
   
   if( ! ObjectCreate(wC_sName, OBJ_TREND, 0, datPoint0, dPoint0, datPoint0, dPoint1) )
      return("");
   if( ! ObjectSetText(wC_sName, "2") )
      return("");
   if( ! ObjectSet(wC_sName, OBJPROP_RAY, NEW_LINE_RAY) )
      return("");
   if( ! ObjectSet(wC_sName, OBJPROP_COLOR, Fun_ColorFromPanel()) )
      return("");
   if( ! ObjectSet(wC_sName, OBJPROP_STYLE, NEW_LINE_STILE) )
      return("");
   
   Fun_deleteObjects(sShadeName);
   return(wC_sName); 
   }
//--------------------------------------------------

bool wC_vn_getWaveSizeArray()
   {
   static bool bSizePorogInit = false;
   if(bSizePorogInit)
      return(true);
   string sSymbol = Symbol();
   if( sSymbol == "USDCHF" )
      {
      if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeUSDCHF, 0)) < 0)
         return(false);
      if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeUSDCHF) < 1)
         return(false);
      bSizePorogInit = true;
      return(true);
      }
         
   if( sSymbol == "AUDJPY" )
      {
      if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeAUDJPY, 0)) < 0)
         return(false);
      if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeAUDJPY) < 1)
         return(false);
      bSizePorogInit = true;
      return(true);
      }
         
   if( sSymbol == "EURUSD" )
      {
      if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeEURUSD, 0)) < 0)
         return(false);
      if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeEURUSD) < 1)
         return(false);
      bSizePorogInit = true;
      return(true);
      }
         
   if( sSymbol == "EURGBP" )         
      {
      if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeEURGBP, 0)) < 0)
         return(false);
      if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeEURGBP) < 1)
         return(false);
      bSizePorogInit = true;
      return(true);
      }
     
   if( sSymbol == "EURJPY" )           
      {
      if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeEURJPY, 0)) < 0)
         return(false);
      if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeEURJPY) < 1)
         return(false);
      bSizePorogInit = true;
      return(true);
      }
         
   if( sSymbol == "GBPUSD" )            
      {
      if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeGBPUSD, 0)) < 0)
         return(false);
      if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeGBPUSD) < 1)
         return(false);
      bSizePorogInit = true;
      return(true);
      }
         
   if( sSymbol == "USDCAD" )            
      {
      if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeUSDCAD, 0)) < 0)
         return(false);
      if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeUSDCAD) < 1)
         return(false);
      bSizePorogInit = true;
      return(true);
      }
         
   if( sSymbol == "USDJPY" )            
      {
      if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeUSDJPY, 0)) < 0)
         return(false);
      if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeUSDJPY) < 1)
         return(false);
      bSizePorogInit = true;
      return(true);
      }
         
   if( sSymbol == "AUDUSD" )            
      {
      if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeAUDUSD, 0)) < 0)
         return(false);
      if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeAUDUSD) < 1)
         return(false);
      bSizePorogInit = true;
      return(true);
      }
      
   Alert("У символа нет размерного массива, или он не прописан в функции Tl_vn_getWaveSizeArray()");
   return(false);
   }
//--------------------------------------------------

bool wC_Check(string &sName, 
               bool bFromBegin, 
               bool bFirst)
   {
   if(StringFind(sName, wC_NAMEPART) == -1)
      return(false);
   wC_bScarp = false;
   wC_iStop = -1;
   wC_sName = sName;
   string sDescrip = ObjectDescription(sName);
   int iID = StrToInteger(sName);
   if(iID == 0)
      return(false);
      
   datetime datLastTime;
   if(sDescrip == "1"  &&  ! bFirst)
      {
      datLastTime = FL_LastTime();
      if(datLastTime == -1)
         datLastTime = MYEMPTY;
      if( ! tlC_Load(iID, datLastTime) )
         return(false);
      wC_bFirst = false;
      if(bFromBegin)
         if( ! tlC_SeekToBegin())
            return(false);
      }
   else
      {
      if(sDescrip == "2"  &&  bFirst)
         {
         int iBeginBar = iBarShift(NULL, wC_iTimeframe, ObjectGet(sName, OBJPROP_TIME1), true);
         if(iBeginBar == -1)
            return(false);
         datLastTime = FL_LastTime();
         if(datLastTime == -1)
            datLastTime = MYEMPTY;
         if( ! tlC_Attach(iID, wC_iDirection, wC_iTimeframe, iBeginBar, ObjectGet(sName, OBJPROP_PRICE2), iwC_iLockBar, datLastTime) )
            return(false); 
         if(iwC_iLockBar != MYEMPTY)
            tlC_SetStops(false, MYEMPTY);
         wC_bFirst = true;
         }
      else
         return(false);
      }
   
   if( ! tlC_Check() )
      return(false);
      
   wC_bScarp = tlC_IsScarp();
   wC_iStop = tlC_IsStop();
   tlC_GetCurView(wC_iMoveBar, wC_dMovePrice);
   if(wC_bScarp)
      {
      int iTempVar;
      double dTempVar;
      tlC_GetCurPos(iTempVar, dTempVar);
      wC_iMoveBar[1] = iTempVar;
      wC_dMovePrice[1] = dTempVar;
      }
   
   return(true);
   }
//--------------------------------------------------

bool wC_IsScarp()
   {
   return(wC_bScarp);
   }
//--------------------------------------------------

int wC_IsStop()
   {
   return(wC_iStop);
   }
//--------------------------------------------------


  
Razão: