Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1380

 

Presumo que se a barra actual tiver um índice com o seu próprio tempo, então esta combinação nunca irá mudar.
Ou será possível que como resultado da paginação histórica este índice seja atribuído a alguma barra histórica, e a barra actual obtenha um novo índice, maior pelo número de barras paginadas?

Também por outras palavras:
é correcto compreender que a barra actual só se torna disponível (índice, preço e tempo) depois de uma troca de histórico completo e os seus parâmetros nunca mudam depois disso?

 

Por favor, diga-me como obter o número de filas numa tabela 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;
  

Devolve um erro

Obter a última identificação

tente também isto, não consegue obter o número de filas

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

O que está errado, porque não posso obter um valor da 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);

Se eu comparar a consulta com a base de dados, esta regressa como está



Certo

 int id= DatabaseRead(request);

A base de dados é um bool , e a id é int


Como posso obter o resultado da consulta?


Funcionou. Criei uma classe extra sql

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

Vários segundos decorrem entre a descarga do indicador e a chamada ao DeInit.

Porque é que existe uma pausa e pode ser evitada?

 
Uma ordem abre-se em cada tic tac. Como é que o arranjo para que apenas uma encomenda se abra?

Estou a utilizar este bloco, retirado da documentação (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 #:
Uma ordem abre-se em cada tic tac. Como posso corrigir para ter apenas uma encomenda aberta?

Estou a utilizar este bloco, retirado da documentação (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);

  }


Resolvido.

 

Como prolongar a linha para a direita? Mais longe do que a barra actual.

Existem coordenadas de tempo e preço. O preço é claro, mas como definir o tempo (tentei iTime(Symbol(), PERIOD_CURRENT, 0), mas o seu índice é zero)

 
Ivan Butko #:

Como prolongar a linha para a direita? Mais longe do que a barra actual.

Existem coordenadas de tempo e preço. Compreendo o preço, mas como definir o tempo (tentei iTime(Symbol(), PERIOD_CURRENT, 0), mas o seu índice é zero)

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

Boa tarde.

Aqui vai uma pergunta:

Estou a escrever um indicador que desenha zonas com estilo de desenho DRAW_FILLING. Há vários outros indicadores, incluindo muitos muwings, no gráfico, para além da zona desenhada. Quando uma zona é desenhada, as linhas de outros indicadores mudam acentuadamente as suas cores.

A questão: Posso desenhar as zonas em MT5 de tal forma, que a sua cor não se sobreponha e não altere as cores das linhas de outros indicadores?

P.S. Cavei todas as propriedades dos amortecedores indicadores (métodos como PlotIndexSetInteger), não há nada de semelhante.

P.S2. anexado é um screenshot do MT5.

Arquivos anexados:
u68ufb.PNG  49 kb
 
satorifx #:

Boa tarde.

Aqui vai uma pergunta:

Estou a escrever um indicador que desenha zonas com estilo de desenho DRAW_FILLING. Há vários outros indicadores, incluindo muitos muwings, no gráfico, para além da zona desenhada. Quando uma zona é desenhada, as linhas de outros indicadores mudam acentuadamente as suas cores.

A questão: podemos desenhar as zonas em MT5 de tal forma, que a sua cor não se sobreponha e não altere as cores das linhas de outros indicadores?

P.S. Cavei todas as propriedades dos amortecedores indicadores (métodos como PlotIndexSetInteger), não há nada de semelhante.

P.S2. Aqui está uma captura de ecrã do MT5.

Tudo depende da sequência de sobreposição, quem é o último está no topo

Definir buffer comDRAW_FILLING primeiro

Razão: