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

 

MT5 차트에서 그릴 때 이상한 결함 발견: 차트에 오프셋이 있는 것처럼 낮은 양초 대신 화살표가 임의의 위치에 설정됨




 #property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window

#property strict

#property indicator_buffers 1 
#property indicator_plots    1
 
#property indicator_label1    "Arrows" 
#property indicator_type1    DRAW_ARROW 
#property indicator_color1    clrGreen 
#property indicator_width1    1

double Buf_0[];

int OnInit ()
  {

   SetIndexBuffer ( 0 ,Buf_0, INDICATOR_DATA );
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 233 );
   
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   
   for ( int i= 0 ; i<rates_total; i++)
      {
   
      Buf_0[i]= iLow ( _Symbol , _Period ,i);
      }
   return (rates_total);
  }

 
psyman :

MT5 차트에서 그릴 때 이상한 결함 발견: 차트에 오프셋이 있는 것처럼 낮은 양초 대신 화살표가 임의의 위치에 설정됨




1. 표시기에 이미 낮은 배열이 있습니다. 그리고 적용합니다.

2. 시각화를 최대 속도로 실행할 필요가 없습니다.

3. 코드는 매우 버그입니다. 각 틱마다 모든 막대에서 패스가 만들어지기 때문입니다.

 
Vladimir Karputov :

1. 표시기에 이미 낮은 배열이 있습니다. 그리고 적용합니다.

2. 시각화를 최대 속도로 실행할 필요가 없습니다.

3. 코드는 매우 버그입니다. 각 틱마다 모든 막대에서 패스가 만들어지기 때문입니다.

 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[])
  {
   ArrayInitialize (Buf_0, EMPTY_VALUE );

   for ( int i= 0 ; i<rates_total; i++)
      {
   
      Buf_0[i]= iLow ( _Symbol , _Period ,i);
      }
   return (rates_total);
  }
 
Vladimir Karputov :

1. 표시기에 이미 낮은 배열이 있습니다. 그리고 적용합니다.

2. 시각화를 최대 속도로 실행할 필요가 없습니다.

3. 코드는 매우 버그입니다. 각 틱마다 모든 막대에서 통과가 이루어지기 때문입니다.

여기에 코드를 게시하지 않았지만 구문 분석을 단순화하기 위해 가장 간단한 코드를 작성했습니다.

무엇이 잘못되었는지 자세히 알려주십시오. 최대 속도는 불분명합니다.

 
Vitaly Muzichenko :

Vitaliy, 어떤 이유로 초기화가 도움이 되지 않습니다. 나는 onit PlotIndexSetDouble (0,PLOT_EMPTY_VALUE,0); 똑같이 작동하지 않습니다 :(

 
psyman :

여기에 코드를 게시하지 않았지만 구문 분석을 단순화하기 위해 가장 간단한 코드를 작성했습니다.

무엇이 잘못되었는지 자세히 알려주십시오. 최대 속도는 불분명합니다.

단계적으로 고정을 시작합니다. 예를 들어, 첫 번째 수정:

표시기에 이미 낮은 배열이 있습니다. 그리고 적용합니다.

 
Buf_0[i]= iLow ( _Symbol , _Period ,i);

iLow는 일련의 true처럼 작동하고 Buf_0은 false이고 low[]도 false입니다. 저것들. 귀하의 경우 0 번째 요소는 Rates_total-1(거울)의 값을 얻습니다.

예를 들어 다음 중 하나를 뒤집어야 합니다.

Buf_0[i]= iLow ( _Symbol , _Period ,rates_total-1-i);
 
psyman :

MT5 차트에서 그릴 때 이상한 결함 발견: 차트에 오프셋이 있는 것처럼 낮은 양초 대신 화살표가 임의의 위치에 설정됨



피노키오의 사과에 관한 수수께끼를 아는 것은 이 문제에 확실히 도움이 될 것입니다. 자세한 내용은 기억나지 않습니다. 누군가 오류 없이 다시 말해주기를 기다리자.

 
Igor Zakharov :

iLow는 일련의 true처럼 작동하고 Buf_0은 false이고 low[]도 false입니다. 저것들. 귀하의 경우 0 번째 요소는 Rates_total-1(거울)의 값을 얻습니다.

예를 들어 다음 중 하나를 뒤집어야 합니다.

지표입니다! OnCalculate에 이미 배열이 있습니다.

                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[]

iXXXX 기능을 표시기에 밀어 넣는 이유는 무엇입니까?

 
Vladimir Karputov :

지표입니다! OnCalculate에 이미 배열이 있습니다.

iXXXX 기능을 표시기에 밀어 넣는 이유는 무엇입니까?

예, 어떻게 알 수 있습니까? 질문한 사람이 정확히 iLow()를 사용했기 때문에 필요합니다. 더 쉽게 인지할 수도 있고, 입력 변수를 통해 다른 심볼이나 타임프레임에 접근할 계획일 수도 있습니다(4개에 복사율 이 있는지 기억나지 않습니까?)

추가: 5에 대한 질문은 4중 스레드에서 질문되었습니다. 간과했습니다, 고백합니다. 그러나 대답은 여전히 동일합니다.