MetaTrader4
메타트레이더 4에서 트레일링 스탑과 매직넘버 활용하기
안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 4에서 트레일링 스탑을 설정하는 방법에 대해 이야기해 보려고 합니다. 트레일링 스탑은 우리의 거래를 지원해 주며, 손실을 줄이고 이미 확보한 이익을 보호하는 데 큰 도움을 줍니다.
트레일링 스탑 설정하기
먼저, 트레일링 스탑의 입력 매개변수를 설정하는 코드부터 살펴보겠습니다.
input bool isTrailingStop = true; // 트레일링 스탑 활성화
input int trailingStart = 15; // 트레일링 시작 (핍)
input int trailingStep = 5; // 트레일링 스탭 (핍)
input int MagicNumber = 0; // 매직 넘버
전역 변수 선언하기
// 전역 변수
double myPoint = 0.0;
EA 초기화 함수
이제 EA를 실행하면 OnInit() 함수가 처음으로 실행되고, 이 함수에서 입력 변수를 검증하고 초기화합니다.
int OnInit()
{
if (isTrailingStop && trailingStart <= 0){
Alert ("매개변수가 잘못되었습니다");
return(INIT_PARAMETERS_INCORRECT);
}
myPoint = GetPipPoint(Symbol());
return(INIT_SUCCEEDED);
}
가격 변동 시 OnTick() 함수 실행
가격이 움직일 때마다 OnTick() 함수가 실행되어 setTrailingStop() 함수를 호출합니다.
void OnTick()
{
//---
setTrailingStop(MagicNumber);
}
setTrailingStop() 함수 구현하기
void setTrailingStop(int magicNumber=0){
if (isTrailingStop==false) return;
int tOrder = 0;
string pair = "";
double sl = 0.0, tp = 0.0;
pair = Symbol();
tOrder = OrdersTotal();
for (int i=tOrder-1; i>=0; i--){
bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){
if (OrderType() == OP_BUY){
if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice()
&& (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() )
)
{
sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits());
if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){
Print ("#", OrderTicket(), " 손실 업데이트 실패");
}
}
}
if (OrderType() == OP_SELL){
if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice()
&& ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0)
)
{
sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() );
if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){
Print ("#", OrderTicket(), " 손실 업데이트 실패");
}
}
} // 매직넘버 끝
}// for 종료
}
GetPipPoint() 함수
핍 포인트를 가져오는 함수도 필요합니다.
// GetPipPoint 함수
double GetPipPoint(string pair)
{
double point= 0.0;
int digits = (int) MarketInfo(pair, MODE_DIGITS);
if(digits == 2 || digits== 3) point= 0.01;
else if(digits== 4 || digits== 5) point= 0.0001;
return(point);
}
질문이 있으신가요?
궁금한 점이 있으시면 댓글로 남겨주세요! 또한, 저희 그룹 공유에 참여하실 수도 있습니다. t.me/codeMQL
SignalForex 앱 다운로드
저희는 SignalForex 앱도 제공하고 있습니다. 이 앱을 다운로드하여 사용하시면 더 수익성 있는 거래에 도움이 됩니다!
SignalForex 앱 다운로드하기
2021.03.30