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

 
vladzeit:

Gracias por el ejemplo.

¿Podría aclarar...? si he entendido bien.

Con esto=(datetime)OrderGetInteger. estamos diciendo a OrderGetInteger que tome el tipo defechaexplícita. ?

¿Esta regla se aplica a todas las funciones que no tienen un tipo explícito o no coinciden con el tipo de la variable que se asigna? ¿O es sólo un caso especial?

Quiero entender si esto es una regla o sólo hay que recordarlo como un caso especial.

No es un caso especial. Si escribe un valor de un tipo diferente en una variable de un tipo, el compilador le advertirá de ello. Y es usted quien decide de qué variable tomar los datos.

En su caso - cuando se devuelve un valor de fecha-tiempo explícito desde una función con el tipo long, por supuesto, es seguro y debe especificar explícitamente el tipo de valor que obtiene de la función.

Pero si se toma un valor doble en la variable int, entonces se debe entender si los datos no se perderán por tal asignación. Si sabes con seguridad que el valor de retorno cabrá en int, entonces especifica int explícitamente, si no lo sabes, entonces tómalo como una variable double.

 
Artyom Trishkin:

No es un caso especial. Si escribe un valor de otro tipo en una variable de un tipo, el compilador le advertirá de ello. Y es usted quien decide de qué variable tomar los datos.

En tu caso - cuando devuelves un valor de fecha-tiempo explícito desde una función con el tipo long, es por supuesto seguro y debes especificar explícitamente el tipo del valor que obtienes de la función.

Pero si se toma un valor doble en la variable int, entonces se debe entender que no se perderá ningún dato durante dicha asignación. Si sabes con seguridad que el valor devuelto cabe en int, especifica int explícitamente, si no lo sabes, llévalo a una variable double.

Gracias por su detallada respuesta. Lo tengo.

 

(Buenas tardes a todos)))


Ya domino la MT4, pero la MT5 .... no la entiendo((( No hay muchos ejemplos, y los que hay no explican lo que necesito.

Por favor, aconsejen cómo usar MT5 con algunos ejemplos del código de MT4 o denme algunos enlaces a los indicadores con casos similares.


1.

if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)


2.

while(A<1)
  {
   ObjectDelete("MB");
   OP=iOpen(NULL,Timeframe,br);
   CL=iClose(NULL,Timeframe,br);
 if(OP>CL)
   bear=(OP-CL)/_Point;
 if(SizeCandles*FactorCandleы <= bear)
   A=2;
 if(br>iBars(NULL,Timeframe))
  {
   Lab("MB", " No Bear candle", 4, 510, 1, clrWhite);
   break;
  }
   br++;
  }


3. No entiendo cómo hacer la comparación de elementos con el mango de iMa... ¡¡¡Sé de estructuras!!! Lo he probado, pero MT5 no es tan claro como MT4...

   
 for(int i=limit; i>0 && !IsStopped(); i--)
   {
   ma1=iMA(NULL,Period(),Ma1,0,MAMethod1,MAPrice1,i);
   ma2=iMA(NULL,Period(),Ma2,0,MAMethod2,MAPrice2,i);
   ma3=iMA(NULL,Period(),Ma3,0,MAMethod3,MAPrice3,i);
   ma4=iMA(NULL,Period(),Ma4,0,MAMethod4,MAPrice4,i);
   MA=iMA(NULL,Period(),MAPeriod,0,MAMethod,MAPrice,i);
//----
 if(filtercase==true && xPer==Period())
  {
//--- High signal
 if(Open[i]<Close[i] && MA>Open[i] && MA<Close[i] && ma1>ma2 && ma1<ma3 && MA<ma4)  
   ExtLineBuffer1[i]=High[i]+shiftmap*_Point;
 if(ShowPeriod==false && xPeriod==Period())
   ExtLineBuffer1[i]=0.0;
//--- Low signal
 if(Open[i]>Close[i] && MA<Open[i] && MA>Close[i] && ma1<ma2 && ma1>ma3 && MA>ma4)  
   ExtLineBuffer2[i]=Low[i]-shiftmap*_Point;
 if(ShowPeriod==false && xPeriod==Period())
   ExtLineBuffer2[i]=0.0;
  } 
 

¡Las diferencias generales de programación en MT5 ya se entienden! Pero aún no sé programar (los dados no suman)))))

Es importante que escuche en mi cabeza estas partes y módulos de MT5.... Entiendo la lógica rápidamente en MT4, pero MT5 sólo "cubica" ....

Gracias por los consejos)))

 
Por favor, cambien el lote fijo de mi robot por un lote en %. El código está en mi mensaje privado.
 
Sprut112:
Por favor, cambien el lote fijo de mi robot por un lote en %. Código en privado.

Por cuenta propia.

 
kopeyka2:

(Buenas tardes a todos)))


Ya domino la MT4, pero la MT5 .... no la entiendo((( No hay muchos ejemplos, y los que hay no explican lo que necesito.

Por favor, aconsejen cómo usar MT5 con algunos ejemplos del código de MT4 o denme algunos enlaces a los indicadores con casos similares.


1.


2.


3. No entiendo cómo hacer la comparación de elementos con el mango de iMa... ¡¡¡Sé de estructuras!!! Lo he probado, pero MT5 no es tan claro como MT4...

¡Las diferencias generales de programación en MT5 ya se entienden! Pero aún no sé programar (los dados no suman)))))

Es importante que escuche en mi cabeza estas partes y módulos de MT5.... Entiendo la lógica rápidamente en MT4, pero MT5 sólo "dice"....

Gracias por los consejos)))

En primer lugar, lea atentamente la documentación. La sección"Acceso a series temporales e indicadores".

Debe quedar claro cómo obtener la hora, "ponerla" en la estructura, y luego obtener la hora y los minutos por separado.

También existe CopyBuffer para obtener los valores de los indicadores por su mango.

Si todavía tiene preguntas...


 
kopeyka2:

(Buenas tardes a todos)))


Ya domino la MT4, pero la MT5 .... no la entiendo((( No hay muchos ejemplos, y los que hay no explican lo que necesito.

Por favor, aconsejen cómo usar MT5 con algunos ejemplos del código de MT4 o denme algunos enlaces a los indicadores con casos similares.


1.


2.


3. No entiendo cómo hacer la comparación de elementos con el mango de iMa... ¡¡¡Sé de estructuras!!! Lo he probado, pero MT5 no es tan claro como MT4...

¡Las diferencias generales de programación en MT5 ya se entienden! Pero aún no sé programar (los dados no suman)))))

Es importante que escuche en mi cabeza estas partes y módulos de MT5.... En MT4 entiendo la lógica rápidamente, pero MT5 sólo "cubica" ....

Gracias por los consejos)))

Si necesita comparar varias series de tiempo de un mismo marco temporal, trabaje con un array comoMqlRates-> y utiliceCopyRates para llenar este array.

Es conveniente almacenar la hora en una estructuraMqlDateTime-> utilizarTimeToStruct para convertir la hora dedatetime a la estructuraMqlDateTime.

Ahora su ejemplo 1 se verá así:

//+------------------------------------------------------------------+
//|                                                      Test_en.mq5 |
//+------------------------------------------------------------------+
#property script_show_inputs
//--- input parameters
int InpBarTime=3; // Bar where we compare the time
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);

   int start_pos  =0;                           // start position 
   int count=(InpBarTime<10)?10:InpBarTime+1;   // data count to copy 

   int result=CopyRates(Symbol(),Period(),start_pos,count,rates);
   if(result!=count)
     {
      Print("Ordered: ",IntegerToString(count),", received ",IntegerToString(result));
     }

//--- example 1
// if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)
   MqlDateTime SDateTime;
   TimeToStruct(rates[InpBarTime].time,SDateTime); // Converts a value of datetime type into a structure variable MqlDateTime
   if(Period()<=PERIOD_H4 && SDateTime.hour==0 && SDateTime.min==0)
     {

     }
  }
//+------------------------------------------------------------------+
Archivos adjuntos:
Test_en.mq5  3 kb
 
Por favor, dígame si hay una norma.
En mql5 una misma tarea puede resolverse de muchas maneras.
Si me refiero a una instancia de una clase en un código, por ejemplo CSymbolInfo. m_symbol.Ask()... y así sucesivamente.
y en el mismo código asigno un valor Ask sin referencia a la clase, por ejemplo
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);

Pregunta: ¿esto provoca errores o es normal dentro de los límites de un código o incluso de una función?

 
kopeyka2:

(Buenas tardes a todos)))


Ya domino la MT4, pero la MT5 .... no la entiendo((( No hay muchos ejemplos, y los que hay no explican lo que necesito.

Por favor, aconsejen cómo usar MT5 con algunos ejemplos del código de MT4 o denme algunos enlaces a los indicadores con casos similares.


1.


2.


3. No entiendo cómo hacer la comparación de elementos con el mango de iMa... ¡¡¡Sé de estructuras!!! Lo he probado, pero MT5 no es tan claro como MT4...

¡Las diferencias generales de programación en MT5 ya se entienden! Pero aún no sé programar (los dados no suman)))))

Es importante que escuche en mi cabeza estas partes y módulos de MT5.... En MT4 entiendo la lógica rápidamente, pero MT5 sólo "cubica" ....

Gracias por los consejos)))

Trabajar con indicadores - utilizando el código deMA Force como ejemplo

Paso 1: a nivel global del programa declarar la variable handle_iMA, que almacenará el indicador handle

int    handle_iMA;                           // variable for storing the handle of the iMA indicator

Paso 2: crear un indicador en OnInit() y devolver la variablehandle_iMA

//--- create handle of the indicator iMA
   handle_iMA=iMA(m_symbol.Name(),Inp_MA_period,Inp_MA_ma_period,Inp_MA_ma_shift,
                  Inp_MA_ma_method,Inp_MA_applied_price);
//--- if the handle is not created 
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(Inp_MA_period),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }

Paso 3: hacer una petición en OnTick() - copiar una cierta cantidad de datos(conteo) del indicador en el arrayma[]

   double ma[],force[];
   ArraySetAsSeries(ma,true);
   ArraySetAsSeries(force,true);
   int start_pos=0,count=InpTrendBars+3;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma) || 
      !iGetArray(handle_iForce,0,start_pos,count,force))
     {
      PrevBars=0;
      return;
     }

Paso 4: trabajar con la matriz de datos del indicador y comparar sus elementos:

   bool trend_up=(ma[1]>ma[2]);
   bool trend_down=(ma[1]<ma[2]);
 
vladzeit:
Por favor, dígame si hay una norma.
En mql5 una misma tarea puede resolverse de muchas maneras.
Si me refiero a una instancia de una clase en un código, por ejemplo CSymbolInfo. m_symbol.Ask()... y así sucesivamente.
y en el mismo código asigno un valor Ask sin referencia a la clase, por ejemplo
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);

Pregunta: ¿esto provoca errores o es normal dentro de los límites de un código o incluso de una función?

Es mejor no confundirse y utilizar un solo enfoque: la clase comercialCSymbolInfo o las funciones del sistema como SymbolInfoXXXX.

Razón de la queja: