Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1380

 

Presumo che se la barra corrente ha un indice con il suo tempo, allora questa combinazione non cambierà mai.
O è possibile che come risultato della paginazione della storia questo indice venga assegnato a qualche barra storica, e la barra corrente ottenga un nuovo indice, più grande del numero di barre paginate?

Sempre in altre parole:
è corretto capire che la barra attuale diventa disponibile (indice, prezzo e tempo) solo dopo uno scambio storico completo e i suoi parametri non cambiano mai dopo?

 

Per favore ditemi come ottenere il numero di righe in una tabella 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;
  

Restituisce un errore

Ottenere l'ultimo ID

prova anche questo, non può ottenere il numero di righe

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

Cosa c'è che non va, perché non posso ottenere un valore dalla query?

//--- открываем/создаем базу данных в общей папке терминалов
   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 controllo la query contro il database, ritorna così com'è



A destra

 int id= DatabaseRead(request);

Il database è un bool, e l'id è int


Come faccio a far uscire il risultato della query?


Ha funzionato, ho creato una classe sql extra

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

Tra lo scarico dell'indicatore e la chiamata a DeInit passano diversi secondi.

Perché c'è una pausa e si può evitare?

 
Un ordine si apre su ogni tick. Come posso fare in modo che si apra un solo ordine?

Sto usando questo blocco, preso dalla documentazione (sia tp che 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 #:
Un ordine si apre su ogni tick. Come posso fare per avere un solo ordine aperto?

Sto usando questo blocco, preso dalla documentazione (sia tp che 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);

  }


Risolto.

 

Come posso estendere la linea a destra? Più lontano della barra attuale.

Ci sono coordinate di tempo e di prezzo. Il prezzo è chiaro, ma come impostare il tempo (ho provato iTime(Symbol(), PERIOD_CURRENT, 0), ma il suo indice è zero)

 
Ivan Butko #:

Come posso estendere la linea a destra? Più lontano della barra attuale.

Ci sono coordinate di tempo e di prezzo. Capisco il prezzo, ma come impostare il tempo (ho provato iTime(Symbol(), PERIOD_CURRENT, 0), ma il suo indice è zero)

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

Buon pomeriggio.

Ecco una domanda:

Sto scrivendo un indicatore che disegna zone con lo stile di disegno DRAW_FILLING. Ci sono diversi altri indicatori, tra cui un sacco di muwings, sul grafico oltre alla zona disegnata. Quando si disegna una zona, le linee degli altri indicatori cambiano bruscamente i loro colori.

La domanda: possiamo disegnare le zone in MT5 in modo tale che il loro colore non si sovrapponga e non cambi i colori delle linee di altri indicatori?

P.S. Ho scavato tutte le proprietà dei buffer degli indicatori (metodi come PlotIndexSetInteger), non c'è niente di simile.

P.S2. In allegato c'è uno screenshot di MT5.

File:
u68ufb.PNG  49 kb
 
satorifx #:

Buon pomeriggio.

Ecco una domanda:

Sto scrivendo un indicatore che disegna zone con lo stile di disegno DRAW_FILLING. Ci sono diversi altri indicatori, tra cui un sacco di muwings, sul grafico oltre alla zona disegnata. Quando si disegna una zona, le linee degli altri indicatori cambiano bruscamente i loro colori.

La domanda: possiamo disegnare le zone in MT5 in modo tale che il loro colore non si sovrapponga e non cambi i colori delle linee di altri indicatori?

P.S. Ho scavato tutte le proprietà dei buffer degli indicatori (metodi come PlotIndexSetInteger), non c'è niente di simile.

P.S2. Ecco uno screenshot di MT5.

Tutto dipende dalla sequenza di sovrapposizione, chi è ultimo è in cima

Definireprima il buffer conDRAW_FILLING