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

 
voron_026 :

좋은 하루 Aleksey Vyazmikin 최근에 프로그래밍에 입문했습니다. 나는 천천히 주제에 빠져들고 있다.

다음과 같이 시도했습니다.

첫 번째 사각형이 그려집니다. 나머지는 그려지지 않습니다. 어떻게 할까 고민하면서. 팁 감사합니다. 전형적인 스타일이 아니라는 것은 무엇을 의미합니까?


동일한 좌표에 많은 개체가 아니라 하나의 개체가 그려지고 있습니까?

당신은 일정한 포인트가 있습니다

 datetime time0 = iTime ( Symbol (), PERIOD_H4 , 0 );
datetime time1 = iTime ( Symbol (), PERIOD_H4 , 1 );
double open0 = iOpen ( Symbol (), PERIOD_H4 , 0 );
double open1 = iOpen ( Symbol (), PERIOD_H4 , 1 );
double close1 = iClose ( Symbol (), PERIOD_H4 , 1 );
double high1 = iHigh ( Symbol (), PERIOD_H4 , 1 );
double low1 = iLow ( Symbol (), PERIOD_H4 , 1 );

함수에서 정의하거나 객체를 생성 할 때 코드에서 직접 정의하십시오...

전형성에 대해 - 내 관찰에 따르면 계산 기능이 꼬이고 초보자가 이러한 if(!...) 표현식을 사용하는 경우가 거의 없습니다.

 

안녕하세요!


알려주세요:

한 지표(I-1)에 구축된 다른 지표(I-2)와 관련된 한 지표(I-1)의 위치를 계산하는 방법(I-1).


예를 들어:

볼린저에 대한 RSI의 위치.

계산 가격 대신 데이터로 대체할 수 있다고 생각했는데

 RSI = iRSI ( Symbol (), TimeFrame, 14 , PRICE_CLOSE , 1 );
 BB  = iBands ( Symbol (), TimeFrame, 34 , 1 , 0 , RSI, MODE_UPPER , 1 );
하지만 오류가 발생합니다.
 
Ras al Ghul :

안녕하세요!


알려주세요:

한 지표(I-1)에 구축된 다른 지표(I-2)와 관련된 한 지표(I-1)의 위치를 계산하는 방법(I-1).


예를 들어:

볼린저에 대한 RSI의 위치.

계산 가격 대신 데이터로 대체할 수 있다고 생각했는데

하지만 오류가 발생합니다.

RSI에 bb를 어떻게 구축했는지조차 명확하지 않습니다. 사진은 어떻게 했는지 명확합니다...


 double    iBands ( 
   string        symbol,           // имя символа 
   int           timeframe,         // таймфрейм 
   int           period,           // период 
   double        deviation,         // кол-во стандартных отклонений 
   int           bands_shift,       // сдвиг относительно цены 
   int           applied_price,     // тип цены 
   int           mode,             // индекс линии 
   int           shift             // сдвиг 
   );

보유하고 있는 가격 유형이 올바르지 않습니다.

 double    iBandsOnArray ( 
   double        array[],           // массив 
   int           total,             // количество элементов 
   int           period,           // период 
   double        deviation,         // кол-во стандартных отклонений 
   int           bands_shift,       // сдвиг относительно цены 
   int           mode,             // индекс линии 
   int           shift             // сдвиг 
   );
 
Aleksey Vyazmikin :

전형성에 대해 - 내 관찰에 따르면 계산 기능이 꼬이고 초보자가 이러한 if(!...) 표현식을 사용하는 경우가 거의 없습니다.


나는 당신을 이해했다. 아마도 나는 내 자신의 스타일을 개발했습니다. 나는 이 형식으로 if(!...) 문을 사용하는 것을 좋아합니다. 그리고 다른 사람의 계산 기능을 훔쳐보았지만 이 논리가 마음에 들었습니다.

 
Aleksey Vyazmikin :

RSI에 bb를 어떻게 구축했는지조차 명확하지 않습니다. 사진은 어떻게 했는지 명확합니다...


보유하고 있는 가격 유형이 올바르지 않습니다.

당신의 답변에 감사드립니다!

생각을 어느 방향으로 향해야 하는지 명확해졌습니다.


표준 MT4 도구를 사용한 명확성을 위한 그림(이전/첫 번째 지표에 따름).


나는 Java의 배열에만 익숙합니다 ... 그리고 간단히.

그것을 만드는 방법과 거기에 정확히 무엇을 추가해야합니까?

MetaEditor 및 MQL Tutorial의 F1은 명확성을 가져오지 않았습니다...

 
voron_026 :

나는 당신을 이해했다. 아마도 나는 내 자신의 스타일을 개발했습니다. 나는 이 형식으로 if(!...) 문을 사용하는 것을 좋아합니다. 그리고 다른 사람의 계산 기능을 훔쳐보았지만 이 논리가 마음에 들었습니다.


당신이 생각이 깊은 사람임을 알 수 있습니다. 행운을 빕니다!

 
Ras al Ghul :

당신의 답변에 감사드립니다!

생각을 어느 방향으로 향해야 하는지 명확해졌습니다.


표준 MT4 도구를 사용한 명확성을 위한 그림(이전/첫 번째 지표에 따름).


나는 Java의 배열에만 익숙합니다 ... 그리고 간단히.

그것을 만드는 방법과 거기에 정확히 무엇을 추가해야합니까?

MetaEditor 및 MQL Tutorial의 F1은 명확성을 가져오지 않았습니다...


배열을 만들고 루프(예: for)를 통해 표시기의 값으로 채우십시오. 그런 다음 iBandsOnArray() 함수를 사용합니다.

 
Aleksey Vyazmikin :

배열을 만들고 루프(예: for)를 통해 표시기의 값으로 채우십시오. 그런 다음 iBandsOnArray() 함수를 사용합니다.


귀하의 옵션이 매우 복잡하거나 귀하가 말하는 의미를 이해하지 못했습니다 ...


 double Array[], BB;  


Array[ 1 ] = iRSI ( Symbol (),TimeFrame, 14 , PRICE_CLOSE , 1 );
BB = iBandsOnArray ( Array[ 1 ] , 0 , 34 , 1 , 0 , MODE_UPPER , 1 );

내 버전에서는 선택한 부분에 맹세합니다.

'배열' - 배열이 필요합니다.

그것이 우리가 지표 값을 배열에 넣는 방법이 아닙니까?


 
Aleksey Vyazmikin :

동일한 좌표에 많은 개체가 아니라 하나의 개체가 그려지고 있습니까?



그래, 너가 맞아. 직사각형은 동일한 좌표를 사용하여 그려집니다. 다음과 같이 문제를 해결했습니다.

 void OnTick ()
{
Fun_New_Bar();

   if (UseDojiCandles = true && Doji() == 1 && New_Bar == true )
     {
       datetime time0 = iTime ( Symbol (),TimeFrame, 0 );
       datetime time1 = iTime ( Symbol (),TimeFrame, 1 );
       double open0 = iOpen ( Symbol (), TimeFrame, 0 );
       double open1 = iOpen ( Symbol (), TimeFrame, 1 );

       if (! ObjectCreate ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJ_RECTANGLE , 0 ,time1,open1,time0,open0))
         {
         Print ( "Не удалось создать метку вверх" );
         }
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_COLOR , clrRed ); //--- установим цвет прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_STYLE , STYLE_SOLID ); //--- установим стиль линий прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_WIDTH , 1 ); //--- установим толщину линий прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_BACK , false ); //--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if (UseDojiCandles = true && Doji() == - 1 && New_Bar == true )
     {
       datetime time0 = iTime ( Symbol (),TimeFrame, 0 );
       datetime time1 = iTime ( Symbol (),TimeFrame, 1 );
       double open0 = iOpen ( Symbol (), TimeFrame, 0 );
       double open1 = iOpen ( Symbol (), TimeFrame, 1 );
      
       if (! ObjectCreate ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJ_RECTANGLE , 0 ,time1,open1,time0,open0))
         {
         Print ( "Не удалось создать метку вниз" );
         }
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_COLOR , clrRed ); //--- установим цвет прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_STYLE , STYLE_SOLID ); //--- установим стиль линий прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_WIDTH , 1 ); //--- установим толщину линий прямоугольника 
         ObjectSetInteger ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJPROP_BACK , false ); //--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

   
}
계산된 시간 프레임을 빠르게 변경하기 위해 TimeFrame 변수를 추가했습니다.
 
Ras al Ghul :

귀하의 옵션이 매우 복잡하거나 귀하가 말하는 의미를 이해하지 못했습니다 ...


내 버전에서는 선택한 부분에 맹세합니다.

'배열' - 배열이 필요합니다.

그것이 우리가 지표 값을 배열에 넣는 방법이 아닙니까?


Array[ 1 ] = iRSI ( Symbol (),TimeFrame, 14 , PRICE_CLOSE , 1 );
BB = iBandsOnArray (Array, 0 , 34 , 1 , 0 , MODE_UPPER , 1 );