기고글 토론 "세마포어 인디케이터를 사용하는 간단한 거래 시스템"

 

새로운 기고글 세마포어 인디케이터를 사용하는 간단한 거래 시스템 가 게재되었습니다:

복잡한 거래 시스템을 철저히 살펴보면 일련의 간단한 거래 신호를 기반으로 한다는 것을 알 수 있습니다. 따라서 초보 개발자가 복잡한 알고리즘 작성을 즉시 시작할 필요가 없습니다. 이 글은 거래를 수행하기 위해 세마포어 인디케이터를 사용하는 거래 시스템의 예를 제공합니다.

세마포어 또는 신호 인디케이터는 시장 진입 또는 종료 시점을 나타내는 간단한 탐지기입니다. 현재 바에 진입 신호가있는 경우 해당 레이블이 기호 차트에 나타납니다. 그런 다음이 라벨을 거래를 수행하기 위한 조건으로 사용할 수 있습니다.

그런 종류의 지표가 많이 있지만 이러한 지표를 기반으로 한 원래 거래 시스템의 본질은 전혀 변하지 않았습니다. 따라서 가장 간단하고 보편적인 형태로 구현하는 것이 좋습니다. 이렇게 하면 상당한 변경없이 유사한 지표로 작업 할 때 얻은 결과를 추가로 사용할 수 있습니다.

그림.1. ASCtrend 세마포어 신호 인디케이터

작성자: Nikolay Kositsin

 
이 기사는 매우 명확합니다.
예제에 제공된 코드 조각에 기계적 오타가 있어 복사하여 붙여넣었습니다:
//---- 로컬 변수 선언하기
   double TrendVelue[2];
 

일부 시그널을 컴파일하고 다시 시작했는데, "Candles_SmoothedSignal.mqh"(..MQL5\Include\Expert\MySignals\Candles_SmoothedSignal.mqh)와 같은 신호가 마법사에서 전문가 조언자를 만들기 위해 메타에디터가 볼 수 없습니다.

어떻게 해결할 수 있나요?

 

이 가장 훌륭하고 철저한 설명에 감사드립니다...!


daveM

 

지침에 표시된 대로 모든 것을 다운로드하고 압축을 풀었지만 테스터는 모든 시스템에서 오류를 발생시킵니다:

OnInit이 실패하여 테스터가 중지되었습니다.

CExpert::ValidationSettings: 오류 화폐 매개변수

CMoneyFixedLot::ValidationSettings: 랏 금액은 1.000000에서 1000000.000000 범위여야 합니다.

무엇을 조정해야 하는지 알려주세요.

 

안녕하세요!

ASCtrend 지표(압축 파일 indicators.zip에 있음)를 기반으로 만든 ASCtrendSignal 거래 신호 모듈 (압축 파일 mysignals.zip에 있음)을 MQL5 마법사에 추가하려고 하지만 아무것도 작동하지 않습니다. ASCtrendSignal 거래 신호 모듈을 포함\전문가\신호에 배치하고 ASCtrend 지표를 지표 패키지에 배치하면 모든 것이 올바른 것 같지만 모듈이 MQL5 마법사에 계속 표시되지 않습니다. 다음은 ASCtrendSignal 거래 신호 모듈의 코드입니다:

//+------------------------------------------------------------------+
//|ASCtrendSignal.mqh |
//|저작권 © 2011, Nikolay Kositsin | 
//|하바롭스크, farria@mail.redcom.ru | 
//+------------------------------------------------------------------+
#property copyright "저작권 © 2011, Nikolay Kositsin."
#property link      "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| 포함된 파일|
//+------------------------------------------------------------------+
#property tester_indicator "ASCtrend.ex5"
#include <Expert\ExpertSignal.mqh>
//--- 마법사 설명 시작
//+------------------------------------------------------------------+ 
//| 상수 선언|
//+------------------------------------------------------------------+ 
#define  OPEN_LONG     80  // 매수 명령을 전문가 조언자에게 반환하기 위한 상수
#define  OPEN_SHORT    80  // 전문가 조언자에게 매도 명령을 반환하는 상수입니다.
#define  CLOSE_LONG    40  // 매수 포지션을 청산하라는 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  CLOSE_SHORT   40  // 숏 포지션 청산 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  REVERSE_LONG  100 // 매수 포지션 반전 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  REVERSE_SHORT 100 // 숏 포지션 반전 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  NO_SIGNAL      0  // 전문가 어드바이저에게 신호가 없음을 반환하는 상수입니다.
//+----------------------------------------------------------------------+
//| 클래스 설명|
//| 제목=ASCtrend 지표에 기반한 신호 |
//| 유형=신호 고급.|
//| Name=ASCtrend|
//| Class=CASCtrendSignal|
//| 페이지=|
//| 매개변수=BuyPosOpen,bool,true,구매 권한 |
//| Parameter=SellPosOpen,bool,true,판매 권한 |
//| Parameter=BuyPosClose,bool,true,매수 포지션 종료 권한 |
//| Parameter=SellPosClose,bool,true,숏 포지션 종료 권한 |
//| 매개변수=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe |
//| 파라미터=위험,int,4,위험 수준|
//| Parameter=SignalBar,uint,1,진입 신호의 바 인덱스 ||
//+----------------------------------------------------------------------+
//--- 마법사 설명 종료
//+----------------------------------------------------------------------+
//| CASCtrendSignal 클래스.|
//| 목적: |에 기반한 거래 신호 생성기의 클래스입니다.
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| CExpertSignal 클래스에서 파생됩니다.
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {
protected:
   CiCustom          m_indicator;      // ASCtrend 값에 액세스하기 위한 객체

   //--- 조정된 매개변수
   bool              m_BuyPosOpen;       // 구매 권한
   bool              m_SellPosOpen;      // 판매 권한
   bool              m_BuyPosClose;      // 매수 포지션 종료 권한
   bool              m_SellPosClose;     // 숏 포지션 종료 권한
   ENUM_TIMEFRAMES   m_Ind_Timeframe;    // ASCtrend 지표 기간
   uint              m_RISK;             // 위험 수준
   uint              m_SignalBar;        // 진입 신호에 대한 막대 인덱스

public:
                     CASCtrendSignal();

   //--- 조정 가능한 매개변수 설정 방법
   void               BuyPosOpen(bool value)                  { m_BuyPosOpen=value;       }
   void               SellPosOpen(bool value)                 { m_SellPosOpen=value;      }
   void               BuyPosClose(bool value)                 { m_BuyPosClose=value;      }
   void               SellPosClose(bool value)                { m_SellPosClose=value;     }
   void               Ind_Timeframe(ENUM_TIMEFRAMES value)    { m_Ind_Timeframe=value;    }
   void               RISK(uint value)                        { m_RISK=value;             }
   void               SignalBar(uint value)                   { m_SignalBar=value;        }

   //--- 조정 가능한 매개변수 유효성 검사 방법
   virtual bool      ValidationSettings();
   //--- 조정 가능한 매개변수 유효성 검사 방법
   virtual bool      InitIndicators(CIndicators *indicators); // 표시기 초기화
   //--- 시장 진입 신호 생성 방법
   virtual int       LongCondition();
   virtual int       ShortCondition();

   bool              InitASCtrend(CIndicators *indicators);   // ASCtrend 표시기 초기화 방법

protected:

  };
//+------------------------------------------------------------------+
//|CASCtrendSignal 생성자.|
//| INPUT: no.|
//| OUTPUT: no.|
//|| REMARK: no.|
//+------------------------------------------------------------------+
void CASCtrendSignal::CASCtrendSignal()
  {
//--- 기본 매개 변수 설정
   m_BuyPosOpen=true;
   m_SellPosOpen=true;
   m_BuyPosClose=true;
   m_SellPosClose=true;
   
//--- 표시기 입력 매개변수
   m_Ind_Timeframe=PERIOD_H4;
   m_RISK=4;
//--- 
   m_SignalBar=1;
   m_used_series=USE_SERIES_OPEN+USE_SERIES_HIGH+USE_SERIES_LOW+USE_SERIES_CLOSE;
  }
//+------------------------------------------------------------------+
//| 조정 가능한 매개변수 확인.|
//| INPUT: no.|
//| OUTPUT: 설정이 유효하면 true, 그렇지 않으면 false.
//|| REMARK: no.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::ValidationSettings()
  {
//--- 매개변수 확인
   if(m_RISK<=0)
     {
      printf(__FUNCTION__+": Risk level must be above zero");
      return(false);
     }

//--- 완료 성공
   return(true);
  }
//+------------------------------------------------------------------+
//| 지표 및 시계열 초기화.
//| 입력: 표시기 - 객체 컬렉션에 대한 포인터 |
지표 및 시계열의 //|.|
//| OUTPUT: true - 성공한 경우, 그렇지 않은 경우 - false. || OUTPUT: true - 성공한 경우, 그렇지 않은 경우 - false.
//|| REMARK: no.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::InitIndicators(CIndicators *indicators)
  {
//--- 포인터 확인
   if(indicators==NULL) return(false);

//--- 표시기 초기화 
   if(!InitASCtrend(indicators)) return(false);

//--- 완료 성공
   return(true);
  }
//+------------------------------------------------------------------+
//| ASCtrend 표시기 초기화.|
//| 입력: 표시기 - 객체 컬렉션에 대한 포인터 |
지표 및 시계열의 //|.|
//| OUTPUT: true - 성공한 경우, 그렇지 않은 경우 - false. || OUTPUT: true - 성공한 경우, 그렇지 않은 경우 - false.
//|| REMARK: no.|
//+------------------------------------------------------------------+
bool CASCtrendSignal::InitASCtrend(CIndicators *indicators)
  {
//--- 포인터 확인
   if(indicators==NULL) return(false);

//--- 컬렉션에 객체 추가
   if(!indicators.Add(GetPointer(m_indicator)))
     {
      printf(__FUNCTION__+": error of adding the object");
      return(false);
     }

//--- 표시기 매개변수 설정
   MqlParam parameters[2];
   
   parameters[0].type=TYPE_STRING;
   parameters[0].string_value="ASCtrend.ex5";
   
   parameters[1].type=TYPE_INT;
   parameters[1].integer_value=m_RISK;

//--- 객체 초기화 
   if(!m_indicator.Create(m_symbol.Name(),m_Ind_Timeframe,IND_CUSTOM,2,parameters))
     {
      printf(__FUNCTION__+": object initialization error");
      return(false);
     }
     
//--- 버퍼 수
   if(!m_indicator.NumBuffers(2)) return(false);
   
//--- ASCtrend 표시기가 성공적으로 초기화되었습니다.
   return(true);
  }
//+------------------------------------------------------------------+
//| 매수 포지션 개설 조건 확인 및 ||
//|를 닫고 짧은 문장을 닫습니다.|
//| INPUT:no|
//| 출력: 0에서 100까지의 투표 가중치|
//|| REMARK: no.|
//+------------------------------------------------------------------+
int CASCtrendSignal::LongCondition()
  {
//--- 매수 신호는 ASCtrend 인디케이터의 버퍼 1에 의해 결정됩니다.
   double Signal=m_indicator.GetData(1,m_SignalBar);

//--- 거래 신호 받기 
   if(Signal && Signal!=EMPTY_VALUE)
     {
      if(m_BuyPosOpen)
        {
         if(m_SellPosClose) return(REVERSE_SHORT);
         else return(OPEN_LONG);
        }
      else
        {
         if(m_SellPosClose) return(CLOSE_SHORT);
        }
     }

//--- 숏 포지션 청산 신호 검색 중
   if(!m_SellPosClose) return(NO_SIGNAL);

   int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe);

   for(int bar=int(m_SignalBar); bar<Bars_; bar++)
     {
      Signal=m_indicator.GetData(0,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(NO_SIGNAL);

      Signal=m_indicator.GetData(1,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(CLOSE_SHORT);
     }

//--- 거래 신호 없음
   return(NO_SIGNAL);
  }
//+------------------------------------------------------------------+
//| 숏 포지션 개설 조건 확인 및 ||
//| 긴 글 닫기|
//| INPUT:no|
//| 출력: 0에서 100까지의 투표 가중치|
//|| REMARK: no.|
//+------------------------------------------------------------------+
int CASCtrendSignal::ShortCondition()
  {
//--- 매도 신호는 ASCtrend 인디케이터의 버퍼 0에 의해 결정됩니다.
   double Signal=m_indicator.GetData(0,m_SignalBar);
   
//--- 거래 신호 받기
   if(Signal && Signal!=EMPTY_VALUE)
     {
      if(m_SellPosOpen)
        {
         if(m_BuyPosClose) return(REVERSE_LONG);
         else return(OPEN_SHORT);
        }
      else
        {
         if(m_BuyPosClose) return(CLOSE_LONG);
        }
     }

//--- 매수 포지션 청산 신호 검색 중
   if(!m_BuyPosClose) return(NO_SIGNAL);

   int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe); // Здесь код исправлен с учетом подсказки от Владимира Карпутова: Symbol() заменен на m_symbol.Name()
   for(int bar=int(m_SignalBar); bar<Bars_; bar++)
     {
      Signal=m_indicator.GetData(1,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(NO_SIGNAL);

      Signal=m_indicator.GetData(0,bar);
      if(Signal && Signal!=EMPTY_VALUE) return(CLOSE_LONG);
     }

//--- 거래 신호 없음 
   return(NO_SIGNAL);
  }
//+------------------------------------------------------------------+

문제가 무엇인지 알려주시겠습니까?

안부, 블라디미르

 
MrBrooklin:

안녕하세요!

ASCtrend 지표(압축 파일 indicators.zip에 있음)를 기반으로 만든 ASCtrendSignal 거래 신호 모듈 (압축 파일 mysignals.zip에 있음)을 MQL5 마법사에 추가하려고 하지만 아무것도 작동하지 않습니다. ASCtrendSignal 거래 신호 모듈을 포함\전문가\신호에 배치하고 ASCtrend 지표를 지표 패키지에 배치하면 모든 것이 올바른 것 같지만 모듈이 MQL5 마법사에 계속 표시되지 않습니다. 다음은 ASCtrendSignal 거래 신호 모듈의 코드입니다:

문제가 무엇인지 알려주시겠습니까?

안부, 블라디미르

지표를 기반으로 작성된 다른 거래 신호 모듈에서도 동일한 문제가 발생한다는 점을 덧붙이고 싶습니다. 분명히 그들은 같은 문제가 있습니다. 이 문제를 해결하는 데 도움을주세요.

안부, 블라디미르.

추신 : 압축 파일 indicators.zip에서 압축을 푼 일부 지표는 터미널에 설치되어 정상적으로 작동합니다.

 

중요한 것은 순서입니다:

// 마법사 설명 시작
//+----------------------------------------------------------------------+
//| 클래스 설명|
//| 제목=ASCtrend 지표에 기반한 신호 |
//| 유형=신호 고급.|
//| Name=ASCtrend|
//| Class=CASCtrendSignal|
//| 페이지=|
//| 매개변수=BuyPosOpen,bool,true,구매 권한 |
//| Parameter=SellPosOpen,bool,true,판매 권한 |
//| Parameter=BuyPosClose,bool,true,매수 포지션 종료 권한 |
//| Parameter=SellPosClose,bool,true,숏 포지션 종료 권한 |
//| 매개변수=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe |
//| 파라미터=위험,int,4,위험 수준|
//| Parameter=SignalBar,uint,1,진입 신호의 바 인덱스 ||
//+----------------------------------------------------------------------+
// 마법사 설명 종료

아닌

//--- wizard description start
//--- wizard description end

가 아니며 시작과 끝 사이에는 변수나 매크로 대체 없이 서비스 블록만 있어야 합니다.


모듈은 이렇게 시작해야 합니다:

//+------------------------------------------------------------------+
//|ASCtrendSignal.mqh |
//|저작권 © 2011, Nikolay Kositsin |
//|하바롭스크, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
#property copyright "저작권 © 2011, Nikolay Kositsin."
#property link      "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| 포함된 파일|
//+------------------------------------------------------------------+
//#프로퍼티 테스터_인디케이터 "ASCtrend.ex5"
#include <Expert\ExpertSignal.mqh>
// 마법사 설명 시작
//+----------------------------------------------------------------------+
//| 클래스 설명|
//| 제목=ASCtrend 지표에 기반한 신호 |
//| 유형=신호 고급.|
//| Name=ASCtrend|
//| Class=CASCtrendSignal|
//| 페이지=|
//| 매개변수=BuyPosOpen,bool,true,구매 권한 |
//| Parameter=SellPosOpen,bool,true,판매 권한 |
//| Parameter=BuyPosClose,bool,true,매수 포지션 종료 권한 |
//| Parameter=SellPosClose,bool,true,숏 포지션 종료 권한 |
//| 매개변수=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe |
//| 파라미터=위험,int,4,위험 수준|
//| Parameter=SignalBar,uint,1,진입 신호의 바 인덱스 ||
//+----------------------------------------------------------------------+
// 마법사 설명 종료
//+------------------------------------------------------------------+
//| 상수 선언|
//+------------------------------------------------------------------+
#define  OPEN_LONG     80  // 매수 명령을 전문가 어드바이저에 반환하는 상수입니다.
#define  OPEN_SHORT    80  // 전문가 조언자에게 매도 명령을 반환하는 상수입니다.
#define  CLOSE_LONG    40  // 매수 포지션을 청산하라는 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  CLOSE_SHORT   40  // 숏 포지션 청산 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  REVERSE_LONG  100 // 매수 포지션 반전 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  REVERSE_SHORT 100 // 숏 포지션 반전 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  NO_SIGNAL      0  // 전문가 어드바이저에게 신호가 없음을 반환하는 상수입니다.
//+----------------------------------------------------------------------+
//| CASCtrendSignal 클래스.|
//| 목적: |에 기반한 거래 신호 생성기의 클래스입니다.
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//| CExpertSignal 클래스에서 파생됩니다.
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {

편집 후 메타에디터를 다시 로드합니다.

 
Vladimir Karputov:

중요한 것은 순서입니다:

not

가 아니며, 시작과 종료 사이에는 변수나 매크로 대체 없이 서비스 블록만 존재합니다.


이것이 모듈이 시작되어야 하는 방식입니다:

편집 후 메타에디터를 다시 로드합니다.

고마워요, 블라디미르!

모든 것이 작동했습니다.

안부, 블라디미르.

 

트레이딩, 자동매매 시스템 및 트레이딩 전략 테스트 포럼

"세마포어 지표를 이용한 간단한 트레이딩 시스템" 기사에 대한 토론

블라디미르 카르푸토프, 2019.10.30 08:50

순서는 중요합니다:

 // 마법사 설명 시작
//+----------------------------------------------------------------------+
//| 클래스 설명|
//| 제목=ASCtrend 지표에 기반한 신호 |
//| 유형=신호 고급|
//| Name=ASCtrend|
//| Class=CASCtrendSignal|
//| 페이지=|
//| 매개변수=BuyPosOpen,bool,true,구매 권한 |
//| Parameter=SellPosOpen,bool,true,판매 권한 |
//| Parameter=BuyPosClose,bool,true,매수 포지션 종료 권한 |
//| Parameter=SellPosClose,bool,true,숏 포지션 종료 권한 |
//| 매개변수=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe |
//| 파라미터=위험,int,4,위험 수준|
//| Parameter=SignalBar,uint,1,진입 신호의 바 인덱스 ||
//+----------------------------------------------------------------------+
// 마법사 설명 종료 

하지만 아닙니다

 //--- wizard description start
//--- wizard description end 

시작과 끝 사이에는 서비스 블록 만 있으며 변수 및 매크로 대체가 없습니다.


이것이 모듈이 가져야 할 시작입니다:

 //+------------------------------------------------------------------+
//|ASCtrendSignal.mqh |
//|저작권 © 2011, Nikolay Kositsin |
//|하바롭스크, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
#property  copyright "저작권 © 2011, 니콜라이 코시친"
#property  link        "farria@mail.redcom.ru"
//+------------------------------------------------------------------+
//| 포함된 파일|
//+------------------------------------------------------------------+
//#프로퍼티 테스터_인디케이터 "ASCtrend.ex5"
#include  <Expert\ExpertSignal.mqh>
// 마법사 설명 시작
//+----------------------------------------------------------------------+
//| 클래스 설명|
//| 제목=ASCtrend 지표에 기반한 신호 |
//| 유형=신호 고급|
//| Name=ASCtrend|
//| Class=CASCtrendSignal|
//| 페이지=|
//| 매개변수=BuyPosOpen,bool,true,구매 권한 |
//| Parameter=SellPosOpen,bool,true,판매 권한 |
//| Parameter=BuyPosClose,bool,true,매수 포지션 종료 권한 |
//| Parameter=SellPosClose,bool,true,숏 포지션 종료 권한 |
//| 매개변수=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe |
//| 파라미터=위험,int,4,위험 수준|
//| Parameter=SignalBar,uint,1,진입 신호의 바 인덱스 ||
//+----------------------------------------------------------------------+
// 마법사 설명 종료
//+------------------------------------------------------------------+
//| 상수 선언|
//+------------------------------------------------------------------+
#define  OPEN_LONG     80    // 매수 명령을 전문가 어드바이저에 반환하는 상수입니다.
#define  OPEN_SHORT     80    // 매도 명령을 전문가 조언자에게 반환하는 상수입니다.
#define  CLOSE_LONG     40    // 매수 포지션을 청산하라는 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  CLOSE_SHORT   40    // 숏 포지션 청산 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  REVERSE_LONG   100 // 매수 포지션 반전 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  REVERSE_SHORT 100 // 숏 포지션 반전 명령을 전문가 어드바이저에게 반환하는 상수입니다.
#define  NO_SIGNAL       0    // 전문가 어드바이저에게 신호가 없음을 반환하는 상수입니다.
//+----------------------------------------------------------------------+
//| CASCtrendSignal 클래스.|
//| 목적: |에 기반한 거래 신호 생성기의 클래스입니다.
//| ASCtrend indicator values http://www.mql5.com/ru/code/491/.&nbsp;         |
//|는 CExpertSignal 클래스에서 파생됩니다.|
//+----------------------------------------------------------------------+
class CASCtrendSignal : public CExpertSignal
  {

변경 후 메타에디터를 다시 시작합니다.