mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 63

 
4-ke에 그런 기능이 있는데 MQL5에서는 어떻게 구현하나요?

Expert Advisor에서 호출한 표시기를 숨기기 위한 플래그를 설정합니다.

 void    HideTestIndicators
(
   bool hide // флаг
);

 
fxsaber :

이렇게 하려면 "도청" 고문이 병렬로 작동해야 합니다. 보조 차트가 필요합니다.

이 예에서는 상황이 다소 다릅니다. 하나의 차트가 있고 해당 차트에서 Expert Advisor가 이미 실행 중입니다. 그리고 새 지표를 열지 않고 지표를 통해 OrderSend를 전달하고 싶습니다.

물론 시장이 통과하기 위한 DLL 없이.

이를 위해 나는 올빼미에게 명령을 내릴 가능성의 패널을 몰고 때로는 수동 모드로 명령을 내리지만 올빼미가 가져 오는대로 진행됩니다.

 
콘스탄틴 니키틴 :

이를 위해 나는 올빼미에게 명령을 내릴 가능성의 패널을 몰고 때로는 수동 모드로 명령을 내리지만 올빼미가 가져 오는대로 진행됩니다.

처음에는 지표 자체가 OBJ_CHART 에서 Order 스크립트를 시작했을 때 라이프 핵에 대해 이야기하고 있었습니다.

 

후위 연산자(연산자 ++ 및 연산자 --)는 다음과 같이 정의됩니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

약간의 오류를 발견하는 데 도움이 필요합니다.

휘더1 , 2014.07.07 11:37


  1. 접두사 연산자++
    후위 연산자++
    RaRev* RaRev:: operator ++( void ){         // prefix
    
    RaRev RaRev:: operator ++( int ){               // postfix
 
파벨 베르베코 :
4-ke에 그런 기능이 있는데 MQL5에서는 어떻게 구현하나요?

EA에서 호출한 표시기를 숨기기 위한 플래그를 설정합니다.


이와 같이 도움말을 참조하십시오.

MQL5 참조 / 사용자 지정 표시기 / 예제의 표시기 스타일 / DRAW_NONE
 
MQL4 지지자의 경우 익숙한 스타일로 MQL5의 TF를 사용하는 고대 방식이 있습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

'CopyTicks' 테스트

fxsaber , 2016.10.19 07:59

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.

#define DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
   class CLASS ##NAME                                                                                           \
  {                                                                                                           \
   public :                                                                                                     \
     static T Get( const string Symb, const int TimeFrame, const int iShift )                                  \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
       return ((Copy ##FUNC((Symb == NULL ) ? _Symbol : Symb, _Period , iShift, 1 , tValue) > 0 ) ? tValue[ 0 ] : - 1 ); \
    }                                                                                                         \
                                                                                                              \
    T operator []( const int iPos ) const                                                                      \
    {                                                                                                         \
       return (CLASS ##NAME::Get(_Symbol, _Period , iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS ##NAME NAME;                                                                                           \
                                                                                                              \
  T i ##NAME( const string Symb, const int TimeFrame, const int iShift )                                       \
  {                                                                                                           \
     return (CLASS ##NAME::Get(Symb, TimeFrame, iShift));                                                        \
  }

DEFINE_TIMESERIE( Volume , TickVolume, long )
DEFINE_TIMESERIE( Time , Time , datetime )
DEFINE_TIMESERIE( Open , Open , double )
DEFINE_TIMESERIE( High , High , double )
DEFINE_TIMESERIE( Low , Low , double )
DEFINE_TIMESERIE( Close , Close , double )

아마도 누군가는 틱 기록으로 작업할 때 MQL4 접근 방식이 필요할 것입니다.

 // Позволяет работать с тиковой историей в MQL4-стиле
struct TICK_HISTORY
{
   const string Symb;
  
  TICK_HISTORY( const string sSymb = NULL ) : Symb(sSymb)
  {
  }
  
   const MqlTick operator []( const int Pos ) const
  {
     static const MqlTick NullTick = { 0 };
     static MqlTick Ticks[];
    
     return ((:: CopyTicks ( this .Symb, Ticks, COPY_TICKS_INFO , 0 , Pos + 1 ) > Pos) ? Ticks[:: ArraySize (Ticks) - Pos - 1 ] : NullTick);
  }
};

const TICK_HISTORY Tick;


애플리케이션

 if (Tick[ 0 ].bid > Tick[ 100 ].bid) // сравниваем текущий и исторический тики
   Print ( "Hello World!" );

if ( High [ 0 ] > Close [ 100 ]) // https://www.mql5.com/ru/forum/42122/page24#comment_2904023
   Print ( "Hello World!" );
 
알렉세이 볼찬스키 :

이와 같이 도움말을 참조하십시오.

MQL5 참조 / 사용자 지정 표시기 / 예제의 표시기 스타일 / DRAW_NONE

정말 감사합니다. 시도해 보겠습니다. SD는 IndicatorRelease가 이러한 작업을 수행해야 한다고 말했습니다.

 

정렬 측면에서 구조의 필드를 정렬하는 것이 더 정확한 방법을 발견한 사람:

 struct A
  {
   uchar   arr[ 20 ];
   // тут поля заполнители
   double val;
  };

struct B
  {
   double val;
   // тут поля заполнители
   uchar   arr[ 20 ];
  };

이론적으로 구조의 정렬은 위에서 아래로 진행되지만 20개 요소에 대한 메모리 할당이 있는 배열이 있습니다. 방법 A가 올바른 것처럼 보입니다.
 
fxsaber :
MQL4 지지자의 경우 익숙한 스타일로 MQL5의 TF를 사용하는 고대 방식이 있습니다.

 // Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
   class CLASS ##NAME                                                                                           \
  {                                                                                                           \
   public :                                                                                                     \
     static T Get( const string Symb, const int TimeFrame, const int iShift )                                  \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
       return ((Copy ##FUNC((Symb == NULL ) ? _Symbol : Symb, _Period , iShift, 1 , tValue) > 0 ) ? tValue[ 0 ] : - 1 ); \
    }                                                                                                         \
                                                                                                              \
    T operator []( const int iPos ) const                                                                      \
    {                                                                                                         \
       return (CLASS ##NAME::Get(_Symbol, _Period , iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS ##NAME NAME;                                                                                           \
                                                                                                              \
  T i ##NAME( const string Symb, const int TimeFrame, const int iShift )                                       \
  {                                                                                                           \
     return (CLASS ##NAME::Get(Symb, TimeFrame, iShift));                                                        \
  }

DEFINE_TIMESERIE( Volume , TickVolume, long )
DEFINE_TIMESERIE( Time , Time , datetime )
DEFINE_TIMESERIE( Open , Open , double )
DEFINE_TIMESERIE( High , High , double )
DEFINE_TIMESERIE( Low , Low , double )
DEFINE_TIMESERIE( Close , Close , double )

애플리케이션...


전체 클래스를 매크로로 밀어넣는 멋진 방법입니다. 디버거에서 그러한 클래스로 작업할 수 없다는 것은 유감입니다 :-((

 
콘스탄틴 :

정렬 측면에서 구조의 필드를 정렬하는 것이 더 정확한 방법을 발견한 사람:

이론적으로 구조의 정렬은 위에서 아래로 진행되지만 20개 요소에 대한 메모리 할당이 있는 배열이 있습니다. 방법 A가 올바른 것처럼 보입니다.

MQL에 대해 이야기하고 있다면 거기에는 정렬이 없습니다.

그리고 C ++에 관한 것이라면 구조체 B가 더 좋습니다.

어쨌든, C++에서 정렬은 프로그래머에게 달려 있습니다.