포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 136

 
paladin80 :
귀하의 질문에서 내가 이해한 것과 귀하가 염두에 두었던 것과 다를 수 있습니다. 제 예시에서는 3~2개 막대와 2~1개 사이의 시가를 비교하고 막대 3과 1을 비교하지 않습니다. 비교 값이 같으면 아무 일도 일어나지 않고 다음 비교로 이동하십시오.
왜 x>1(>= 아님). 첫 번째 반복은 Open[3]==Open[3-1]을 비교합니다. 즉, 열기[3]==열기[2]. 확인. 두 번째(x=2)에서는 Open[2]==Open[1]입니다. 확인. 세 번째 반복은 없습니다. x>=1의 경우 비교 Open[1]==Open[0]이 있을 것입니다. 0 bar와 비교됩니다.

정말 감사합니다! 그리고 세 막대 각각의 시가와 종가 를 비교하면 코드가 이렇게 변경됩니까?
 extern int n= 4 ;
//-----------------------------------------------+
for (x=n;x> 1 ;x--)
   {
     if (Close[x]==Open[x]) continue ;
       if (Close[x]<Open[x])
     {
      action
     }
     else {
       if (Close[x]>Open[x])
     {
      action
      }
    }
   }
 
ALXIMIKS :

아니요, 새 틱마다 값이 플래그는 사실이 될 것입니다. https://book.mql4.com/en/variables/types

전역 수준에서 변수를 선언해야 합니다(예: 프로그램 시작 시, 모든 기능 외부에서).

또는 변수를 static - static bool flag=true로 만드십시오. .

다시 시작하면 변수가 다시 초기화된다는 것을 기억하십시오. 따라서 이 접근 방식은 테스터에게는 허용되지만 실제 거래에는 적합하지 않습니다.
 
여러분, 지표를 말하지 마십시오. 일반적으로 두 개의 이동 평균을 기반으로 합니다. 그리고 교차점에서 화살표 형태로 방향을 제시합니다. 찾을 수 없습니다.
 
skyjet :

정말 감사합니다! 그리고 세 막대 각각의 시가와 종가를 비교하면 코드가 이렇게 변경됩니까?

문제를 명확히 하기 위해. 같은 막대의 개폐를 비교할 필요가 있습니다. 막대 번호 n이 약세인지 강세인지 여부. 따옴표 창에 아래 스크립트를 놓습니다.

 extern int n= 4 ;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   for ( int x=n; x> 1 ; x--)
    {  
     if (Close[x]==Open[x])
      {
       Print ( "Бар номер " ,n, " плоский :)" );
       continue ;
      }
     if (Close[x]<Open[x])
      {
       Print ( "Бар номер " ,n, " медвежий" );
       continue ;
      }
     else // if(Close[x]>Open[x]) - В данном случае сравнение if можно пропустить
           // т.к. два случая (равно и меньше) уже обработаны
      {
       Print ( "Бар номер " ,n, " бычьий" );
      }
    }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
paladin80 :

여기에 코드를 올바르게 삽입하려면 SRC를 누른 다음 거기에 있는 코드를 누르십시오.

이 조언자를 따옴표 창에 던지십시오.


내가 이해한 대로 표시기가 시프트 값을 쓰는 것처럼 창에 던졌습니다. 하지만 설정에 필요한 수준 수를 추가할 수 있도록 코드에 무엇을 추가해야 합니까?
 
Danila_mactep :

내가 이해한 대로 표시기가 시프트 값을 쓰는 것처럼 창에 던졌습니다. 하지만 설정에 필요한 수준 수를 추가할 수 있도록 코드에 무엇을 추가해야 합니까?

시프트 값을 쓰지 않습니다. 내 기억이 맞다면 시프트가 코드에 설정되지 않고 단순히 Mashka의 값을 읽는 것입니다. 여기에서도 이 값을 제공합니다.

MAchka 값에 대한 이동 값을 보려면 외부 매개변수에서 이 값을 설정한 다음 MAchka 값 + 이동 값* 위로 이동할 점과 MAchka 값 이동 값을 출력해야 합니다. * 아래로 시프트를 표시하는 포인트.

 
Danila_mactep :

내가 이해한 대로 표시기가 시프트 값을 쓰는 것처럼 창에 던졌습니다. 하지만 설정에 필요한 수준 수를 추가할 수 있도록 코드에 무엇을 추가해야 합니까?
 extern int sdvig= 0 ;
//---
int init() 
{
   return ( 0 );
}
//--------------
int start()
{
   double MA= iMA ( NULL , 0 , 12 , 144 , MODE_SMA , PRICE_CLOSE , sdvig);
   Comment ( "Для бара номер " ,sdvig, " значение МА = " ,DoubleToStr(MA, Digits ));
   return ( 0 );
}
//--------------
int deinit()
{
   Comment ( "" );
   return ( 0 );
}
 
paladin80 :


아니, 그렇지 않습니다. Mashka에서 주어진 포인트 수만큼 위아래로 이동해야 합니다. 그리고 역사의 막대를 통한 이동이 아닙니다.
 
artmedia70 :

아니, 그렇지 않습니다. Mashka에서 주어진 포인트 수만큼 위아래로 이동해야 합니다. 그리고 역사의 막대를 통한 이동이 아닙니다.
 extern int move= 100 ; 
//---
int init() 
{
   return ( 0 );
}
//--------------
int start()
{
   double MA= iMA ( NULL , 0 , 12 , 144 , MODE_SMA , PRICE_CLOSE , 0 );
   double Sdvig=MA+(move* Point );
   Comment ( "Сдвиг на " ,sdvig, " пунктов от МА = " ,DoubleToStr(Sdvig, Digits ));
   return ( 0 );
}
//--------------
int deinit()
{
   Comment ( "" );
   return ( 0 );
} 
 
paladin80 :

그리고 이제 마이너스에서도 ... 그리고 그는 행복할 것입니다 :) 아니면 스스로 전환하는 방법을 "생각"하도록 내버려 두시겠습니까?