1-3-6. RSI상대강도지수 mql4소스코딩(1-3-2.RSI상대강도지수를 활용한 매매전략)
※
검정색글자: 소스코딩
붉은색글자: 해설
//------------------------------------------------------------------------------------------------------------
extern int MagicNo = 1234; //외부변수 값 설정
extern double Lots = 1.0; //랏사이즈 설정
extern int RSIperiod = 14; //RSI기간
extern int Top = 70; //RSI윗선
extern int Bottom = 30; //RSI아래선
int start()
{
double preRSI,curRSI; //double타입의 변수 설정
int i, ticket, total; //int타입의 변수 설정
bool CloseSuccess; //bool타입의 변수 설정
preRSI = iRSI(NULL,0,RSIperiod,PRICE_OPEN,1);
curRSI = iRSI(NULL,0,RSIperiod,PRICE_OPEN,0);
// preRSI,curRSI 변수 안에 볼린져밴드 보조지표 값을 넣어줌.
// iRSI(통화쌍,시간봉,기간,기준가격,캔들순서)
//-----------------------------------------------------------------------------------
total=OrdersTotal(); //변수 total에 현재 오픈포지션의 개수를 입력
if(total<1) //현재 오픈포지션의 개수가 1보다 작다면, 즉 현재 오픈포지션이 없다면
{
if(preRSI < Bottom && curRSI > Bottom)
//이전 캔들의 RSI값이 Bottom(30)보다 작고, 현재 캔들의 RSI값이 Bottom(30)보다 클때. 즉, 30기준선을 상향돌파 시
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"RSI",MagicNo,0,Blue); //매수포지션 오픈
//OrderSend(통화쌍,오더의종류,랏사이즈,체결가격,슬리피지,손절매,이익실현가,코멘트,매직넘버,지정가주문유효기간,오더색상)
if(ticket>0) //ticket이 '0'보다 클때. 즉, 해당오더가 성공적으로 오픈되었다면
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) //해당오더를 선택
Print("BUY order opened : ",OrderOpenPrice()); //해당오더의 '오픈가격'을 프린트 함
}
else //ticket이 '0'이거나 '0'보다 작을때. 즉, 해당오더가 주문실패했다면
Print("Error opening BUY order : ",GetLastError()); //에러번호를 프린트 함
return(0);
}
if(preRSI > Top && curRSI < Top)
//이전 캔들의 RSI값이 Top(70)보다 크고, 현재 캔들의 RSI값이 Top(70)보다 작을때. 즉, 70기준선을 하향돌파 시
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"RSI",MagicNo,0,Red); //매도포지션 오픈
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
else
Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
//-----------------------------------------------------------------------
//OrderClose()함수를 사용하여 조건청산
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(curRSI >= Top) //현재캔들의 RSI값이 Top(70)보다 크거나 같을때. 즉, RSI 70기준선에 닿을 시.
{
CloseSuccess=OrderClose(OrderTicket(),OrderLots(),Bid,10,White); //청산
return(0);
}
}
if(OrderType() == OP_SELL) //오더타입이 SELL포지션이며
{
if(curRSI <= Bottom) //현재캔들의 RSI값이 Bottom(30)보다 작거나 같을 때. 즉, RSI 30기준선에 닿을 시.
{
CloseSuccess=OrderClose(OrderTicket(),OrderLots(),Ask,10,White); //청산
return(0);
}
}
}
}
}
return(0);
'EA 교육자료' 카테고리의 다른 글
2-2추세패턴기법 [전략 코딩] (0) | 2015.04.22 |
---|---|
전략코팅 매매관리 (0) | 2015.04.17 |
백테스트신뢰성 매매관리 (0) | 2015.04.17 |
캔들활용기본이론 매매코딩 (0) | 2015.04.17 |
RSI상대강도지수 매매코딩 (0) | 2015.04.17 |
볼린져밴드 매매코딩 (0) | 2015.04.17 |
이동평균선 매매코딩 (0) | 2015.04.17 |
보조지표(Indicators)활용 매매코딩 (0) | 2015.04.17 |