MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1167

 

모두에게 좋은 인터넷과 건강.


질문은 내가 무엇을 잘못하고 있습니까? 배열(STATIC)이 채워지고 계산 결과 0(영)이 생성됩니다. 내 코드에 무엇이 누락되었는지 알려주십시오. 배열 요소를 비교하고 추가하지 않는 이유는 무엇입니까?... 감사합니다.


 double Open[60],High[60],Lo[60,Close[60]; int to_copy=60;
 if ( CopyOpen ( NULL , PERIOD_H4 , 1 ,to_copy,Open)<to_copy) return ( 0 );
   if ( CopyHigh ( NULL , PERIOD_H4 , 1 ,to_copy,High)<to_copy) return ( 0 );
   if ( CopyLow ( NULL , PERIOD_H4 , 1 ,to_copy,Low)<to_copy) return ( 0 );
   if ( CopyClose ( NULL , PERIOD_H4 , 1 ,to_copy,Close)<to_copy) return ( 0 );
//----   
   //int start=to_copy*PeriodSeconds(PERIOD_H4)/PeriodSeconds(_Period);
   int start=to_copy;
   
   if (Tf== true )
     {
       if (prev_calculated== 0 )
         for ( int j= 1 ; j<=start; j++)
           {
             if (Open[j]>Close[j])
               candle+=Open[j]-Close[j];
             if (Close[j]>Open[j])
               candle+=Close[j]-Open[j];
            candleHL+=High[j]-Low[j];
            br+= 1 ;
           } //for 
Comment(High[10],". ",candle);
 candle дает результат 0 ноль
 
kopeyka2 :

모두에게 좋은 인터넷과 건강.


질문은 내가 무엇을 잘못하고 있습니까? 배열(STATIC)이 채워지고 계산 결과 0(영)이 생성됩니다. 내 코드에 무엇이 누락되었는지 알려주십시오. 배열 요소를 비교하고 추가하지 않는 이유는 무엇입니까?... 감사합니다.


1) 루프에 배열 오버플로가 있습니다. 버퍼 크기가 60이면 첫 번째 인덱스가 0이므로 마지막 인덱스는 59가 됩니다.

2) 코드가 완전하지 않습니다. 예를 들어, Tf는 어떻게 정의되고 촛불은 어떻게 초기화되었습니까?


* 가격을 복사할 때 첫 번째 인덱스부터 시작하여 60개 요소를 복사하기 때문에 인덱스가 1만큼 이동합니다. 즉, 첫 번째 닫힌 막대의 가격은 이미 인덱스 0에 있습니다.

 

기능 작동 방식

 IsStopped ();

... 그리고 어떤 작업 목록을 수행합니까?


도움말은 "mql5 프로그램의 강제 종료를 확인합니다"라고 말합니다. 즉, 그녀는 미리 특정 수의 코드 줄을 "보고"무엇이든 정확성을 확인합니까? 담당 영역이 어떻게 설정되어 있습니까(예: 한 줄 또는 10줄)?


루프가 어레이를 넘어서는 것을 허용하지 않을뿐이라고 생각했는데 FAMA 코드에서 고가와 저가를 복사하기 전에 보았습니다.

 
Alexandr Sokolov :

기능 작동 방식

... 그리고 어떤 작업 목록을 수행합니까?


도움말은 "mql5 프로그램의 강제 종료를 확인합니다"라고 말합니다. 즉, 그녀는 미리 특정 수의 코드 줄을 "보고"무엇이든 정확성을 확인합니까? 담당 영역이 어떻게 설정되어 있습니까(예: 한 줄 또는 10줄)?


루프가 어레이를 넘어서는 것을 허용하지 않을뿐이라고 생각했는데 FAMA 코드에서 고가와 저가를 복사하기 전에 보았습니다.

그녀는 아무데도 보이지 않습니다 ... 모든 것이 거기에 명확하게 기록되어 있습니다. 플래그 확인 중... 다시 읽기 .

Документация по MQL5: Проверка состояния / IsStopped
Документация по MQL5: Проверка состояния / IsStopped
  • www.mql5.com
Возвращает true, если в системной переменной _StopFlag содержится значение, отличное от 0. Ненулевое значение записывается в переменную _StopFlag, если поступила команда завершить...
 
Alexandr Sokolov :

기능 작동 방식

... 그리고 어떤 작업 목록을 수행합니까?


도움말은 "mql5 프로그램의 강제 종료를 확인합니다"라고 말합니다. 즉, 그녀는 미리 특정 수의 코드 줄을 "보고"무엇이든 정확성을 확인합니까? 담당 영역이 어떻게 설정되어 있습니까(예: 한 줄 또는 10줄)?


루프가 어레이를 넘어서는 것을 허용하지 않을뿐이라고 생각했는데 FAMA 코드에서 고가와 저가를 복사하기 전에 보았습니다.

MQL 프로그램이 중지되면 _StopFlag 플래그가 설정되며 사전 정의된 변수 와 IsStopped() 함수를 사용하여 확인할 수 있습니다. 차이가 없으므로 편리합니다.

_StopFlag 플래그를 설정한 후 MQL 프로그램을 중지할 짧은 시간이 주어진 다음 터미널이 강제로 언로드합니다.

가장 일반적인 용도는 반복 스크립트이며 작성되지 않습니다.

 while ( true )
{
...
}

다음과 같이 작성하는 것이 좋습니다.

 while (! IsStopped ())
{
...
}

글쎄, 그것은 또한 비용이 많이 드는 계산이나 사이클의 큰 계산에서 발생합니다.

 for ( int i= 0 ; i< 1 e6 && ! IsStopped (); i++)
{

}
 

여러분, 안녕하세요.

이름이 L1, L2, L3 ... Ln인 변수를 2차원 배열에 쓰는 루프에서 정렬할 수 있는지 알려주십시오.

 extern string L1       = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475;" ;
extern string L2       = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465;" ; 
extern string L3       = "0.94947;0.93222;0.91472;0.90077;0.89075;0.88658;0.86814;0.84687;0.82795;0.81132;0.79022;0.75976;" ; 

...

extern string Ln      = " ... " ;    
 
Alexandr Sokolov :

1) 루프에 배열 오버플로가 있습니다. 버퍼 크기가 60이면 첫 번째 인덱스가 0이므로 마지막 인덱스는 59가 됩니다.

2) 코드가 완전하지 않습니다. 예를 들어, Tf는 어떻게 정의되고 촛불은 어떻게 초기화되었습니까?


* 가격을 복사할 때 첫 번째 인덱스부터 시작하여 60개 요소를 복사하기 때문에 인덱스가 1만큼 이동합니다. 즉, 첫 번째 닫힌 막대의 가격은 이미 인덱스 0에 있습니다.

답변 해주셔서 감사합니다. 전체 코드. 어레이의 정적 크기를 늘렸습니다. 연산자에서 제로 컨트롤 항목을 제거했습니다 ... 일반적인 "공백". 덧셈을 계산하지 않는 이유를 이해하고 싶습니다. 지금 내 코드에 무엇이 빠져 있습니까? 힌트를 주셔서 감사합니다. 아직 mql5에서 정적 배열 로 작업하지 않았습니다.....

코드가 업데이트되었습니다. 같은 질문...

 //+------------------------------------------------------------------+
//|                                                          123.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, "
//---- номер версии индикатора
#property version    "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots    0
//----
input int        nBars = 20 ;
//----
int     limit= 0 ,br= 0 ,to_copy= nBars;
double corrHL,corrOC;
double averpips,averpipsH;
double candle,candleHL;
double opn,hgh,lw,cls;
double Open[ 65 ],High[ 65 ],Low[ 65 ],Close[ 65 ];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   
   Comment ( "" );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   

       //+------------------------------------------------------------------+
//| Поиск события и установка меток  на графике                      |
//+------------------------------------------------------------------+
   if ( CopyOpen ( NULL , PERIOD_H4 , 0 ,to_copy,Open)<to_copy)
       return ( 0 );
   if ( CopyHigh ( NULL , PERIOD_H4 , 0 ,to_copy,High)<to_copy)
       return ( 0 );
   if ( CopyLow ( NULL , PERIOD_H4 , 0 ,to_copy,Low)<to_copy)
       return ( 0 );
   if ( CopyClose ( NULL , PERIOD_H4 , 0 ,to_copy,Close)<to_copy)
       return ( 0 );
     int indexmass= ArraySize (Open);
//----
   if (Tf== true )
     {
       if (prev_calculated== 0 )
         for ( int j= 1 ; j<=to_copy; j++) // поменять на ноль?????
           {
            opn=Open[j];
            hgh=High[j];
            lw=Low[j];
            cls=Close[j];
             if (opn>cls)
               candle+=opn-cls;
             if (cls>opn)
               candle+=cls-opn;
            candleHL+=hgh-lw;
            br+= 1 ;
           } //for j
       if (br> 0 )
        {
         averpips=candle/br;
         averpips= NormalizeDouble (averpips, _Digits );
         averpipsHL=candleHL/br;
         averpipsHL= NormalizeDouble (averpipsHL, _Digits );
        }
      }
   Comment ( "indexmass  " ,indexmass, "  Open " ,Open[ 10 ], "  candle  " ,candle, "  averpipsHL " ,averpipsHL);
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+ 
Comment("indexmass  ",indexmass,"  Open ",Open[10],"  candle  ",candle,"  averpips ",averpips);
배열 요소 값이 0보다 큽니다. 계산에서 0
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
stepystr :

여러분, 안녕하세요.

이름이 L1, L2, L3 ... Ln인 변수를 2차원 배열에 쓰는 루프에서 정렬할 수 있는지 알려주십시오.

삭제된 게시물 - 배열에 대해 알고 있습니다.

하지만 여전히 할 수 없다

옵션으로 매크로 대체 작성, 특정 예 작성 - 누군가가 귀하의 작업에 대한 매크로를 작성할 수도 있습니다. 저는 매크로 대체를 잘못 작성합니다.

 

사람들!!! 말하다 ... )))

전체 코드. 어레이의 정적 크기를 늘렸습니다. 연산자에서 제로 컨트롤 항목을 제거했습니다 ... 일반적인 "공백". 덧셈을 계산하지 않는 이유를 이해하고 싶습니다. 지금 내 코드에 무엇이 빠져 있습니까? 힌트를 주셔서 감사합니다. 아직 mql5에서 정적 배열 로 작업하지 않았습니다.....

코드가 업데이트되었습니다. 같은 질문...

배열 요소 값이 0보다 큽니다. 계산에서 0
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
kopeyka2 :

답변 해주셔서 감사합니다. 전체 코드. 어레이의 정적 크기를 늘렸습니다. 연산자에서 제로 컨트롤 항목을 제거했습니다 ... 일반적인 "공백". 덧셈을 계산하지 않는 이유를 이해하고 싶습니다. 지금 내 코드에 무엇이 빠져 있습니까? 힌트를 주셔서 감사합니다. 아직 mql5에서 정적 배열 로 작업하지 않았습니다.....

코드가 업데이트되었습니다. 같은 질문...

나는 당신에 대한 지표를 가지고 있지만 그것은 단지 불필요합니다. 이미 존재 합니다 )))

 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[])
  {
   

       //+------------------------------------------------------------------+
//| Поиск события и установка меток  на графике                      |
//+------------------------------------------------------------------+
   if ( CopyOpen ( NULL , PERIOD_H4 , 0 ,to_copy,Open)<to_copy)
       return ( 0 );
   if ( CopyHigh ( NULL , PERIOD_H4 , 0 ,to_copy,High)<to_copy)
       return ( 0 );
   if ( CopyLow ( NULL , PERIOD_H4 , 0 ,to_copy,Low)<to_copy)
       return ( 0 );
   if ( CopyClose ( NULL , PERIOD_H4 , 0 ,to_copy,Close)<to_copy)
       return ( 0 );
     int indexmass= ArraySize (Open);