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

 
Novichokkk #:

14는 2진수입니다. 1110입니다.

1비트를 왼쪽으로 이동하면 0111이 됩니다,

우리는 다른 "왼쪽"을 갖게 됩니다 :-)

1110<<1 := 11100

 
Maxim Kuznetsov #:

당신과 나는 다른 "왼쪽"을 가지고 있습니다 :-)

1110<<1 := 11100

나는 인터넷에서 그것을 읽었습니다. 이것은 내가 이해하는 32 비트의 경우 16 비트의 경우 동일하며 조금도 뛰어 오르지 않았습니다. 그러나 나는 단지 배우고 있습니다. 아마도 당신이 옳을 것입니다.

그것은 요점이 아니라 단지 부수적 인 것입니다. 나는 터미널의 그러한 구조에 놀랐습니다. 이 표시기는 코드베이스에서 가져온 것이 아니라 예제 폴더의 터미널에서 가져온 것입니다.

파일:
8888.jpg  49 kb
 

기존 디자인을 어떻게 변경하나요?

ObjectSetText("Maximum",DoubleToString(ChartGetDouble(0,CHART_PRICE_MAX,0),5),8,"Arial",Red);

여기에는 모든 것이 명확합니다. 이런저런 물체, 이런저런 설명, 이런저런 글꼴 크기, 글꼴 유형, 색상.

하지만 그건 이전 디자인에서 가져온 것입니다.

대체되는 내용을 읽었습니다.

ObjectSetText

에서

ObjectGetInteger,ObjectSetString,ObjectSetIntegerStringLen.

그러나 이러한 모든 함수에는 ObjectSetText와 같은 매개 변수가 없습니다.

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

µl4에 이 코드가 있었는데

int OnInit()
  {
   SetIndexBuffer(0,H);
   SetIndexStyle(0,2);
   SetIndexBuffer(1,L);
   SetIndexStyle(1,2);

   if(ObjectCreate("Maximum",OBJ_LABEL,0,0,0))
     {
      ObjectSet("Maximum",OBJPROP_XDISTANCE,1);
      ObjectSet("Maximum",OBJPROP_YDISTANCE,1);
      ObjectSet("Maximum",OBJPROP_CORNER,1);
     }
   ObjectSetText("Maximum",DoubleToStr(WindowPriceMax(),4),8,"Arial",Red);

   if(ObjectCreate("Minimum",OBJ_LABEL,0,0,0))
     {
      ObjectSet("Minimum",OBJPROP_XDISTANCE,1);
      ObjectSet("Minimum",OBJPROP_YDISTANCE,1);
      ObjectSet("Minimum",OBJPROP_CORNER,3);
     }
   ObjectSetText("Minimum",DoubleToStr(WindowPriceMin(),4),8,"Arial",Blue);

   return(0);
  }



µl5로 변경했는데, 어떻게 변경해야 할지 몰랐던 ObjectSetText만 변경했습니다.


int OnInit()
  {
   SetIndexBuffer(0, H, INDICATOR_DATA);
   PlotIndexSetInteger(1,5,0);
   SetIndexBuffer(1, L, INDICATOR_DATA);
   PlotIndexSetInteger(2,5,0);

   if(ObjectCreate(0,"Maximum",OBJ_LABEL,0,0,0))
     {
      ObjectSetInteger(0,"Maximum",OBJPROP_XDISTANCE,1);
      ObjectSetInteger(0,"Maximum",OBJPROP_YDISTANCE,1);
      ObjectSetInteger(0,"Maximum",OBJPROP_CORNER,1);
     }
   ObjectSetText("Maximum",DoubleToString(ChartGetDouble(0,CHART_PRICE_MAX,0),5),8,"Arial",Red);

   if(ObjectCreate(0,"Minimum",OBJ_LABEL,0,0,0))
     {
      ObjectSetInteger(0,"Minimum",OBJPROP_XDISTANCE,1);
      ObjectSetInteger(0,"Minimum",OBJPROP_YDISTANCE,1);
      ObjectSetInteger(0,"Minimum",OBJPROP_CORNER,3);
     }
   ObjectSetText("Minimum",DoubleToString(ChartGetDouble(0,CHART_PRICE_MIN,0),5),8,"Arial",Blue);

   return(0);
  }
 
Novichokkk #:

오래된 디자인은 어떻게 변경하나요?

여기에는 모든 것이 명확합니다. 우리는 이런저런 글꼴 크기, 글꼴 유형, 색상으로 이런저런 개체를 설명합니다.

하지만 그것은 이전 디자인에서 나온 것입니다.

대체되는 내용을 읽었습니다.

오브젝트겟인터,오브젝트셋스트링,오브젝트셋인터스트링렌

그러나 이 모든 함수에는 ObjectSetText와 같은 매개변수가 없습니다.

글꼴, 크기, 색상, 배경색 등은 https://www.mql5.com/ru/docs/constants/objectconstants/enum_object_property 을 별도로 호출하여 설정합니다.

 
JRandomTrader #:

글꼴, 크기, 색상, 배경색 등은 https://www.mql5.com/ru/docs/constants/objectconstants/enum_object_property 으로 별도로 호출하여 설정할 수 있습니다.

대신

ObjectSetText("Maximum",DoubleToStr(WindowPriceMax(),4),8,"Arial",Red);

이렇게 해야 하나요?

    ObjectSetString(0,"Maximum",OBJPROP_TEXT,DoubleToString(ChartGetDouble(0,CHART_PRICE_MAX,0),5)); // описание-что вставляем в объект "Maximum"
    ObjectSetString(0,"Maximum",OBJPROP_FONTSIZE,8);    // размер шрифта описания                                      
    ObjectSetString(0,"Maximum",OBJPROP_FONT,"Arial");  // какой шрифт
    ObjectSetString(0,"Maximum",OBJPROP_COLOR,Red);     // цвет шрифта
 
Novichokkk #:

따라서

꼭 이렇게 해야 하나요?

오브젝트팝_폰트사이즈 및 오브젝트팝_컬러 - 오브젝트셋인터()를 통해

DoubleToString() 대신 StringFormat()을 사용하면 형식을 더 유연하게 제어할 수 있어 더 편리할 때가 있습니다.

 

이 스크립트는 왜 196을 출력하고

//+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()

  {
//---
   Alert((int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR));
   
  }
//+------------------------------------------------------------------+

를 출력하고 이 스크립트는 104를 출력하는 이유는 무엇인가요?

//+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()

  {
//---
   Alert(CHART_FIRST_VISIBLE_BAR);
   
  }
//+------------------------------------------------------------------+

결과는 동일해야 합니다.

 
Novichokkk #:

이러한 스크립트가 출력되는 이유 196

그리고 이것은 104.

결과는 동일해야 합니다.

왜 동일해야 할까요?

첫 번째 경우는 현재 차트의 속성 번호 CHART_FIRST_VISIBLE_BAR의 값을 가져오는 경우입니다.

두 번째 경우는 이 속성 자체의 번호를 가져오는 경우입니다.

대략적으로 배열 셀의 값과 이 셀의 인덱스 사이의 차이와 동일합니다.

 


#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 OrangeRed

extern int Ratio=2;
int limit;
int limitBars=0;

double H[];
double L[];
//+------------------------------------------------------------------+ 
int init()
{
   SetIndexBuffer(0,H); SetIndexStyle(0,2);
   SetIndexBuffer(1,L); SetIndexStyle(1,2);

   if(ObjectCreate("Maximum",OBJ_LABEL,0,0,0))  {
      ObjectSet("Maximum",OBJPROP_XDISTANCE,1);
      ObjectSet("Maximum",OBJPROP_YDISTANCE,1);
      ObjectSet("Maximum",OBJPROP_CORNER,1);  }
   ObjectSetText("Maximum",DoubleToStr(WindowPriceMax(),4),8,"Arial",Red);

   if(ObjectCreate("Minimum",OBJ_LABEL,0,0,0))  {
      ObjectSet("Minimum",OBJPROP_XDISTANCE,1);
      ObjectSet("Minimum",OBJPROP_YDISTANCE,1);
      ObjectSet("Minimum",OBJPROP_CORNER,3);  }
   ObjectSetText("Minimum",DoubleToStr(WindowPriceMin(),4),8,"Arial",Blue);

   return(0);
}
//+------------------------------------------------------------------+ 
int start()
{
   double max[256];
   double min[256];

   if(limitBars<Bars) limit=WindowFirstVisibleBar();

   for(int i=0; i<limit; i++)
   {
      for(int shift=0; shift<Ratio; shift++) {
         max[shift]=High[i*Ratio+shift];
         min[shift]=Low[i*Ratio+shift];   }

      H[i]=max[ArrayMaximum(max,Ratio,0)];
      L[i]=min[ArrayMinimum(min,Ratio,0)];
   }

   if(limit>1)
   {
      max[0]=H[ArrayMaximum(H,limit,0)];
      min[0]=L[ArrayMinimum(L,limit,0)];
      ObjectSetText("Maximum",DoubleToStr(max[0],4));
      ObjectSetText("Minimum",DoubleToStr(min[0],4));
   }

   limitBars=Bars;
   limit=1;
   return(0);
}

이전 MQL4에도 이러한 표시기가 있었습니다.
사유: