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

 
Yurij Kozhevnikov :

감사합니다. 그런 구현이 떠올랐지만 Value1 자체가 없기 때문에 이것은 옳지 않습니다. 즉, 내가 만든 예제는 물론 매우 단순화되었지만 이것이 클래스의 주요 값이 아니며 이러한 값이 일정 개수 있을 수 있으며 이러한 구성을 다음과 같이 설명할 수 있음을 이해합니다. 각.

또는 이러한 구현이 오버로드를 구현하고 이 클래스에서 생성된 유형의 변수를 설명하는 별도의 클래스 또는 구조만 설명하는 것이 가능합니까? 그러나 다른 클래스 변수가 할당 작업에 포함되면 다시 합산되지 않습니다.

사실, 나는 vbs의 Let/Set/Get 메소드 와 비슷한 것을 구현하고 싶었습니다.

질문이 명확하지 않지만 C++/MQL에는 키 속성 Property가 없습니다.

아마도 당신은 템플릿 클래스 https://www.mql5.com/ru/docs/basis/oop/class_templates 가 필요합니다


UPD: 여기에 동일한 https://habr.com/ru/post/121799/ 에 대한 Habré에 대한 기사가 있지만 이것이 MQL에 "전면"에 적용 가능한지 의심스럽습니다.

 

정말 감사합니다!

나에게 이것은 내가 C ++를 공부한 적이 없기 때문에 내 지식을 조금 벗어난 것이지만 이것이 정확히 내가 원했던 것 같습니다. 나는 그것을 알아 내려고 노력할 것입니다.

 
Yurij Kozhevnikov :

정말 감사합니다!

나에게 이것은 내가 C ++를 공부한 적이 없기 때문에 내 지식을 조금 벗어난 것이지만 이것이 정확히 내가 원했던 것 같습니다. 나는 그것을 알아 내려고 노력할 것입니다.

이 주제에서 간단히 질문을 공식화하십시오: https://www.mql5.com/ru/forum/85652

거기에는 아주 멋진 프로그래머가 있고 그들은 그런 일을 합니다... 글쎄, 일반적으로, 아마도 이것은 당신이 그것을 더 빨리 알아내는 데 도움이 될 것입니다

 

네 감사합니다.

나는 이것을 사용했던 것을 기억하고 그것이 속성이라고 불리는 것을 잊고 내가 원하는 것을 혀로 묶었습니다.

이 기사에 대한 주석에서 매크로 대체를 사용할 수 있다고 언급했는데, 이는 아마도 자신에게 엄격한 구문 규칙을 채택함으로써 일반적이지 않은 경우를 훨씬 더 쉽게 구현할 수 있다는 아이디어를 촉발했습니다.

 
class TestClass
{
   private :
     double cValue1;
     double cValue2;
     double cValue3;
     int cIndex;
     void _Set( double mValue);
   public :
    TestClass():cIndex(- 1 ){}
     double Value1()
    { return cValue1;}

    TestClass* Value( int param)
    {
      cIndex=param;
       return & this ;
    }
     void operator =( double mValue) {_Set(mValue);}
};
//---------------------------------------------
void TestClass::_Set( double mValue){
   switch (cIndex){
       case 1 :  cValue1=mValue; break ;
       case 2 :  cValue2=mValue; break ;
       case 3 :  cValue3=mValue; break ;
   }
   cIndex=- 1 ;
}

void TestFunction()
{
  TestClass test;
  test.Value( 1 )= 0.5 ;
   Print (test.Value1());
}

void OnStart ( void )
  {
   TestFunction();
  }
그런 목발을 묘사 할 수 있습니다)
 
Vladimir Simakov :
그런 목발을 묘사 할 수 있습니다)

감사합니다. 비록 그 안에서도 아직 모든 것을 이해하지는 못했지만, 이 목발은 분명히 훨씬 간단합니다.

매크로 대체에 문자 세트를 넣는 것이 불가능합니까? 이와 같이:

#define . < один любой набор символов> ()= < второй любой набор символов> Set < один любой набор символов> ( < второй любой набор символов> )
#define . < один любой набор символов> (par1)= < второй любой набор символов> Set < один любой набор символов> (par1, < второй любой набор символов> )
 
Aleksey Mavrin :

DoubleToString을 오버로드하고 비어 있으면 "EMPTY_VALUE" 문자열을 반환하고, 그렇지 않으면 :: DoubleToString 을 호출합니다.

나는 여기에서 아무것도 이해하지 못한다.

 
Fast235 :

나는 여기에서 아무것도 이해하지 못한다.

그래서

#define DoubleToString(value,digits)  (value!=EMPTY_VALUE?DoubleToString(value,digits):"EMPTY_VALUE") 
 
Aleksey Mavrin :

그래서

드문 경우지만 더 이상 볼 수 없도록 소스를 만들고 삭제합니다)


버퍼가 표시기 버퍼인 경우 EMPTY_VALUE 를 대체할 수 있습니다.

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);

그러나 알 수 없는 수의 버퍼가 있습니다.
 

안녕하세요. atr 표시기에서 계산된 손절매 를 EA에 추가하려고 합니다. 입력 변수는

   extern    ENUM_TIMEFRAMES    PeriodForWork_sl        =   PERIOD_H4 ;           // ТФ РАСЧЁТА ЗНАЧЕНИЙ СТОП ЛОСА ПО АТР
   extern double sl= 14 ; // ПЕРИОД АТR СТОП ЛОССА

틱에서 atr 값을 정지 손실 변수로 가져오기 위해 이 작업을 수행합니다.

sl= iATR ( NULL ,PeriodForWork_sl,sl, 1 ); // ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА 

  또한 주문을 열 때 이렇게 씁니다.


 OrderSend ( Symbol (),OP_BUY,lot,Ask,slippages,Bid-sl* Point ,Bid+tp* Point , "ДИВЕРГЕНЦИЯ НА БАЙ АО" ); // ОТКРЫВАЕМ БАЙ ОРДЕР

하지만 아무 것도 작동하지 않습니다. 나는 정지 손실 변수의 값을 인쇄를 통해 출력하고 그 값 = 0이라고 씁니다. 내가 무엇을 잘못하고 있습니까? 수정하고 수정해야 할 부분은 어디입니까?