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

 

Supongo que si la barra actual tiene un índice con su propio tiempo, entonces esta combinación nunca cambiará.
¿O es posible que como resultado de la paginación de la historia este índice sea asignado a alguna barra histórica, y la barra actual obtenga un nuevo índice, mayor por el número de barras paginadas?

También en otras palabras:
¿es correcto entender que la barra actual pasa a estar disponible (índice, precio y hora) sólo después de un intercambio de historial completo y sus parámetros nunca cambian a partir de entonces?

 

Por favor, dígame cómo obtener el número de filas en una tabla de MySQL

//--- Выставленные позиции
struct PositionFib
  {
   int               ID;            // Индификатор
   int               ur;            // Уровень
   int               per;           // Период
   int               type;          // Тип ордера
   double            price;         // Цена Открытия
   double            priceTP;       // Цена Профита
   double            priceSL;       // Цена Стопа
   double            lot;           // Лот
   datetime          time;          // Время
   string            key;           // Ключ
  } position_buff[];
//--- заблокируем базу данных перед выполнением транзакций
   DatabaseTransactionBegin(database);
   int request=DatabasePrepare(database, "SELECT COUNT(*) FROM POSITION");
   DatabaseReadBind(request, person)
   id=person.ID;
  

Devuelve un error

Obtener la última identificación

también intente esto, no puede obtener el número de filas

 int request=DatabasePrepare(database, "SELECT COUNT(*) FROM POSITION");
   id= DatabaseRead(request);
 

¿Qué pasa, por qué no puedo obtener un valor de la consulta?

//--- открываем/создаем базу данных в общей папке терминалов
   int database=DatabaseOpen(filename+".sqlite", DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE | DATABASE_OPEN_COMMON);
   if(database==INVALID_HANDLE)
     {
      Print("SaveStats: ", filename, " открываем/создаем базу данных в общей папке терминалов ", GetLastError());
      return;
     }

//--- заблокируем базу данных перед выполнением транзакций
   DatabaseTransactionBegin(database);
   int request=DatabasePrepare(database, "SELECT COUNT(*) FROM POSITION");
   int id= DatabaseRead(request);

Si compruebo la consulta con la base de datos, me devuelve tal cual



A la derecha

 int id= DatabaseRead(request);

La base de datos es un bool , y el id es un int


¿Cómo puedo obtener el resultado de la consulta?


Funcionó. Creé una clase sql extra

//--- заблокируем базу данных перед выполнением транзакций
   DatabaseTransactionBegin(database);
   int request=DatabasePrepare(database, "SELECT COUNT(*) FROM POSITION");
   DatabaseReadBind(request,sql);
 

Pasan varios segundos entre la descarga del indicador y la llamada a DeInit.

¿Por qué hay una pausa y puede evitarse?

 
Se abre una orden en cada tick. ¿Cómo puedo arreglarlo para que sólo se abra una orden?

Estoy utilizando este bloque, tomado de la documentación (tanto tp como sl)

//+------------------------------------------------------------------+

void Open_order_BUY()

  {

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

    //--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.1 лот

   request.type     =ORDER_TYPE_BUY;                        // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия

   request.sl       =bid-SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =ask+TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

       PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }

  

//+------------------------------------------------------------------+ 

void Open_order_SELL()

  {

  

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

//--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.2 лот

   request.type     =ORDER_TYPE_SELL;                       // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_BID); // цена для открытия

   request.sl       =ask+SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =bid-TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }


 
Ivan Butko #:
Se abre una orden en cada tick. ¿Cómo puedo arreglar para tener sólo una orden abierta?

Estoy usando este bloque, tomado de la documentación (tanto tp como sl)

//+------------------------------------------------------------------+

void Open_order_BUY()

  {

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

    //--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.1 лот

   request.type     =ORDER_TYPE_BUY;                        // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия

   request.sl       =bid-SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =ask+TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

       PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }

  

//+------------------------------------------------------------------+ 

void Open_order_SELL()

  {

  

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

//--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.2 лот

   request.type     =ORDER_TYPE_SELL;                       // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_BID); // цена для открытия

   request.sl       =ask+SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =bid-TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }


Resuelto.

 

¿Cómo extiendo la línea hacia la derecha? Más allá de la barra actual.

Hay coordenadas de tiempo y precio. El precio está claro, pero cómo establecer el tiempo (he intentado iTime(Symbol(), PERIOD_CURRENT, 0), pero su índice es cero)

 
Ivan Butko #:

¿Cómo extiendo la línea hacia la derecha? Más allá de la barra actual.

Hay coordenadas de tiempo y precio. Entiendo el precio, pero cómo establecer el tiempo (he intentado iTime(Symbol(), PERIOD_CURRENT, 0), pero su índice es cero)

iTime(Symbol(), PERIOD_CURRENT, 0) + PeriodSeconds()*5 // 5 баров
 

Buenas tardes.

He aquí una pregunta:

Estoy escribiendo un indicador que dibuja zonas con el estilo de dibujo DRAW_FILLING. Hay varios otros indicadores, incluyendo un montón de muwings, en el gráfico además de la zona dibujada. Cuando se dibuja una zona, las líneas de otros indicadores cambian bruscamente de color.

La pregunta: ¿podemos dibujar las zonas en MT5 de manera que su color no se superponga y no cambie los colores de las líneas de otros indicadores?

P.D. He excavado todas las propiedades de los buffers de los indicadores (métodos como PlotIndexSetInteger), no hay nada similar.

P.S2. Se adjunta una captura de pantalla de MT5.

Archivos adjuntos:
u68ufb.PNG  49 kb
 
satorifx #:

Buenas tardes.

He aquí una pregunta:

Estoy escribiendo un indicador que dibuja zonas con el estilo de dibujo DRAW_FILLING. Hay varios otros indicadores, incluyendo un montón de muwings, en el gráfico además de la zona dibujada. Cuando se dibuja una zona, las líneas de otros indicadores cambian bruscamente de color.

La pregunta: ¿podemos dibujar las zonas en MT5 de manera que su color no se superponga y no cambie los colores de las líneas de otros indicadores?

P.D. He excavado todas las propiedades de los buffers de los indicadores (métodos como PlotIndexSetInteger), no hay nada similar.

P.S2. Aquí hay una captura de pantalla de MT5.

Todo depende de la secuencia de solapamiento, quien es el último está arriba

Definir el buffer conDRAW_FILLING primero