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 :

인쇄가 다른 이유는 무엇입니까? 다른 코드?

몇 개의 차트가 열려 있습니까? 기호, 마침표.

확장/축소?
알렉세이 빅토로프 :

나는 아주 나쁘게 읽었다. 아마도 학교에서 강요하는 것처럼. 읽은 것 같지만 머리에 아무것도 꽂혀 있지 않습니다.

여기에서 예를 들어 보십시오 . 사실, 거기에는 목적이 다르지만 여전히 열려 있는 차트의 열거는 이 열거의 목적에 따라 변경되지 않습니다.

또는 여기에 코드가 있습니다.

질문이 해결되었습니다. 터미널을 다시 시작하면 문제가 해결되었습니다.

 

이 코드에서 범위를 벗어나는 배열을 피하는 방법을 알려주십시오.

 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을 반환하지만 로드/빌드 프로세스 자체는 시작됩니다.

Expert Advisor 또는 스크립트에서 데이터를 요청할 때 터미널에 이 데이터가 로컬에 없으면 서버에서 다운로드가 시작되고 로컬 히스토리에서 데이터를 빌드할 수 있는 경우 필요한 시계열 구성이 시작되지만 아직 준비되지 않았습니다. 이 함수는 시간 초과가 만료될 때까지 준비될 데이터의 양을 반환합니다.

당신은 확인해야합니다, 당신이 거기에 bar_quantity가 있다는 사실이 아닙니다