기고글 토론 "MQL5에서 라인을 다루는 방법"

 

새로운 기고글 MQL5에서 라인을 다루는 방법 가 게재되었습니다:

이 글에서는 추세선, 지지선, 저항선과 같은 가장 중요한 선을 MQL5로 다루는 방법을 알아보세요.

우리는 추세선 유형에 따라 주문하는 방식으로 추세선을 트레이딩에 사용할 수 있습니다. 상승 추세선이 있는 경우 우리는 가격이 하락하여 이 추세선을 위에서 테스트한 후 반등하여 상승할 것으로 예상하고 이 추세선을 중심으로 매수 주문을 넣을 수 있습니다. 반대로 하락 추세선이 있다면 가격이 상승하여 이 추세선을 테스트하고 하락할 수 있으며 이 하락 추세선을 중심으로 우리는 공매도 또는 매도 주문을 넣을 수 있습니다.

다음은 상승 추세선에 대한 것입니다:

 상승 추세선

이 그림에서 우리는 상승 움직임이 있음을 알 수 있으며 마지막 세 저점 사이를 연결해보면 같은 선상에 있는 것을 확인할 수 있습니다.

작성자: Mohamed Abdelmaaboud

 
하지만 왜 ObjectCreate(_Symbol,"supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low, pArray[0].time,pArray[0].low); ?
enough ObjectCreate(_Symbol,"supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low);
 
MetaQuotes:

"MQL5 도구를 사용하여 라인으로 작업하는 방법" 문서가 게시되었습니다:

작성자: Mohamed Abdelmaaboud

이것은 초보자를위한 흥미로운 기사이지만 전문가 고문의 올바른 작업을 위해서는 약간의 코드 수정이 필요합니다.

안부, 블라디미르.

//+------------------------------------------------------------------+
//|상향 추세선 시스템.mq5 |
//+------------------------------------------------------------------+
void OnTick()
  {
   int candles = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pLow[];
   ArraySetAsSeries(pLow,true);
   int copy_low = CopyLow(_Symbol,_Period,0,candles,pLow);
   if(copy_low>0)
     {
      int candleLow = ArrayMinimum(pLow,0,candles);
      MqlRates pArray[];
      ArraySetAsSeries(pArray,true);
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
      ObjectDelete(0,"UpwardTrendline");
      ObjectCreate(0,"UpwardTrendline",OBJ_TREND,0,pArray[candleLow].time,pArray[candleLow].low,
                   pArray[0].time,pArray[0].low);
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_COLOR,Blue);
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_WIDTH,3);
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_RAY_RIGHT,true);
     }
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|하향 추세선 시스템.mq5 |
//+------------------------------------------------------------------+
void OnTick()
  {
   int candles = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pHigh[];
   ArraySetAsSeries(pHigh,true);
   int copy_high = CopyHigh(_Symbol,_Period,0,candles,pHigh);
   if(copy_high>0)
     {
      int candleHigh = ArrayMaximum(pHigh,0,candles);
      MqlRates pArray[];
      ArraySetAsSeries(pArray,true);
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
      ObjectDelete(0,"DnwardTrendline");
      ObjectCreate(0,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,pArray[candleHigh].high,
                   pArray[0].time,pArray[0].high);
      ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);
      ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);
      ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
     }
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|지원 라인 시스템.mq5 |
//+------------------------------------------------------------------+
void OnTick()
  {
   int candles = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pLow[];
   ArraySetAsSeries(pLow,true);
   int copy_low = CopyLow(_Symbol,_Period,0,candles,pLow);
   if(copy_low>0)
     {
      int candleLow = ArrayMinimum(pLow,0,candles);
      MqlRates pArray[];
      ArraySetAsSeries(pArray,true);
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
      ObjectDelete(0,"supportLine");
      ObjectCreate(0,"supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low,
                   pArray[0].time,pArray[0].low);
      ObjectSetInteger(0,"supportLine",OBJPROP_COLOR,Green);
      ObjectSetInteger(0,"supportLine",OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(0,"supportLine",OBJPROP_WIDTH,3);
      ObjectSetInteger(0,"supportLine",OBJPROP_RAY,true);
     }
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|저항선 시스템.mq5 |
//+------------------------------------------------------------------+
void OnTick()
  {
   int candles=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pHigh[];
   ArraySetAsSeries(pHigh,true);
   int copy_high = CopyHigh(_Symbol,_Period,0,candles,pHigh);
   if(copy_high>0)
     {
      int candleHigh = ArrayMaximum(pHigh,0,candles);
      MqlRates pArray[];
      ArraySetAsSeries(pArray,true);
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
      ObjectDelete(0,"resistanceLine");
      ObjectCreate(0,"resistanceLine",OBJ_HLINE,0,pArray[candleHigh].time,pArray[candleHigh].high,
                   pArray[0].time,pArray[0].high);
      ObjectSetInteger(0,"resistanceLine",OBJPROP_COLOR,Red);
      ObjectSetInteger(0,"resistanceLine",OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(0,"resistanceLine",OBJPROP_WIDTH,3);
      ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
     }
  }
//+------------------------------------------------------------------+
 
MrBrooklin #:

초보자를 위한 흥미로운 글이지만, EA가 제대로 작동하려면 약간의 코드 조정이 필요합니다.

감사합니다, 블라디미르.




친절한 의견에 감사드리며 검토해 보겠습니다.
 
선을 그린 방식이 매우 훌륭합니다. 추세선에 대한 한 가지 관찰: 두 번째 앵커 포인트가 항상 0 인덱스 막대인 경우 새 막대가 생길 때마다 추세선이 업데이트되어 추세선이 소용이 없어지므로 별 소용이 없습니다. 가장 이상적인 방법은 특정 기준에 따라 두 번째 앵커 포인트를 정의하는 것입니다. 예를 들어 첫 번째 막대에서 최소 30개의 거리가 있는 가장 높은 가격의 두 번째 막대, 또는 다음날 가장 높은 가격의 막대 등을 사용하는 것입니다.

기사를 축하합니다.
 
Andrei Pereira 추세선에 대한 한 가지 관찰 사항: 두 번째 앵커 포인트가 항상 0 지수 막대인 경우 새 막대가 생길 때마다 추세선이 업데이트되어 추세선이 쓸모가 없어지므로 별 소용이 없습니다. 가장 이상적인 방법은 특정 기준에 따라 두 번째 앵커 포인트를 정의하는 것입니다. 예를 들어 가격이 가장 높은 두 번째 막대는 첫 번째 막대에서 최소 30개 이상 떨어져 있거나 다음날 가격이 가장 높은 막대를 취하는 등의 방법입니다.

기사 작성 축하드립니다.

의견 주셔서 감사합니다. 좋은 관찰입니다.

 
Mohamed Abdelmaaboud #:
친절한 의견에 감사드리며 수정하겠습니다.

거의 10개월이 지났지만 글 작성자가 코드를 변경하지 않았습니다. ))

안부, 블라디미르.

 
MrBrooklin #:

거의 10개월이 지났지만 이 글의 작성자는 코드를 전혀 변경하지 않았습니다. ))

안부, 블라디미르.

상기시켜 주시고 기여해 주셔서 감사합니다. 편집을 위해 보내드리겠습니다.