
추적 중지 가능성에는 다양한 유형이 있을 수 있지만 우리의 목적에 맞게 가장 효과적인 방법을 살펴보겠습니다. 추적 중지는 사용자 지정 임계값 이후에 활성화된 다음 사용자 지정 핍 수준으로 추적됩니다. 이 후행 중지는 주문 가격이 처음으로 이익 임계값에 도달함에 따라 중지를 위 또는 아래로 이동합니다. 이 MQL4 Trailing Stop 기사에서 Trailing Stop을 사용하여 Expert Advisor를 프로그래밍하여 이익을 확보하고 손실 보호를 제공하는 방법을 알아보세요.
예를 들어 이익 기준점을 50으로 설정하고 추적 중지를 50으로 설정한 경우 추적 중지가 활성화되기 전에 거래가 50 이동해야 합니다. 이익 포인트, 그 시점에서 정지 손실은 손익 분기점으로 이동합니다. 후행 단계가 5라고 추가로 표시하면 정지가 손익분기점보다 5포인트 위에 있기 전에 시장이 5포인트 더 상승해야 합니다. 그런 다음 이 기준으로 점진적으로 위쪽으로 조정되어 5포인트의 이익마다 5포인트의 이익을 더 확보합니다.
따라서 이 새로운 후행 중지에는 3개의 외부 변수가 필요합니다. 하나는 이익 임계값을 나타내고 다른 하나는 후행 중지를 나타내고 마지막 변수는 걸음 거리를 나타냅니다.
외부 이중 TrailingStart = 50;
외부 이중 TrailingStop = 25;
외부 이중 TrailingStep = 5 ;
따라서 사용자가 조작하는 변수는 TrailingStart(트레일링 스톱이 활성화되기 전에 도달해야 하는 이익 임계값)입니다. 여기서는 이익 최고점에 따른 포인트 수와 정지 손실이 발생하기 전에 획득해야 하는 새로운 포인트 수인 TrailingStep에서 시작하여 이익 금액을 늘릴 수 있습니다.
이 추적을 확인해 보겠습니다 손실 중지 코드:
void TrailOrder(double Trailingstart,double Trailingstop){
국제 티켓 = 0 ; p>
Double tStopLoss = NormalizeDouble(OrderStopLoss(), number); // 손실 정지
int cnt,vPoint,vSlippage;
< /p>
Double sl = OrderStopLoss(); // 손실 중지
if (숫자 == 3 || 숫자 == 5)< /p>
{vPoint = 포인트 * 10; vSlippage = 슬리피지 * 10; }
기타
< p>   ; {vPoint = 포인트; vSlippage = 미끄러짐;}
새로고침 빈도();
if (총 주문()> 0) {
for(cnt=OrdersTotal();cnt>=0; cnt–){
p>
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() p>
& ;& OrderMagicNumber()==MagicNumber){
if(OrderType()==OP_BUY){
< p>if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits)&& tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){
tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits);
ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);
if (티켓 > 0) {
print("TrailingStop #2가 활성화되었습니다:", OrderSymbol(), ":SL", tStopLoss, ":Bid", Bid );
(0)을 반환합니다.
}}}
If (OrderType()==OP_SELL ) {
if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits)
&& (sl >(NormalizeDouble(Ask+(TrailingStop+TrailingStep)) *vPoint,Digits) ))
|| (OrderStopLoss()==0)){
tStopLoss = NormalizeDouble(Ask+TrailingStop*vPoint,Digits);
ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Red);
if (ticket> 0){
Print ( "후행 #2 활성화됨: ", OrderSymbol(), ": SL",tStopLoss, ": 물어보세요", 물어보세요);
반환 (0);
}}}< /p>
}}}}
설명
우리는 사용자 정의 함수로 void TrailOrder()를 사용합니다.
순서 루프 코드에서 for 루프와 OrderSelect() 함수를 볼 수 있습니다. 주문 풀을 살펴보고 각 주문을 확인하여 추적 중지를 적용해야 하는지 확인합니다. 현재 시장가 주문이 OP_BUY에 표시된 대로 매수 시장 주문이고 차트 기호 및 매직 넘버와 일치하는 경우 트레일링 스톱 계산을 진행합니다.
두 개의 추적 중지를 활성화하기 전에 두 가지 조건을 결정해야 합니다.
조건 1: TrailingStart를 확인하세요. 우리는 매도 가격이 개시 가격에 TrailingStart 값을 더한 것보다 큰지 여부를 관찰하도록 프로그램에 요청합니다. 예를 들어, 추적 시작이 50핍으로 설정된 경우 추적 중지는 시장 이익이 50핍에 도달한 경우에만 활성화될 수 있습니다. 처음보다 이익 임계값 이후에 추적 중지를 활성화하는 것이 더 합리적입니다.
조건 2: TrailingStop 및 TrailingStep을 확인하세요. 두 번째 조건은 현재 스톱이 현재 가격에서 트레일링 스톱과 트레일링 단계를 뺀 값보다 작은지 확인합니다. 예를 들어, 추적 시작이 50핍, 추적 중지가 25핍, 추적 단계가 5핍인 경우 거래가 이익으로 50핍 이동하면 조건 1이 활성화되고 프로그램은 조건 2로 계속 진행하여 확인할 수 있습니다. TrailingStop 및 TrailingStep. 그런 다음 조건 2는 첫 번째 중지 손실이 이익 기준점인 50핍보다 25핍 아래로 조정되도록 합니다. 거래가 계속해서 수익을 낼 경우 정의된 TrailingStep 금액의 5포인트마다 Trailing Stop이 5포인트씩 증가합니다.
현재 입찰가에서 추적 중지 설정에 vPoint()를 곱하여 중지 손실 거리를 결정합니다. 이는 변수 tStopLoss에 저장됩니다. tStopLoss 변수를 새로운 정지 손실로 OrderModify() 함수에 전달합니다.
참고: MQL 함수 NormalizeDouble()을 사용하여 변수를 올바른 소수 자릿수로 반올림합니다. 견적은 소수점 이하 8자리까지 유지될 수 있으며 NormalizeDouble()은 이를 4자리 또는 5자리(엔 쌍의 경우 2~3자리)로 반올림하는 데 도움이 됩니다.
이 후행 중지 정보가 활성화되었을 때 로그 탭에 인쇄할 수 있도록 여기 코드에 인쇄 기능을 추가했습니다.
일반적으로 매도 주문의 후행 중지 조건은 매수 주문과 동일한 논리를 따릅니다.
이제 이 사용자 정의 함수를 Start() 함수에 삽입하여 코드에서 사용 중임을 알 수 있도록 하려면 어떻게 해야 할까요?
start() 함수 내 아무 곳에나, 가급적이면 함수 시작 부분에 한 줄을 배치합니다.
if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop);
기본적으로 저는 ' TrailingStart와 TrailingStop이 모두 0보다 큰지, 즉 사용자가 이 필드에 대해 정수 값을 정의했는지 확인하기 위해 조건부 if 표현식을 생성합니다. 그렇다면 사용자 정의 함수 TrailOrder()가 활성화됩니다. 그렇지 않고 두 필드 중 하나가 기본값인 0으로 유지되면 추적 손절매가 비활성화된 상태로 유지됩니다.
이게 전부입니다. 이제 무기고에 추가 무기로 정교한 후행 중지 메커니즘이 있습니다.