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

 
Alexandr Sokolov #:


2) Si un array está indexado de forma inversa, las nuevas celdas deberían aparecer al principio del array, lo que no es el caso

¿Por qué deben aparecer nuevas celdas al principio de una matriz? - Si no me equivoco, debería estar escrito en la ayuda, que cuando se utiliza ArraySetAsSeries(), el array no se reasignará físicamente en la memoria, sino que se aplicará la indexación inversa al acceder a los elementos del array

SZZ: tu ejemplo es complicado, lo he esbozado:

#property strict
//+------------------------------------------------------------------+
void OnStart()
{
   int arr1[] = {1, 2, 3, 4, 5};
   int arr2[] = {1, 2, 3, 4, 5};
   ArraySetAsSeries(arr2, true);
   Print("Start size : ", ArraySize(arr1), " , ", ArraySize(arr2));
   Print("Resize : ", ArrayResize(arr1, 10), " , ", ArrayResize(arr2, 10));
   string s1 = "", s2 = "";
   for(int i = 0, j = 0; i < ArraySize(arr1) && j < ArraySize(arr2); i++, j++)
   {
      s1 += (string)arr1[i] + " , ";
      s2 += (string)arr2[j] + " , ";
   }
   Print("arr1 = ", s1);
   Print("arr2 = ", s2);
}

2022.04.18 21:31:59.223 tst EURUSD,H1: arr2 = 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1: arr1 = 1 , 2 , 3 , 4 , 5 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1: Resize : 10 , 10

2022.04.18 21:31:59.223 tst EURUSD,H1: Tamaño inicial : 5 , 5

 
Por favor, indique cómo funciona en MT5
iClose(NULL,PERIOD_CURRENT,shift)

Obtengo el error'iClose' - llamada ambigua a una función sobrecargada.

En general, el objetivo es seleccionar la TF.

Quería elegirlo con MT4 por costumbre

if(iClose(NULL, TF(), 1) < iOpen(NULL, TF(), 1))

int TF()
  {
   int tf;
   switch(TF)
     {
      case 1 :
         tf = 1;
         break;
      case 2 :
         tf = 5;
         break;
      case 3 :
         tf = 15;
         break;
      case 4 :
         tf = 30;
         break;
      case 5 :
         tf = 60;
         break;
      case 6 :
         tf = 240;
         break;
      case 7 :
         tf = 1440;
         break;
      case 8 :
         tf = 10080;
         break;
      case 9 :
         tf = 43200;
         break;
      default:
         tf = 10;
         Print(tf);
     }
   return(tf);
  }

Pero he fracasado.

 
Александр 'iClose' - llamada ambigua a una función sobrecargada.

En general, el objetivo es seleccionar la TF.

Quería elegirlo con MT4 por costumbre

Pero fallé.

periodos en MT5

if(Period()==1) devuelve "M1";

if(Period()==2) devuelve "M2";

if(Period()==3) devuelve "M3";

if(Period()==4) devuelve "M4";

if(Period()==5) devuelve "M5";

if(Period()==6) devuelve "M6";

if(Period()==10) devuelve "M10";

if(Period()==12) devuelve "M12";

if(Period()==15) devuelve "M15";

if(Period()==20) devuelve "M20";

if(Period()==30) devuelve "M30";

if(Period()==16385) devuelve "H1";

if(Period()==16386) devuelve "H2";

if(Period()==16387) devuelve "H3";

if(Period()==16388) devuelve "H4";

if(Period()==16390) devuelve "H6";

if(Period()==16392) devuelve "H8";

if(Period()==16396) devuelve "H12";

if(Period()==16408) devuelve "Diario";

if(Period()==32769) devuelve "Semanal";

if(Period()==49153) devuelve "Mensual";

 
Andrei Sokolov #:

periodos en mt5

if(Period()==1) devuelve "M1";

if(Period()==2) devuelve "M2";

if(Period()==3) devuelve "M3";

if(Period()==4) devuelve "M4";

if(Period()==5) devuelve "M5";

if(Period()==6) devuelve "M6";

if(Period()==10) devuelve "M10";

if(Period()==12) devuelve "M12";

if(Period()==15) devuelve "M15";

if(Period()==20) devuelve "M20";

if(Period()==30) devuelve "M30";

if(Period()==16385) devuelve "H1";

if(Period()==16386) devuelve "H2";

if(Period()==16387) devuelve "H3";

if(Period()==16388) devuelve "H4";

if(Period()==16390) devuelve "H6";

if(Period()==16392) devuelve "H8";

if(Period()==16396) devuelve "H12";

if(Period()==16408) devuelve "Diario";

if(Period()==32769) devuelve "Semanal";

if(Period()==49153) devuelve "Mensual";

Gracias.

 
Александр #:

Gracias.

¿Por qué no te gusta ENUM_TIMEFRAMES?

Y puedes poner variables en entrada en forma de enumeración y seleccionarlas como quieras... ¿Para qué hacer tanto lío? Y en mql4 esta enumeración está disponible desde hace mucho tiempo...

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

¿Por qué no te gusta ENUM_TIMEFRAMES?

Y puedes poner las variables en la entrada como una enumeración y seleccionarlas como quieras... ¿Por qué tienes que pasar por todo este problema? Y en mql4 esta enumeración está disponible desde hace años...

+

 
Alexey Viktorov #:

¿Por qué no te gusta ENUM_TIMEFRAMES?

Y puedes poner variables en entrada en forma de enumeración y seleccionarlas como quieras... ¿Para qué hacer tanto lío? Y en mql4 esta enumeración también está disponible desde hace tiempo...

Gracias. No tenía ni idea.

 

Colegas, por favor, aconsejen el mejor algoritmo para encontrar el precio de la orden limitada previamente colocada más cercana al precio actual - respectivamente al límite de venta ascendente, a la oferta

el límite de compra que está más cerca del fondo.

Este f-iio cuenta la cantidad pero necesito el PRECIO de la orden limitada previamente colocada para que el f-iio devuelva...


Hasta ahora, estoy usando el precio mínimo para el límite de venta y el precio máximo para el límite de compra....

int Price_of_orders(int Magic_) // цена ближайшего ордера к цене по магику
  {
//--- получим общее количество ордеров
   int ord = 0; // итоговое значение кол-ва ордеров
   int orders=OrdersTotal();
//--- пробежим по списку ордеров
   for(int i=0;i<orders;i++)
     {
      ResetLastError();
      //--- скопируем в кэш ордер по его номеру в списке
      ulong ticket=OrderGetTicket(i);
      if(ticket!=0)// если ордер успешно скопирован в кэш, работаем с ним
        {
         double price_open  =OrderGetDouble(ORDER_PRICE_OPEN);
         datetime time_setup=OrderGetInteger(ORDER_TIME_SETUP);
         string symbol      =OrderGetString(ORDER_SYMBOL);
         long magic_number  =OrderGetInteger(ORDER_MAGIC);
         if(magic_number==Magic_)
           {
            //  обработаем ордер с заданным ORDER_MAGIC - посчитаем
            ord++;
           }
         PrintFormat("Ордер #%d по %s был выставлен %s, ORDER_MAGIC=%d",ticket,symbol,TimeToString(time_setup),magic_number);
        }
      else         // вызов OrderGetTicket() завершился неудачно
        {
         PrintFormat("Ошибка при получении ордера из списка в кэш. Код ошибки: %d",GetLastError());
        }

     }
   return (ord);   
  }
 
Roman Shiredchenko #:

Colegas, por favor, aconsejen el mejor algoritmo para encontrar el precio de la orden limitada previamente colocada más cercana al precio actual - respectivamente al límite de venta ascendente, a la oferta

el límite de compra que está más cerca del fondo.

Este f-iio cuenta la cantidad pero necesito el PRECIO de la orden limitada previamente colocada para que el f-iio devuelva...


Hasta ahora estoy usando el precio mínimo para el límite de venta y el precio máximo para el límite de compra....

Quiero guardar los precios requeridos con los tickets y quizás algo más, por ejemplo el tiempo, en mi estructura o array y ordenar inmediatamente después de añadir por precio. Por recursos, si buscas poco, es igual o un poco más caro, y si a menudo, es mejor recordar. Por supuesto, si no tiene 100500 pedidos) Entonces puede ser demasiado caro. En general, la ordenación en una estructura o matriz multidimensional se resuelve sólo para el primer índice, lamentablemente.

A veces utilizo varias matrices unidimensionales con los mismos índices, entradas, tiempo, precios. Y buscar por índice de propiedad necesaria. Por supuesto, es una muleta, pero funciona claramente.

 

Ha surgido una pregunta que no se ha encontrado en la búsqueda. ¿Es posible habilitar el algotrading desde el EA? Obtiene las propiedades de la terminal, tanto si está habilitada como si no.

Y es posible ejecutar un EA en un terminal con algotrading activado y otro no.