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

 
N개의 막대에 OBJ_RECTANGLE 이 없는지 확인하는 방법은 무엇입니까?
 
neverness :

MT5에서 변경된 사항이 있나요???

MT4나 MT5에는 그런 것이 없습니다.

MT5에는 현재 기간의 구분 기호가 H2의 절반으로 표시되는 버그도 있습니다.

 
Ghabo :
N개의 막대에 OBJ_RECTANGLE 이 없는지 확인하는 방법은 무엇입니까?
시도해보십시오.
   int n = Bars ( Symbol (), PERIOD_CURRENT , ObjectGetInteger ( 0 , "Rectangle" , OBJPROP_TIME , 1 ), TimeCurrent ());
   Print (n);
 
Vitaly Muzichenko :

MT4나 MT5에는 그런 것이 없습니다.

MT5에는 현재 기간의 구분 기호가 H2의 절반으로 표시되는 버그도 있습니다.

나는 마침내 이 모든 "토론"에서 내 질문에 대한 유일한 "건설적인 대답"을 보았습니다.

오류의 경우 MT4 및 MT5 모두에서 현재(마지막) 프레임의 모든 주 구분 기호에 있습니다.

지난 주 구분 기호 MT4/MT5의 모든 곳에서 5 대신 7일 구분 기호를 그립니다.

하지만 그게 핵심이 아닙니다. 실수는 항상 있었고 앞으로도 그럴 것입니다. 이 모든 것은 구분 기호를 그리기 위한 프로그램 코드가 있으면 수정할 수 있습니다.

나를 놀라게 한 것은 오류가 아니라 완전히 다른 것입니다.

MT4/MT5가 존재하는 동안 예측 영역에 구분 기호 를 그리는 프로그램을 작성하는 것이 정말로 누군가에게 일어났습니까?

결국, 프로그램은 간단합니다.

이 문제를 해결하려면 마지막 구분 기호의 위치와 X축을 따른 시간의 "해상도"(즉, 1픽셀에 해당하는 시간 간격)만 알면 됩니다.

그리고 지금까지 아무도 없었다 ???

이것은 나를 정말로 놀라게 하는 것입니다.

다시 말하지만, 당신은 모든 것을 스스로해야합니다.

 
Igor Makanu :

어렵지는 않지만 MT에서 표시기가 작동하는 방식과 이점이 무엇인지 잘 이해하지 못하는 것 같습니다.

당신이 아마 옳을 것입니다.

다음과 같은 수학 농담이 있습니다.

한 수학자가 질문합니다. 주전자에 물을 끓이는 방법은 무엇입니까?

수학자는 다음과 같이 대답합니다. - 빈 주전자에 물을 붓고 주전자를 스토브에 놓고 스토브를 켜고 물이 끓기를 기다립니다.

- 좋은. 그러나 주전자에 물이 이미 부었다면 어떻게 될까요? - 수학자에게 물어보세요.

- 주전자에서 물을 붓고 위와 같은 방법으로 문제를 해결합니다. - 수학자에게 대답합니다.

그래서.

이 농담은 당신에 관한 것입니다.

 
neverness :

이 농담은 당신에 관한 것입니다.

흠, 웃어야 할지, 아니면 .... 당신의 모든 변덕을 채워줄 무역 터미널 이 있는 곳을 안다면 당신 스스로 아무것도 하지 않을 거라고 말하겠지, 무슨 일이야? MT4/5는 저에게 100% 적합합니다. 모든 작업을 수행할 수 있습니다. 차트에 D1 기간을 표시하는 표시기를 유지하면 프로그래밍에 관심이 있을 것입니다. 작업에 맞게 수정하십시오...

 #property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots    2
//--- plot line1
#property indicator_label1    "Period"
#property indicator_type1    DRAW_HISTOGRAM
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
#property indicator_label2    "Period"
#property indicator_type2    DRAW_HISTOGRAM
#property indicator_color2    clrRed
#property indicator_style2    STYLE_SOLID
#property indicator_width2    1
//--- input parameters
input int       Days= 3 ;
//--- indicator buffers
double          Pmax[],Pmin[];
bool run= true ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,Pmax);
   SetIndexBuffer ( 1 ,Pmin);
   run= true ;
   switch ( _Period )
     {
       case PERIOD_M1 :   SetIndexShift ( 0 , 1440 *Days); SetIndexShift ( 1 , 1440 *Days);   break ;
       case PERIOD_M5 :   SetIndexShift ( 0 , 288 *Days); SetIndexShift ( 1 , 288 *Days);     break ;
       case PERIOD_M15 :   SetIndexShift ( 0 , 96 *Days);   SetIndexShift ( 1 , 96 *Days);     break ;
       case PERIOD_M30 :   SetIndexShift ( 0 , 48 *Days);   SetIndexShift ( 1 , 48 *Days);     break ;
       case PERIOD_H1 :   SetIndexShift ( 0 , 24 *Days);   SetIndexShift ( 1 , 24 *Days);     break ;
       case PERIOD_H4 :   SetIndexShift ( 0 , 6 *Days);   SetIndexShift ( 1 , 6 *Days);       break ;
       default : run= false ; SetIndexShift ( 0 , 0 ); SetIndexShift ( 1 , 0 ); ArrayInitialize (Pmax, EMPTY_VALUE ); ArrayInitialize (Pmin, EMPTY_VALUE ); break ;
     }
//---
   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[])
  {
//---
   if (prev_calculated== 0 )
     {
      run= true ;
       ArrayInitialize (Pmax, EMPTY_VALUE );
       ArrayInitialize (Pmin, EMPTY_VALUE );
     }
   if (run)
     {
       int i= 0 ,lastperiod= TimeDay (time[ 0 ]);
       double maxvalue;
       if (! ChartGetDouble ( ChartID (), CHART_PRICE_MAX , 0 ,maxvalue)) maxvalue= 1000.0 ;
      maxvalue*= 10.0 ;
       while (i<rates_total)
        {
         if ( TimeDay (time[i])!=lastperiod)
           {
            lastperiod= TimeDay (time[i]);
            Pmax[i- 1 ]=maxvalue;
            Pmin[i- 1 ]= 0.0 ;
           }
         else
           {
            Pmax[i]= EMPTY_VALUE ;
            Pmin[i]= EMPTY_VALUE ;
           }
         i++;
        }
      run= false ;
     }
//---
   return (rates_total);
  }
//+------------------------------------------------------------------+ 
차트 EURUSD.e, H1, 2018.11.09 13:11 UTC, RoboForex (CY) Ltd., MetaTrader 4, 데모


추신: 인디케이터는 아주 간단하지만 TF> D1으로 전환할 때 어떤 이유로 버그가 나타납니다. TF를 전환할 때 버퍼를 초기화하는 것 같습니다. 왜 나는 이것을 처음 접했는지 이해하지 못합니다.

 
neverness :

나는 마침내 이 모든 "토론"에서 내 질문에 대한 유일한 "건설적인 대답"을 보았습니다.

오류의 경우 MT4 및 MT5 모두에서 현재(마지막) 프레임의 모든 주 구분 기호에 있습니다.

지난 주 구분 기호 MT4/MT5의 모든 곳에서 5 대신 7일 구분 기호를 그립니다.

하지만 그게 핵심이 아닙니다. 실수는 항상 있었고 앞으로도 그럴 것입니다. 이 모든 것은 구분 기호를 그리기 위한 프로그램 코드가 있으면 수정할 수 있습니다.

나를 놀라게 한 것은 오류가 아니라 완전히 다른 것입니다.

MT4/MT5가 존재하는 동안 예측 영역에 구분 기호 를 그리는 프로그램을 작성하는 것이 정말로 누군가에게 일어났습니까?

결국, 프로그램은 간단합니다.

이 문제를 해결하려면 마지막 구분 기호의 위치와 X축을 따른 시간의 "해상도"(즉, 1픽셀에 해당하는 시간 간격)만 알면 됩니다.

그리고 지금까지 아무도 없었다 ???

이것은 나를 정말로 놀라게 하는 것입니다.

다시 말하지만, 당신은 모든 것을 스스로해야합니다.

나는 당신에게 대답했습니다 - 내가 한 번 이상 한 일. (시장에서 그리고 하나의 지표가 아님)

그리고 이미 코드를 작성했다고 말했는데 다시 작성하시겠습니까?)

 
Igor Makanu :

흠, 웃어야 할지, 아니면 .... 당신의 모든 변덕을 채워줄 무역 터미널 이 있는 곳을 안다면 당신 스스로 아무것도 하지 않을 거라고 말하겠지, 무슨 일이야? MT4/5는 저에게 100% 적합합니다. 모든 작업을 수행할 수 있습니다. 차트에 D1 기간을 표시하는 표시기를 유지하면 프로그래밍에 관심이 있을 것입니다. 작업에 맞게 수정하십시오...


추신: 인디케이터는 아주 간단하지만 TF> D1으로 전환할 때 어떤 이유로 버그가 나타납니다. TF를 전환할 때 버퍼를 초기화하는 것 같습니다. 왜 나는 이것을 처음 접했는지 이해하지 못합니다.

물론 감사합니다.

예상대로 부분적인 날에는 기간 구분 기호가 표준 구분 기호와 일치하지 않습니다.

그러나 이것은 표준 구분 기호를 다시 그리려고 해서는 안 되며 예측 영역 구분 기호를 히스토리 구분 기호에 고정해야 한다고 생각하기 때문에 그다지 중요하지 않습니다.

그러면 기록의 부분적인 날짜 구분 기호의 위치가 예측 구분 기호에 영향을 미치지 않습니다.

구분 표시기와 표준 구분 기호의 또 다른 중요한 차이점은 표준 구분 기호는 차트 자체의 이벤트에서 업데이트되는 반면 표시기는 각 OnCalculate() 이벤트에서 업데이트된다는 것입니다. 눈에 띌 줄 알았는데 실제로는 거의 느껴지지 않는다.

물론 이 표시기는 다시 실행해야 하지만 어쨌든 감사합니다. 보는 것은 흥미로웠다.

 
Ghabo :

지정된 이름을 가진 개체의 막대 인덱스를 가져옵니다. 하나 이상의 개체가 있습니다. 이름 "QUADRO"+Time[i+1] 10개의 막대에 이러한 개체가 없는지 확인하는 방법은 무엇입니까?

버퍼에서는 명확합니다. 값이 비어 있으면 차트에 아무 것도 표시되지 않지만 개체는 어떻습니까?

 if ( ObjectFind ( 0 , "QUADRO" + Time [ 10 ])< 0 )
        {
         //объекта нет на 10 баре
        }
 
Vitaly Muzichenko :
시도해보십시오.
   int n = Bars ( Symbol (), PERIOD_CURRENT , ObjectGetInteger ( 0 , "Rectangle" , OBJPROP_TIME , 1 ), TimeCurrent ());

고맙습니다. 지정된 이름을 가진 객체의 막대 인덱스(120983)를 가져옵니다. 하나 이상의 개체가 있습니다. 이름 "QUADRO"+Time[i+1] 10개의 막대에 이러한 개체가 없는지 확인하는 방법은 무엇입니까?

버퍼에서는 명확합니다. 값이 비어 있으면 차트에 아무 것도 표시되지 않지만 개체는 어떻습니까?