초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 465

 
kashi_ann :

내가 무엇을 잘못하고 있지?

이 표시기에 입력 매개변수가 없습니까? (iCustom(...)) 기능에 대해 이야기하고 있습니다.

(여기서 닫는 괄호가 없기를 바랍니다.)

그리고 2개의 요소만 복사하기 때문에 정적으로 할당된 버퍼 에 복사하고 있습니까?

 
에게,

NT7용 열린 표시기 코드
( v>=a && v<b)
다른 조건을 추가해야 합니다. 숫자 25와 같지 않음

다음이 맞을까요?
if ( v>=a && v<b && v<25 && v>25)
 

Artyom Trishkin
:

1. iMaOnArray()를 할 수 있습니다.
2. 모멘텀을 잘못 보았나? 지표 --> 오실레이터 --> 모멘텀
3. 하위 창에 이상한 Mashki가 있습니다. 이거 다 어디서 구해요? 지표 --> 추세 지표 --> 이동 평균

Artyom, 답변 감사합니다. 메뉴에 있는 것으로 나타났습니다... 표시기를 잘못된 위치에 가져왔습니다 :) "내비게이터" 창에서 표시기 \ 모멘텀을 클릭했습니다. 표시기는 매번 새 하위 창에 추가됩니다 그리고 일종의 중성화 된 것.
절차가 자주 반복되는 경우 프로세서를 덜 로드하는 것이 무엇인지 알려주십시오.
1) 내 (복잡한) 표시기를 하위 창에 놓고 여기에서 값을 가져옵니다.
또는
2) (MQL4) iCustom 을 사용하여 OnTime()으로 표시기 값을 읽습니다.
내가 올바르게 이해한다면 2)의 경우 표시기가 창에 그려지지 않고 요청에 따라 계산됩니다. 사실, 이해하지 못했습니다. 표시기의 실행 코드는 한 번 또는 호출 될 때마다로드됩니다 ...
PS 메뉴를 통해 두 번째 표시기는 여전히 새 하위 창에 추가됩니다.. 하위 창의 기존 표시기에 어떻게 추가할 수 있습니까?

 

Александр :
Уважаемые,

открыл код индикатора к NT7
вижу в нём if ( v>=a && v<b)
а мне надо добавить ещё условие: неравно числу 25

правильно ли будет следующее?
if ( v>=a && v<b && v<25 && v>25)

" v<25 && v>25"가 항상 false이기 때문에 작동하지 않습니다.

다음과 같은 것이 필요합니다.

v!=25

 
Yury Kirillov :

" v<25 && v>25"가 항상 false이기 때문에 작동하지 않습니다.

다음과 같은 것이 필요합니다.

v!=25

감사하다! 예:

if ( v>=a && v<b && (v <25 || v>25)) 또는 if ( v>=a && v<b && v!=25)

 
Александр :
감사하다! 다른 포럼 제안: if ( v>=a && v<b && (v <25 || v>25))

나 자신을 위해 다음과 같이 작성합니다.

{ if ((v>=a)&&(v<b)&&(v!= 25 )) 
{
         //разные действия 
}} //if((v>=a)&&(v<b)&&(v!=25)) 

 
 
Oksana Berenko :

이 표시기에 입력 매개변수가 없습니까? (iCustom(...)) 기능에 대해 이야기하고 있습니다.

(여기서 닫는 괄호가 없기를 바랍니다.)

그리고 2개의 요소만 복사하기 때문에 정적으로 할당된 버퍼 에 복사하고 있습니까?

표시기에는 많은 입력 매개변수가 있습니다.

괄호를 어디에서 놓쳤는지 이해가 되지 않습니다.

정적 버퍼가 무엇을 의미하는지 이해하지 못하는 것 같습니다. 어렵지 않다면 설명 부탁드립니다.

 
Mike :

Artyom, 답변 감사합니다. 메뉴에 있는 것으로 나타났습니다... 표시기를 잘못된 위치에 가져왔습니다 :) "내비게이터" 창에서 표시기 \ 모멘텀을 클릭했습니다. 표시기는 매번 새 하위 창에 추가됩니다 그리고 일종의 중성화 된 것.
절차가 자주 반복되는 경우 프로세서를 덜 로드하는 것이 무엇인지 알려주십시오.
1) 내 (복잡한) 표시기를 하위 창에 놓고 여기에서 값을 가져옵니다.
또는
2) (MQL4) iCustom 을 사용하여 OnTime()으로 표시기 값을 읽습니다.
내가 올바르게 이해한다면 2)의 경우 표시기가 창에 그려지지 않고 요청에 따라 계산됩니다. 사실, 이해하지 못했습니다. 표시기의 실행 코드는 한 번 또는 호출 될 때마다로드됩니다 ...
PS 메뉴를 통해 두 번째 표시기는 여전히 새 하위 창에 추가됩니다.. 하위 창의 기존 표시기에 어떻게 추가할 수 있습니까?

iCustom()을 사용하여 표시기를 호출하면 해당 버퍼가 창에 표시되지 않지만 내가 아는 한(이전 버전의 MT에서는 그랬음) 표시기에 의해 표시되는 모든 그래픽 개체가 차트 창에 표시됩니다. .

다른 지표의 창에 지표를 배치하려면 내비게이터 창에서 필요한 지표의 창으로 해당 지표를 마우스로 끕니다.

프로세서 시간의 낮은 비용에 관해서는 - 나는 확인하지 않았고, 나는 모른다.

 

조건을 만들고, 아이디어를 완성하고, 조건에 따라 그래프에 레이블을 붙이는 것이 얼마나 쉽습니까?

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
     
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
   //+------------------------------------------------------------------+
void OnTick ()
{
         // скорость тиков
         int nTicksSpeed = TicksSpeed();
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int TicksSpeed()
{
         MqlTick oTicks[ 5 ];
         ZeroMemory (oTicks);
        
         int nTicksCopied = CopyTicks( _Symbol , oTicks, COPY_TICKS_TRADE, 0 , 5 );
        
         int nSpeed = 0 ;

         if (nTicksCopied > 0 )
        {
                 // скорость роста
                 if (oTicks[ 0 ].bid > oTicks[ 1 ].bid)
                {
                         if (oTicks[ 4 ].bid > 0 && oTicks[ 0 ].bid > oTicks[ 1 ].bid && oTicks[ 1 ].bid > oTicks[ 2 ].bid && oTicks[ 2 ].bid > oTicks[ 3 ].bid && oTicks[ 3 ].bid > oTicks[ 4 ].bid)
                                nSpeed = 4 ;
                         else if (oTicks[ 3 ].bid > 0 && oTicks[ 0 ].bid > oTicks[ 1 ].bid && oTicks[ 1 ].bid > oTicks[ 2 ].bid && oTicks[ 2 ].bid > oTicks[ 3 ].bid)
                                nSpeed = 3 ;
                         else if (oTicks[ 2 ].bid > 0 && oTicks[ 0 ].bid > oTicks[ 1 ].bid && oTicks[ 1 ].bid > oTicks[ 2 ].bid)
                                nSpeed = 2 ;
                                
                         else if (oTicks[ 1 ].bid > 0 && oTicks[ 0 ].bid > oTicks[ 1 ].bid)
                                nSpeed = 1 ;
                        
                }
        
                 // скорость снижения
                 if (oTicks[ 0 ].bid < oTicks[ 1 ].bid)
                {
                         if (oTicks[ 4 ].bid > 0 && oTicks[ 0 ].bid < oTicks[ 1 ].bid && oTicks[ 1 ].bid < oTicks[ 2 ].bid && oTicks[ 2 ].bid < oTicks[ 3 ].bid && oTicks[ 3 ].bid < oTicks[ 4 ].bid)
                                nSpeed = - 4 ;
                         else if (oTicks[ 3 ].bid > 0 && oTicks[ 0 ].bid < oTicks[ 1 ].bid && oTicks[ 1 ].bid < oTicks[ 2 ].bid && oTicks[ 2 ].bid < oTicks[ 3 ].bid)
                                nSpeed = - 3 ;
                         else if (oTicks[ 2 ].bid > 0 && oTicks[ 0 ].bid < oTicks[ 1 ].bid && oTicks[ 1 ].bid < oTicks[ 2 ].bid)
                                nSpeed = - 2 ; 
                         else if (oTicks[ 1 ].bid > 0 && oTicks[ 0 ].bid < oTicks[ 1 ].bid)
                                nSpeed = - 1 ; 
                }
        }
        
         return (nSpeed);
}

//+------------------------------------------------------------------+

if ( nTickSpeed==- 1 )  отмечаем это место на графике g_Label.Text( "-1 " )

if ( nTickSpeed==- 2 )  отмечаем это место на графике g_Label.Text( "-2 " )

if (nTickSpeed==- 3 )  отмечаем это место на графике g_Label.Text( "-3 " )

if ( nTickSpeed==- 4 )  отмечаем это место на графике g_Label.Text( "-4 " )




if ( nTickSpeed== 1 )  отмечаем это место на графике g_Label.Text( "1 " )

if ( nTickSpeed== 2 )  отмечаем это место на графике g_Label.Text( "2 " )

if ( nTickSpeed== 3 )  отмечаем это место на графике g_Label.Text( "3 " )

if ( nTickSpeed== 4 )  отмечаем это место на графике g_Label.Text( "4 " )
 

끝에 있는 if를 다음과 같이 바꿀 수 있습니다.

   switch (nTickSpeed)
     {
       case - 4 :
         g_Label.Text( "-4" );
         break ;
       case - 3 :
         g_Label.Text( "-3" );
         break ;
       case - 2 :
         g_Label.Text( "-2" );
         break ;
       case - 1 :
         g_Label.Text( "-1" );
         break ;
       case 1 :
         g_Label.Text( "1" );
         break ;
       case 2 :
         g_Label.Text( "2" );
         break ;
       case 3 :
         g_Label.Text( "3" );
         break ;
       case 4 :
         g_Label.Text( "4" );
         break ;
     }
사유: