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

 
Alexey Viktorov:

仔细阅读文档和示例代码。你的循环没有正确组织起来。

不要告诉我for和while循环的工作方式是一样的。这不是问题,问题是突出的线条。

谢谢,我已经读过了(这是我的起点)。

在我的代码中一切正常,只是在MT4中出现了一个小问题,图表是8,但看到的却是7(

2021.03.10 11:59:23.914 Label EURCAD,M15: 9/
2021.03.10 11:59:23.914 Label EURCAD,M15: 8/
2021.03.10 11:59:23.914 Label EURCAD,M15: 7/
2021.03.10 11:59:23.914 Label EURCAD,M15: 6/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 5/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 4/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 3/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 2/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 1/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 0/EURUSD
 
不太可能。我对平台犯了多少次罪,结果都是我自己错了。
 
Aleksei Stepanenko:
不太可能。有多少次我责备平台,结果总是自己错了。
看不到某个特定的图表,可以看到其他所有的图表,如果我添加新的图表,可以看到它们
 
long currChart=ChartFirst();
int i=0;
while(currChart>=0)
  {
  Print(i,ChartSymbol(currChart)," ID =",currChart);
  currChart=ChartNext(currChart); // на основании предыдущего получим новый график
  i++;// не забудем увеличить счетчик
  }

你为什么不试试这个?

 
Aleksei Stepanenko:

你为什么不试试这个?

同样的事情。

2021.03.10 12:45:48.434 Label EURCAD,M15: 8/
2021.03.10 12:45:48.434 Label EURCAD,M15: 7/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 6/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 5/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 4/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 3/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 2/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 1/EURUSD
 

为什么印刷会有所不同?不同的代码?

Print(i,ChartSymbol(currChart)," ID =",currChart);
2021.03.10 12:45:48.434 Label EURCAD,M15: 1/EURUSD

有多少个图表是开放的,哪些图表?符号,周期。

展开的/未折叠的?
 
MakarFX:

谢谢,这是我读到的(这是我开始的地方)。

在我的代码中一切正常,只是在MT4中出现了一个小问题,图表是8,但看到的却是7(

非常糟糕的阅读。可能就像学校里的强迫阅读。我读过它,但没有任何东西印在我的脑子里。

这里 有一个例子。那里的目的是不同的,但仍然是公开图表的列举不因列举的目的而改变。

或者这里的代码是

/********************Script program start function*******************/
void OnStart()
 {
  long prevChart = 0;
  int i = 0;
  do
   {
    prevChart = ChartNext(prevChart);
    ChartSetInteger(prevChart, CHART_BRING_TO_TOP, 0, true);
    Sleep(200);
    i++;
   }
  while(prevChart >= 0);
 }/*******************************************************************/
Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2021.01.15
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Aleksei Stepanenko:

为什么印刷会有所不同?不同的代码?

有多少个图表是开放的,哪些图表?符号,周期。

展开的/未折叠的?
Alexey Viktorov:

非常糟糕的阅读。一定是像在学校里被强迫阅读。我的意思是,我读了它,但没有什么东西留在我的脑海里。

这里 有一个例子。那里的目标是不同的,但仍旧是根据这种列举的目的,对开放图表的列举不会改变。

或者这里的代码是

该问题已被删除,通过重启终端,问题得到了解决

 

帮助我避免这段代码中的数组超出范围

double GetExtremumZigZagPriceHigh(string symbol="",ENUM_TIMEFRAMES timeframe=0,int extremum_number=0)//,int depth=12,int deviation=5,int backstep=3)
  {
   if(symbol=="") //Если symbol = "" , то..
      symbol=Symbol(); //Присвоить переменной symbol значение текущего символа на графике.

//Объявить необходимые переменные:
   double price[];                                                 //Цена экстремума выбранная из массива таймсерии.
//datetime time[];
   int    count;                                                   //Счетчик цикла.
int bars_quantity=1000; //Количество баров на графике.
int extremum_count=0;                                           //Счетчик экстремумов.

   ArraySetAsSeries(price,true);                   //Устанавить флаг, чтобы индексация массива производилась как в таймсериях.
   CopyBuffer(handle,1,0,bars_quantity,price);     //Скопировать в динамический массив price[] цены указанного количества баров.

   for(count=1; count<bars_quantity; count++) //Запустить цикл, который будет бежать по каждому бару.
     {
      if(price[count]!=0) //Если Цена Зигзага есть, то есть не равна нулю, то..
        {
         extremum_count++;        //Увеличить счетчик экстремумов на одну единицу.

         if(extremum_count>extremum_number) //Если счетчик экстремумов превысил значение указанного номера экстремума, то..
            return(price[count]);                 //Вернуть эту цену.
        }
     }
//Print("GetExtremumZigZagPrice(): Экстремум ЗигЗага ",extremum_number," не найден"); //А до тех пор, пока ЗигЗаг не показывает цену,
   return(0);                                                                          //Печатать Print, и возвращать ноль.
  }

就是这个位置被扔掉了。

if(price[count]!=0)
 
CopyBuffer

Возвращаемое значение

复制的数组元素的数量,或者在出错的情况下为-1。

注意事项

当向一个指标请求数据时,如果请求的时间序列尚未建立或需要从服务器下载,该函数将立即返回-1,但加载/建立过程本身将被启动。

当从专家顾问或脚本请求数据时,如果终端在本地没有这些数据,将开始从服务器加载;如果可以从本地历史数据中建立,但它们还没有准备好,将开始建立所需的时间序列。该函数将返回超时后准备好的数据量。

检查你是否有bar_quantity的存在

原因: