Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1380

 

Ich gehe davon aus, dass, wenn der aktuelle Balken einen Index mit einer eigenen Zeit hat, sich diese Kombination nie ändert.
Oder ist es möglich, dass als Ergebnis des Paging der Historie dieser Index einem historischen Balken zugewiesen wird und der aktuelle Balken einen neuen Index erhält, der um die Anzahl der ausgelagerten Balken größer ist?

Mit anderen Worten:
ist es richtig zu verstehen, dass der aktuelle Balken (Index, Preis und Zeit) erst nach einem vollständigen Austausch der Historie verfügbar wird und sich seine Parameter danach nie mehr ändern?

 

Bitte sagen Sie mir, wie ich die Anzahl der Zeilen in einer MySQL-Tabelle ermitteln kann

//--- Выставленные позиции
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;
  

Gibt einen Fehler zurück

Letzte ID abrufen

Versuchen Sie auch dies, ich kann die Anzahl der Zeilen nicht ermitteln

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

Was ist los, warum kann ich keinen Wert aus der Abfrage erhalten?

//--- открываем/создаем базу данных в общей папке терминалов
   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);

Wenn ich die Abfrage mit der Datenbank abgleiche, gibt sie folgendes zurück



Rechts

 int id= DatabaseRead(request);

Datenbank ist ein bool , und id ist int


Wie bekomme ich das Abfrageergebnis heraus?


Es hat funktioniert. Ich habe eine zusätzliche SQL-Klasse erstellt

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

Zwischen dem Entladen des Indikators und dem Aufruf von DeInit vergehen mehrere Sekunden.

Warum gibt es eine Pause und kann sie vermieden werden?

 
Bei jedem Tick wird ein Auftrag eröffnet. Wie kann ich es so einrichten, dass nur ein Auftrag geöffnet wird?

Ich verwende diesen Block, der aus der Dokumentation stammt (sowohl tp als auch 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 #:
Bei jedem Tick wird ein Auftrag eröffnet. Wie kann ich erreichen, dass nur ein Auftrag offen ist?

Ich verwende diesen Block, der aus der Dokumentation stammt (sowohl tp als auch 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);

  }


Gelöst.

 

Wie kann ich die Linie nach rechts verlängern? Weiter als die aktuelle Leiste.

Es gibt Zeit- und Preiskoordinaten. Der Preis ist klar, aber wie die Zeit zu setzen (ich versuchte iTime(Symbol(), PERIOD_CURRENT, 0), aber sein Index ist Null)

 
Ivan Butko #:

Wie kann ich die Linie nach rechts verlängern? Weiter als die aktuelle Leiste.

Es gibt Zeit- und Preiskoordinaten. Ich verstehe den Preis, aber wie setzt man die Zeit (ich habe versucht iTime(Symbol(), PERIOD_CURRENT, 0), aber sein Index ist Null)

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

Guten Tag.

Ich habe eine Frage:

Ich schreibe einen Indikator, der Bereiche mit dem Zeichenstil DRAW_FILLING zeichnet. Neben der gezeichneten Zone gibt es noch mehrere andere Indikatoren, darunter viele Muwings, auf dem Chart. Wenn ein Bereich gezeichnet wird, ändern die Linien der anderen Indikatoren ihre Farbe deutlich.

Die Frage: Kann man die Zonen in MT5 so zeichnen, dass sich ihre Farbe nicht überschneidet und die Farben der Linien anderer Indikatoren nicht verändert?

P.S. Ich habe alle Eigenschaften von Indikatorpuffern (Methoden wie PlotIndexSetInteger) ausgegraben, es gibt nichts Ähnliches.

P.S2. Im Anhang finden Sie einen Screenshot von MT5.

Dateien:
u68ufb.PNG  49 kb
 
satorifx #:

Guten Tag.

Ich habe eine Frage:

Ich schreibe einen Indikator, der Bereiche mit dem Zeichenstil DRAW_FILLING zeichnet. Neben der gezeichneten Zone gibt es noch mehrere andere Indikatoren, darunter viele Muwings, auf dem Chart. Wenn ein Bereich gezeichnet wird, ändern die Linien der anderen Indikatoren ihre Farbe deutlich.

Die Frage: Kann man die Zonen in MT5 so zeichnen, dass sich ihre Farbe nicht überschneidet und die Farben der Linien anderer Indikatoren nicht verändert?

P.S. Ich habe alle Eigenschaften von Indikatorpuffern (Methoden wie PlotIndexSetInteger) ausgegraben, es gibt nichts Ähnliches.

P.S2. Hier ist ein Screenshot von MT5.

Es kommt auf die Überlappungsreihenfolge an, wer zuletzt dran ist, ist oben

Zuerst Puffer mitDRAW_FILLING definieren

Grund der Beschwerde: