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

 
ANDREY:
¡Buenos días a todos!
Estoy probando este algoritmo en MT4 tester usando mql4. Necesito que la función Print() muestre el precio de la oferta en el registro con 5 (cinco) decimales. Pero sólo imprimiría 4 (cuatro) decimales. Por favor, díganme cómo solucionar mi error, si es que existe.
Aquí está mi código.
void OnTick()
{
Print("=======Bid ======= ",NormalizeDouble(Bid,Digits) );

}


Al mismo tiempo, si imprimo usando Print() el precio de apertura, y de cierre de la orden( por SL y TP), entonces Print() imprime el precio con 5(cinco) dígitos.
Gracias a todos por su ayuda.

DoubleToString(), no NormalizeDouble()

 
Igor Makanu:

Te dije que no me gustaba mi decisión (((

Demasiada pereza para escribir de nuevo.

Busca en Google "array find repetitions" - creo que encontrarás algo

enum EResult{Ok,AllocError};

template<typename T>
EResult GetRepeat(const T &arr[],T &ret[],uint count){
   int size=ArraySize(arr);
   if (ArrayResize(ret,size)!=size) return AllocError;
   int ii=0;
   for (int i=0;i<size;){
      T tmp=arr[i];
      uint repeatCount=1;
      while(++i<size&&arr[i]==tmp) ++repeatCount;
      if (repeatCount>=count) ret[ii++]=tmp;}
   return ArrayResize(ret,ii)==ii?Ok:AllocError;
}

void OnStart()
{
   int arr[]={1,2,4,4,4,55,55,7,7,7,7,7,8,9,77,66,66,66};
   int ret[];
   if (!GetRepeat(arr,ret,3)) ArrayPrint(ret);
} 
 
Artyom Trishkin:

DoubleToString(), no NormalizeDouble()

Muchas gracias por su apoyo informativo.

 
Colegas, si no es mucha molestia, por favor, examinen mi pregunta.
https://www.mql5.com/ru/forum/160683/page1251#comment_18219493
En concreto, ¿cómo puedo saber el valor del minuto en el que la posición está abierta?
 
Aleksey Masterov:
Concretamente, ¿cómo se encuentra el valor del minuto en el que una posición está abierta?

use TimeToStruct()

https://www.mql5.com/ru/docs/dateandtime/timetostruct

 
Sí, lo tengo en mt4
 
Aleksey Masterov:
Sí, lo tengo en mt4

funciona en MT4

 
Igor Makanu:

funciona en MT4

Todavía no entiendo cómo puedo obtener el valor del minuto en quese abrió una posición a partir de esta estructura...
 
Aleksey Masterov:
No entiendo cómo puedo obtener el valor del minuto cuandose abrió la posición desde esta estructura que devuelve la trompeta...

datetime o_open = OrderOpenTime();

MqlDateTime dt_struct;

TimeToStruct( o_open, dt_struct;)

int min = dt_struct.min;

 

Si puedes ayudarme a entender qué es lo que falla al intentar leer los datos del buffer del indicador.

Aquí está el código del EA:

      if (IsTesting())
         {
         Trend    = GlobalVariableGet(GV_tradesTrend);
         TrendUP  = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0);
         TrendDN  = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0);
         if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);}
         if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);}
         if (Trend==1)  {GlobalVariableSet(GV_Trend,1);}
         if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
         if (Trend==0)  {GlobalVariableSet(GV_Trend,0);}
         }
      else
         {
         Trend = GetLastTrendChange();
         if (Trend==1)  {GlobalVariableSet(GV_Trend,1);}
         if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
         if (Trend==0)  {GlobalVariableSet(GV_Trend,0);}
         }
//+----------------------------------------------------------------------------+
int GetLastTrendChange()
   {
   int   trendType=0;
   int   y=0;
   int   t=500;
   while (y<t)
      {
      if (iOpen(NULL,0,t)==y) {return(0);}
      trendType=FindTrendChange(y);
      if (trendType==1 || trendType==-1) {return(trendType);}
      y++;
      }
   return(0);
   }
//+----------------------------------------------------------------------------+
int FindTrendChange(int index)
   {
   double   trendUP,trendDN;
   int      trendType=0;
   trendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,index);
   trendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,index);
   if (trendUP>0) {trendType=1;}
   if (trendDN>0) {trendType=-1;}
   return (trendType);
   }
//+----------------------------------------------------------------------------+

En real y en pruebas la búsqueda del último valor a través de la función funciona, pero la prueba es catastróficamente lenta (la prueba de medio año se alarga durante varios días).

Así que decidí usar el swap en la prueba y guardar el último valor en la variable global - el Asesor Experto dejó de ver los datos del buffer. Y aunque los buffers vacíos son 0, por alguna razón las variables de EA toman valores EMPTY_VALUE y no cambian.

com

Pero cuando pongo el cursor sobre la línea de la memoria intermedia en la ventana de datos, aparecen dos valores en el tooltip, y el primer valor es 0, por ejemplo Valor 5; 0.0000; 0.8855.

No lo encuentro, aunque hurgo en el código del indicador. La búsqueda en Internet y la documentación no ayudaron. ¿Puede alguien decirme por qué el test es tan lento cuando intento utilizar este indicador?

Por favor, ayúdenme.

Archivos adjuntos:
Razón de la queja: