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

 

Guten Tag allerseits und tolle Gewinne!

Ich habe einen einfachen Expert Advisor mit VQL5 Wizard erstellt, der Code ist unten. Bitte helfen Sie mir, herauszufinden, warum die Funktion "Verfall von schwebenden Aufträgen (in Bars)" nicht funktioniert. Ich habe beliebige Signal_Expiration-Werte von 1 bis 1000 eingestellt, aber die Pending-Order existiert immer noch nur innerhalb eines Balkens. Ich füge auch Parametereinstellungen bei.

Zum Testen verwende ich ein Demokonto im Metatrader 5 Terminal, Build 2136.

Mit freundlichen Grüßen, Vladimir.

//+------------------------------------------------------------------+
//|                                                EA_MasterMQL5.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalITF.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedRisk.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title            ="EA_MB_MasterMQL5"; // Document name
ulong        Expert_MagicNumber      =1473;               //
bool         Expert_EveryTick        =false;              //
//--- inputs for main signal
input int    Signal_ThresholdOpen    =0;                 // Signal threshold value to open [0...100]
input int    Signal_ThresholdClose   =0;                 // Signal threshold value to close [0...100]
input double Signal_PriceLevel       =0.0;                // Price level to execute a deal
input double Signal_StopLevel        =50.0;               // Stop Loss level (in points)
input double Signal_TakeLevel        =50.0;               // Take Profit level (in points)
input int    Signal_Expiration       =4;                  // Expiration of pending orders (in bars)
input int    Signal_ITF_GoodHourOfDay=-1;                 // IntradayTimeFilter(-1,...) Good hour
input int    Signal_ITF_BadHoursOfDay=8389119;            // IntradayTimeFilter(-1,...) Bad hours (bit-map)
input int    Signal_ITF_GoodDayOfWeek=-1;                 // IntradayTimeFilter(-1,...) Good day of week
input int    Signal_ITF_BadDaysOfWeek=0;                  // IntradayTimeFilter(-1,...) Bad days of week (bit-map)
input double Signal_ITF_Weight       =1.0;                // IntradayTimeFilter(-1,...) Weight [0...1.0]
//--- inputs for money
input double Money_FixRisk_Percent   =10.0;               // Risk percentage
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalITF
   CSignalITF *filter0=new CSignalITF;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.GoodHourOfDay(Signal_ITF_GoodHourOfDay);
   filter0.BadHoursOfDay(Signal_ITF_BadHoursOfDay);
   filter0.GoodDayOfWeek(Signal_ITF_GoodDayOfWeek);
   filter0.BadDaysOfWeek(Signal_ITF_BadDaysOfWeek);
   filter0.Weight(Signal_ITF_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedRisk *money=new CMoneyFixedRisk;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set money parameters
   money.Percent(Money_FixRisk_Percent);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- ok
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+
 

Wird es für Entwickler anstelle von OrderCloseTime()? funktionieren?

Meine Erfahrung mit MQL5 ist der vierte Tag, aber ich habe schon die Nase voll!

Bringen Sie die OrderCloseTime() Funktion zurück, diese Position kann irgendwie programmatisch gemacht werden.... - Auftrag - dann Handel - dann Position, oder ist es so schwer, die Position maschinell zu berechnen?

//+------------------------------------------------------------------+
//| Check for close position conditions                              |
//+------------------------------------------------------------------+
//fxsaber

datetime TimCloseHisPos(){

datetime timCloseHisPos = 0;

if (!ticket1)
ticket1 = TradeClose.PositionOpen(_Symbol, ORDER_TYPE_BUY, 0.1, Ask_, Ask_ - 100 * Point_, Ask_ + 100 * Point_) ? TradeClose.ResultOrder() : 0;
else if (!PositionSelectByTicket(ticket1) && HistorySelectByPosition(ticket1) && HistoryDealGetString(ticket1,DEAL_SYMBOL)==_Symbol)
{
ENUM_ORDER_TYPE cmd = (ENUM_ORDER_TYPE)HistoryOrderGetInteger(HistoryOrderGetTicket(HistoryOrdersTotal() - 1), ORDER_TYPE);
double open = cmd ? Bid_ : Ask_;
double tp = open - (cmd ? 1 : -1) * 100 * Point_;
double sl = open + (cmd ? 1 : -1) * 100 * Point_;
ticket1 = TradeClose.PositionOpen(_Symbol, cmd, 0.1, open, sl, tp) ? TradeClose.ResultOrder() : 0;
}
//Pul-Adgi Mo-UlStan
if(HistoryDealSelect(ticket1))
{
//--- время совершения сделки в миллисекундах от 01.01.1970
timCloseHisPos=(datetime)HistoryDealGetInteger(ticket1,DEAL_TIME_MSC);
}
return(timCloseHisPos);
}
//+------------------------------------------------------------------+
 

Guten Tag zusammen!

Wenn es nicht zu viel Mühe ist, korrigieren Sie bitte den MQL4-Code, damit er in ML5 funktioniert.

int init()
   {

         info_init();                                                 // Вызов функции менеджера инициализации вывода информации на экран
         Fun_Label();                                                 // Вызов функции вывода информации на экран (чтобы сразу видно было)
    return(0);                                                        // Выход из init()
   }


int deinit()
   {
         info_deinit();                                               // Удаляем вывод информации на экран из блоков 1 - 8 
    return(0);                                                        // Выход из deinit()
   }


int start()
   {
         Fun_Label();                                                 // Ввод параметров для вывод информации на экран
    return(0);                                                        // Выход из start()
   }




void info_init()
   {
    info_init_1();  info(  0,".",Tan,8); // info( 10,".",Tan,8); info( 20,".",Tan,8); info( 30,".",Tan,8); // Tan - самое короткое название цвета
   }


void info_init_1()
   {
    for(int row = 0; row <= 9; row ++)                                           // row - номер текстовой метки (строки сообщения)
        {             
         info_LabelCreate( StringConcatenate( "InfoLabel_0", row ), 1000, 15 + 15*row ); // Вызов функции _LabelCreate
        }           // Передаются      string _Name, int _XDistance, int _YDistance
    }


void info_LabelCreate(string _Name, int _XDist, int _YDist, int _Corner = 0)       // Координаты: х = _XDist, у = _YDist, угол = _Corner.
   {
    int _GetLastError;

    if (!ObjectCreate(_Name, OBJ_LABEL, 0, 0, 0))          // Объекты с типом OBJ_LABEL игнорируют координаты, поэтому используем функцию ObjectSet()...
        {                                                  // ...  для установки свойств OBJPROP_XDISTANCE, OBJPROP_YDISTANCE и OBJPROP_CORNER
         _GetLastError = GetLastError();
         if (_GetLastError != 4200)                        // 4200 - Объект уже существует
             {
              Print("ObjectCreate(\"", _Name, "\", OBJ_LABEL,0,0,0) - Error #", _GetLastError);
             }
        }

    if (!ObjectSet(_Name, OBJPROP_XDISTANCE, _XDist))      // OBJPROP_XDISTANCE - Дистанция в пикселях по оси X от угла привязки
        {
         _GetLastError = GetLastError();
         Print("ObjectSet( \"", _Name, "\", OBJPROP_XDISTANCE, ", _XDist, ") - Error #", _GetLastError);
        }
    if (!ObjectSet(_Name, OBJPROP_YDISTANCE, _YDist))      // OBJPROP_YDISTANCE - Дистанция в пикселях по оси Y от угла привязки
        {
         _GetLastError = GetLastError();
         Print("ObjectSet( \"", _Name, "\", OBJPROP_YDISTANCE, ", _YDist, ") - Error #", _GetLastError);
        }
    if (!ObjectSet(_Name, OBJPROP_CORNER, _Corner))        // OBJPROP_CORNER - Угол графика для привязки графического объекта
        {
         _GetLastError = GetLastError();
         Print("ObjectSet( \"", _Name, "\", OBJPROP_CORNER, ", _Corner, ") - Error #", _GetLastError);
        }

    if (!ObjectSetText(_Name, "", 10))                     // Задаём размер шрифта (font_size)
        {
         _GetLastError = GetLastError();
         Print("ObjectSetText( \"", _Name, "\", \"\", 10 ) - Error #", _GetLastError);
        }
   }


void info_deinit() // Удаление объектов, созданных функцией info_init() для блоков 1-8 
   {
    int _GetLastError;
    for ( int row = 0; row <= 9; row ++ )
        {

         if ( !ObjectDelete( StringConcatenate( "InfoLabel_0", row ) ) )
             {_GetLastError = GetLastError(); Print( "ObjectDelete( \"", StringConcatenate( "InfoLabel_0", row ), "\" ) - Error #", _GetLastError ); }
        }
   }


void info(int LabelNumber, string Text, color Color = 17000000, double FontSize = -1.0, string Font = "-1")
   {
    //---- определяем имя объекта
    string LabelName;

    if ( LabelNumber <  10 )
         LabelName = StringConcatenate( "InfoLabel_0", LabelNumber );  // Обязательно "0" впереди перед ОДИНОЧНЫМИ цифрами

    color  lastusedColor    = Black;
    double lastusedFontSize = 9.0;
    string lastusedFont     = "Arial";

    //---- если значения дополнительных параметров не задавались, устанавливаем последние используемые значения
    if(Color == 17000000) Color    = lastusedColor;           // 0-чёрный, 16 777 215-белый, 17000000-цвета нет
    if(FontSize < 0)      FontSize = lastusedFontSize;
    if(Font == "-1")      Font     = lastusedFont;

    //---- запоминаем последние используемые значения
    lastusedColor    = Color;
    lastusedFontSize = FontSize;
    lastusedFont     = Font;

    //---- отображаем новый текст
    if(!ObjectSetText(LabelName, Text, FontSize, Font, Color))
        {
         int _GetLastError = GetLastError();
         Print("ObjectSetText( \"", LabelName,"\", \"", Text, "\", ", FontSize, ", ", Font, ", ", Color, " ) - Error #", _GetLastError);
        }
    //---- перерисовываем объекты
    ObjectsRedraw();
   }


void Fun_Label()                                                      // Ввод параметров для вывод информации на экран
   {
    info(  0, "x", Magenta, 8 );
    info(  1, "x", Magenta, 8 );
    info(  2, "x", Magenta, 8 );
    info(  3, "x", Magenta, 8 );
    info(  4, "x", Magenta, 8 );
    info(  5, "x", Magenta, 8 );
    info(  6, "x", Magenta, 8 );
    info(  7, "x", Magenta, 8 );
    info(  8, "x", Magenta, 8 );
    info(  9, "x", Magenta, 8 );
   }
 

Beobachten Sie unnatürliches Verhalten des Bahnsteigs.

1. Die ME5 behält nicht die Schnittstelleneinstellungen bei, die beim Ausschalten vorhanden waren. Insbesondere verschwindet das Einstellungsfeld. Kann wiederhergestellt werden, muss aber bei jedem Einschalten erneut durchgeführt werden.

2. Ich mache einen Indikator. Die Änderung der Indikatoreinstellungen im MT5 führt in der Regel zu einem Fehler: Die Form der Linien ändert sich erheblich, die Farbe kann nicht geändert werden usw.
Und wenn Sie die Einstellungen in einem neu installierten Indikator ändern, funktioniert alles wie geplant.

Probleme:

1. Liegt es nur an mir oder ist es ein allgemeines Problem?
2. Wenn ich etwas übersehen oder falsch gemacht habe, bitte ich um einen Rat.

 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL4 MT4 MetaTrader 4 Anfängern" verschoben.
 
Leo59:

Guten Tag zusammen!

Wenn es nicht zu viel Mühe ist, korrigieren Sie bitte den MQL4-Code, damit er in ML5 funktioniert.

Zunächst einmal müssen Sie die Systemfunktionen richtig schreiben. Am einfachsten geht das in MetaEditor 5 über das Menü Datei - Erstellen - Expert Advisor (Vorlage). Vergleichen Sie Ihren Code mit meinem:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input int      Input1=9;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
Wenn Sie es korrigiert haben, machen wir weiter ...
 
Pul-Adgi Mo-UlStan:

Wird es für Entwickler anstelle von OrderCloseTime()? funktionieren?

Meine Erfahrung mit MQL5 ist der vierte Tag, aber ich habe schon die Nase voll!

Bringen Sie die OrderCloseTime() Funktion zurück, diese Position kann irgendwie programmatisch gemacht werden.... - Auftrag - dann Handel - dann Position, oder ist es so schwierig, die Position maschinell zu berechnen?

Was genau wollen Sie bekommen? Benötigen Sie den Zeitpunkt des letzten Handels(Art des Handels "Marktaustritt")? Oder möchten Sie den Schlusszeitpunkt einer Position in der Handelshistorie erfahren?

 
User_mt5:

Beobachten Sie das unnatürliche Verhalten der Plattform.

1. Die ME5 behält nicht die Schnittstelleneinstellungen bei, die beim Ausschalten vorhanden waren. Insbesondere verschwindet das Einstellungsfeld. Sie kann wiederhergestellt werden, aber das muss bei jedem Einschalten geschehen.


Wer ist ICH? Wer ist das Einstellungspanel?

 
Vladimir Karputov:

Wer ist ICH? Wer ist das Einstellungspanel?

ME = MetaEditor.

Das Einstellungsfeld ist mein Vorbehalt. Ich meine die Symbolleiste mit den Schaltflächen, einschließlich Compile.
(Ich sagte "Einstellungen" aus Trägheit - ich bin es mit MT5, der auch mit dem Indikator-Einstellungsfeld zu kämpfen hat)

Build 2138 vom 06.09.2019.
 
User_mt5:

ME = MetaEditor.

Das Einstellungsfeld ist mein Vorbehalt. Ich meine die Symbolleiste, die Schaltflächen wie Compile enthält.
(Ich sagte "Einstellungen" aus Trägheit - ich bin es mit MT5, der sich auch mit dem Einstellungsfeld der Indikatorparameter beschäftigt)

Build 2138 vom 06.09.2019.

Bitte geben Sie an, bei welchem Gerät dies der Fall ist:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Vladimir Karputov, 2019.07.31 12:12

Geben Sie diese Daten an:

drei Zeilen aus der Registerkarte "Log" kopieren (drei Zeilen markieren -> rechte Maustaste -> Kopieren)


und fügen Sie es in Ihre Nachricht ein. Sie sollten etwa so etwas erhalten:

2019.07.31 11:53:10.681 MetaTrader 5 x64 build 2093 started (MetaQuotes Software Corp.)
2019.07.31 11:53:10.685 Windows 10 (build 18362) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3188 / 8077 Mb, Disk: 99 / 415 Gb, GMT+2
2019.07.31 11:53:10.685 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

Beschreiben Sie dann Schritt für Schritt und mit Screenshots, was genau bei Ihnen los ist.
Grund der Beschwerde: