Fehler, Irrtümer, Fragen - Seite 2381

 

NormalPreis-Fehler! Guten Tag an alle. Ich änderte c mql4 zu mql5 und jetzt habe ich NormalPrice Fehler. Bitte helfen Sie mir, den Grund zu verstehen.

#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>

CPositionInfo  o_position;    //класс для управления открытыми позициями
CTrade         o_trade;     
CSymbolInfo    o_symbol;
COrderInfo     o_order;
//+------------------------------------------------------------------+
//| Переменные вводимые при запуске параметры                        |
//+------------------------------------------------------------------+
input double  StartLot    = 0.1;
input int     Indent      = 30;
input int     Step        = 10;
input double  ProfitClose = 20;
input int     MagicNumber = 12345;
input int     Slippage    = 30;
//+------------------------------------------------------------------+
//| Изменяемые параметры в программе                                 |
//+------------------------------------------------------------------+
int dStep;
int dIndent;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   dStep = Step;
   dIndent = Indent;
   
   if (!o_symbol.Name(Symbol()))
      return(INIT_FAILED);
   
   RefreshRates();
   
   o_trade.SetExpertMagicNumber(MagicNumber);
   //Проверка режимов открытия ордеров через функцию
   if (IsFillingTypeAllowed (o_symbol.Name(), SYMBOL_FILLING_FOK))
   {
      o_trade.SetTypeFilling(ORDER_FILLING_FOK);
   }
   else if (IsFillingTypeAllowed (o_symbol.Name(), SYMBOL_FILLING_IOC))
   {
      o_trade.SetTypeFilling(ORDER_FILLING_IOC);
   }
   else 
   {
      o_trade.SetTypeFilling(ORDER_FILLING_RETURN);
   }

   o_trade.SetDeviationInPoints(Slippage);
   
   if (o_symbol.Digits() == 3 || o_symbol.Digits() == 5)
   {
      dStep    *= 10;
      dIndent  *= 10;
   }

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   datetime             lpos_time         = 0;
   double               lpos_price_open   = 0.0;
   double               lpos_volume       = 0.0;
   ENUM_POSITION_TYPE   lpos_type         = -1;
   int                  pos_count         = 0;
   double               sum_profit        = 0;
   //счечик открытых позиций
   for (int i = PositionsTotal() - 1; i>=0; i--)
   {
      if (o_position.SelectByIndex(i))
      {
         if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
         {
            if (o_position.Time() > lpos_time)//если время позиции больше чем время последней позиции
            {
               lpos_time         = o_position.Time();
               lpos_price_open   = o_position.PriceOpen();
               lpos_volume       = o_position.Volume();
               lpos_type         = o_position.PositionType();
            }
            pos_count++;
            sum_profit = sum_profit + o_position.Commission() + o_position.Swap() + o_position.Profit();
         }
      }
   
   }
   //счетчик количества отложенных ордеров
   int stop_count = 0;
   for (int i = OrdersTotal()-1; i>=0; i--) //OrderTotal считает только отложенные ордера
   {
      if (o_order.SelectByIndex(i))
      {
         if (o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
         stop_count++;
      }
   
   }
//Функция проверки котировок
   if (!RefreshRates())
      return;
   //
   if (sum_profit > ProfitClose)
   {
      CloseAll();
      return;
   }
   //
   if (pos_count>0)
   {
      if (lpos_type == POSITION_TYPE_BUY && o_symbol.Bid() < lpos_price_open - dStep * o_symbol.Point())
      {
         o_trade.Sell(lpos_volume * 2, o_symbol.Name());
      }   
      if (lpos_type == POSITION_TYPE_SELL && o_symbol.Ask() < lpos_price_open + dStep * o_symbol.Point())
      {
         o_trade.Buy(lpos_volume * 2, o_symbol.Name());
      }   
      o_trade.SellStop(StartLot, o_symbol.Bid() - dIndent * o_symbol.Point());
      o_trade.BuyStop(StartLot, o_symbol.Ask() + dIndent * o_symbol.Point());
      return;
   }
   if (pos_count > 0 && stop_count > 0)
      DeleteStopOrders(); 
}
//Функция проверки котировок
bool RefreshRates()
{
   if (!o_symbol.RefreshRates())
      return (false);
   if (o_symbol.Ask() == 0 || o_symbol.Bid() == 0)
      return (false);
   return(true);
}   

//+------------------------------------------------------------------+
bool IsFillingTypeAllowed (string symbol, int fill_type)
{
   int filling = (int) SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);//запрашиваем режим открытия
   return(filling && fill_type);
}   
//+------------------------------------------------------------------+
void  CloseAll()
{
   for (int index = PositionsTotal()-1; index >=0; index--)
   {
      if (o_position.SelectByIndex(index))
      {
         if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
         {
            o_trade.PositionClose(o_position.Ticket());
         }
      }
   }
}
//+Функция удаления стоп ордеров
void  DeleteStopOrders()
{
   for (int i = OrdersTotal()-1; i>-0; i--)
   {
      if (o_order.SelectByIndex(i))
         if (o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
            o_trade.OrderDelete(o_order.Ticket());
   }
}

 
Die Frage mag zwar nicht zum Thema gehören, aber ich sehe keinen Sinn darin, einfach eine neue Frage zu stellen. Ich werde sie hier stellen.
Wovon hängt die Zuverlässigkeit der Signale ab?
 
Evgeniy Kazeikin:
Die Frage mag zwar nicht zum Thema gehören, aber ich sehe keinen Sinn darin, einfach eine neue Frage zu stellen. Ich werde sie hier stellen.
Worauf beruht die Zuverlässigkeit des Signals?
Es gibt fünf oder sechs Komponenten, die nach einer komplexen Formel berechnet werden, dann wird eine Skala mit der entsprechenden Farbe gezeichnet
 
Slava:

Zusätzlich zu den oben genannten Fehlern im Tester (ich teste einen EA mit mehreren Währungen), will der Tester keine anderen Symbole anzeigen, und das Protokoll enthält zahlreiche Fehler von keiner Synchronisation, auch unter der Nummer 4001.

Auch bei der Version von 1981 funktionierte alles ohne Fehler. Im Jahr 1983 bedeutet das Ärger.

Funktion zur Überprüfung der Synchronisierung:

//+------------------------------------------------------------------+
//| Проверка синхронизации данных                                                                                               |
//+------------------------------------------------------------------+
bool CheckSync(const string &usingSymbols[],// Список используемых символов
               const ENUM_TIMEFRAMES timeframe          // Рабочий ТФ
               )
  {
//--- Цикл по символам
   for(int i=0; i<_symbolsSize; i++)
     {
      //--- Проверяем синхронизацию i-го символа
      if(!SymbolIsSynchronized(usingSymbols[i]) || // Если нет синх. данных терминала и сервера или..
         !SeriesInfoInteger(usingSymbols[i],timeframe,SERIES_SYNCHRONIZED))   // ..не синх. данные по символу/периоду на данный момент
        {
         //---
         Print(__FUNCTION__,": ВНИМАНИЕ! Синхронизация по '"+usingSymbols[i]+"' ТФ "+EnumToString(timeframe)+" отсутствует!");
         Print(__FUNCTION__,": error = ",GetLastError());
         //--- Возвращаем ложь
         return( false );
        }
     }
//--- Все символы синхронизованы
   return( true );
  }

Die Synchronisierung wird durch eine minutengenaue Datenabfrage für jedes Zeichen mit CopyTime() unterstützt. ResetLastError() setzt die Fehlernummer 4001 vor dem Aufruf der Sync-Check-Funktionen nicht zurück.

 

Hallo, nach dem MT5-Update am 8. November werden die horizontalen Linien von diesem Skript im Strategietester nicht mehr gezeichnet. Und der Kommentar wird nicht angezeigt.

Bitte beraten Sie mich, wie ich das Problem beheben kann.

Fehler 4001.

2019.02.11 20:42:53.522 Terminal        MetaTrader x64 build 1983 started (MetaQuotes Software Corp.)
2019.02.11 20:42:53.528 Terminal        Windows 10 (build 14393) x64, IE 11, UAC, Intel Core i3  M 330 @ 2.13 GHz, Memory: 1797 / 3885 Mb, Disk: 359 / 368 Gb, GMT+8
 
San Kos:

Hallo, nach dem MT5-Update am 8. November werden die horizontalen Linien von diesem Skript im Strategietester nicht mehr gezeichnet. Bitte beraten Sie mich, wie ich das Problem beheben kann.

Fehler 4001.

Bestätigt.

Terminal und System:

2019.02.10 16:53:22.710 MetaTrader 5 x64 build 1983 started (MetaQuotes Software Corp.)
2019.02.10 16:53:23.196 Windows 10 (build 17134) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3340 / 8077 Mb, Disk: 101 / 415 Gb, GMT+2
2019.02.10 16:53:23.196 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075


Beispiel: Expert AdvisorDaily range arbeitet mitOBJ_HLINE. Bei Prüferfehlern:

2019.02.11 14:37:47.737   InpStartMinute=5
2019.02.11 14:37:47.795 2018.09.01 00:00:00   VLineCreate: failed to create a vertical line! Error code = 4001
2019.02.11 14:37:47.795 2018.09.01 00:00:00   VLineMove: failed to move the vertical line! Error code = 4001
2019.02.11 14:37:47.795 2018.09.01 00:00:00   VLineCreate: failed to create a vertical line! Error code = 4001
2019.02.11 14:37:47.795 2018.09.01 00:00:00   VLineMove: failed to move the vertical line! Error code = 4001
2019.02.11 14:37:47.795 2018.09.01 00:00:00   HLineCreate: failed to create a horizontal line! Error code = 4001
2019.02.11 14:37:47.795 2018.09.01 00:00:00   HLineMove: failed to move the horizontal line! Error code = 4001
2019.02.11 14:37:47.795 2018.09.01 00:00:00   HLineCreate: failed to create a horizontal line! Error code = 4001
2019.02.11 14:37:47.795 2018.09.01 00:00:00   HLineMove: failed to move the horizontal line! Error code = 4001
2019.02.11 14:37:48.969 USDJPY,Daily: history cache allocated for 548 bars and contains 433 bars from 2017.01.02 00:00 to 2018.08.31 00:00
 
Alexey Kozitsyn:

Zusätzlich zu den oben genannten Fehlern im Tester (ich teste einen EA mit mehreren Währungen), will der Tester keine anderen Symbole anzeigen, und das Protokoll enthält zahlreiche Fehler der keine Synchronisation, auch unter der Nummer 4001.

Auch bei der Version von 1981 funktionierte alles ohne Fehler. Im Jahr 1983 bedeutet das Ärger.

Funktion zur Überprüfung der Synchronisierung:

Die Synchronisierung wird durch eine minutengenaue Datenabfrage für jedes Zeichen mit CopyTime() unterstützt. ResetLastError() setzt die Fehlernummer 4001 vor dem Aufruf der Synchronisationsprüfungsfunktionen nicht zurück.

Dieser Fehler wurde bereits behoben.

 
Vladimir Karputov:

Bestätigt.

Das Terminal und das System:


Beispiel: DerTagesreichweiten-Berater arbeitet mitOBJ_HLINE-Objekten. In den Tester-Fehlern:

Wird mit dem nächsten Build behoben.

 

Bild 1984 MQ Demo Server


 

Ich frage mich, ob noch jemand dieses Problem mit dem Baujahr 1983 hat? Der Multiwährungs-Tester weigert sich, Kaffee zu kochen, und scheint sich in einen Einwährungs-Tester verwandelt zu haben. Ich versuche, Balken für verschiedene Symbole abzurufen, aber egal, welches ich anfordere, es wird immer das Symbol zurückgegeben, das in den Einstellungen des Testers festgelegt ist.


Hier ist ein einfacher Expert Advisor, der einen Fehler blockiert.

int OnInit()
  {
      EventSetMillisecondTimer(200);
      return INIT_SUCCEEDED;
  }

void OnTimer()
{
      MqlRates aBarsCHFJPY[], aBarsEURUSD[], aBarsUSDCHF[];
      int countBars = CopyRates("CHFJPY", PERIOD_H1, 1, 1, aBarsCHFJPY)
         , countBars2 = CopyRates("EURUSD", PERIOD_H1, 1, 1, aBarsEURUSD)
         , countBars3 = CopyRates("USDCHF", PERIOD_H1, 1, 1, aBarsUSDCHF);
      
      ExpertRemove();
      return;
}

Ich schaue mir aBarsCHFJPY[0], aBarsEURUSD[0], aBarsUSDCHF[0] mit Debugging an, und sehe, dass sie absolut gleich sind (und welches genau, hängt von der Auswahl eines Symbols in den Testereinstellungen ab). Das Ändern des Testerdatums hat keine Auswirkungen auf irgendetwas. Die Zeicheneigenschaften scheinen jedoch korrekt zu sein. Zurückgerollt auf den Stand von 1966 - dort ist alles in Ordnung.