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

 
Alexey Viktorov # :

Makar 없음, 다음과 같이 보입니다.

ObjectFind() 함수는 기본 창의 번호를 반환합니다. 그리고 이 숫자는 0과 같습니다. 반면에 0 == false인 경우 함수가 0을 반환하면 false를 반환하는 것과 같습니다. 물론 함수가 갑자기 -1을 반환하면, 즉 오류가 발생하면 이것을 적용하지 않을 것입니다. 그러면 메인 창에 없는 객체의 위치를 고려할 수 있습니다. 예, 모든 것에 더해 어떤 수정이 이루어질지 결코 알 수 없습니다 ...

일반적으로 논쟁하지 말고 그렇게하는 법을 배우지 마십시오 ...

ObjectFind() 함수는 기본 창의 번호를 반환하지 않습니다. 그리고 개체가 발견된 창의 번호(0,1,2...) 또는 개체가 없으면 -1입니다.

"-1"이 거짓인지 참인지 궁금합니다.

bool 유형 숫자 표현이 각각 1 또는 0인 논리값 true (true) 또는 false (false)를 저장하도록 설계되었습니다.
 
MakarFX # :

ObjectFind() 함수는 기본 창의 번호를 반환하지 않습니다. 그리고 개체가 발견된 창의 번호(0,1,2...) 또는 개체가 없으면 -1입니다.

개체가 기본 창에 있는 특정 경우에 대해 이야기했습니다. 논쟁하지 말고 그렇게하는 법을 배우지 마십시오 ...

 

MakarFX # :

"-1"이 거짓인지 참인지 궁금합니다.

bool 유형 숫자 표현이 각각 1 또는 0인 논리값 true (true) 또는 false (false)를 저장하도록 설계되었습니다.

false는 0일 뿐입니다. 나머지는 모두 true입니다.

 
Alexey Viktorov # :

false는 0일 뿐입니다. 나머지는 모두 true입니다.

"-1" 도 사실입니까? 이미 확인했습니다. "0"만 유효 - 거짓
 
Alexey Viktorov # :

Makar 없음, 다음과 같이 보입니다.

ObjectFind() 함수는 기본 창의 번호를 반환합니다. 그리고 이 숫자는 0과 같습니다. 반면에 0 == false인 경우 함수가 0을 반환하면 false를 반환하는 것과 같습니다. 물론 함수가 갑자기 -1을 반환하면, 즉 오류가 발생하면 이것을 적용하지 않을 것입니다. 그러면 메인 창에 없는 객체의 위치를 고려할 수 있습니다. 예, 모든 것에 더해 어떤 수정이 이루어질지 결코 알 수 없습니다 ...

일반적으로 논쟁하지 말고 그렇게하는 법을 배우지 마십시오 ...

나는 이것이 할 가치가 없다는 것을 알고 있지만 미학을 위해해야했습니다 (각 조건에서 == 0은 추해 보입니다). 그리고 메인 창에서만 개체가 필요합니다.

 
Nerd Trader # :

나는 이것이 할 가치가 없다는 것을 알고 있지만 미학을 위해해야했습니다 (각 조건에서 == 0은 추해 보입니다). 그리고 메인 창에서만 개체가 필요합니다.

그럼 해봐

 if ( ObjectFind ( "Buy Stop" ) || ObjectFind ( "not allowed" ))

객체가 없으면 "-1"이 표시됩니다. 진실

 
==0 옵션으로 변경되었습니다.

문제: 차트 에서 버튼을 눌렀을 때 노란색과 회색 선("매도 중지" 및 "허용되지 않음")이 지속적으로 생성되고 깜박입니다. 또한 ObjectCreate()는 계속해서 거짓이 아닌 참을 반환합니다. 즉, 마치 다른 창에 있는 것처럼 생성하므로 깜박임을 설명할 수 있습니다. 그러나 창은 기본 창일 뿐이며 녹색 선("구매 중지" ) 빨간색과 같이 이상 현상이 관찰되지 않습니다("손절매").

 void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam)
{
     datetime static dt          = 0 ;
     double    static price       = 0 ;
     int        static window      = 0 ;
     string    static line_name;

   if (id== CHARTEVENT_OBJECT_CLICK ){
    ...
     //Нажатие на SO в зависимоти от расположения панели создаёт линию
     if (sparam== "Button Stop Order" ){
       if (panel_position == 1 || panel_position == 2 ){
        line_name = "Buy Stop" ;
        CreateLine(line_name, clrGreen );
      }
       if (panel_position == 3 || panel_position == 4 ){
        line_name = "Sell Stop" ;
        CreateLine(line_name, clrYellow );
      }
    }
     //Нажатие на линию удаляет её и создаёт красную
     if (sparam== "Buy Stop" || sparam== "Sell Stop" ){
       ObjectDelete (line_name);
      line_name = "Stop Loss" ;
      CreateLine(line_name, clrRed );
    }
     //Нажатие на красной линии удаляет её и отжимает кнопку
     if (sparam== "Stop Loss" ){
       ObjectDelete (line_name);
      button_name = "Button Stop Order" ;
      ms= GetMicrosecondCount ();
    }
  }
   //Если кнопка SO нажата, то линия будет следовать за курсором
   if ( ObjectGetInteger ( 0 , "Button Stop Order" , OBJPROP_STATE )){
     int x = ( int )lparam;
     int y = ( int )dparam;
     //Переведём координаты X, Y в дату и время
     if ( ChartXYToTimePrice ( 0 ,x,y,window,dt,price)){
       //Линия меняет цвет с зелёного на желтый
       if (price < Bid){
         if ( ObjectFind ( "Buy Stop" ) == window || ObjectFind ( "not allowed" ) == window){
           ObjectDelete (line_name);
          line_name = "Sell Stop" ;
          CreateLine(line_name, clrYellow );
        }      
      }
       //Линия меняет цвет с желтого на зелёный
       if (price > Ask){
         if ( ObjectFind ( "Sell Stop" ) == window || ObjectFind ( "not allowed" ) == window){
           ObjectDelete (line_name);
          line_name = "Buy Stop" ;
          CreateLine(line_name, clrGreen );
        }
      }
       //Линия меняет цвет на серый если в зоне спреда
       if (price > Bid && price < Ask){
         if ( ObjectFind ( "Buy Stop" ) == window || ObjectFind ( "Sell Stop" ) == window){
           ObjectDelete (line_name);
          line_name = "not allowed" ;
          CreateLine(line_name, clrGray );
        }
      }
       //Прикрепляем линию к курсору
       if (id == CHARTEVENT_MOUSE_MOVE )
         if ( ObjectMove ( 0 ,line_name, 0 , 0 ,price))
           ChartRedraw ( 0 );
    }
  } else if ( ObjectFind (line_name) == window) Print ( ObjectDelete (line_name));
   //Если нажать Esc то удалится линия и кнопка отожмется
   if (id == CHARTEVENT_KEYDOWN && lparam == 27 ){
      button_name = "Button Stop Order" ;
      ms= GetMicrosecondCount ();
  }
}
//----------------------------------------------------------------------
void CreateLine( const string name, const color clr)
{
   Print ( ObjectCreate ( 0 , name, OBJ_HLINE , 0 , 0 , 0 ));
   ObjectSetInteger ( 0 , name, OBJPROP_COLOR , clr);
   ObjectSetInteger ( 0 , name, OBJPROP_STYLE , 3 ); 
}
 
MakarFX # :

그럼 해봐

객체가 없으면 "-1"이 표시됩니다. 진실

나는 시도했지만 예외가 작동하려면 개체의 이름(반전)을 변경해야 합니다. 그러나 선은 그렇게 만들어지지 않습니다.

 if ( ObjectFind ( "Sell Stop" ) || ObjectFind ( "Stop Loss" )){
   ObjectDelete (line_name);
  line_name = "Sell Stop" ;
  CreateLine(line_name, clrYellow );
} 
 
Nerd Trader # :

시도했지만 개체의 이름만 변경하면 됩니다. 그러나 이 방법으로는 선이 전혀 생성되지 않습니다.

나도 너도 만들고 가격만 '0'
 
MakarFX # :
나도 너도 만들고 가격만 '0'
예, 실제로 이미 8 조각이 있지만 차트에 표시되지 않습니다. 0의 가격이 중요하지 않다는 사실, 라인은 여전히 커서에 달라 붙습니다 (따라갑니다)