거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Twitter에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
당사 팬 페이지에 가입하십시오
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
Code Block for "Trailing Stop" based on current market price. (Ask / Bid) - MetaTrader 5용 expert
- 조회수:
- 43
- 평가:
- 게시됨:
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
이 코드 블록은 손절매를 사용하거나 사용하지 않는 경우에 작동합니다.
요구 사항
- 포지션 및 주문 작업을 할 수 있는 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
스토캐스틱 오실레이터와 프랙탈을 사용하는 전형적인 세마포어 신호 표시기입니다.
구매판매
이 인디케이터는 현재 추세의 마지막 '방어선'을 보여줍니다. 추세 변화는 컬러 사각형으로, 추세 방향은 컬러 점으로 표시됩니다.
Simple Code for Detect A "New Bar or New Candle " Received
이 코드 블록은 새 막대 또는 새 캔들이 수신되면 이를 감지합니다.
울트라 스피어맨 랭크 상관관계
이 신호 추세 지표는 사용자 지정 스피어만 순위 상관관계 지표의 판독값과 여러 신호선의 추세 분석을 기반으로 합니다.