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

 

Veterros :
Ребят подскажите, почему 4202 выдаёт (Объект не существует). Правильно что не существует его создать надо, а он мне (не существует)! Чего можно с ним сделать? Или я где-то опять накосячил?

닫는 중괄호 뒤에 else를 추가하거나 이 중괄호 내부에서 객체 수정 연산자를 이동합니다.

 
tara :

감사합니다. 하지만 문제는 사라지지 않았습니다.

 

누가 생각하는지 알려주십시오. 다음 표현이 동일합니다.  

 1 ) double BarN= NormalizeDouble (iHigh( Symbol (), 5 ,iHighest( Symbol (), 5 ,MODE_HIGH,num, 1 )), Digits ) 

2 ) double BarN= NormalizeDouble (High[iHighest( Symbol (), 5 ,MODE_HIGH,num, 1 )], Digits )
 
Veterros :
얘들 아, 왜 4202 문제가 발생하는지 말해줘(객체가 존재하지 않음). 존재하지 않는 것이 맞고, 만들어야 하지만, 나를 위한 것입니다(존재하지 않습니다)! 그것으로 무엇을 할 수 있습니까? 아니면 내가 다른 곳에서 망쳤습니까?

나는 당신의 버전을 스크립트 형태로 재빨리 시험해 보았고, 시간과 표시를 바꾸고 개체가 있는지 검사를 처방했지만 오류는 없었습니다.

고통을 겪지 않기 위해 이미 새로운 MQL4 언어를 고려한 화살표 개체의 형성을 사용하려고 합니까?

다음은 사용자가 지정한 화살표 개체를 생성하는 스크립트의 "본문"이며, 이미 새 언어를 고려하고 있습니다(지금까지 사용자에게만 알려진 SignalBarsTime, Hi2, SignalBarsTime, Lo2 대신 시간과 표시가 임의로 설정됨).

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   if ( ObjectFind ( 0 , "Продажа" )< 0 )
     {
      ArrowDownCreate( 0 , "Продажа" , 0 ,Time[ 2 ],High[ 2 ],
                       ANCHOR_BOTTOM , clrRed , STYLE_SOLID , 5 , false , false , true , 0 );
     }
   if ( ObjectFind ( 0 , "Покупка" )< 0 )
     {
      ArrowUpCreate( 0 , "Покупка" , 0 ,Time[ 1 ],Low[ 1 ],
                    ANCHOR_TOP , clrGreen , STYLE_SOLID , 5 , false , false , true , 0 );
     }
  }
//+------------------------------------------------------------------+
//| Создает знак "Стрелка вниз"  https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_arrow_down
//+------------------------------------------------------------------+
bool ArrowDownCreate( const long               chart_ID= 0 ,           // ID графика
                     const string             name= "ArrowDown" ,     // имя знака
                     const int                sub_window= 0 ,         // номер подокна
                     datetime                 time= 0 ,               // время точки привязки
                     double                   price= 0 ,               // цена точки привязки
                     const ENUM_ARROW_ANCHOR anchor= ANCHOR_BOTTOM , // способ привязки
                     const color              clr= clrRed ,           // цвет знака
                     const ENUM_LINE_STYLE    style= STYLE_SOLID ,     // стиль окаймляющей линии
                     const int                width= 3 ,               // размер знака
                     const bool               back= false ,           // на заднем плане
                     const bool               selection= true ,       // выделить для перемещений
                     const bool               hidden= true ,           // скрыт в списке объектов
                     const long               z_order= 0 )             // приоритет на нажатие мышью
  {
//--- установим координаты точки привязки, если они не заданы
   //ChangeArrowEmptyPoint(time,price);
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим знак
   if (! ObjectCreate (chart_ID,name, OBJ_ARROW_DOWN ,sub_window,time,price))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать знак \"Стрелка вниз\"! Код ошибки = " , GetLastError ());
       return ( false );
     }
//--- способ привязки
   ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
//--- установим цвет знака
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль окаймляющей линии
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим размер знака
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Создает знак "Стрелка вверх" https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_arrow_up
//+------------------------------------------------------------------+
bool ArrowUpCreate( const long               chart_ID= 0 ,           // ID графика
                   const string             name= "ArrowUp" ,       // имя знака
                   const int                sub_window= 0 ,         // номер подокна
                   datetime                 time= 0 ,               // время точки привязки
                   double                   price= 0 ,               // цена точки привязки
                   const ENUM_ARROW_ANCHOR anchor= ANCHOR_BOTTOM , // способ привязки
                   const color              clr= clrRed ,           // цвет знака
                   const ENUM_LINE_STYLE    style= STYLE_SOLID ,     // стиль окаймляющей линии
                   const int                width= 3 ,               // размер знака
                   const bool               back= false ,           // на заднем плане
                   const bool               selection= true ,       // выделить для перемещений
                   const bool               hidden= true ,           // скрыт в списке объектов
                   const long               z_order= 0 )             // приоритет на нажатие мышью
  {
//--- установим координаты точки привязки, если они не заданы
   //ChangeArrowEmptyPoint(time,price);
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим знак
   if (! ObjectCreate (chart_ID,name, OBJ_ARROW_UP ,sub_window,time,price))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = " , GetLastError ());
       return ( false );
     }
//--- установим способ привязки
   ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
//--- установим цвет знака
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль окаймляющей линии
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим размер знака
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
 
P./S.: 이제 위의 게시물에서 ANCHOR_BOTTOMANCHOR_TOP 으로 수정하여 수정했습니다.
 if ( ObjectFind ( 0 , "Покупка" )< 0 )
     {
      ArrowUpCreate( 0 , "Покупка" , 0 ,Time[ 1 ],Low[ 1 ],
                     ANCHOR_TOP , clrGreen , STYLE_SOLID , 5 , false , false , true , 0 );
     }
 
DiPach :
P./S.: 이제 위의 게시물에서 ANCHOR_BOTTOMANCHOR_TOP 으로 수정하여 수정했습니다.
대단히 감사합니다. 매우 도움이 됩니다. 또한 개체에 자동으로 이름을 할당하는 방법을 찾고 싶습니다. 그렇지 않으면 매번 다시 그려야 합니다. 이것에 대해 어디에서 찾을 수 있고 어떤 영역에서 볼 수 있는지 알려주실 수 있습니까?
 
Veterros :
감사합니다, 많은 도움이 되었습니다. 또한 개체에 자동으로 이름을 할당하는 방법을 찾고 싶습니다. 그렇지 않으면 매번 다시 그려야 합니다. 이것에 대해 어디에서 찾을 수 있고 어떤 영역에서 볼 수 있는지 알려주실 수 있습니까?
개체 이름에 시간을 추가합니다.
 
Veterros :

네. 개인의 이름은 다양한 방식으로 쓸 수 있습니다.

예를 들어 객체의 개별 이름을 생성하는 함수는 다음과 같을 수 있습니다.

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string nameNi( string PrefixN, datetime TimeN)
  {
   string textn= NULL ;
   textn= StringConcatenate (PrefixN, TimeToString (TimeN, TIME_DATE | TIME_MINUTES ));
   return (textn);
  }

그리고 프로그램 본문에는 다음과 같이 표시될 수 있습니다(이전에 접두사로 사용할 조건을 작성했음).

...

string nameobj=nameNi(prefixX,timeX);

또한 새로 생성된 객체의 경우 예를 들어 다음과 같이 보일 수 있습니다.

 if ( ObjectFind ( 0 ,nameobj)< 0 )
     {
      ArrowDownCreate( 0 ,nameobj, 0 ,timeX,HiN,
                       ANCHOR_BOTTOM , clrRed , STYLE_SOLID , 5 , false , false , true , 0 );
     }


이제 도움말에서 이것을 정확히 볼 수 있는 곳이나 사이트 검색에서 가장 잘 물어보는 방법을 알 수 없지만 교과서에서 나는 이 페이지를 기억했습니다: https://book.mql4.com/en/functions/strings

정보 및 샘플 코드가 있습니다. TimeToStr 대신 TimeToString 을 사용할 수 있습니다. 튜토리얼은 이전 MQL4 언어로 작성되었지만 그럼에도 불구하고 내 관점에서 볼 때 새 MQL4 언어를 마스터할 때 많은 도움이 될 수 있습니다. 업데이트된 언어에 대한 도움말과 함께 포함됩니다.

 
evillive :
개체 이름에 시간을 추가합니다.
매우 감사합니다!
 
DiPach :

네. 개인의 이름은 다양한 방식으로 쓸 수 있습니다.

예를 들어 객체의 개별 이름을 생성하는 함수는 다음과 같을 수 있습니다.

그리고 프로그램 본문에는 다음과 같이 표시될 수 있습니다(이전에 접두사로 사용할 조건을 작성했음).

또한 새로 생성된 객체의 경우 예를 들어 다음과 같이 보일 수 있습니다.


이제 도움말에서 이것을 정확히 볼 수 있는 곳이나 사이트 검색에서 가장 잘 물어보는 방법을 알 수 없지만 교과서에서 나는 이 페이지를 기억했습니다: https://book.mql4.com/ru/functions/strings

정보 및 샘플 코드가 있습니다. TimeToStr 대신 TimeToString을 사용할 수 있습니다. 튜토리얼은 이전 MQL4 언어로 작성되었지만 그럼에도 불구하고 내 관점에서 볼 때 새 MQL4 언어를 마스터할 때 많은 도움이 될 수 있습니다. 업데이트된 언어에 대한 도움말과 함께 포함됩니다.


안녕, 친애하는 ;) 내가 모든 종류의 개체에 대한 코드를 얼마나 많이 작성하는지 상상해보십시오. 이름을 생성하기 위해 별도의 기능을 만들 생각을 한 적이 없습니다. 항상 코드에서 바로 작성했습니다. 그게 다야, 얻은거야. 팁 고마워. 그리고 관련된 모든 곳에서 간결함을 위해 기능을 작성하지만 여기에서는 항상 고통을 겪었습니다.

추신. 거기 Lyova가 당신에게 인사했습니다;)