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

 
Sergey Gritsay:

Vitaliy, mira en https://www.mql5.com/ru/docs/series/timeseries_access#synchronized, hay un script de ejemplo para cargar el historial, puede que te ayude

Gracias, trataré de solucionarlo.

Ahora surge una pregunta:

La siguiente comprobación importante es verificar el tipo de programa desde el que se llama a la función. Recordemos que el envío de una solicitud de actualización de series temporales con el mismo periodo que el indicador que llama a la actualización es altamente indeseable. La no conveniencia de solicitar datos del mismo periodo de tiempo que el del indicador viene determinada por el hecho de que la actualización de los datos históricos se realiza en el mismo hilo en el que trabaja el indicador. Por lo tanto, existe una alta probabilidad de que se produzca un choque. Para comprobarlo, utilizamos la funciónMQL5InfoInteger() con el modificadorMQL5_PROGRAM_TYPE.

if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR&&Period()==period&&Symbol()==symbol)
retorno(-4);


Debería funcionar en mi indicador.

 

Caballeros, luchando con ZigZag.

Necesito obtener los datos exactos de los cuatro vértices. Resulta que el primer vértice, el más necesario, lo da iCustom incorrectamente. Se aleja de la imagen gráfica, pero las tres siguientes son correctas. Ya se ha encontrado algo similar - https://www.mql5.com/ru/forum/100123

He intentado todo lo que he podido, incluso he creado un Asesor Experto separado sólo para comprobar los datos de ZigZag. Compruébelo usted mismo, ¿quizás me haya equivocado en algún punto? Sólo tiene que instalar y activar la visualización de los precios de apertura. Consigue esto...


//+------------------------------------------------------------------+
//|                                                  data_ZigZag.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

input string   data_Zig_Zag_IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;
input int      ExtDepth=12;
input int      ExtDeviation=5;
input int      ExtBackstep =3;
input int n_zz=100;//n_zz =100; 
double pd_1,pd_2,pd_3,pd_4;
int pn_1,pn_2,pn_3,pn_4;
int zz_Handle;
double zz_buf[];
datetime time[];
string this_sym;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   this_sym=Symbol();
//+------------------------------------------------------------------+
//--- сохраним текущий символ графика для дальнейшей работы советника именно на этом символе
   zz_Handle=iCustom(this_sym,0,"Examples\\Zigzag",
                     ExtDepth,
                     ExtDeviation,
                     ExtBackstep
                     );
   Print(__FUNCTION__,"__LINE__",__LINE__," . . . . . ",
         "zz_Handle = ",zz_Handle,"  error = ",GetLastError());
//--- проверяем наличие хендла индикатора
   if(zz_Handle==INVALID_HANDLE)
     {
      //--- хендл не получен, выводим сообщение в лог об ошибке, завершаем работу с ошибкой
      Print(__FUNCTION__,"__LINE__",__LINE__," ----- ",
            "Не удалось получить хендл индикатора zz_Handle","  error = ",GetLastError());
      return(-1);
     }
//--- добавляем индикатор на ценовой график
   ChartIndicatorAdd(ChartID(),0,zz_Handle);
//--- устанавливаем индексацию для массива zz_buf как в таймсерии
   ArraySetAsSeries(zz_buf,true);
   ArraySetAsSeries(time,true);
//---

//+------------------------------------------------------------------+
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(zz_Handle);
   ArrayFree(zz_buf);
   ArrayFree(time);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//+------------------------------------------------------------------+
   int zz_copy=0;
//--- копируем данные из индикаторного массива в динамический массив 
   zz_copy=CopyBuffer(zz_Handle,0,0,n_zz,zz_buf);
//--- если есть ошибки, то выводим сообщение в лог об ошибке и выходим из функции
   if(zz_copy<0)
     {
      Print("Не удалось скопировать данные из индикаторного буфера zz_buf.  error = ",
            GetLastError()); return;
     }
//+------------------------------------------------------------------+
   pd_1 =0;
   pd_2 =0;
   pd_3 =0;
   pd_4 =0;
   pn_1 =0;
   pn_2 =0;
   pn_3 =0;
   pn_4 =0;

   int zz_q=ArraySize(zz_buf);
   int q=0;

   for(q=0; q<zz_q; q++)
     {
      if(zz_buf[q]!=0 && zz_buf[q]!=EMPTY_VALUE)
        {
              if(pd_1==0) { pn_1=q; pd_1=zz_buf[q]; }
         else if(pd_2==0) { pn_2=q; pd_2=zz_buf[q]; }
         else if(pd_3==0) { pn_3=q; pd_3=zz_buf[q]; }
         else if(pd_4==0) { pn_4=q; pd_4=zz_buf[q]; }
        }
      if(pn_4>0)break;
     }
//+------------------------------------------------------------------+
   CopyTime(this_sym,Period(),0,n_zz,time);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name1");
   string name1="name1";

   if(!ObjectCreate(0,name1,OBJ_ARROW_UP,0,time[pn_1],pd_1))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name1,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name2");
   string name2="name2";

   if(!ObjectCreate(0,name2,OBJ_ARROW_UP,0,time[pn_2],pd_2))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name2,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name3");
   string name3="name3";

   if(!ObjectCreate(0,name3,OBJ_ARROW_UP,0,time[pn_3],pd_3))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name3,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name4");
   string name4="name4";

   if(!ObjectCreate(0,name4,OBJ_ARROW_UP,0,time[pn_4],pd_4))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name4,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
///*
   if(pd_1!=0 && pd_2!=0 && pd_3!=0 && pd_4!=0)
      Alert(__FUNCTION__,"__LINE__",__LINE__,
            "   q =",q,
            "   pd_1 =",pd_1,
            "   pd_2 =",pd_2,
            "   pd_3 =",pd_3,
            "   pd_4 =",pd_4,

            "   pn_1 =",pn_1,
            "   pn_2 =",pn_2,
            "   pn_3 =",pn_3,
            "   pn_4 =",pn_4,
            "   TimeCurrent()=",TimeCurrent()
            );
//*/
//+------------------------------------------------------------------+
  }
//+------------------------------------------------------------------+
¿Cómo obtener datos precisos?
Как получить значение индикатора ZigZag в точках...
Как получить значение индикатора ZigZag в точках...
  • 2006.04.09
  • www.mql5.com
Уважаемые гуру и другие адепты MQ4 Я прикрепил схемку. Это стандартный ZigZag...
 
Hola. Anteayer empecé a estudiar MQL.


El probador da este resultado:


No puedo entender la trampa. Estimados profesionales, por favor, ilumínenme, les estaría muy agradecido.


 

Pregunta ¿Puedo escribir un programa en Metatrader 4 para abrir de 2 a 250 posiciones de mi elección con un stoploss establecido y un beneficio establecido en un solo clic? Para no tener que abrir manualmente uno por uno

 
fxtz:

Pregunta ¿Puedo escribir un programa en Metatrader 4 para abrir de 2 a 250 posiciones de mi elección con un stoploss establecido y un beneficio establecido en un solo clic? No es necesario abrir uno por uno

Sí, puedes hacerlo. Pero usted está haciendo la pregunta en el lugar equivocado - aquí en MT5.

Hay varios hilos para novatos en MT4.

Por ejemplo, aquí.

 
antonsinichkin:
Hola. Anteayer empecé a estudiar MQL.


El comprobador da este resultado:


Dónde está el truco que no puedo entender. Distinguidos profesionales, por favor, ilumínenme, les estaré muy agradecido.



Tradúzcalo en cadena antes de la impresión. O explicar lo que está mal.
 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL4 MT4 MetaTrader 4".
 
Buenas tardes. Después de la última actualización de MT5 a la compilación 1604 mis indicadores ya no funcionan correctamente. Estoy usando
Los llamados indicadores "líquidos". Por ejemplo, tengo varios estocásticos multiperiodos en una ventana. Bueno, ahora los cortos están dibujados
Al igual que antes, los ligeramente más largos sólo dibujan unos pocos compases y los más largos no se dibujan en absoluto.

Tengo la impresión de que, de repente, han empezado a carecer de historia. ¿Puede decirme qué puede estar mal?
 
Acabo de cambiar de mql4 a mql5. Estoy probando un Asesor Experto en el Índice RTS y ahora tengo el problema de que abre varias operaciones, pero una de las condiciones para abrir una operación es la siguiente: si (...OrdersTotal()==0). ¿Por qué no funciona esta condición? ¿Qué puedo hacer para abrir una sola posición?
 
RogozaIV:
Acabo de cambiar de mql4 a mql5. Estoy probando un Asesor Experto en el Índice RTS y ahora tengo el siguiente problema: abre varias operaciones, pero una de las condiciones para abrir una operación está especificada: if (...OrdersTotal()==0). ¿Por qué no funciona esta condición? ¿Qué puedo hacer para abrir una sola operación?
PositionsTotal()
Razón de la queja: