初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 246

 

こんにちは。私の質問は多くの人にとって信じられないほど愚かなことに見えるかもしれません、申し訳ありません、私はまだこの仕事の初心者です、何が間違っているのかわかりません。

MQL5Filesにテキストファイルを作成したのですが、開くことができません。エラー5004が書き込まれている。できれば助けてください。

#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:

こんにちは。私の質問は多くの人々にとって信じられないほど愚かなことに見えるかもしれません、申し訳ありません、私はまだこの仕事の初心者です、何が間違っているのかわかりません。

MQL5Filesにテキストファイルを作成したのですが、開くことができません。エラー5004が書き込まれている。可能であれば、ご協力ください。

MT5クライアント端末の共有フォルダにファイルがない場合(あなたの場合はそうなっています)。

FILE_COMMON フラグを削除する必要があります。

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

MT5クライアント端末の共有フォルダにファイルがない場合(あなたの場合はそうなっています)。

FILE_COMMON フラグを削除する必要があります。

ありがとうございました。しかし、残念ながら役に立ちませんでした。フラッグでいろいろなバリエーションを試した。また、エラー5004を書き込みます。他に試すべきことはありますか?
 
olegin038:
ありがとうございました。しかし、残念ながら役に立ちませんでした。フラッグでいろいろなオプションを試した。また、エラー5004を書き込みます。他に何か試せることはありますか?

単純にテキストファイルとして開いてみてください。

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

単純にテキストファイルとして開いてみてください。

それもうまくいかなかった。ファイルを扱うのは初めてです。ここで余計な処方をする必要はないのでしょうか?
 
olegin038:
それもうまくいかなかった。ファイルを扱うのは初めてです。ここで余計なことをする必要はないのでしょうか?

はい、必ずファイルを閉じる 必要があります。

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

はい、必ずファイルを閉じて ください。

本当にありがとうございました。本当に助かりました。エラーが表示されなくなりました。
 
私の個人的なライブラリーの中から、著名な作家のコースを紹介します。
イエリン、バジェノフ、ストルムジ、ルキヤノフ、チェリョームシキン、ヘルヒク、アレックス・ミリオンなど。
これらの著者の講座は事実上すべて。
聞く。

 
Abramboss:
個人蔵の著名な作家の講座を共有する。
イエリン、バジェノフ、ストルムジ、ルキヤノフ、チェリョームシキン、ヘルヒク、アレックス・ミリオンなど。
これらの著者の講座は事実上すべて。
聞く。

無料でシェアする?ゲルヒクに興味を持つ。
 

皆さんこんにちは!有名なCrossArbitrインジケーターについて教えてください。もちろん、このコードは私のものではありません。出力しない情報を必要とした。だから、順番に。

変数double n, m を追加しました。

"ⅳBID Synthetic and Real =", n=(CalcBid-Bid)です。

"ⅳ、差分ASK合成と実数=", m=(CalcAsk-Ask)です。

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

この括弧内のマイナスに悪態をついて終わりです(一部オペアト予想)。何が間違っているのか、誰が教えてくれるのだろう?

//+------------------------------------------------------------------+
//|                                                  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);
  }
//+------------------------------------------------------------------+
理由: