초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1284

 
Youri Lazurenko :

다시 한 번 감사합니다. 이제 선이 선처럼 되어 보기 좋습니다. 그것은 단지 ObjectDelete (0, 이름)입니다. 그렇지 않으면 그려진 선이 다시 그려지지 않으면 필요합니다. 또한 mql4에서 방금 잊었습니다.

나는 그렇게 할 것이다

 bool CreateLine( string name, datetime time1, double price1, datetime time2, double price2, color clr)
 {
   if ( ObjectFind ( ChartID (), name) < 0 )
     if (! ObjectCreate ( ChartID (), name, OBJ_TREND , 0 , 0 , 0 , 0 , 0 ))
     {
       Print ( "Ошибка в создании линии" );
       return ( false );
     }
   ObjectSetInteger ( ChartID (), name, OBJPROP_COLOR , clr);
   ObjectSetInteger ( ChartID (), name, OBJPROP_STYLE , TrendStyle);
   ObjectSetInteger ( ChartID (), name, OBJPROP_WIDTH , TrendWidth);
   ObjectSetInteger ( ChartID (), name, OBJPROP_TIME , 0 , time1);
   ObjectSetInteger ( ChartID (), name, OBJPROP_TIME , 1 , time2);
   ObjectSetDouble ( ChartID (), name, OBJPROP_TIME , 0 , price1);
   ObjectSetDouble ( ChartID (), name, OBJPROP_TIME , 1 , price2);

   ChartRedraw ();
   return ( true );
 }
 
Vladimir Karputov :

말도 안되는 소리야. 그려진 그래픽 개체가 조용히 움직입니다. 각 개체에 대한 도움말에 예가 나와 있습니다(가로선 OBJ_HLINE ).

색상, 스타일, 냄새 등 이미 그려진 개체의 속성을 변경할 수도 있습니다.

손으로, 의심의 여지가 없습니다. EA는 DeMark 포인트를 기반으로 추세선을 그립니다. ObjectDelete (0, name); 기능을 사용하면 점을 변경할 때 이전 추세선이 제거되고 새 추세선이 그려집니다. 이 기능이 없으면 처음 그린 선은 더 이상 다시 그려지지 않습니다. 이것은 넌센스가 아니라 사실입니다.

Документация по MQL5: Графические объекты / ObjectDelete
Документация по MQL5: Графические объекты / ObjectDelete
  • www.mql5.com
ObjectDelete - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko :

손으로, 의심의 여지가 없습니다. EA는 DeMark 포인트를 기반으로 추세선을 그립니다. ObjectDelete (0, name); 기능을 사용하면 점을 변경할 때 이전 추세선이 제거되고 새 추세선이 그려집니다. 이 기능이 없으면 처음 그린 선은 더 이상 다시 그려지지 않습니다. 이것은 넌센스가 아니라 사실입니다.

예, 마침내 도움말을 읽으십시오! 그리고 예제를 실행합니다.

 
Alexey Viktorov :

나는 그렇게 할 것이다

감사합니다. 하지만 제 버전은 그대로 두겠습니다. 작동합니다. ObjectDelete (0, name) 대신 시도해 보겠습니다. 적용하다

  ChartRedraw ();
Документация по MQL5: Графические объекты / ObjectDelete
Документация по MQL5: Графические объекты / ObjectDelete
  • www.mql5.com
ObjectDelete - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov :

예, 마침내 도움말을 읽으십시오! 그리고 예제를 실행합니다.

도움말을 읽었습니다. 근거없는 분개만 하고 연습으로 씁니다. 또 다른 것은 ObjectDelet() 대신 ChartRedraw( ) 를 사용한다는 것인데, 나는 논쟁하고 확인하지 않습니다. 이것은 예를 참조하여 지적할 수 있는 유일한 것입니다.

 
Youri Lazurenko :

도움말을 읽었습니다. 근거없는 분개하는 당신뿐이고 나는 연습을 바탕으로 씁니다. 또 다른 것은 ObjectDelet() 대신 ChartRedraw( ) 를 사용한다는 것인데, 나는 논쟁하고 확인하지 않습니다. 이것은 예를 참조하여 지적할 수 있는 유일한 것입니다.

이 스레드에서 그들은 일반적으로 조언을 구하고 조언을 줄 때 경청합니다. 최소한 도움말을 읽고 예제를 적용하십시오. 다른 사람의 말을 듣기 싫다면 아무 것도 묻지 않는 것이 좋습니다.

 
Youri Lazurenko :


" Horizontal line " 그래픽 개체의 속성을 즉석에서 변경할 수 있는 방법의 예 - 이를 위해 개체를 삭제할 필요가 없습니다. 이 경우 속성을 변경하기만 하면 됩니다.

C:\Users\barab\OneDrive\Images\Screenpresso\2021-02-01_16h09_06.gif

코드:

 //+------------------------------------------------------------------+
//|                       OBJ_HLINE change properties on the fly.mq5 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//--- input parameters
input string           InpName= "HLine" ;     // Line name
//--- an array for storing colors contains 14 elements
color colors[]=
  {
   clrRed , clrBlue , clrGreen , clrChocolate , clrMagenta , clrDodgerBlue , clrGoldenrod ,
   clrIndigo , clrLightBlue , clrAliceBlue , clrMoccasin , clrWhiteSmoke , clrCyan , clrMediumPurple
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer
   EventSetTimer ( 1 );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//--- the number of colors
   int size= ArraySize (colors);
//--- get a random value
   int number= MathRand ();
//--- get an index in the col[] array as a remainder of the integer devision
   int i=number%size;
//--- set line color
   ObjectSetInteger ( ChartID (),InpName, OBJPROP_COLOR ,colors[i]);
   ChartRedraw ();
  }
//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko :

감사합니다. 하지만 제 버전은 그대로 두겠습니다. 작동합니다. ObjectDelete (0, name) 대신 시도해 보겠습니다. 적용하다

완전히 잘못된 결정입니다. 그래픽 개체를 삭제하고 차트를 업데이트하는 것은 어떤 식으로든 서로를 대체하지 않습니다.

내 예에서는 먼저 개체, 특히 이름이 uh인 인기 있는 개체가 있는지 확인합니다. 이것은 러시아어 키보드 레이아웃의 이름입니다.))). 그런 다음 거기에 없으면 추세선이 그려집니다. 그리기에 실패하면 메시지가 표시되고 함수가 종료되어 false를 반환합니다.

그 이후의 모든 것은 이미 존재하는 추세선의 존재 여부와 상관없이 지정된 매개변수, 좌표의 시간 및 가격, 유형, 두께 및 기타 추가하는 모든 것에 할당됩니다. 그런 다음 그래프가 업데이트되고 함수가 true를 반환합니다.

실행 속도 면에서 추세선을 제거하고 새로 그리는 것보다 추세선의 존재를 확인하는 것이 비용이 덜 듭니다.

하지만… 최종 결정은 여러분의 몫이고, 오른발 새끼 발가락으로 왼귀를 긁는 것을 좋아하신다면 저는 간섭할 권리가 없습니다.

 
Youri Lazurenko :

그리고 추세선 그리기로 돌아갑니다. 코드가 필요한 경우.

아주 나쁜 코드입니다.

 
Alexey Viktorov :

나는 그렇게 할 것이다

그리고 저는 다음과 같습니다.

 void CreateLine( string name, datetime time1, double price1, datetime time2, double price2, color clr)
 {
  if ( ObjectFind ( ChartID (), name) < 0 )
   {
     ObjectCreate ( ChartID (), name, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
     ObjectSetInteger ( ChartID (), name, OBJPROP_COLOR , clr);
    ObjectSetInteger ( ChartID (), name, OBJPROP_STYLE , TrendStyle);
    ObjectSetInteger ( ChartID (), name, OBJPROP_WIDTH , TrendWidth);
   }
   ObjectSetInteger ( ChartID (), name, OBJPROP_TIME , 0 , time1);
   ObjectSetInteger ( ChartID (), name, OBJPROP_TIME , 1 , time2);
   ObjectSetDouble ( ChartID (), name, OBJPROP_PRICE , 0 , price1);
   ObjectSetDouble ( ChartID (), name, OBJPROP_PRICE , 1 , price2);

   ChartRedraw ();
 }
사유: