[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 457

 
sss2019 :

배열의 데이터에 따라 차트에 선을 표시합니다. 경고는 어레이가 채워진 것으로 표시되지만 라인은 표시되지 않습니다.


뭔가를 그립니다

 #property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_minimum 0
#property indicator_maximum 100

double mass1[];
double mass2[];

extern bool A = false;

void init() {
   SetIndexBuffer ( 0 , mass1);
   SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 1 );
   SetIndexBuffer ( 1 , mass2);
   SetIndexStyle ( 1 , DRAW_LINE , STYLE_SOLID , 1 );
}

void start() {
   int limit = Bars - IndicatorCounted ();
   int i = 0 , g = 0 , summ = 0 ;
   int startbar, endbar, starttime, endtime, lowbarend, lowbarstart, highbarstart, highbarend;
   double low, high;
   int lowsum, highsum;
   starttime = iTime ( Symbol (), Period (), i);
   endtime = iTime ( Symbol (), Period (), i + 1 );
   startbar = iBarShift ( Symbol (), PERIOD_M1 , starttime, false);
   endbar = iBarShift ( Symbol (), PERIOD_M1 , endtime, false);
        
   while (i < 5 ) {
      lowsum = 0 ;
      highsum = 0 ;
       if (i != 0 ) {
         starttime = iTime ( Symbol (), Period (), i);
         endtime = iTime ( Symbol (), Period (), i + 1 );
         startbar = iBarShift ( Symbol (), PERIOD_M1 , starttime, false);
         endbar = iBarShift ( Symbol (), PERIOD_M1 , endtime, false);
      }
       else
      {
         starttime = iTime ( Symbol (), Period (), i);
         endtime = iTime ( Symbol (), Period (), i + 1 );
         startbar = iBarShift ( Symbol (), PERIOD_M1 , TimeCurrent (), false);
         endbar = iBarShift ( Symbol (), PERIOD_M1 , endtime, false);
      }
                        
       //Alert(TimeToStr(starttime, TIME_DATE|TIME_MINUTES),"   ",TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES));   
      low = iLow ( Symbol (), PERIOD_M1 , endbar);
      high = iHigh ( Symbol (), PERIOD_M1 , endbar);
      lowbarend = endbar;
      highbarend = endbar;
      lowbarstart = endbar;
      highbarstart = endbar;
                
       while (endbar >= startbar) {
         if ((low - iLow ( Symbol (), PERIOD_M1 , endbar)) / Point > 0 ) {
             //Alert(low, " ", iLow(Symbol(), PERIOD_M1, endbar), " ", endbar, " ", startbar);
            low = iLow ( Symbol (), PERIOD_M1 , endbar);
            lowbarstart = endbar;
         }
         if (( iHigh ( Symbol (), PERIOD_M1 , endbar) - high) / Point > 0 ) {
            high = iHigh ( Symbol (), PERIOD_M1 , endbar);
            highbarstart = endbar;
             //Alert(high, " ", iHigh(Symbol(), PERIOD_M1, endbar), " ", endbar, " ", startbar);
         }
         endbar--;
      }
       //Alert(highbarstart, " ", highbarend, " = ", lowbarstart, " ", lowbarend);
                        
       while (lowbarstart < lowbarend + 1 ) {
         lowsum = lowsum + iVolume ( Symbol (), PERIOD_M1 , lowbarstart);
         lowbarstart++;
      }
       while (highbarstart < highbarend + 1 ) {
         highsum = highsum + iVolume ( Symbol (), PERIOD_M1 , highbarstart);
         highbarstart++;
      }
      mass2[i] = lowsum;
      mass1[i] = highsum;
//      Alert(mass2[i], " ", highsum, " ", ArraySize(mass1));
       //Alert(mass1[i], " ", i);
      i++;
   }
}
 
neon51r :


피보나치 라인을 완성할 수 있습니까?


차트에 이 선을 그린 후 이 레벨의 가격은 레벨 반대편에 자동으로 작성됩니다.

그리고 섬유를 늘일 때 자동으로 변경됩니다.

물론 할 수 있지만 작동하지 않는 것은 무엇입니까?
 
Vinin :


뭔가를 그립니다


감사합니다 무엇을 고쳤습니까? 나는 코드 비교를 잘 못한다.
 
VladislavVG :
물론 할 수 있지만 작동하지 않는 것은 무엇입니까?

모두)) 나는 mql을 모른다

무엇을 고를지 알려주세요?) 그리고 어떤 파일을 수정해야 하나요?

 
neon51r :

모두)) 나는 mql을 모른다

무엇을 고를지 알려주세요?) 그리고 어떤 파일을 수정해야 하나요?

선택:

  1. 일하다

  2. 튜토리얼문서
 
Reshetov :

선택

고맙습니다)

모두 결정했습니다. 감사해요:%)

 
sss2019 :

감사합니다 무엇을 고쳤습니까? 나는 코드 비교를 잘 못한다.

 double mass1[];
double mass2[];
 

기술 구현에 대한 경험이 있는 사람이 있으면 알려주십시오.

워크스테이션에서 인터넷 연결이 끊어지면 워크스테이션에 연결된 전화 또는 gsm 모뎀(동일)에서 SMS 메시지가 전송됩니까?

 
solar :

기술 구현에 대한 경험이 있는 사람이 있으면 알려주십시오.

워크스테이션에서 인터넷 연결이 끊어지면 워크스테이션에 연결된 전화 또는 gsm 모뎀(동일)에서 SMS 메시지가 전송됩니까?

ICQ에 메시지를 보내는 프로그램을 발견했습니다. 파일 및 설명이 있는 페이지... https://www.mql5.com/ru/code/10352

전문가의 코드에는 인터넷 연결이 끊겼을 때 메시지를 보내는 기능을 넣을 수 있고 ....

 
ilunga :
바로 그거죠

스크립트를 약간 수정했습니다.

 //+------------------------------------------------------------------------------------------+
//|                                                                     ArraySetAsSeries.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                                               //функция start
  {                                                                       //начало start
   double Timestart= GetTickCount ();                                       //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скрипта
   double array1[][ 6 ];                                                   //объявляем массив-источник (массив, из к-о будут скопированы данные)
   double array2[][ 6 ];                                                   //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
                                                                         //момент объявления заполнен некоторыми данными
   int element_1= ArrayCopyRates (array1);                                 //копируем данные баров текущего графика в массив array1 
   int element_2= ArrayCopy (array2,array1, 0 , 0 , WHOLE_ARRAY );               //копируем данные всех баров в пользовательский массив
   bool element_3= ArrayGetAsSeries (array2);                               //проверка: является ли массив array1 массивом-таймсерией
   bool try_1= ArraySetAsSeries (array2,false);                             //устанавливаем НАПРАВЛЕНИЕ индексирования массива  
   bool element_4= ArrayGetAsSeries (array2);                               //проверка: является ли массив array2 массивом-таймсерией
   double element=array2[ 0 ][ 1 ];                                           //получаем значение цены открытия нулевого бара
//----------------------------------------------------------------------------------------- 2 -
   Comment ( "\nФункция ArrayCopyRates(array1) вернула: " ,element_1,
           "\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: " ,element_2,
           "\nФункция ArrayGetAsSeries(array2) вернула: " ,element_3,
           "\nФункция ArraySetAsSeries(array2;false) вернула: " ,try_1,
           "\nФункция ArrayGetAsSeries(array2) вернула: " ,element_4,
           "\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: " ,element,
           "\nСкрипт выполнялся всего " , GetTickCount ()-Timestart, " миллисекунд, из них: " ,
           MathFloor (( GetTickCount ()-Timestart)/ 1000 ), " секунд " ,(( GetTickCount ()-Timestart)/ 1000 - MathFloor (( GetTickCount ()-Timestart)/ 1000 ))* 1000 ,
           " миллисекунд" ); //печать сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return ( 0 );                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

결과적으로 다음과 같이 받았습니다.


당연히 바로 의문이 생겼습니다. 이 경우 ArrayCopyRates(array1) 함수를 사용하여 현재 차트의 막대 데이터를 2차원 배열 array1에 복사했습니다. 그 후 다음 줄에서 ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) 함수를 사용하여 array1 배열의 데이터를 array2 배열에 복사했습니다. 그런 다음 ArrayGetAsSeries 함수를 사용하여 array2 배열이 시계열 배열인지 확인했습니다. 그리고 이전에 ArraySet etAsSeries 함수로 "처리"하지 않았지만 배열이 여전히 시계열 배열인 것으로 나타났습니다(스크린샷에서 볼 수 있듯이).

질문 : 첫 번째 경우(이전 질문) Array S etAsSeries 함수에 의한 처리가 필요한 이유(검색된 배열이 시계열 배열로 구성되도록) 이 경우에는 그러한 처리가 필요하지 않습니다.

피. 에스. 계속해서 죄송합니다. "역사에 공백"이 남지 않도록 완전히 이해하고 싶습니다. 이전의 모든 답변에 감사드립니다.