시스템트레이딩 게시글

DeMarker 지표를 활용한 MT4 자동매매 시스템 – 간편한 트레이딩 전략

첨부파일
32418.zip (1.46 KB, 다운로드 0회)

과거에 저는 자동매매 시스템(EA)을 사용해볼까 생각했었습니다. 이번 글에서는 제가 만든 가장 간단한 EA를 소개하고자 합니다. 이 EA는 단일 통화쌍에서 작동하며, 시간 설정, 로트 수, 손절매 및 이익 실현 등을 메뉴 속성에서 조정할 수 있습니다.


extern ENUM_TIMEFRAMES TF  = PERIOD_CURRENT;// 시간 프레임 선택
extern int period          = 8;// DeMarker 기간
extern double lt           = 0.01;// 로트 수
extern int sl              = 100;// 손절매
extern int tp              = 100;// 이익 실현
extern double OB           = 0.7;// 과매도
extern double OS           = 0.3;// 과매수
extern bool OPENBAR        = false;// 새로운 바의 시작 가격에서 거래

EA의 비밀은 변수를 세 부분으로 나누는 것입니다:
1. 데이터 | 시간 프레임
2. 주문
3. 통화쌍

//+------------------------------------------------------------------+

//-- 시간 프레임 | 지표
double dmrk[5];
int signal  =-1;//-- 0.매수 1.매도
int hold = 0;

//-- 주문
int ticket  =0;
double lot  =0.0;
int typ     =-1;

//-- 통화쌍
datetime t1=0;
bool newbar=false;
bool entry =false;

//+------------------------------------------------------------------+

OnInit() 함수에서는 DeMarker 지표 배열 변수를 초기화하고 특정 브로커 요구 사항에 따라 최소 거래 로트를 확인합니다.

//+------------------------------------------------------------------+
//|                                                                   |
//+------------------------------------------------------------------+
void OnInit()
  {
   ArrayInitialize(dmrk,0.0);
  //---
      const double test_lot   = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
      if(lt<test_lot)   lt    = test_lot;
  }

OnTick() 함수에서는 지표를 계산하고 매수 및 매도 신호를 결정합니다.

//---------------------------------------------------------------------------
   signal = -1;
//---------------------------------------------------------------------------

//--- 계산
   for(int i=0; i<ArraySize(dmrk); i++)
     {
      dmrk[i]  =  iDeMarker(Symbol(),TF,period,i);
     }
//---

   if(dmrk[1] > OB)
     {
      hold = 1;// 설정
     }
   else
      if(dmrk[1] < OS)
        {
         hold = -1;// 설정
        }
      else
        {
         hold = 0;// 초기화
        }

   if(hold ==  1)
     {
      if(dmrk[0]<OB && dmrk[1]>OB)
        {
         signal = OP_SELL;
        }
     }
   if(hold == -1)
     {
      if(dmrk[0]>OS && dmrk[1]<OS)
        {
         signal = OP_BUY;
        }
     }

매수 및 매도 신호를 열기 위해...

//---------------------------------------------------------------------------
   if(signal != -1)
      if(newbar==true)
         if(entry==false)// 문 열기
           {
            //---
            entry =true;// 설정
            //---

            if(signal == OP_BUY)
              {
               ticket = OrderSend(Symbol(),OP_BUY,lt,Ask,(int)((Ask-Bid)/Point,
                                  sl>0?Bid-sl*Point:0.0,
                                  tp>0?Bid+tp*Point:0.0,
                                  EAName+":signal= "+IntegerToString(signal)+":hold= "+IntegerToString(hold),
                                  EANumber,
                                  0,
                                  clrBlue);
               signal=-1;
               //hold =0;
              }// 초기화
              }// 신호 초기화

           }

마지막으로 종료를 위해...

   if(entry == true) // 종료
     {

      if(OrderSelect(ticket,SELECT_BY_TICKET))
        {
         if(OrderCloseTime() == 0)//-- 주문 활성 거래
           {
            /*  종료 조건  */
            //entry = false;
           }
         //else
            if(OrderCloseTime() != 0)//--  수동 종료 2. 손절매/이익 실현 3. EA
              {
               entry = false;// 초기화
              }
        }
     }



이제 여러분도 DeMarker 지표를 기반으로 한 간단한 MT4 자동매매 시스템을 통해 효과적인 트레이딩을 경험해보시기 바랍니다!

연관 포스트

댓글 (0)