시스템트레이딩

MaybeAwo EA - 메타트레이더 4를 위한 스마트 트레이딩 도구
MetaTrader4
MaybeAwo EA - 메타트레이더 4를 위한 스마트 트레이딩 도구

주요 특징: 이동 평균 진입: 이 EA는 간단한 이동 평균을 활용하여 잠재적인 진입점을 파악합니다. 시장 조건이 이동 평균 교차 전략과 일치할 때, 자동으로 매수 또는 매도 주문을 실행할 수 있습니다. 사용자 정의 가능한 매개변수: 이동 기간, 로트 크기, 손절매, 이익 실현, 본전 회복 수준, 원하는 본전 회복 거리 및 거래 시간을 조정하여 EA의 행동을 세밀하게 조정할 수 있습니다. 이러한 매개변수는 다양한 거래 스타일과 자산 클래스에 맞춰 EA를 적응시킬 수 있게 해줍니다. 본전 회복 기능: 이 EA는 두 개의 본전 회복 수준을 포함하고 있습니다. 거래가 이익을 내기 시작하면, 자동으로 손절매를 본전 회복 수준으로 이동시켜 이익을 보호합니다. 원하는 본전 회복 거리는 개인의 선호에 맞게 조정할 수 있습니다. 트레일링 스톱: EA는 거래가 유리하게 진행될 때 손절매 레벨을 따라가며, 강한 추세에서 이익을 고정하는 데 도움을 줄 수 있습니다. 시작 및 종료 시간 설정: EA가 활발히 거래할 시간을 지정할 수 있습니다. 이 기능은 특정 시장 세션에 집중하여 거래 활동을 조정할 수 있게 해줍니다. 주의사항: 입력 매개변수를 신중히 검토하고 조정하여 EA가 귀하의 거래 전략에 맞도록 최적화하십시오. 실제 거래 환경에서 사용하기 전에 데모 계좌에서 EA를 테스트하는 것을 권장합니다. EA의 성능을 모니터링하고 시장 조건 변화에 맞춰 매개변수를 조정하십시오. # 거래는 위험을 동반하며, 이 EA가 이익을 보장하지는 않습니다. 책임감 있게 사용하고 자동 거래에 수반되는 위험을 인지하시기 바랍니다.

2023.09.10
메타트레이더 4를 위한 간단한 오픈 주문 필터링 함수
MetaTrader4
메타트레이더 4를 위한 간단한 오픈 주문 필터링 함수

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 4에서 여러분의 전문가 조언자(Expert Advisor)가 오픈된 주문을 독립적으로 감지할 수 있도록 돕는 간단한 코드를 공유하고자 합니다. 초보 개발자들은 종종 OrdersTotal() 함수를 사용하지 않고 오픈 주문을 확인하는 데 어려움을 겪습니다. 이 함수는 EA가 열었는지 수동으로 열었는지를 구분하지 않기 때문에, 단순히 오픈 주문의 총 개수만 반환하기 때문입니다. 이런 점을 고려하여, 제가 아주 간단한 코드를 준비했습니다. 이 코드에서는 Comment() 함수를 사용하여 Check_Open_Orders 함수를 실시간으로 보여줍니다. 코드는 설명이 충분히 잘 되어 있어, 이해하기 쉬울 것입니다. 여러분에게 도움이 되길 바랍니다! 코드 샘플 아래는 간단한 코드입니다: // Check_Open_Orders 함수 정의 bool Check_Open_Orders() { // 주문 개수가 0보다 큰 경우 if (OrdersTotal() > 0) { for (int i = 0; i < OrdersTotal(); i++) { // 현재 주문 선택 if (OrderSelect(i, SELECT_BY_POS)) { // EA에서 열린 주문인지 확인 if (OrderMagicNumber() == YOUR_EA_MAGIC_NUMBER) { return true; } } } } return false; } 이 코드를 활용하여 여러분의 EA가 오픈된 주문을 효과적으로 감지할 수 있기를 바랍니다. 추가 질문이 있다면 언제든지 댓글로 남겨주세요!

2023.06.13
AK-47 스캘퍼 EA: MetaTrader 5를 위한 효과적인 트레이딩 시스템
MetaTrader5
AK-47 스캘퍼 EA: MetaTrader 5를 위한 효과적인 트레이딩 시스템

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 5에서 사용할 수 있는 강력한 스캘퍼 EA, "AK-47 EA"에 대해 이야기해보려고 합니다. 이 EA는 스캘핑 전략을 통해 단기 거래에서 수익을 극대화하도록 설계되었습니다. 1. 입력 파라미터 #define ExtBotName "AK-47 EA" // 봇 이름 #define&nbsp;&nbsp;Version "1.00" // 입력 클래스 가져오기 #include &lt;Trade\PositionInfo.mqh&gt; #include &lt;Trade\Trade.mqh&gt; #include &lt;Trade\SymbolInfo.mqh&gt;&nbsp;&nbsp; #include &lt;Trade\AccountInfo.mqh&gt; #include &lt;Trade\OrderInfo.mqh&gt; //--- 코드 가독성을 위한 미리 정의된 변수 소개 #define Ask&nbsp;&nbsp;&nbsp;&nbsp;SymbolInfoDouble(_Symbol, SYMBOL_ASK) #define Bid&nbsp;&nbsp;&nbsp;&nbsp;SymbolInfoDouble(_Symbol, SYMBOL_BID) //--- 입력 파라미터 input string&nbsp;&nbsp;EASettings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = "---------------------------------------------"; //-------- &lt;EA 설정&gt; -------- input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InpMagicNumber&nbsp;&nbsp;&nbsp;&nbsp;= 124656;&nbsp;&nbsp; // 매직 넘버 input string&nbsp;&nbsp;MoneySettings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "---------------------------------------------"; //-------- &lt;자금 설정&gt; -------- input bool&nbsp;&nbsp;&nbsp;&nbsp; isVolume_Percent&nbsp;&nbsp;= true;&nbsp;&nbsp;&nbsp;&nbsp; // 볼륨 퍼센트 허용 input double&nbsp;&nbsp; InpRisk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 잔고의 리스크 비율 (%) input string&nbsp;&nbsp;TradingSettings&nbsp;&nbsp;&nbsp;&nbsp;= "---------------------------------------------"; //-------- &lt;거래 설정&gt; -------- input double&nbsp;&nbsp; Inpuser_lot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0.01;&nbsp;&nbsp;&nbsp;&nbsp; // 로트 input double&nbsp;&nbsp; InpSL_Pips&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 3.5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 손절(핍 단위) input double&nbsp;&nbsp; InpTP_Pips&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 7;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 목표 수익(핍 단위) (0 = 목표 수익 없음) input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InpMax_slippage&nbsp;&nbsp; = 3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 허용 최대 슬리피지(핍 단위) input double&nbsp;&nbsp; InpMax_spread&nbsp;&nbsp;&nbsp;&nbsp; = 5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 허용 최대 스프레드(포인트 단위) (0 = 변동형) input string&nbsp;&nbsp; TimeSettings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "---------------------------------------------"; //-------- &lt;거래 시간 설정&gt; -------- input bool&nbsp;&nbsp;&nbsp;&nbsp; InpTimeFilter&nbsp;&nbsp;&nbsp;&nbsp; = true;&nbsp;&nbsp;&nbsp;&nbsp; // 거래 시간 필터 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InpStartHour&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 시작 시간 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InpStartMinute&nbsp;&nbsp;&nbsp;&nbsp;= 30;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 시작 분 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InpEndHour&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 종료 시간 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InpEndMinute&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 종료 분 2. 로컬 변수 초기화 //--- 변수들 int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pips2Points;&nbsp;&nbsp;&nbsp;&nbsp;// 슬리피지&nbsp;&nbsp;3핍&nbsp;&nbsp;&nbsp;&nbsp;3=포인트&nbsp;&nbsp;&nbsp;&nbsp;30=포인트 double&nbsp;&nbsp; Pips2Double;&nbsp;&nbsp;&nbsp;&nbsp;// 손절 15핍&nbsp;&nbsp;&nbsp;&nbsp;0.015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0150 bool&nbsp;&nbsp;&nbsp;&nbsp; isOrder = false; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slippage; long&nbsp;&nbsp;&nbsp;&nbsp; acSpread; string&nbsp;&nbsp; strComment = ""; CPositionInfo&nbsp;&nbsp;m_position;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 거래 포지션 객체 CTrade&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_trade;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 거래 객체 CSymbolInfo&nbsp;&nbsp;&nbsp;&nbsp;m_symbol;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 심볼 정보 객체 CAccountInfo&nbsp;&nbsp; m_account;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 계좌 정보 래퍼 COrderInfo&nbsp;&nbsp;&nbsp;&nbsp; m_order;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 미체결 주문 객체 3. 메인 코드 a/ 전문가 초기화 함수 //+------------------------------------------------------------------+ //| 전문가 초기화 함수&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ int OnInit() { &nbsp;&nbsp; //3 또는 5자리 감지 &nbsp;&nbsp; // 핍과 포인트 &nbsp;&nbsp; if(_Digits % 2 == 1) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pips2Double&nbsp;&nbsp;= _Point*10; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pips2Points&nbsp;&nbsp;= 10; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slippage = 10* InpMax_slippage; &nbsp;&nbsp; } &nbsp;&nbsp; else { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pips2Double&nbsp;&nbsp;= _Point; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pips2Points&nbsp;&nbsp;=&nbsp;&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slippage = InpMax_slippage; &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; if(!m_symbol.Name(Symbol())) // 심볼 이름 설정 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(INIT_FAILED); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; RefreshRates(); //--- &nbsp;&nbsp; m_trade.SetExpertMagicNumber(InpMagicNumber); &nbsp;&nbsp; m_trade.SetMarginMode(); &nbsp;&nbsp; m_trade.SetTypeFillingBySymbol(m_symbol.Name()); &nbsp;&nbsp; m_trade.SetDeviationInPoints(slippage); //--- &nbsp;&nbsp; return(INIT_SUCCEEDED); } b/ 전문가 틱 함수 //+------------------------------------------------------------------+ //| 전문가 틱 함수&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ void OnTick() { &nbsp;&nbsp; if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comment("LazyBot\n거래가 허용되지 않습니다."); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; MqlDateTime structTime; &nbsp;&nbsp; TimeCurrent(structTime); &nbsp;&nbsp; structTime.sec = 0; &nbsp;&nbsp; &nbsp;&nbsp; // 시작 시간 설정 &nbsp;&nbsp; structTime.hour = InpStartHour; &nbsp;&nbsp; structTime.min = InpStartMinute;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; datetime timeStart = StructToTime(structTime); &nbsp;&nbsp; &nbsp;&nbsp; // 종료 시간 설정 &nbsp;&nbsp; structTime.hour = InpEndHour; &nbsp;&nbsp; structTime.min = InpEndMinute; &nbsp;&nbsp; datetime timeEnd = StructToTime(structTime); &nbsp;&nbsp; &nbsp;&nbsp; acSpread = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD); &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; strComment = "\n" + ExtBotName + " - v." + (string)Version; &nbsp;&nbsp; strComment += "\n서버 시간 = " + TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS) + " - " + DayOfWeekDescription(structTime.day_of_week); &nbsp;&nbsp; strComment += "\n거래 시간 = [" + (string)InpStartHour + "h" + (string)InpStartMinute + " --&gt; " +&nbsp;&nbsp;(string)InpEndHour + "h" + (string)InpEndMinute + "]"; &nbsp;&nbsp; &nbsp;&nbsp; strComment += "\n현재 스프레드 = " + (string)acSpread + " 포인트"; &nbsp;&nbsp; &nbsp;&nbsp; Comment(strComment); &nbsp;&nbsp; &nbsp;&nbsp; // 값 업데이트 &nbsp;&nbsp; UpdateOrders(); &nbsp;&nbsp; &nbsp;&nbsp; TrailingStop(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; // 거래 조건 &nbsp;&nbsp; if(InpTimeFilter) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(TimeCurrent() &gt;= timeStart &amp;&amp; TimeCurrent() &lt; timeEnd) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!isOrder) OpenOrder(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; } &nbsp;&nbsp; else { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!isOrder) OpenOrder(); &nbsp;&nbsp; } &nbsp;&nbsp; } //--- 함수 종료 3.1 주문 전송을 위한 신호 계산 //+------------------------------------------------------------------+ //| 신호 계산 및 주문 전송&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ void OpenOrder(){ &nbsp;&nbsp; &nbsp;&nbsp; ENUM_ORDER_TYPE OrdType = ORDER_TYPE_SELL;//-1; &nbsp;&nbsp; &nbsp;&nbsp; double TP = 0; &nbsp;&nbsp; double SL = 0; &nbsp;&nbsp; string comment = ExtBotName; &nbsp;&nbsp; &nbsp;&nbsp; // 로트 계산 &nbsp;&nbsp; double lot1 = CalculateVolume(); &nbsp;&nbsp; &nbsp;&nbsp; if(OrdType == ORDER_TYPE_SELL) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double OpenPrice = Bid - NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TP = OpenPrice - NormalizeDouble(InpTP_Pips * Pips2Double, _Digits); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SL = Ask + NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CheckSpreadAllow()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 스프레드 확인 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; CheckVolumeValue(lot1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 볼륨 확인 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice)&nbsp;&nbsp;// OpenPrice에서 Bid까지의 거리 확인 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; CheckStopLoss(OpenPrice,&nbsp;&nbsp;SL, TP)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // SL, TP와 OpenPrice 간의 거리 확인 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL)) // 명령이 실행 가능한지 확인 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!m_trade.SellStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print(__FUNCTION__,"--&gt; 주문 전송 오류 ", m_trade.ResultComment()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; } &nbsp;&nbsp; else if(OrdType == ORDER_TYPE_BUY) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double OpenPrice = Ask + NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SL = Bid - NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CheckSpreadAllow()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 스프레드 확인 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; CheckVolumeValue(lot1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 볼륨 확인 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice)&nbsp;&nbsp; // OpenPrice에서 Bid까지의 거리 확인 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; CheckStopLoss(OpenPrice,&nbsp;&nbsp;SL, TP)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// SL, TP와 OpenPrice 간의 거리 확인 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY))&nbsp;&nbsp;// 명령이 실행 가능한지 확인 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))// 만료일이 0일 때는 "ORDER_TIME_GTC" 사용 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print(__FUNCTION__,"--&gt; 주문 전송 오류 ", m_trade.ResultComment()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; } &nbsp;&nbsp; } 3.2 볼륨 계산 //+------------------------------------------------------------------+ //| 볼륨 계산&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ // 포지션 크기를 계산하고 주문할 로트를 반환하는 함수입니다. double CalculateVolume() { &nbsp;&nbsp; double LotSize = 0; &nbsp;&nbsp; if(isVolume_Percent == false) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LotSize = Inpuser_lot; &nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp; else { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LotSize = (InpRisk) * m_account.FreeMargin(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LotSize = LotSize /100000; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double n = MathFloor(LotSize/Inpuser_lot); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Comment((string)n); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LotSize = n * Inpuser_lot; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LotSize &lt; Inpuser_lot) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LotSize = Inpuser_lot; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LotSize &gt; m_symbol.LotsMax()) LotSize = m_symbol.LotsMax(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LotSize &lt; m_symbol.LotsMin()) LotSize = m_symbol.LotsMin(); &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp; //--- &nbsp;&nbsp; return(LotSize); }3.3 EA의

2023.06.12
주식 기반 포지션 청산: 메타트레이더 5에서의 효과적인 방법
MetaTrader5
주식 기반 포지션 청산: 메타트레이더 5에서의 효과적인 방법

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 주식 기반 포지션을 효과적으로 청산하는 방법에 대해 이야기해볼게요. 포지션을 닫는 건 간단해 보이지만, 전략적으로 접근해야 원하는 결과를 얻을 수 있답니다.주식 기반 포지션 청산의 중요성주식 거래에서 포지션을 청산하는 이유는 다양하지만, 가장 큰 이유는 손실을 줄이거나 이익을 확정짓기 위함이에요. 적절한 타이밍에 포지션을 종료함으로써, 리스크를 최소화하고 수익을 극대화할 수 있습니다.메타트레이더 5에서 포지션 청산하기메타트레이더 5에서 포지션을 청산하는 방법은 다음과 같아요:트레이딩 터미널에서 청산하고 싶은 포지션을 선택하세요.포지션을 오른쪽 클릭한 후 '청산' 옵션을 선택합니다.청산 버튼을 클릭하면 포지션이 종료됩니다.이 과정은 매우 직관적이어서, 초보자들도 쉽게 따라할 수 있어요. 하지만, 청산을 결정하기 전에 항상 시장 상황을 분석하고, 자신이 설정한 목표 가격과 손절매를 고려해야 해요.마무리하며포지션 청산은 트레이딩 전략의 중요한 부분입니다. 메타트레이더 5의 기능을 잘 활용하여, 더 효과적인 거래를 이어가길 바랍니다. 앞으로도 다양한 트레이딩 팁과 정보를 공유할 예정이니, 많은 관심 부탁드려요!

2023.05.27
마틴게일 레벨을 활용한 자금 관리 방법 - 메타트레이더 5에서의 활용 팁
MetaTrader5
마틴게일 레벨을 활용한 자금 관리 방법 - 메타트레이더 5에서의 활용 팁

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 사용할 수 있는 자금 관리 알고리즘인 마틴게일 EA에 대해 알아보려고 합니다. 이 EA는 포지션을 열고 닫는 데 도움을 주며, 마틴게일 방식에 '배수기'(multiplier)를 적용한 것입니다. 이제 마틴게일 EA를 활용해보세요: 최고의 결과를 위해 포지션을 열기 전에 반드시 EA를 실행하세요. 어떤 차트에서도 'MartingaleEA-5Levels'를 실행하세요. 'Martingale 모드'를 활성화해야 합니다. 통화 쌍을 입력하세요. 예를 들어 EURUSD 또는 GBPUSD와 같이요. 마틴게일 배수를 선택하고 'Martingale Volume Multiplier'에 입력하세요. 예를 들어, 여기서 2를 입력하면 첫 번째 포지션의 볼륨이 1 롯일 때, 두 번째 포지션은 2 롯으로, 세 번째 포지션은 4 롯으로 열립니다. 이 EA는 최대 5개의 마틴게일 포지션을 열 수 있으니, 'Number Of Martingale Trading' 필드에 1에서 5 사이의 숫자를 입력하세요. 'Distance' 필드(거리 1부터 거리 5까지)에 각 포지션 간의 피프스(pips) 또는 포인트를 입력하세요. 'Close all positions when total take profit is' 필드에는 100과 같은 숫자를 입력하세요. 모든 마틴게일 포지션이 $100에 도달하면 모든 열려 있는 포지션이 닫힙니다. 'Close all positions when total stop loss is' 필드에는 -500과 같은 숫자를 입력하세요. 모든 마틴게일 포지션이 -$500에 도달하면 모든 열려 있는 포지션이 닫힙니다. 마틴게일 시스템을 활용하면 더욱 안정적으로 자금을 관리할 수 있습니다. 여러분의 트레이딩에 큰 도움이 되길 바랍니다!

2023.05.24
다이나믹 트레일링 스톱로스와 수익 목표 관리 - 메타트레이더 5를 위한 시스템
MetaTrader5
다이나믹 트레일링 스톱로스와 수익 목표 관리 - 메타트레이더 5를 위한 시스템

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 사용할 수 있는 다이나믹 트레일링 스톱로스와 수익 목표 관리 시스템에 대해 이야기해보려고 해요. 이 코드는 기존 거래를 관리하는 리스크 관리 전략으로, 입력된 파라미터에 따라 손익을 조절합니다. 코드에 대한 간단한 설명을 드릴게요: 거래 및 심볼 정보 클래스를 위한 필수 헤더 파일이 포함되어 있습니다. 리스크 비율, 수익 비율, 트레일링 스톱 포인트를 위한 입력 파라미터가 정의됩니다. 거래 및 심볼 정보를 위한 글로벌 변수가 선언됩니다. OnInit 함수는 심볼 정보 객체를 초기화하고 오류를 체크합니다. OnDeinit 함수는 이 경우 아무 작업도 수행하지 않습니다. OnTick 함수는 새로운 틱이 수신될 때마다 호출되며, CheckTrades 함수를 호출합니다. CheckTrades 함수는 열려 있는 모든 포지션을 반복하며 현재 심볼에 속하는지 확인합니다. 만약 그렇다면 현재 수익을 계산하고 손익 임계값에 도달했는지 판단합니다. 임계값에 도달하면 포지션을 닫습니다. 임계값에 도달하지 않았다면, 포지션 타입이 매수 또는 매도인지 확인하고 트레일링 스톱으로 스톱로스 수준을 업데이트합니다. 만약 새로운 스톱로스 수준이 현재 스톱로스 수준보다 유리하다면, 포지션은 새로운 스톱로스 수준으로 수정됩니다. 이 코드는 트레일링 스톱을 기반으로 스톱로스 수준을 동적으로 조정하고, 손익 임계값에 도달했을 때 거래를 종료하는 간단한 리스크 관리 전략을 제공합니다. 여러분의 거래에 도움이 되길 바랍니다!

2023.04.28
사용자 입력 기반으로 다수의 매수 및 매도 주문을 여는 EA 소개
MetaTrader5
사용자 입력 기반으로 다수의 매수 및 매도 주문을 여는 EA 소개

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5(MT5)에서 사용할 수 있는 새로운 EA(Expert Advisor)를 소개할게요. 이 EA는 사용자 입력에 따라 여러 개의 매수 및 매도 주문을 자동으로 열어주는 기능을 가지고 있어요. 이 EA의 주요 특징은 다음과 같습니다: 사용자 입력 변수: 매수 및 매도 주문 수, 거래당 위험 비율, 손절매, 이익 실현, 슬리피지 등을 설정할 수 있어요. 간편한 사용자 인터페이스: 매수와 매도 버튼이 있어 클릭만으로 여러 주문을 쉽게 열 수 있습니다. EA는 설정한 위험 비율과 손절매를 바탕으로 적절한 롯트 크기를 계산해요. 주문을 진행하기 전에 설정된 슬리피지와 스프레드를 체크하여 최적의 조건에서 거래를 시작하도록 합니다. 평균 가격이 현재 매도 호가보다 높으면 매수 주문을, 평균 가격이 현재 매수 호가보다 낮으면 매도 주문을 열게 됩니다. 사용자가 매수 또는 매도 버튼을 클릭하면, EA는 계산된 롯트 크기, 손절매, 이익 실현을 적용해 지정된 수의 매수 또는 매도 주문을 열어요. 하지만 이 EA는 간단한 예제일 뿐이므로, 실제 거래에 사용하기 전에 추가적인 수정 및 최적화가 필요할 수 있습니다. 따라서 실제 자금을 이용하기 전에는 데모 계좌에서 충분히 테스트하는 것이 중요해요. 더 궁금한 점이 있거나 도움이 필요하시면 언제든지 댓글로 알려주세요. 행복한 트레이딩 되세요!

2023.04.27
MetaTrader 5를 위한 CheckTrades: 리스크 관리의 새로운 접근
MetaTrader5
MetaTrader 5를 위한 CheckTrades: 리스크 관리의 새로운 접근

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 5에서 사용할 수 있는 CheckTrades라는 시스템 트레이딩에 대해 알아보려고 합니다. 이 EA는 사용자 정의 이익 또는 손실 한계에 도달했을 때 열려 있는 포지션을 닫는 기능을 가진 MQL5 Expert Advisor입니다. CheckTrades의 핵심은 포지션의 리스크를 관리하는 것입니다. 이 EA는 진입 신호나 시장 타이밍 규칙을 제공하지 않으며, 오직 현재 포지션의 이익 또는 손실이 설정한 한계에 도달했을 때만 포지션을 종료합니다. EA에서 사용하는 외부 변수 RiskPercentage: 이 변수는 거래당 최대 허용 손실을 계좌 잔고의 퍼센트로 나타냅니다. 만약 열려 있는 포지션의 현재 손실이 이 비율에 도달하면 리스크를 제한하기 위해 포지션이 종료됩니다. ProfitPercentage: 이 변수는 거래당 원하는 이익을 계좌 잔고의 퍼센트로 나타냅니다. 열려 있는 포지션의 현재 이익이 이 비율에 도달하면 이익을 확보하기 위해 포지션이 종료됩니다. 이 EA는 리스크 관리에 중점을 두고 있으며, 특정 시장 지표에 의존하지 않기 때문에 모든 심볼이나 시간 프레임에서 적용할 수 있습니다. 하지만, 이 EA는 진입 신호와 다른 거래 관리 규칙이 포함된 거래 전략과 결합되어야 완전한 거래 시스템이 됩니다. 이 코드를 include 파일로 사용하고 싶다면 (MQL5\Include 폴더에 배치하면 됩니다), 사용자 정의 이익 및 손실 한계에 따라 포지션을 종료하는 리스크 관리의 주목적을 수행하게 됩니다. 또한, 포지션 사이즈 계산, 트레일링 스톱로스 등 특정 목적을 가진 다른 include 파일과 결합하여 사용할 수 있습니다. 그러기 위해선 메인 EA 파일에서 #include 지시어를 사용하여 이 파일을 포함시키고, 필요할 때 CheckTrades() 함수를 호출하여 열린 포지션을 관리할 수 있습니다.

2023.04.25
처음 이전 4 5 6 7 8 9 10 11 12 13 14 다음 마지막