新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1219

 

在一个类函数中声明的静态变量 对该类的所有实例都是直通的?

出于某种原因,我期望它在每个实例中都是不同的。

替代方法只有班级层面的变量,还是有其他一些棘手的方法?

 

你好!我需要指定保存文件的路径,更确切地说,是保存打勾历史。帮助解决这个问题 )

//------------------------------------------------------------------
#property copyright "www.forex-tsd.com"
#property link      "www.forex-tsd.com"
//------------------------------------------------------------------
#property indicator_chart_window

//
//
//
//
//

extern string FileName   = "Ticks.csv";
extern bool   SaveVolume = true; 
int fileHandle;

MqlBookInfo book[];

//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//

int  OnInit()                   
{ 
   MarketBookAdd(_Symbol); 
      fileHandle = FileOpen(Symbol()+" - "+FileName,FILE_WRITE|FILE_SHARE_READ|FILE_ANSI|FILE_CSV); 
      return(0); 
}
void OnDeinit(const int reason) 
{
   MarketBookRelease(_Symbol);
   FileClose(fileHandle);
}

//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//

int OnCalculate(const int rates_total, const int prev_calculated, const datetime &Time[],
                const double &Open[], const double &High[], const double &Low[], const double &Close[],
                const long &TickVolume[], const long &Volume[], const int &Spread[])
{                
   if (fileHandle <0)
   {
      static bool alerted = false;
         if (!alerted)
         {
            Alert("File : "+Symbol()+" - "+FileName+" could not be opened"); alerted = true;
         }
         return(0);
   }         

   //
   //
   //
   //
   //
   
   bool bget = MarketBookGet(_Symbol,book);
   int bidVolume = 0;
   int askVolume = 0;

      if (bget)
      {
         int    size = ArraySize(book);
         string info = "\n";
            for (int i=0; i<size; i++)
               {
                  if (book[i].type==BOOK_TYPE_SELL) askVolume += (int)book[i].volume;
                  if (book[i].type==BOOK_TYPE_BUY)  bidVolume += (int)book[i].volume;
               }                  
      }            
      
   if (FileSize(fileHandle) == 0)
         FileWriteString(fileHandle,"date and time,bid,ask,bid volume,ask volume\n");
         if (SaveVolume)
               FileWriteString(fileHandle,TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS)+","+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits)+","+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits)+","+DoubleToString(bidVolume,0)+","+DoubleToString(askVolume,0)+"\n");
         else  FileWriteString(fileHandle,TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS)+","+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits)+","+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits)+"\n");
         FileFlush(fileHandle);
   return(0);
}
 

@NeuralNetwork

文件打开

该文件在客户终端的子文件夹MQL5\Files(或在测试的情况下agent_folder\MQL5\Files)中打开。

如果在标志中指定了FILE_COMMON,文件将在所有客户终端的公共文件夹(Terminal\Common\Files)中打开

--

只能通过 "符号链接 "到另一个位置

      fileHandle = FileOpen(Symbol()+" - "+FileName,FILE_WRITE|FILE_SHARE_READ|FILE_ANSI|FILE_CSV);    // FILE_COMMON 



 
NeuralNetwork:
非常感谢您!但是,我想通过指定另一个驱动器或文件夹来设置文件的保存路径。我做不到...

https://www.mql5.com/ru/docs/files

3线

Документация по MQL5: Файловые операции
Документация по MQL5: Файловые операции
  • www.mql5.com
Из соображений безопасности в языке MQL5 строго контролируется работа с файлами. Файлы, с которыми проводятся файловые операции средствами языка MQL5, не могут находиться за пределами файловой "песочницы". общая папка всех установленных на компьютере терминалов  – обычно расположена в каталоге C:\Documents and Settings\All Users\Application...
 
Fast235:

@NeuralNetwork

文件打开

该文件在客户终端的子文件夹MQL5\Files(或在测试的情况下agent_folder\MQL5\Files)中打开。

如果在标志中指定了FILE_COMMON,文件将在所有客户终端的公共文件夹(Terminal\Common\Files)中打开

--

只能通过 "符号链接 "到另一个位置



非常感谢您!
 
Roman Shiredchenko:


管理员和版主将如何解决机器人写 歪了的问题?

 

请告知是否有可能在专家顾问代码中获得每周时间框架的RSI值,但要计算一周的值,不是从周一开始,而是从周三开始(即从周三到下周三的一周)。 我知道这对iRSI不起作用,因为它需要周线,而它们从周一开始。

到目前为止,我只看到一种计算方法。是否有更简单的解决方案或现成的解决方案?

 
Roman Shiredchenko:

大喊大叫,咒骂,不想让自己的代码工作,指责版主和管理员,侮辱版主和管理员......。

总的来说--整个包装。我将给你一个星期的时间来冷静下来,整理你的错误。想得真周到!

 
Valeriy Yastremskiy:

要核算一张票。

在开立订单时,必须记住票据的内容。

谢谢你
 
Valeriy Yastremskiy:

标志要么控制订单类型 的数量,要么如果有票控制市场订单的关闭时间,如果不等于零,那么订单已经关闭,订单打开标志为假。

谢谢,已经得到了,人们建议)))))))😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃😃
原因: