English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
preview
MQL5에서 라인을 다루는 방법

MQL5에서 라인을 다루는 방법

MetaTrader 5트레이딩 | 23 9월 2024, 13:02
206 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

소개

트레이더는 거래하는 동안 많은 라인을 그려서 여러 중요한 수준을 관찰합니다. 라인은 트레이더가 적절한 거래 결정을 내릴 수 있도록 도와줍니다. 따라서 이러한 선은 트레이더들에게 매우 중요하며 이러한 선을 그리거나 이를 기반으로 자동으로 적절한 결정을 내리는 데 사용할 수 있는 무언가가 있는지 궁금하지 않을 수 없습니다. 이는 우리에게 많은 도움이 될 것이라고 생각합니다. 대답은 '예'입니다. MQL5(MetaQuotes Language 5)로 이를 수행할 수 있는 방법이 있습니다.

이와 같은 작업을 수행하는 방법은 여러 가지가 있으며 이러한 방법은 수행해야 하는 작업에 따라 달라집니다. 이 문서는 MQL5에서 이러한 라인을 처리하는 방법을 배우기 위한 예제입니다. 많은 유형의 라인이 있지만 이 글에서는 인기 있는 추세선, 지지선, 저항선 세 가지 라인에 대해 알아보겠습니다.

다음의 주제를 통해 이를 다뤄보겠습니다:

  1. 추세선 및 MQL5
  2. 지지선 및 MQL5
  3. 저항선 및 MQL5
  4. 결론

일반적으로 MQL5로 라인을 처리하는 데 사용할 수 있는 방법은 여러 가지가 있습니다. 여기에서는 간단한 방법 하나를 공유할 것입니다. 여러분의 전략에 맞게 개발해야 할 수도 있습니다. 우리는 가격 수준을 감지한 다음 업데이트된 유형의 선을 그리는 방법을 공유할 것입니다.

라인의 종류와 수동으로 그리는 방법, 트레이딩에서 사용하는 방법을 통해 라인이 무엇인지 자세히 알아봅시다. MQL5를 사용하여 추세선, 지지선, 저항선을 처리하여 트레이딩 프로세스를 간소화하고 자동화를 통해 트레이딩의 결과를 개선하는 방법을 알아봅시다. 우리는 MetaTrader 5 트레이딩 터미널에 내장된 MQL5 (MetaQuotes Language 5)를 사용하여 프로그램을 코딩 할 것입니다. 이 사용법을 모르는 경우 여러분은 메타에디터에서 MQL5 코드 작성하기라는 기사를 읽어보며 이에 대해 자세히 알아볼 수 있습니다.

이 단계는 코딩 기술을 향상시키는 데 매우 중요하며 이 글의 주제 및/또는 거래 결과를 향상시키는 데 유용할 수 있는 관련 주제에 대해 더 많은 통찰력을 얻을 수 있을 뿐만 아니라 여러분의 이해를 심화시킬 수 있으므로 읽은 내용을 직접 작성하고 적용해보라는 조언을 드리고 싶습니다.

면책: 여기의 모든 정보는 정보 제공의 목적으로만 '있는 그대로' 제공되며 거래의 목적이나 조언을 위해 준비된 것이 아닙니다. 여기의 정보는 어떤 종류의 결과도 보장하지 않습니다. 귀하의 거래 계정에서 이들 자료를 사용하기로 한 경우 귀하는 이에 대한 위험을 감수해야 하며 이에 대한 책임은 귀하에게 있습니다.


추세선 및 MQL5

라인은 보다 효과적인 결과를 얻기 위해 트레이딩에 사용할 수 있는 기술적 도구입니다. 이러한 라인은 효과적인 결정을 내리는 데 트리거로 사용할 수 있는 중요한 가격이나 수준을 중심으로 그릴 수 있으며 이러한 라인에는 여러 가지 유형이 있습니다. 이 글에서는 추세선, 지지선, 저항선 등 세 가지 중요한 라인에 대해 언급하겠습니다.

이제 추세선을 식별하고 다루어 보겠습니다. 추세선은 상방 혹은 하방으로 거부할 수준으로 사용할 수 있는 가격 수준을 시각화하는 데 사용할 수 있는 선입니다. 시장 방향에 따라 가격의 위 또는 아래로 그릴 수 있습니다. 따라서 추세선은 시장 추세의 방향을 감지하는 데 도움이 될 수 있습니다. 그려진 선의 동일한 레벨에서 최소 3포인트 이상 가격이 상승으로 반등하면 상승 추세선이 됩니다. 반대로 그려진 선의 동일한 레벨에서 최소 3포인트 이상 하방으로 반등하면 하락 추세선이 됩니다. 여기서 중요한 점은 추세선은 단지 도구일 뿐이며 이를 올바르게 인식하고 그릴 수도 있고 그렇지 않을 수도 있다는 것입니다.

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

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

 상승 추세선

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

다음은 시장의 상승 추세선의 예시입니다:

상승 추세선

이전 차트에서 볼 수 있듯이 상승 추세선이 여러 번 닿은 후 반등하였으며 이는 상승 추세가 존재함을 확인시켜주는 매수세가 반등을 시킨 것임을 알수 있습니다.

다음은 하락 추세선에 대한 것입니다:

하락 추세선

이전 그림에서 하방의 움직임이 있는 것이 분명하고 마지막 세 고점 사이를 연결해보면 같은 선상에서 하방인 것을 확인할 수 있습니다.

다음은 시장의 하락 추세선의 예시입니다:

하락 추세선

차트에서 볼 수 있듯이 하락 추세선에 여러 번 닿은 후 재 하락하는 방식으로 하락 추세가 존재한다는 것을 확인했으며 이는 매도세가 강하다는 것을 말해 줍니다.


    1. 상승 추세선 시스템

      우리는 MetaTrader 5에서 자동으로 상승 추세선을 만드는 데 사용할 수 있는 프로그램을 만들어 가격 아래에서 잠재적 상승 움직임을 확인할 수 있어야 합니다. 우리는 가격 저점을 확인하고 매 틱마다 상승 추세선이 있는지 확인하는 프로그램이 필요합니다. 그런 다음 이전의 상승 추세선을 삭제하고 가격의 저점 아래에 업데이트된 파란색 추세선을 만듭니다. 

      이를 위해 사용할 수 있는 방법 중 하나로 우리는 아래와 같은 단계를 따를 수 있습니다.

      "ChartGetInteger" 함수를 사용하여 현재 차트의 해당 속성에 대해 반환된 long 값 유형과 동일한 integer 변수를 생성하여 첫 번째 캔들 감지를 생성하며 해당 매개변수는 다음과 같습니다.

      • chart_id: 차트를 결정하기 위해 (0)을 사용하여 현재 차트를 나타냅니다.
      • prop_id: 차트 속성 ID를 결정하기 위해 여기에 (ENUM_CHART_PROPERTY_INTEGER) 값 중 하나를 사용할 수 있습니다. (CHART_FIRST_VISIBLE_BAR)를 사용합니다.
      • sub_window=0: 차트의 하위 창의 수를 결정합니다. 기본 차트 창을 나타내기 위해 (0)을 사용합니다.

      int candles = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);

      pLow에 대해 더블 변수 유형을 생성하여 캔들의 저점의 배열을 만듭니다.

      double pLow[];

      생성된 배열을 현재 데이터에서 "ArraySetAsSeries" 함수를 사용하여 정렬하면 성공 시 참, 그렇지 않은 경우 거짓이 되는 부울 값을 반환합니다.

      ArraySetAsSeries(pLow,true);

      " CopyLow" 함수를 사용하여 생성된 pLow 배열을 데이터로 채워 현재 시간의 현재 심볼의 최저가를 구합니다. 매개변수는 다음과 같습니다:

      • symbol_name: 심볼을 결정하기 위해 현재 심볼에 적용될 (_Symbol)을 사용합니다.
      • timeframe: 기간을 결정하기 위해 현재 기간에 적용될 (_Period)를 사용합니다.
      • start_pos: 복사할 요소의 시작 위치를 결정하기 위해 (0)을 사용합니다.
      • count: 복사할 데이터 개수를 결정하기 위해 미리 생성된 변수( candles)를 사용합니다.
      • low_array[]: 복사할 대상 배열을 결정하기 위해 (pLow) 배열을 사용합니다.

      int copy_low = CopyLow(_Symbol,_Period,0,candles,pLow);

      copy_low가 0보다 큰 경우 조건 설정

      if(copy_low>0)

      if 조건의 본문에서는 배열의 최소값과 같은 정수 변수 'candleLow'를 생성하여 캔들 변수의 최저값을 계산하고, 배열에서 가장 낮은 요소를 반환하는 'ArrayMinimum' 함수를 사용하겠습니다. 매개변수:

      • array[]: 배열을 결정하기 위해 ( pLow) 배열을 사용합니다.
      • start=0: 확인을 시작할 인덱스를 결정하기 위해 (0) 값을 사용합니다.
      • count=WHOLE_ARRAY: 체크된 요소의 수를 결정하기 위해 (캔들)을 사용합니다.
      int candleLow = ArrayMinimum(pLow,0,candles);

      가격, 거래량, 스프레드에 대한 정보를 저장하는 "MqlRates" 함수를 사용하여 가격 "pArray" 배열을 생성합니다.

      MqlRates pArray[];

      " ArraySetAsSeries" 함수를 사용하여 "pArray"의 가격 배열을 정렬합니다.

      ArraySetAsSeries(pArray,true);

      "Data"의 정수 변수를 만든 후 가격 데이터를 가격 배열에 복사한 다음 " CopyRates"를 사용하여 MqlRates 구조의 과거 데이터를 가져옵니다. 매개변수는 다음과 같습니다:

      • symbol_name: 심볼을 결정하기 위해 현재 차트에 적용할 (_Symbol)을 사용합니다.
      • timeframe: 시간 프레임을 결정하기 위해 현재 시간 프레임에 적용될 (_Period)를 사용합니다.
      • start_pos: 시작 위치를 결정하기 위해 (0) 값을 사용합니다.
      • count: 복사할 데이터 개수를 결정하기 위해 ( candles) 생성 변수를 사용합니다.
      • rates_array[]: 복사할 대상 배열을 결정하기 위해 ( pArray)를 사용합니다.
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);

      이전에 생성한 추세선을 삭제하고 업데이트하려면 'ObjectDelete' 함수를 사용하여 지정된 차트에서 지정된 개체를 제거합니다. 매개변수는 다음과 같습니다:

      • chart_id: 차트 식별자를 결정하기 위해 현재 심볼에 적용될 (_Symbol)을 사용합니다.
      • name: 제거할 개체의 이름을 지정하려면 이름으로 ("UpwardTrendline")을 지정합니다.
      ObjectDelete(_Symbol,"UpwardTrendline");

      "ObjectCreate"를 사용하여 추세선 객체를 만들어 새 추세선을 만듭니다. 매개변수는 다음과 같습니다:

      • chart_id: 심볼을 결정하기 위해 현재 심볼에 적용될 (_Symbol)을 사용합니다.
      • name: 객체 이름을 지정하기 위해 ("UpwardTrendline")을 name으로 지정합니다.
      • type: 객체 유형을 결정하기 위해 (OBJ_TREND)를 사용하여 추세선을 생성합니다.
      • nwin: 창 인덱스를 결정하기 위해 (0) 값을 사용하여 기본 차트 창을 사용합니다.
      • time1: 첫 번째 앵커 포인트의 시간을 결정하기 위해 (pArray[candleLow].time)을 사용합니다.
      • price1: 첫 번째 앵커 포인트의 가격을 결정하기 위해 (pArray[candleLow].low)를 사용합니다.
      • timeN: 앵커 포인트의 N 시간을 결정하기 위해 (pArray[0].time)을 사용합니다.
      • priceN: 앵커 포인트의 N의 가격을 결정하기 위해 (pArray[0].low)를 사용합니다.
      ObjectCreate(_Symbol,"UpwardTrendline",OBJ_TREND,0,pArray[candleLow].time,pArray[candleLow].low,pArray[0].time,pArray[0].low);

      " ObjectSetInteger" 함수를 사용하여 값을 객체의 색상으로 설정하여 추세선의 색상을 결정합니다. 매개변수는 다음과 같습니다:

      • chart_id: 차트 식별자로 현재 차트를 의미하는 (0) 값을 사용합니다.
      • name: 객체 이름으로 미리 정의된 객체 이름인 ("UpwardTrendline")을 사용합니다.
      • prop_id: 객체 프로퍼티의 ID로, ENUM_OBJECT_PROPERTY_INTEGER 중 하나인 (OBJPROP_COLOR)를 사용합니다.
      • prop_value: 속성 값으로 생성된 추세선의 색상으로 (파란색)을 사용합니다.
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_COLOR,Blue);

      ObjectSetInteger 함수를 사용하여 추세선 스타일도 결정할 수 있지만 생성된 추세선의 스타일은 (OBJPROP_STYLE), prop_값은 (STYLE_SOLID)인 ENUM_OBJECT_PROPERTY_INTEGER 중 다른 하나를 사용할 것입니다.

      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_STYLE,STYLE_SOLID);

      추세선 너비도 "ObjectSetInteger" 함수를 사용하여 결정할 수 있지만 여기서는 ENUM_OBJECT_PROPERTY_INTEGER 중 다른 하나 즉 (OBJPROP_WIDTH)를 사용하고 prop_값은 (3)이 생성된 추세선의 너비가 됩니다.

      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_WIDTH,3);

      추세선의 진행을 결정하기 위해 "ObjectSetInteger" 함수도 사용하지만 ENUM_OBJECT_PROPERTY_INTEGER의 다른 하나인 (OBJPROP_RAY_RIGHT)를 사용하고 prop의 값은 참이 될 것입니다.

      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_RAY_RIGHT,true);

      다음은 상승 추세선을 자동으로 생성하는 이 시스템을 만드는 전체 코드입니다:

      //+------------------------------------------------------------------+
      //|                                       UpwardTrendline System.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);
           }
        }
      //+------------------------------------------------------------------+
      

      이 코드를 작성한 후 컴파일 하면 오류가 발생하지 않아야 합니다.  그 후 탐색기 창에서 다음과 같은 Expert Advisor(EA)를 찾을 수 있습니다:

       Lines nav

      EA를 차트에 끌어다 놓으면 다음과 같은 EA 창이 나타납니다:

       Lines Win

      "알고 트레이딩 허용" 옆에 체크 표시를 하고 "확인"을 누르면 EA가 차트에 첨부되고 다음 예시와 동일하게 이 EA를 기반으로 하는 작동 볼 수 있습니다:

       상승 추세선 예시

      이전 차트에서 볼 수 있듯이 EA가 차트에 첨부되어 있고 오른쪽 상단 모서리에 파란색 상승 추세선이 가격 아래에 그려져 있는 것을 볼 수 있습니다.


        2. 하향 추세선 시스템

          이제 MetaTrader 5에서 자동으로 하락 추세선을 생성하는 데 사용할 수 있는 프로그램을 만들어서 가격 위에서 잠재적인 하락으로의 움직임을 확인할 수 있도록 해 보겠습니다. 매 틱마다 가격 고점과 하락 추세선이 있는지 확인하려면 프로그램이 필요합니다. 그런 다음 이전 하락 추세선을 삭제하고 가격의 고점 위에 업데이트된 파란색 추세선을 만듭니다. 

          이를 위해 사용할 수 있는 방법 중 하나로 아래의 전체 코드를 따를 수 있습니다.

          //+------------------------------------------------------------------+
          //|                                     DownwardTrendline System.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);
               }
            }
          //+------------------------------------------------------------------+

          이 코드에서의 차이점:

          고가의 캔들 배열을 만듭니다.

          double pHigh[];

          현재 데이터에서 생성된 배열을 정렬합니다.

          ArraySetAsSeries(pHigh,true);

          배열을 데이터로 채웁니다.

          int copy_high = CopyHigh(_Symbol,_Period,0,candles,pHigh);

          (캔들) 변수의 고점 생성 및 계산하기

          int candleHigh = ArrayMaximum(pHigh,0,candles);

          이전 하락 추세선 삭제

          ObjectDelete(_Symbol,"DnwardTrendline");

          새로운 하향 추세선 만들기

          ObjectCreate(_Symbol,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,pArray[candleHigh].high,pArray[0].time,pArray[0].high);

          "OBJPROP_COLOR"를 사용하여 하향 추세선 색상을 파란색으로 결정합니다.

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);

          "OBJPROP_STYLE" 및 STYLE_SOLID를 사용하여 하향 추세선 스타일을 솔리드로 결정합니다.

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);

          하향 추세선 폭을 "OBJPROP_WIDTH"를 사용하여 3으로 합니다.

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);

          "OBJPROP_RAY_RIGHT"를 사용하여 하향 추세선 연장 결정하기

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);

          오류 없이 컴파일이 완료되면 앞서 언급한 것과 동일하게 탐색기 창에서도 EA를 찾을 수 있습니다. EA를 첨부한 후 이 EA를 기반으로 준비가 되면 다음과 같이 하향 추세선이 그려지는 것을 확인할 수 있습니다:

          하향 추세선 예시

          오른쪽 상단의 차트에서 볼 수 있듯이 EA가 첨부되어 있으며 이 수준 주변에 매수세가 있기 때문에 가격 위에 하락 추세선이 그려져 있습니다.


          지지 수준과 MQL5

          지지선은 현재 가격 아래에서 찾을 수 있는 가격 수준 또는 구간으로 이 가격대 주변에는 매수세가 있기 때문에 지지선을 중심으로 반등할 수 있습니다. 따라서 매수 포인트로 간주될 수 있기 때문에 매우 중요합니다. 지지 수준에는 여러 가지 형태가 있으며 그 중 하나가 수평 지지 수준입니다. 그 모양은 다음과 같습니다:

           지지 수준

          다음은 시장의 지지 수준을 보여주는 예시입니다:

          지지 수준 1

          이전 차트에서 볼 수 있듯이 가격 아래에 녹색 지지선이 있으며 이는 상승과 관련한 거부 수준으로 사용할 수 있습니다.

          우리에게는 가격 저점을 확인하고 매 틱마다 지지선이 있는지 확인하는 프로그램이 필요합니다. 그런 다음 이전 지지선을 삭제하고 가격의 최저점 아래에 업데이트된 녹색 지지선을 만듭니다. 우리는 아래 코드 전체와 동일하게 MQL5로 이 지지 라인을 그려서 처리할 수 있습니다:

          //+------------------------------------------------------------------+
          //|                                          Support Line System.mq5 |
          //+------------------------------------------------------------------+
          void OnTick()
            {
             int candles=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
             double pLow[];
             ArraySetAsSeries(pLow,true);
             CopyLow(_Symbol,_Period,0,candles,pLow);
             int candleLow = ArrayMinimum(pLow,0,candles);
             MqlRates pArray[];
             ArraySetAsSeries(pArray,true);
             int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
             ObjectDelete(_Symbol,"supportLine");
             ObjectCreate(_Symbol,"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);
            }
          //+------------------------------------------------------------------+

          이 코드의 차이점:

          "supportLine"이라는 이름의 이전 지지 라인 삭제하기

          ObjectDelete(_Symbol,"supportLine");

          필요한 객체의 유형으로 "OBJ_HLINE"을 사용하여 새로운 지지 라인 만들기

          ObjectCreate(_Symbol,"supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low, pArray[0].time,pArray[0].low);

          "OBJPROP_COLOR"를 사용하여 지지선 색상 결정하기

          ObjectSetInteger(0,"supportLine",OBJPROP_COLOR,Green);

          OBJPROP_STYLE 과 STYLE_SOLID를 사용하여 지지 라인 스타일 결정하기

          ObjectSetInteger(0,"supportLine",OBJPROP_STYLE,STYLE_SOLID);

          "OBJPROP_WIDTH"를 사용하여 지지 라인 너비 결정하기

          ObjectSetInteger(0,"supportLine",OBJPROP_WIDTH,3);

          "OBJPROP_RAY"를 사용하여 지지 라인 연장선 결정하기

          ObjectSetInteger(0,"supportLine",OBJPROP_RAY,true);

          이 코드를 오류 없이 컴파일하고 나면 앞서 언급한 것과 동일하게 차트에 첨부할 수 있습니다. 그 후 차트에 첨부된 것을 확인할 수 있으며 아래 예시와 같이 지지선이 그려진 것을 확인할 수 있습니다.

          지지 라인

          이전 차트에서 볼 수 있듯이 지지 시스템 EA가 오른쪽 상단에 첨부되어 있으며 가격 아래에 지지 라인이 있습니다.


          저항 수준 및 MQL5

          저항선은 현재 가격보다 높은 가격 수준 또는 구간을 말하며 이 수준 주변에는 매도세가 존재하기 때문에 그 주변에서 하락 반등을 찾을 수 있습니다. 따라서 저항선은 매도 포인트로 활용할 수 있기 때문에 매우 중요합니다. 이러한 저항 수준에는 여러 가지 형태가 있으며 그 중 하나가 수평 저항 수준으로 다음과 같은 형태입니다:

           저항 수준

          다음은 시장의 저항에 대한 예시입니다:

           저항 수준 1

          이전 차트에서 볼 수 있듯이 가격 위에 빨간색 저항선이 있으며 이 수준 주변에는 매수세가 있기 때문에 하락에 대한 거부 수준으로 사용할 수 있습니다. 

          매 틱마다 가격 고점과 저항선이 있는지 확인하려면 프로그램이 필요합니다. 그런 다음 이전 저항선을 삭제하고 가격의 고점 위에 업데이트된 빨간색 저항선을 만듭니다. 아래 코드 전체와 동일하게 MQL5로 이 저항선을 그리고 처리할 수 있습니다:

          //+------------------------------------------------------------------+
          //|                                       Resistance Line System.mq5 |
          //+------------------------------------------------------------------+
          void OnTick()
            {
             int candles=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
             double pHigh[];
             ArraySetAsSeries(pHigh,true);
             CopyHigh(_Symbol,_Period,0,candles,pHigh);
             int candleHigh = ArrayMaximum(pHigh,0,candles);
             MqlRates pArray[];
             ArraySetAsSeries(pArray,true);
             int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
             ObjectDelete(_Symbol,"resistanceLine");
             ObjectCreate(_Symbol,"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);
            }
          //+------------------------------------------------------------------+

          이 코드의 차이점:

          "resistanceLine"이라는 이름의 이전 저항선을 삭제합니다.

          ObjectDelete(_Symbol,"resistanceLine");

          필요한 객체의 유형으로 "OBJ_HLINE"을 사용하여 새 저항선 만들기

          ObjectCreate(_Symbol,"resistanceLine",OBJ_HLINE,0,pArray[candleHigh].time,pArray[candleHigh].high,pArray[0].time,pArray[0].high);

          OBJPROP_COLOR를 사용하여 저항선 색상 결정하기

          ObjectSetInteger(0,"resistanceLine",OBJPROP_COLOR,Red);

          OBJPROP_STYLE과 STYLE_SOLID를 사용하여 저항선 스타일 결정하기

          ObjectSetInteger(0,"resistanceLine",OBJPROP_STYLE,STYLE_SOLID);

          OBJPROP_WIDTH를 사용하여 저항선 너비 결정하기

          ObjectSetInteger(0,"resistanceLine",OBJPROP_WIDTH,3);

          OBJPROP_RAY_RIGHT를 사용하여 저항선 연장선 결정하기

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);

          이 코드를 오류 없이 컴파일하고 나면 차트에 첨부할 수 있습니다. 그 후 저항 시스템 EA가 차트에 첨부되어 있으며 다음과 같은 선을 찾을 수 있습니다:

          저항선

          이전 차트에서 볼 수 있듯이 저항 시스템 EA가 오른쪽 상단 모서리에 부착되어 있으며 가격 아래에 저항선이 있습니다.


          결론

          이제 여러분은 거래에서 사용할 수 있는 중요한 세 가지 라인을 자세히 알게 되었을 것입니다. 우리는 추세선(상승 및 하락 추세선), 지지선, 저항선의 정의와 사용 방법에 대해 알아봤습니다. 또한 MQL5를 사용하여 자체 시스템을 만들고 이들을 자동으로 그릴 수 있는 방법도 배웠습니다. 또한 이 코드를 기반으로 거래를 실행하는 전송 주문을 추가하여 이 코드를 개발할 수 있을 것입니다. 이 글의 주요 목적은 교육용이므로 실제 계좌에서 사용하기 전에 테스트하여 수익성이 있는지 확인해야 합니다.

          이 글이 도움이 되셨기를 바라며 살펴본 도구를 다른 고급 시스템의 일부로 사용하거나 개별적으로 사용하여 자신에게 유리하게 사용하는 방법을 배웠기를 바랍니다. 이 기사의 주제 또는 관련 주제에 대한 유용한 통찰력을 얻어 더 나은 거래 결과를 얻고 유용하고 수익성 있는 도구로 향상시키고 언급 된 코드를 직접 테스트하고 작성하여 이익을 얻고 코딩 기술을 향상 시키기를 바랍니다.

          이 글이 도움이 되셨고 MQL5에 대한 더 많은 글과 가장 인기 있는 기술 지표를 사용하여 트레이딩 시스템을 설계하는 방법을 읽고 싶으시다면 이전 글에서 이동평균, RSI, MACD, 스토캐스틱, 파라볼릭 SAR 등과 같이 가장 인기 있는 기술 지표를 기반으로 트레이딩 시스템을 설계하는 방법에 관한 글을 확인하실 수 있으니 자세히 알아보시기 바랍니다.

          MQL5의 기본 사항과 알고리즘 트레이딩 시스템을 설계하는 이유와 방법에 대해 더 자세히 알고 싶으시다면 이전 글에서 관련 내용을 읽어보실 수도 있습니다.

          MetaQuotes 소프트웨어 사를 통해 영어가 번역됨
          원본 기고글: https://www.mql5.com/en/articles/11538

          게이토 오실레이터로 트레이딩 시스템을 설계하는 방법 알아보기 게이토 오실레이터로 트레이딩 시스템을 설계하는 방법 알아보기
          인기 보조지표를 기반으로 트레이딩 시스템을 설계하는 방법을 알아보는 시리즈의 새로운 글, 게이터 오실레이터 보조지표와 간단한 전략을 통해 트레이딩 시스템을 만드는 방법
          Scikit-learn 라이브러리의 회귀 모델과 이 모델을 ONNX로 내보내기 Scikit-learn 라이브러리의 회귀 모델과 이 모델을 ONNX로 내보내기
          이 글에서는 Scikit-learn 패키지의 회귀 모델을 적용하고 이를 ONNX 형식으로 변환하고 결과 모델을 MQL5 프로그램 내에서 사용하는 방법에 대해 살펴봅니다. 또한 부동 소수점 및 배정밀도 모두에서 오리지널 모델의 정확도를 ONNX 버전과 비교할 것입니다. 이후 더 나아가 회귀 모델의 내부 구조와 작동 원리를 더 잘 이해하기 위해 회귀 모델의 ONNX 표현을 살펴볼 것입니다.
          빌 윌리엄스의 MFI로 트레이딩 시스템을 설계하는 방법 알아보기 빌 윌리엄스의 MFI로 트레이딩 시스템을 설계하는 방법 알아보기
          이번 글은 인기 있는 보조지표를 기반으로 트레이딩 시스템을 설계하는 방법을 알아보는 시리즈의 새로운 글입니다. 이번에는 빌 윌리엄스의 시장 촉진 지수(BW MFI)를 다뤄보겠습니다.
          Scikit-Learn 라이브러리의 분류 모델 및 ONNX로 내보내기 Scikit-Learn 라이브러리의 분류 모델 및 ONNX로 내보내기
          이 글에서는 피셔의 붓꽃 데이터 세트의 분류 작업을 해결하기 위해서 Scikit-Learn 라이브러리에서 사용할 수 있는 모든 분류 모델을 적용하는 방법을 살펴봅니다. 우리는 이러한 모델을 ONNX 형식으로 변환하고 그 결과 모델을 MQL5 프로그램에서 활용하려고 합니다. 또한 전체 붓꽃 데이터 세트에서 원래 모델의 정확도를 ONNX 버전과 비교합니다.