1-1. 이동평균선
1-1-1. 이동평균선 설명
이동평균선은 일정기간 동안의 가격을 산술 평균한 값을 차례로 연결해 만든 선이며, 이러한 선의 일정한 방향성을 활용하여 향후 가격추이를 예측하는데 사용되는 가장 대표적인 기술적 보조지표입니다. 단기/중기/장기 이동평균선으로 구분되며, 평균선들이 만나는 지점을 크로스로 구분하여 가격방향성을 예측합니다.
1-1-2. 이동평균선을 활용한 매매전략
[진입]
단기이동평균선이 장기이동평균선을 상향돌파(골드크로스) 할 때 매수진입
단기이동평균선이 장기이동평균선을 하향돌파(데드크로스) 할 때 매도진입
[청산]
진입과 동시에 이익실현 핍과 손절매 핍 설정
1-1-3. iMA()이동평균선 함수 구조
double iMA(
string symbol, // 통화쌍
int timeframe, // 시간봉
int ma_period, // 이동평균선기간
int ma_shift, // 이동평균선 쉬프트
int ma_method, // MA방법
int applied_price, // 기준가격
int shift // 캔들순서(현재봉일경우0,전봉은1,전전봉은2..)
);
1-1-4. iMA()이동평균선 함수 작성법
[표기]
iMA(symbol,timeframe,ma_period,ma_shift,ma_method,applied_price,shift)
[해석]
iMA(통화쌍,시간봉,이동평균기간,이평선 쉬프트,MA방법,기준가격,캔들순서)
1-1-5. iMA()이동평균선 함수 속성 상세설명
a. 통화쌍(symbol)
오더의 통화쌍을 지정합니다.
“EURUSD” :EURUSD통화쌍의 오더를 오픈하도록 합니다.
Symbol(): EA가 적용된 챠트 통화쌍의 오더를 오픈합니다.
NULL: EA가 적용된 챠트 통화쌍의 오더를 오픈합니다.
b. 시간봉(timeframe)
데이터를 불러올 시간봉. ’0’은 현재챠트의 값 사용
c. 이동평균선기간(ma_period)
이동평균선 값을 산출할 기간(캔들개수)
d. 이동평균선 쉬프트(ma_shift)
이동평균선 챠트이동설정
e. MA방법(ma_method)
Simple/Exponential/smoothed/linear Weighted 중 선택
f. 기준가격(applied_price)
이동평균선을 만들 캔들데이터 선택
g. 캔들순서(shift)
‘0’은 현재캔들, ‘1’은 직전캔들, ‘2’는 전전캔들…
1-1-6. 이동평균선 mql4소스코딩(1-1-2.이동평균선을 활용한 매매전략)
※
검정색글자: 소스코딩
붉은색글자: 해설
//------------------------------------------------------------------------------------------------------------
extern int MagicNo = 1234; //외부변수 값 설정
extern double Lots = 1.0; //랏사이즈 설정
extern int ShortMA = 30; //단기이동평균선 기간
extern int LongMA = 120; //장기이동평균선 기간
extern double TakeProfit = 50; //이익실현 핍
extern double StopLoss = 50; //손절매 핍
int start()
{
double SMACur,SMAPre,LMACur,LMAPre; //double타입의 변수 설정
int i, ticket, total; //int타입의 변수 설정
bool ticketM; //bool타입의 변수 설정
SMACur=iMA(NULL,0,ShortMA,0,MODE_SMA,PRICE_OPEN,0); //현재봉의 단기이동평균선 값
SMAPre=iMA(NULL,0,ShortMA,0,MODE_SMA,PRICE_OPEN,1); //직전봉의 단기이동평균선 값
LMACur=iMA(NULL,0,LongMA,0,MODE_SMA,PRICE_OPEN,0); //현재봉의 장기이동평균선 값
LMAPre=iMA(NULL,0,LongMA,0,MODE_SMA,PRICE_OPEN,1); //직전봉의 장기이동평균선 값
// SMACur,SMAPre,LMACur,LMAPre 변수 안에 이동평균선 보조지표 값을 넣어줌.
// iMA(통화쌍,시간봉,이동평균기간,이평선 쉬프트,이평선종류,사용할 캔들가격,봉순서-현재봉일경우0)
//-----------------------------------------------------------------------------------
total=OrdersTotal(); //변수 total에 현재 오픈포지션의 개수를 입력
if(total<1) //현재 오픈포지션의 개수가 1보다 작다면, 즉 현재 오픈포지션이 없다면
{
if(SMACur > LMACur && SMAPre < LMAPre)
//현재봉의 단기이평선이 현재봉의 장기이평선보다 위에 있고, 직전봉의 단기이평선이 직전봉의 장기이평선보다 아래에 있을 때
//즉, 이동평균선 골드크로스 발생 시
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"MA",MagicNo,0,Blue); //매수포지션 오픈
//OrderSend(통화쌍,오더의종류,랏사이즈,체결가격,슬리피지,손절매,이익실현가,코멘트,매직넘버,지정가주문유효기간,오더색상)
return(0);
}
if(SMACur < LMACur && SMAPre > LMAPre) //이동평균선 데드크로스 발생 시
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"MA",MagicNo,0,Red);
return(0);
}
return(0);
}
//-----------------------------------------------------------------------
//아래구문에서 해당오더에 대한 손절/익절값을 넣어줌.
for(i=0;i<OrdersTotal();i++) //현재 오픈되어 있는 전체 오더를 대상으로 for구문을 돌림
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) //OrderSelect함수로 개별오더를 잡아줌
{
if(OrderMagicNumber()== MagicNo && OrderSymbol()==Symbol()) //해당오더의 매직넘버&통화쌍을 확인
{
if(OrderType() == OP_BUY) //오더타입이 BUY포지션이라면
{
if(OrderStopLoss()==0 && OrderTakeProfit() ==0) //해당오더의 손절과 익절값이 '0'이라면
{
ticketM=OrderModify(OrderTicket(),OrderOpenPrice(),Ask-StopLoss*Point*10,Ask+TakeProfit*Point*10,0,Blue);
//새로운 속성으로 해당오더를 변경함
return(0);
}
}
if(OrderType() == OP_SELL)
{
if(OrderStopLoss()==0 && OrderTakeProfit() ==0)
{
ticketM=OrderModify(OrderTicket(),OrderOpenPrice(),Bid+StopLoss*Point*10,Bid-TakeProfit*Point*10,0,Red);
return(0);
}
}
}
}
}
return(0);
}
[출처] 1-1. 이동평균선 (FXAL 외환알고리즘전략연구소) |작성자 HAN
'EA 교육자료' 카테고리의 다른 글
캔들활용기본이론 매매코딩 (0) | 2015.04.17 |
---|---|
RSI상대강도지수 소스 매매코딩 (0) | 2015.04.17 |
RSI상대강도지수 매매코딩 (0) | 2015.04.17 |
볼린져밴드 매매코딩 (0) | 2015.04.17 |
보조지표(Indicators)활용 매매코딩 (0) | 2015.04.17 |
OrderModify() 활용 EA실전코딩 (0) | 2015.04.17 |
OrderClose() 활용 EA실전코딩 (0) | 2015.04.17 |
OrderSend()함수 속성 상세설명 EA실전코딩 (0) | 2015.04.17 |