거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Twitter에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
스크립트가 흥미로우신가요?
그렇다면 링크 to it -
하셔서 다른 이들이 평가할 수 있도록 해보세요
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
Experts

Code Block for "Trailing Stop" based on current market price. (Ask / Bid) - MetaTrader 5용 expert

Hapu Arachchilage Tharindu Lakmal
Hapu Arachchilage Tharindu Lakmal
안녕 얘들 아.....!!
저는 스리랑카 출신의 락말입니다.
23 세이며 2019 년부터 외환 시장에서 소클로 거래되었습니다. 나는 외환 시장에 참여하기 전에 Ceylinco 생명 보험 회사의 재무 고문으로 고용되었습니다.
고등학교를 졸업 한 이래로 가장 좋아하는 과목은 거래 학습이었습니다. 결국, 나는 많은 거래 경험과 지식을 가진 외환 시장에서 스캘핑 상인이되었습니다.
| Korean English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
조회수:
110
평가:
(5)
게시됨:
MQL5 프리랜스 이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

이 코드 블록은 손절매를 사용하거나 사용하지 않는 경우에 작동합니다.


요구 사항

  • 포지션 및 주문 작업을 할 수 있는 CTrade 클래스에 액세스하려면 "Trade.mqh "를 포함해야 합니다.

#include <Trade\Trade.mqh> // <<------------------------------------------ CTrade 클래스에 액세스하려면 이 "Trade.mqh"를 포함하세요. 

  • 원하는 대로 트레일링 거리를 조정하려면 입력 매개변수를 설정해야 합니다. 이는 필수는 아니지만 편의를 위해 필요합니다.
input double Traling_Step = 3.0;
  • CTrade 클래스에 대한 인스턴스를 정의해야합니다. 이름은 무엇이든 될 수 있습니다. OnInt 이벤트 핸들러 뒤에 붙이는 것이 좋습니다.

  • 그런 다음 현재 실행 중인 포지션이 있는지 확인하기 위해 if 문을 만들어야 합니다. 이 문은 모든 틱에 대해 Check_TrailingStop(); 함수를 호출합니다. 이는 EA가 날카롭고 부드럽게 추적해야 하기 때문에 중요합니다. 이 문이 제대로 작동하려면 이 문은 OnTick 이벤트 핸들러의 맨 위에 배치해야 합니다.
//+------------------------------------------------------------------+
//| 전문가 초기화 기능|
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 타이머 생성
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }


CTrade trade; // <<------------------------------------------ "CTrade" 캘린더를 선언합니다. "trade"를 원하는 이름으로 바꿀 수 있습니다.
void OnTick()
  {
   
   if(PositionsTotal() > 0) // 실행 중인 포지션이 있는 경우 매 틱마다 후행 중지 함수를 호출합니다. 
     {
      Check_TralingStop(); 
     } 
     
       
  }

  • 나머지 작업을 수행하려면 Check_TrailingStop();( 이 경우) 이라는 사용자 정의 함수를 선언해야 합니다. 원하는 이름은 무엇이든 사용할 수 있습니다.
  • 사용자 지정 함수는 모든 오픈 포지션을 반복하여 필요한 거리만큼 추적합니다.
void Check_TralingStop()
  {
   int totalPositions = PositionsTotal();
   for(int count =0; count < totalPositions; count++)
     {
      ulong TicketNo = PositionGetTicket(count); // 포지션의 '인덱스'를 사용하여 포지션 티켓 번호를 가져옵니다.

      if(PositionSelectByTicket(TicketNo)) // 티켓 번호를 사용하여 위치를 선택합니다(이미 티켓 번호를 선택했습니다).
        {
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // 위치 유형을 확인합니다.
           {
            double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
            double stopLoss  = PositionGetDouble(POSITION_SL);       // <<-------------------포지션 현재 손절매 가져오기
            double takeProfit = PositionGetDouble(POSITION_TP);
            double bidPrice  = SymbolInfoDouble(_Symbol,SYMBOL_BID);
            ulong ticket = PositionGetTicket(count);
            double trailingLevel = NormalizeDouble(bidPrice - (Traling_Step * Point()),_Digits);

            if(stopLoss < openPrice) // 손절매는 사실이 아닙니다.
              {
               if(bidPrice > openPrice && trailingLevel > openPrice) // 포지션당 한 번만 실행됩니다. 첫 번째 SL을 설정합니다.

                  trade.PositionModify(ticket,trailingLevel,takeProfit); // "CTrade.trade"를 사용하여 후행 중지 수정하기
              }


            if(bidPrice > openPrice && trailingLevel > stopLoss) // 후행 레벨이 이전 레벨보다 높은지 확인합니다.
              {
               trade.PositionModify(ticket,trailingLevel,takeProfit); // "CTrade.trade"를 사용하여 후행 중지 수정하기
              }

           }
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
           {
            double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
            double stopLoss  = PositionGetDouble(POSITION_SL);
            double takeProfit = PositionGetDouble(POSITION_TP);
            double bidPrice  = SymbolInfoDouble(_Symbol,SYMBOL_BID);
            double askPrice  = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
            ulong ticket = PositionGetTicket(count);
            double trailingLevel = NormalizeDouble(askPrice + (Traling_Step * Point()),_Digits);

            if(stopLoss < openPrice) // 손절매는 사실이 아닙니다.
              {
               if(askPrice < openPrice && trailingLevel < openPrice) // 포지션당 한 번만 실행됩니다. 첫 번째 SL을 설정합니다.

                  trade.PositionModify(ticket,trailingLevel,takeProfit); // "CTrade.trade"를 사용하여 후행 중지 수정하기
              }

            if(askPrice < openPrice && trailingLevel < stopLoss) // 후행 레벨이 이전 레벨보다 높은지 확인합니다.
              {
               trade.PositionModify(ticket,trailingLevel,takeProfit); // "CTrade.trade"를 사용하여 후행 중지 수정하기
              }
           }

        }
     }
  }










    MetaQuotes Ltd에서 영어로 번역함.
    원본 코드: https://www.mql5.com/en/code/49021

    StoDiv StoDiv

    스토캐스틱 오실레이터와 프랙탈을 사용하는 전형적인 세마포어 신호 표시기입니다.

    구매판매 구매판매

    이 인디케이터는 현재 추세의 마지막 '방어선'을 보여줍니다. 추세 변화는 컬러 사각형으로, 추세 방향은 컬러 점으로 표시됩니다.

    Simple Code for Detect  A  "New Bar or New Candle " Received Simple Code for Detect A "New Bar or New Candle " Received

    이 코드 블록은 새 막대 또는 새 캔들이 수신되면 이를 감지합니다.

    울트라 스피어맨 랭크 상관관계 울트라 스피어맨 랭크 상관관계

    이 신호 추세 지표는 사용자 지정 스피어만 순위 상관관계 지표의 판독값과 여러 신호선의 추세 분석을 기반으로 합니다.