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

 

Guten Tag. Meine Frage mag vielen Leuten unglaublich dumm vorkommen, ich entschuldige mich, ich bin noch ein Anfänger in diesem Geschäft, ich kann nicht herausfinden, was falsch ist.

Ich habe eine Textdatei in MQL5\Files\date.txt erstellt und kann sie nicht öffnen. Der Fehler 5004 wird geschrieben. Bitte helfen Sie mir, wenn Sie können.

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

int OnInit()
  {
   return(0);
  }
  
void OnDeinit(const int reason)
  {
   return;
  }
  
void OnTick()
  {
   ResetLastError();
   int Handle=FileOpen("date.txt",FILE_CSV|FILE_READ|FILE_WRITE|FILE_COMMON,';');
   if(Handle==-1)   
     { 
     Print("Файл не открыт, ошибка: ", GetLastError());     
     }
   return;
  }
 
olegin038:

Guten Tag. Meine Frage mag vielen Leuten unglaublich dumm vorkommen, ich entschuldige mich, ich bin noch ein Anfänger in diesem Geschäft, ich kann nicht herausfinden, was falsch ist.

Ich habe eine Textdatei in MQL5\Files\date.txt erstellt und kann sie nicht öffnen. Der Fehler 5004 wird geschrieben. Bitte helfen Sie, wenn Sie können.

Wenn sich Ihre Datei nicht im gemeinsamen Ordner der MT5-Client-Terminals befindet (was in Ihrem Fall der Fall ist),

Sie müssen das Flag FILE_COMMON entfernen:

void OnTick()
  {
   ResetLastError();
   int Handle=FileOpen("date.txt",FILE_CSV|FILE_READ|FILE_WRITE,';');
   if(Handle==-1)   
     { 
     Print("Файл не открыт, ошибка: ", GetLastError());     
     }
   return;
  }
 
Fleder:

Wenn sich Ihre Datei nicht im gemeinsamen Ordner der MT5-Client-Terminals befindet (was in Ihrem Fall der Fall ist),

Das Flag FILE_COMMON muss entfernt werden:

Danke für die Hilfe, aber leider hat sie nicht geholfen. Ich habe viele Varianten mit den Flaggen ausprobiert. Außerdem wird der Fehler 5004 geschrieben. Gibt es noch etwas, das ich versuchen sollte?
 
olegin038:
Danke für die Hilfe, aber leider hat sie nicht geholfen. Ich habe viele Optionen mit den Flaggen ausprobiert. Außerdem wird der Fehler 5004 geschrieben. Gibt es noch etwas, das ich versuchen kann?

Versuchen Sie, sie einfach als Textdatei zu öffnen:

void OnTick()
  {
   ResetLastError();
   int Handle=FileOpen("date.txt",FILE_TXT|FILE_READ|FILE_WRITE);
   if(Handle==-1)   
     { 
     Print("Файл не открыт, ошибка: ", GetLastError());     
     }
   return;
  }
 
Fleder:

Versuchen Sie, sie einfach als Textdatei zu öffnen:

Es hat auch nicht funktioniert. Ich habe noch nie mit Dateien gearbeitet. Müssen Sie hier nicht noch etwas verschreiben?
 
olegin038:
Es hat auch nicht funktioniert. Ich habe noch nie mit Dateien gearbeitet. Müssen Sie hier nicht noch etwas tun?

Ja, Sie müssen darauf achten, die Datei zu schließen:

void OnTick()
  {
   ResetLastError();
   int Handle=FileOpen("date.txt",FILE_CSV|FILE_READ|FILE_WRITE,';');
   if(Handle==-1)   
     { 
     Print("Файл не открыт, ошибка: ", GetLastError());     
     }
   FileClose(Handle);
   return;
  }
 
Fleder:

Ja, Sie müssen die Datei immer schließen:

Ich danke Ihnen vielmals! Das hat wirklich geholfen. Der Fehler wird nicht mehr angezeigt.
 
Ich werde die Kurse bedeutender Autoren aus meiner persönlichen Bibliothek weitergeben.
Yerin, Bazhenov, Strmzh, Lukyanov, Cheryomushkin, Herchik, Alex Million, etc.
Praktisch alle Kurse dieser Autoren.
Fragen Sie.

 
Abramboss:
Gemeinsame Nutzung von Kursen prominenter Autoren aus meiner persönlichen Bibliothek.
Yerin, Bazhenov, Strmzh, Lukyanov, Cheryomushkin, Herchik, Alex Million, etc.
Praktisch alle Kurse dieser Autoren.
Fragen Sie.

Kostenlos teilen? Interessiert an Gerchik.
 

Hallo zusammen, ich brauche Hilfe mit dem berühmten CrossArbitr Indikator. Der Code ist natürlich nicht von mir. Er benötigte einige Informationen, die er nicht ausgibt. Also, der Reihe nach.

Ich habe die Variablendouble n, m hinzugefügt;

"\nDifferenz BID Synthetisch und Real =", n=(CalcBid-Bid),

"\, Differenz ASK Synthetisch und Real =", m=(CalcAsk-Ask),

"\nTotal =" (m - n) <----

Es endet fluchend bei dem Minus in dieser Klammer (einige Operatot erwartet). Wer kann mir sagen, was ich falsch mache?

//+------------------------------------------------------------------+
//|                                                  CrossArbitr.mq4 |
//|                                                        Scriptong |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Scriptong"
#property link      ""

#property indicator_chart_window
//---- input parameters
extern bool      ShowBid=false;
extern bool      ShowAsk=false;
extern color     BidColor = Lime;
extern color     AskColor = Yellow;
extern int       AlarmIfPointDifference = 10;
extern string    AlarmFile = "wait.wav"; 


bool Activate = False;
string FP, SP;
double Tick;
int WayForCross;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   string S = Symbol();
   if(StringFind(S, "USD", 0) != -1)
     {
      Comment("Индикатор работает только с кроссовыми парами (GBPJPY, EURJPY, EURGBP и т. д)!");
      return(0);
     }

   if(StringLen(S) != 6)
     {
      Comment("Индикатор работает только с валютными парами, у которых название состоит из шести символов!");
      return(0);
     }
     
   // Поиск первой валютной пары кросса
   FP = StringSubstr(S, 0, 3)+"USD";
   MarketInfo(FP, MODE_BID);
   if(GetLastError() > 0)
     {
      FP = "USD"+StringSubstr(S, 0, 3);
      MarketInfo(FP, MODE_BID);
      if(GetLastError() > 0)
        {
         Comment("Невозможно найти инструмент ", FP, " или ", StringSubstr(S, 0, 3)+"USD. Необходимо добавить его в Обзоре рынка и перезапустить индикатор.");
         return(0);
        } 
     } 
   // --------------------------------------  
     
   // "Создание" второй валютной пары кросса
   SP = "USD"+StringSubstr(S, 3, 3);
   MarketInfo(SP, MODE_BID);
   if(GetLastError() > 0)
     {
      SP = StringSubstr(S, 3, 3)+"USD";
      MarketInfo(SP, MODE_BID);
      if(GetLastError() > 0)
        {
         Comment("Невозможно найти инструмент ", SP, " или ", StringSubstr(S, 3, 3)+"USD. Необходимо добавить его в Обзоре рынка и перезапустить индикатор.");
         return(0);
        } 
     } 
   // --------------------------------------  

   // Определение пути синтеза кросса
   if (StringFind(FP, "USD") == 3 && StringFind(SP, "USD") == 0)
     WayForCross = 1;
   if (StringFind(FP, "USD") == 0 && StringFind(SP, "USD") == 0)
     WayForCross = 2;
   if (StringFind(FP, "USD") == 3 && StringFind(SP, "USD") == 3)
     WayForCross = 3;
   if (StringFind(FP, "USD") == 0 && StringFind(SP, "USD") == 3)
     WayForCross = 4;
   // -------------------------------

   Tick = MarketInfo(Symbol(), MODE_TICKSIZE);
   
   Activate = True;  
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
   if(ObjectFind("CrossBid") == 0)
     ObjectDelete("CrossBid");
   if(ObjectFind("CrossAsk") == 0)
     ObjectDelete("CrossAsk");
   
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//| Приведение значений к точности одного тика                       |
//+------------------------------------------------------------------+
double ND(double A)
{
 return(NormalizeDouble(A, Digits));
}  

//+------------------------------------------------------------------+
//| Расчет значения синтетического бида                              |
//+------------------------------------------------------------------+
double CalcBidWayForCross()
{
 switch (WayForCross)
   {
    case 1: return(ND(MarketInfo(FP, MODE_BID)*MarketInfo(SP, MODE_BID)));
    case 2: return(ND(MarketInfo(SP, MODE_BID)/MarketInfo(FP, MODE_ASK)));
    case 3: return(ND(MarketInfo(FP, MODE_BID)/MarketInfo(SP, MODE_ASK)));
    case 4: return(1/(ND(MarketInfo(FP, MODE_ASK)*MarketInfo(SP, MODE_BID))));
   }
}

//+------------------------------------------------------------------+
//| Расчет значения синтетического аска                              |
//+------------------------------------------------------------------+
double CalcAskWayForCross()
{
 switch (WayForCross)
   {
    case 1: return(ND(MarketInfo(FP, MODE_ASK)*MarketInfo(SP, MODE_ASK)));
    case 2: return(ND(MarketInfo(SP, MODE_ASK)/MarketInfo(FP, MODE_BID)));
    case 3: return(ND(MarketInfo(FP, MODE_ASK)/MarketInfo(SP, MODE_BID)));
    case 4: return(1/(ND(MarketInfo(FP, MODE_BID)*MarketInfo(SP, MODE_ASK))));
   }
}

  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   if(!Activate)
    return(0);

   // Расчет синтетических Bid и Ask
   double CalcBid = CalcBidWayForCross();  
   RefreshRates();
   double CalcAsk = CalcAskWayForCross();  
   double n, m;
   // -------------------------------

   // Рисуем уровень синтетического Bid
   if (ShowBid)
     {
      if(ObjectFind("CrossBid") == -1)
        {
         ObjectCreate("CrossBid", OBJ_HLINE, 0, 0, CalcBid); 
         ObjectSet("CrossBid", OBJPROP_COLOR, BidColor);
         ObjectSet("CrossBid", OBJPROP_STYLE, STYLE_DOT);
        } 
       else
        if(!ObjectMove("CrossBid", 0, 1, CalcBid))
           Print("Ошибка перемещения №", GetLastError());
     }
   // ----------------------------------        

   // Рисуем уровень синтетического Ask
   if(ShowAsk)
    {
     if(ObjectFind("CrossAsk") == -1)
       {
        ObjectCreate("CrossAsk", OBJ_HLINE, 0, 0, CalcAsk); 
        ObjectSet("CrossAsk", OBJPROP_COLOR, AskColor);
        ObjectSet("CrossAsk", OBJPROP_STYLE, STYLE_DOT);
       } 
      else
       ObjectMove("CrossAsk", 0, 1, CalcAsk);
    }
   // ----------------------------------        

   Comment("Реальный BID = ", DoubleToStr(Bid, Digits), ", реальный ASK = ", DoubleToStr(Ask, Digits), 
           "\nСинтетик BID = ", DoubleToStr(CalcBid, Digits), ", синтетик ASK = ", DoubleToStr(CalcAsk, Digits),
           "\nРазница BID Синтетика и Реального =", n=(CalcBid-Bid),
           "\, Разница ASK Синтетика и Реального =", m=(CalcAsk-Ask),
           "\nИтог =" (m - n)
           );

   // Выдаем звуковой сигнал о превышении минимальной разности
   if(ND(MathAbs(CalcBid-Bid)) >= ND(AlarmIfPointDifference*Point))
     PlaySound(AlarmFile);
   // --------------------------------------------------------  
    
//----
   return(0);
  }
//+------------------------------------------------------------------+