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

 
MakarFX:

Por favor, dígame, ¿es posible hacer esta elección de fuente en un indicador?


¿Por qué no? Haz tu propio enum y todos los problemas.........

 
Alexey Viktorov:

¿Por qué no? Haga su propio enum y todos los problemas.........

Eso está claro, pero ¿cómo puedo solicitar una lista de fuentes instaladas?

 
Nikolai Semko:

Eres un comediante.

¿Con quién estaba hablando?


Me he perdido algo. Gracias. ¡Eso es!

 
ANDREY:

Lo tengo. Gracias por la ayuda.

También me pareció difícil que el EA abriera tantas órdenes. He intentado limitar el número de pedidos con este código

Es decir, abrir una orden sólo a las 10:00. Pero el resultado es el mismo.

2020.10.27 10:25:17.548 Core 1 272 Mb de memoria utilizada incluyendo 36 Mb de datos históricos, 64 Mb de datos de tick



No conozco MKL5 a fondo, para ser sincero. Pero la lógica es poco convincente. Tienes que abrir una orden. Esto se consigue asignando una variable de hora al principio de la función en el tic y al final se asigna a otra variable. En el medio si las variables no son iguales, se abre una orden. El ejemplo anterior con los minutos es el mismo.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //
int tm; 
//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10 && tm != time_now.hour) //на первом тике, когда time_now.hour станет 10 а tm еще 9
                                           // и на следующем тике tm будет равно 10


   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }  

tm= time_now.hour;
     return;
  }



 
MakarFX:

Esto está claro, pero ¿cómo se solicita una lista de fuentes instaladas?

Creo que en tu ejemplo es una lista casera. Sin consultar el software.

 
Valeriy Yastremskiy:

No conozco MKL5 a fondo, para ser sincero. Pero la lógica es poco convincente. Necesita una orden para abrir la misma. Esto se consigue asignando una variable de hora al principio de la función en el tic y al final se asigna a otra variable. En el medio si las variables no son iguales, se abre una orden. El ejemplo anterior con los minutos es el mismo.

por eso se recomienda tratar de hacer el trabajo de EA sólo con sus magos

Si nuestra tarea es abrir una orden a una hora determinada una vez al día, el algoritmo es el siguiente:

- iniciar el EA, comprueba el número de órdenes abiertas, si la orden con nuestro mago está abierta, entonces sale hasta el siguiente tick

- si no hay órdenes, el EA espera hasta que la hora y los minutos actuales sean mayores que los dados

- ha llegado este momento, EA comprobará el historial de órdenes y si no se ha colocado una orden con nuestro mago durante las últimas 24 horas, entonces colocará una orden y saldrá - la salida es útil para no procesar errores del servidor, si la orden no se ha colocado, entonces en el siguiente tick intentaremos hacerlo de nuevo, es decir, no necesitamos organizar un ciclo para múltiples aperturas de órdenes en este tick.... pero esto es cuestión de gustos y objetivos, es la implementación más fácil )))

 
Igor Makanu:

por eso se recomienda tratar de hacer el trabajo de EA exclusivamente con sus magos

Si la tarea es abrir una orden una vez al día a una hora determinada, el algoritmo es el siguiente:

- iniciar el EA, comprueba el número de órdenes abiertas, si la orden con nuestro mago está abierta, entonces sale hasta el siguiente tick

- si no hay órdenes, el EA espera hasta que la hora y los minutos actuales sean mayores que los dados

- ha llegado este momento, EA comprobará el historial de órdenes y si no se ha colocado una orden con nuestro mago durante las últimas 24 horas, entonces colocará una orden y saldrá - la salida es útil para no procesar errores del servidor, si la orden no se ha colocado, entonces en el siguiente tick intentaremos hacerlo de nuevo, es decir, no necesitamos organizar un ciclo para múltiples aperturas de órdenes en este tick.... Pero esto es una cuestión de gustos y objetivos y es la aplicación más fácil )))

Ahí todavía no hemos alcanzado el nivel de mago. Por supuesto. En 5 c, por supuesto, el dilema es si se hace un bucle con el análisis de errores o se intenta abrir una posición utilizando un tick. En el caso de las respuestas largas puede ser más fácil en la garrapata.

 
Valeriy Yastremskiy:

No conozco MKL5 a fondo, para ser sincero. Pero la lógica es poco convincente. Necesita una orden para abrir la misma. Esto se consigue asignando una variable de hora al principio de la función en el tic y al final se asigna a otra variable. En el medio si las variables no son iguales, se abre una orden. El ejemplo anterior con los minutos es el mismo.



Muchas gracias. El conocimiento que me dio era exactamente lo que me faltaba. He intentado hacer lo mismo pero por analogía con el 4. Resulta que la analogía está fuera de lugar en este caso.
Gracias de nuevo.

 
Igor Makanu:

por eso se recomienda tratar de hacer el trabajo de EA exclusivamente con sus magos

Si la tarea es abrir una orden una vez al día a una hora determinada, el algoritmo es el siguiente:

- iniciar el EA, comprueba el número de órdenes abiertas, si la orden con nuestro mago está abierta, entonces sale hasta el siguiente tick

- si no hay órdenes, el EA espera hasta que la hora y los minutos actuales sean mayores que los dados

- ha llegado este momento, EA comprobará el historial de órdenes y si no se ha colocado una orden con nuestro mago durante las últimas 24 horas, entonces colocará una orden y saldrá - la salida es útil para no procesar errores del servidor, si la orden no se ha colocado, entonces en el siguiente tick intentaremos hacerlo de nuevo, es decir, no necesitamos organizar un ciclo para múltiples aperturas de órdenes en este tick.... pero esto es una cuestión de gustos y objetivos y es la implementación más fácil )))

Gracias por la valiosa información. Gracias a ti mi comprensión de mql 5 ha aumentado y profundizado.
Le estaré muy agradecido si puede mostrar mi código como ejemplo de su proceso de pensamiento. Me ayudará a asimilar su idea con rapidez y precisión.
Muchas gracias de nuevo.

Aquí está mi código, donde he escrito incorrectamente la condición de que una orden debe abrirse sólo a las 10:00

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10&&time_now.min==0)
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }
 
ANDREY:

Aquí está mi código en el que he escrito mal la condición, según la cual la orden debe abrirse sólo a las 10:00

No escribo en MQL5 puro. Puede colocar una orden utilizando la clase CTrade SB

busque en CTrade artículos sobre el uso de SB