错误、漏洞、问题 - 页 670

 

是否有任何计划重新设计江恩网格?绝对不可能使用它:无论是手动,还是通过extremums,就像在MT4中,我都不能正确地拉伸或固定它--当从TF切换到TF时,单元格的大小会发生变化,没有固定的绑定!这是不可能的。也许我不明白什么......。

M1M5

 

只有Alpari上的金属不显示柱状和OHLC,其他都很好。我把终端移到一个新的文件夹,但没有帮助。错误在哪里?W7 64

 
BoraBo:

只有Alpari上的金属不显示柱状和OHLC,其他都很好。我把终端移到一个新的文件夹,但没有帮助。错误在哪里?W7 64

我有同样的问题。我已经感觉到,服务器上出了问题。请联系Alpari技术支持。

 
void OnStart()
  {
//---
symbol2csv(Symbol(),Period());
  }
//+------------------------------------------------------------------+
int symbol2csv(string smb,ENUM_TIMEFRAMES tf)
  {
   ResetLastError();
   int filehandle=FileOpen(smb+"_"+tf2str(tf)+".csv",FILE_WRITE|FILE_CSV,",");
   if(filehandle!=INVALID_HANDLE)
     {
      MqlRates rates[];
      int i=0,copyed=CopyRates(smb,tf,From,To,rates);
      ArraySetAsSeries(rates,false);
      FileWrite(filehandle,"\"Date\" \"Time\" \"Open\" \"High\" \"Low\" \"Close\" \"Volume\""); // writing header
      for(i=0;i<copyed;i++)
        {
         FileWrite(filehandle,TimeToString(rates[i].time,TIME_DATE),TimeToString(rates[i].time,TIME_MINUTES),DoubleToString(rates[i].open,_Digits),DoubleToString(rates[i].high,_Digits),DoubleToString(rates[i].low,_Digits),DoubleToString(rates[i].close,_Digits),rates[i].real_volume);
        }
      FileClose(filehandle);
      Print(smb+" exported "+IntegerToString(copyed));
      return copyed;
     }
   else Print("FileOpen failure. Error is ",GetLastError());
   return -1;
  }
为什么文件中的体积栏总是包含0?那我如何记录音量呢?
 
Graff:
为什么文件中的体积栏总是包含0?以及如何使体积被写入?

外汇工具的real_volume?

也许只是尝试tick_volume 作为开始

 

有什么错误呢?

以下是代码,已缩减到最小。

//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

//---------- MQL5 --------------
int ecx = 0;//-- Кол-во тестируемых пар --
string g_s_SymbolsTrade[] = {"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD","CADCHF","CHFJPY","EURAUD","EURCAD","EURCHF","EURGBP","EURJPY","EURNZD","EURUSD",
"GBPCHF","GBPJPY","GBPUSD","NZDUSD","USDCAD","USDCHF","USDJPY"};

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   //-- Сколько всего валютных пар --
   ecx = ArraySize(g_s_SymbolsTrade);
   //-- Установить таймер на каждую секунду --
   if (EventSetTimer(1) == false) return(-1);//int 08
   
   return(0);//ret;
}
//----------------------------------------------------------------------------//
void OnDeinit(const int reason)
{
   EventKillTimer();//timer off
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 &tick_volume[],
                const long &volume[],
                const int &spread[])
{
    
//--- return value of prev_calculated for next call
   return(rates_total);//ret;
}

//+------------------------------------------------------------------+
////////////////////////////////////////////////////////////////////////////////
//                           Expert Timer function                            //
////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
void OnTimer()//int 08
{
static bool b_Flag = false;
string db_SymbolName;
MqlRates rates[];
int edx;

   if (b_Flag == true) return;//ret -- реентерабельность --
   b_Flag = true;//cli
   //---------------------------------------------
   for (int ebx = 0; ebx < ecx; ebx++){
      db_SymbolName = g_s_SymbolsTrade[ebx];
      edx=CopyRates(db_SymbolName,_Period,0,1,rates);
      if (edx != 1){//cmp edx,1 | jne
         b_Flag = false;//sti
         return;//jne ret;
      }   
   }//loop ecx       
   Print ("Загрузка завершена.");
   //---------------------------------------------
   b_Flag = false;//sti
}

当我运行它时,有时立即或在切换一段时间的图表后,突然终端开始变慢,整个日志都被这个堵塞了。


原因是什么,是我的错误还是函数CopyRates中的错误?

 
pusheax:

原因是什么,是我的错还是CopyRates函数 的错误?

他们俩都是。

这样试试吧。

void OnTimer()//int 08
{
static bool b_Flag = false;
if (b_Flag == true) return;//ret -- реентерабельность --
string db_SymbolName;
MqlRates rates[ ecx];    // поправка здесь.
int edx;


   b_Flag = true;//cli
   //---------------------------------------------
   for (int ebx = 0; ebx < ecx; ebx++){
      db_SymbolName = g_s_SymbolsTrade[ebx];
      edx=CopyRates(db_SymbolName,_Period,0,1,rates);
      if (edx != 1){//cmp edx,1 | jne
         b_Flag = false;//sti
         return;//jne ret;
      }   
   }//loop ecx       
   Print ("Загрузка завершена.");
   //---------------------------------------------
   b_Flag = false;//sti
}
 
MetaDriver:

他们俩都是。

像这样试试吧。


不,不幸的是,这并没有帮助。

我以如下方式写的:MqlRates rates[100];

otherwise: MqlRates rates[ecx]; - gives out a compilation error.

我也喜欢把它移到顶部的想法。

if (b_Flag == true) return;//ret -- 重入性 --

但不幸的是,结果是一样的。

有其他想法吗?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 
papaklass:

如果图表设置 中终端的条数是无限的。减少条子的数量。

它似乎只复制了一个酒吧。
 
papaklass:

因此,在25种乐器上。我在12岁时也有同样的情况,直到我减少了条数

那么它的意思是服务化。终端在读取1 条数据时,不应该从磁盘上逐个符号地吐出所有 历史数据。

即使它被设置为无限。 缓存应该以一种聪明的方式进行。

--

总的来说是好建议。我一直在想--他说的是 "转换经期时"。因此,终端以分钟为单位存储所有的东西,它开始计算缺失的周期,并被卡在缓冲区内存不足的情况下。

简而言之--两者都有责任。推送没有购买内存,想要很多很多的货币对,而且没有限制(或大约没有限制)。

而MQ--不把它当作一个指标性错误(如 "错误XXXX:闭上你的嘴唇,同志"),而只把它当作自己的。