시스템트레이딩

AK-47 스캘퍼 EA: 메타트레이더 4를 위한 효율적인 자동 거래 도구
MetaTrader4
AK-47 스캘퍼 EA: 메타트레이더 4를 위한 효율적인 자동 거래 도구

1. 입력 매개변수 #define ExtBotName "AK-47 스캘퍼 EA" //봇 이름 #define  Version "1.00" //--- 입력 매개변수 설정 extern string  EASettings        = "---------------------------------------------"; //-------- <EA 설정> -------- input int      InpMagicNumber    = 124656;   //매직 넘버 extern string  TradingSettings   = "---------------------------------------------"; //-------- <거래 설정> -------- input double   Inpuser_lot       = 0.01;     //로트 수 input double   InpSL_Pips        = 3.5;      //손절 (핍 단위) input double   InpMax_spread     = 0.5;      //최대 허용 스프레드 (핍 단위) (0 = 플로팅) extern string  MoneySettings     = "---------------------------------------------"; //-------- <자금 설정> -------- input bool     isVolume_Percent  = true;     //볼륨 비율 허용 input double   InpRisk           = 3;        //계좌 잔고 대비 리스크 비율 (%) input string   TimeSettings      = "---------------------------------------------"; //-------- <거래 시간 설정> -------- input bool     InpTimeFilter     = true      //거래 시간 필터 input int      InpStartHour      = 2;         //시작 시간 input int      InpStartMinute    = 30;        //시작 분 input int      InpEndHour        = 21;        //종료 시간 input int      InpEndMinute      = 0         //종료 분 2. 로컬 변수 초기화 //--- 변수들 int      Pips2Points;               // 슬리피지  3 pips    3=points    30=points double   Pips2Double;               // 손절 15 pips    0.015      0.0150 int      InpMax_slippage   = 3;     // 최대 슬리피지 허용 핍 수. bool     isOrder           = false; // 단 하나의 주문만 오픈 int      slippage; string   strComment        = ""; 3. 메인 코드 a/ 전문가 초기화 함수 int OnInit()   { //---      //3 또는 5 자리 감지    //핍과 포인트    if (Digits % 2 == 1)    {       Pips2Double  = _Point*10;       Pips2Points  = 10;       slippage = 10* InpMax_slippage;    }    else    {           Pips2Double  = _Point;       Pips2Points  =  1;       slippage = InpMax_slippage;    }    //---    return(INIT_SUCCEEDED);   } b/ 전문가 틱 함수 void OnTick()   { //---      if(IsTradeAllowed() == false)      {       Comment("AK-47 EA\n거래 불가.");       return;      }             MqlDateTime structTime;        TimeCurrent(structTime);        structTime.sec = 0;               //시작 시간 설정        structTime.hour = InpStartHour;        structTime.min = InpStartMinute;              datetime timeStart = StructToTime(structTime);               //종료 시간 설정        structTime.hour = InpEndHour;        structTime.min = InpEndMinute;        datetime timeEnd = StructToTime(structTime);               double acSpread = MarketInfo(Symbol(), MODE_SPREAD);        StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);              strComment = "\n" + ExtBotName + " - v." + (string)Version;       strComment += "\nGMT 시간 = " + TimeToString(TimeGMT(),TIME_DATE|TIME_SECONDS);       strComment += "\n거래 시간 = [" + (string)InpStartHour + "h" + (string)InpStartMinute + " --> " +  (string)InpEndHour + "h" + (string)InpEndMinute + "]";              strComment += "\n현재 스프레드 = " + (string)acSpread + " 포인트";       strComment += "\n현재 스톱레벨 = " + (string)StopLevel + " 포인트";              Comment(strComment);          //값 업데이트       UpdateOrders();              TrailingStop();              //거래 시간 체크       if(InpTimeFilter)       {          if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd)          {             if(!isOrder) OpenOrder();          }       }       else       {          if(!isOrder) OpenOrder();       }   } 3.1 신호를 계산하여 주문 전송 void OpenOrder(){       //int OrdType = OP_SELL;//-1;    double TP = 0;    double SL = 0;    string comment = ExtBotName;    //로트 수 계산    double lot1 = CalculateVolume();       //if(OrdType == OP_SELL){       double OpenPrice = NormalizeDouble(Bid - (StopLevel * _Point) - (InpSL_Pips/2) * Pips2Double, Digits);       SL = NormalizeDouble(Ask + StopLevel * _Point + InpSL_Pips/2 * Pips2Double, Digits);              if(CheckSpreadAllow())                                    //스프레드 체크       {          if(!OrderSend(_Symbol, OP_SELLSTOP, lot1, OpenPrice, slippage, SL, TP, comment, InpMagicNumber, 0, clrRed))          Print(__FUNCTION__,"--> 주문 전송 오류 ",GetLastError());       }    //} } 3.2 거래량 계산 double CalculateVolume()   {    double LotSize = 0;    if(isVolume_Percent == false)      {       LotSize = Inpuser_lot;      }    else      {       LotSize = (InpRisk) * AccountFreeMargin();       LotSize = LotSize /100000;       double n = MathFloor(LotSize/Inpuser_lot);       //Comment((string)n);       LotSize = n * Inpuser_lot;       if(LotSize < Inpuser_lot)          LotSize = Inpuser_lot;       if(LotSize > MarketInfo(Symbol(),MODE_MAXLOT))          LotSize = MarketInfo(Symbol(),MODE_MAXLOT);       if(LotSize < MarketInfo(Symbol(),MODE_MINLOT))          LotSize = MarketInfo(Symbol(),MODE_MINLOT);      }    return(LotSize);   } 3.3 EA는 "트레일링 스탑" 기능이 있으며, 가격이 변할 때마다 SL이 변경됩니다.   void TrailingStop()   {    for(int i = OrdersTotal() - 1; i >= 0; i--)      {       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))         {          if((OrderMagicNumber() == InpMagicNumber) && (OrderSymbol() == Symbol()))   //_Symbol))            {             //매도 주문의 경우             if(OrderType() == OP_SELL)               {                   //--가격 변동 시 SL 계산                   double SL_in_Pip = NormalizeDouble(OrderStopLoss() - (StopLevel * _Point) - Ask, Digits) / Pips2Double;                   if(SL_in_Pip > InpSL_Pips){                         double newSL = NormalizeDouble(Ask + (StopLevel * _Point) + InpSL_Pips * Pips2Double, Digits);                         if(!OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0, clrRed))                         {                            Print(__FUNCTION__,"--> 주문 수정 오류 ",GetLastError());                         {                            continue;                         }               }                          //매도 스탑 주문의 경우             else if(OrderType() == OP_SELLSTOP)               {                   double SL_in_Pip = NormalizeDouble(OrderStopLoss() - (StopLevel * _Point) - Ask, Digits) / Pips2Double;                                      if(SL_in_Pip < InpSL_Pips/2){                          double newOP = NormalizeDouble(Bid - (StopLevel * _Point) - (InpSL_Pips/2) * Pips2Double, Digits);                      double newSL = NormalizeDouble(Ask + (StopLevel * _Point) + (InpSL_Pips/2) * Pips2Double, Digits);                                           if(!OrderModify(OrderTicket(), newOP, newSL, OrderTakeProfit(), 0, clrRed))                          {                             Print(__FUNCTION__,"--> 미결 주문 수정 오류!", GetLastError());                         continue;                          }                          }               }                           }      }   }

2023.01.14
MT5에서 거래를 간편하게! XP Forex Trade Manager 활용법
MetaTrader5
MT5에서 거래를 간편하게! XP Forex Trade Manager 활용법

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 5에서 거래를 더욱 효율적으로 관리할 수 있는 XP Forex Trade Manager에 대해 알아보겠습니다. 이 도구는 열린 주문을 관리하는 데 큰 도움이 됩니다. 새로운 주문을 열면 이 매니저가 자동으로 손절매(Stop Loss)와 익절(Take Profit)을 설정해줍니다. 가격이 움직일 때, 프로그램은 손절매를 브레이크 이븐(Break Even)으로 옮기거나 트레일링 스탑(Trailing Stop) 기능을 통해 지속적으로 손절매를 조정하여 수익을 보호합니다. Forex Trade Manager는 현재 심볼에서만 주문을 제어하거나 모든 열린 주문을 관리할 수 있으며, 브로커에게 손절매와 익절을 숨기는 기능도 제공합니다. 이는 수동 거래를 관리하는 전략으로, 다음과 같은 기능을 포함합니다: 거래에 대한 손절매 및/또는 익절 설정 (핍 단위) 가격에 따라 손절매를 추적하는 트레일링 스탑 기능 선택한 거리에서 손절매를 브레이크 이븐으로 이동하는 기능 손절매(SL)와 익절(TP)은 브로커에 의해 관리되거나, 스텔스 모드에서 브로커에게 숨길 수 있습니다. 파라미터: SLTP Params 손절매 – 거래에 대한 손절매 (핍 단위) 익절 – 거래에 대한 익절 (핍 단위) 브레이크 이븐 UseBreakEven (true/false) – 열린 거래에 대해 브레이크 이븐 기능 사용 여부 BEActivation – 브레이크 이븐 기능이 활성화될 때의 수익 (핍 단위) BELevel – 브레이크 이븐 기능에 의해 손절매가 설정될 때의 추가 거리 (핍 단위) 트레일링 스탑 UseTrailingStop (true/false) – 열린 거래에 대해 트레일링 스탑 기능 사용 여부 TSStart – 트레일링 스탑 기능이 활성화될 때의 수익 (핍 단위) TSStep – 새로운 손절매와 현재 손절매 사이의 최소 차이 (핍 단위) TSDistance – 트레일링 스탑 기능에 의해 손절매가 설정될 때의 현재 가격과의 거리 (핍 단위) 행동 StealthMode (true/false) – 브로커에게 SL/TP 수준을 숨기고 EA가 이 수준에서 거래를 프로그램적으로 종료하는 기능 OnlyCurrentPair (true/false) – 현재 차트의 심볼에서만 거래를 관리할지, 모든 쌍에서 관리할지 여부 정보: 모든 거래 및 기능 파라미터는 EA의 파라미터에서 설정할 수 있으며, Forex Trade Manager는 차트에서 현재 일일 수익/손실을 핍과 계좌 통화로 표시합니다.

2023.01.10
MT5용 XP 포렉스 트레이드 매니저 그리드: 최고의 시스템 트레이딩 도구
MetaTrader5
MT5용 XP 포렉스 트레이드 매니저 그리드: 최고의 시스템 트레이딩 도구

안녕하세요, 트레이더 여러분! 오늘은 MT5용 XP 포렉스 트레이드 매니저 그리드에 대해 알아보려고 합니다. 이 툴은 여러분의 주문 관리와 목표 달성에 큰 도움을 줄 수 있습니다. 이 시스템을 사용하면, 첫 번째 주문에 테이크 프로핏을 설정하고 EA를 실행한 뒤 원하는 이익(pips)을 설정하기만 하면 됩니다. EA는 지정한 pips 수를 모으면서 여러분의 포지션을 관리해 줄 것입니다. 이 전략은 현재 거래 쌍에서 수동으로 열린 거래를 관리하는 데 유용하며, 그리드 방식으로 현재 열린 거래에 포지션을 추가합니다. 거래 간의 간격(pips)을 설정하여 최대 15개의 거래를 관리할 수 있습니다. 처음 3개의 거래는 각각 개별적으로 테이크 프로핏을 설정할 수 있으며, 4번째 거래부터는 전체 그리드를 공통 수준(손익 분기점)에서 종료합니다. 테이크 프로핏에 도달한 거래는 재개할 수 있습니다. 전체 사이클은 허용된 손실 비율보다 큰 손실이 발생했을 경우 종료됩니다. 설정 파라미터: 추가 거래 파라미터: AddNewTradeAfter – 마지막 거래 후 그리드에 추가할 거래 간의 거리(pips) 테이크 프로핏 TakeProfit1Total (숫자) – 첫 번째 포지션에서 요구되는 총 TP(pips) TakeProfit1Partitive – 사이클의 첫 번째 포지션에 대한 초기 TP(pips) TakeProfit1Offset – 첫 번째 거래를 갱신하기 위해 마지막으로 닫힌 첫 번째 포지션의 테이크 프로핏으로부터 최소 거리(pips) TakeProfit 2/3 – 사이클의 두 번째/세 번째 포지션에 대한 개별 TP(pips) TakeProfit 4/5/6/...15Total – 사이클의 모든 포지션에서 요구되는 총 TP(pips, 4개 이상의 거래가 열린 경우) 거래 파라미터: MaxOrders – 그리드에서 허용되는 최대 거래 수 Risk Balance % – 계좌 잔고의 퍼센트로서 허용되는 최대 손실 (모든 열린 포지션 종료) Lots – EA가 열 거래에 대한 로트 크기 Slippage – 허용되는 슬리피지(포인트) 정보: 모든 거래 및 기능의 파라미터는 EA의 설정에서 조정할 수 있습니다. 포렉스 트레이드 매니저 그리드는 차트에 현재 사이클의 이익/손실에 대한 정보를 pips와 계좌 통화로 표시합니다.

2023.01.10
MT4에서 손쉽게 거래 관리하는 XP Forex 트레이드 매니저
MetaTrader4
MT4에서 손쉽게 거래 관리하는 XP Forex 트레이드 매니저

안녕하세요, 트레이더 여러분! 오늘은 MT4에서 거래를 간편하게 관리할 수 있는 XP Forex 트레이드 매니저에 대해 알아보겠습니다. 이 툴은 열린 주문을 효과적으로 관리할 수 있도록 도와주는 프로그램인데요, 새로운 주문을 열면 자동으로 손절매(Stop Loss)와 이익 실현(Take Profit)을 설정해줍니다. 가격이 움직일 때, 이 프로그램은 손절매를 본전으로 이동시키거나(손절매 = 오픈 가격) 계속해서 손절매를 이동시켜 수익을 보호할 수 있습니다. XP Forex 트레이드 매니저는 현재 심볼에서만 주문을 제어할 수도 있고(EA가 작동하는 곳), 모든 열린 주문을 제어할 수도 있습니다. 또한, 브로커에게 손절매와 이익 실현을 숨길 수 있는 전략도 제공합니다. 주요 기능 거래에 대한 손절매 및/또는 이익 실현을 핍 단위로 설정 가격에 따라 손절매를 따라가는 트레일링 스탑 기능 선택한 거리에서 손절매를 본전으로 이동하는 기능 손절매와 이익 실현은 브로커에 의해 관리될 수도 있고, 스텔스 모드에서 브로커에게 숨겨질 수도 있습니다. 파라미터 설정 SLTP 파라미터: Stop Loss – 거래의 손절매 핍 수 Take Profit – 거래의 이익 실현 핍 수 브레이크 이븐: UseBreakEven (true/false) – 열린 거래에 대해 브레이크 이븐 기능을 사용할지 여부 BEActivation – 브레이크 이븐 기능이 활성화되는 핍 수 BELevel – 브레이크 이븐 기능으로 설정된 손절매의 추가 거리 트레일링 스탑: UseTrailingStop (true/false) – 열린 거래에 대해 트레일링 스탑 기능을 사용할지 여부 TSStart – 트레일링 스탑 기능이 활성화되는 핍 수 TSStep – 새로운 손절매와 현재 손절매 간의 최소 핍 차이 TSDistance – 트레일링 스탑 기능으로 설정된 손절매의 현재 가격에서의 거리 행동 설정: StealthMode (true/false) – 손절매와 이익 실현 레벨을 브로커에게 숨기고, EA가 이 레벨에서 거래를 프로그램적으로 종료 OnlyCurrentPair (true/false) – 현재 차트의 심볼에서만 거래를 관리할지 여부 정보: 모든 거래 파라미터와 기능은 EA의 파라미터에서 설정할 수 있습니다. XP Forex 트레이드 매니저는 차트에 현재 일일 손익과 계좌 통화에 대한 정보를 표시해줍니다.

2023.01.10
MT4에서 손쉬운 거래 관리를 위한 Forex Trade Manager Grid 소개
MetaTrader4
MT4에서 손쉬운 거래 관리를 위한 Forex Trade Manager Grid 소개

안녕하세요, 트레이더 여러분! 오늘은 MT4에서 거래를 보다 효과적으로 관리할 수 있도록 도와주는 Forex Trade Manager Grid에 대해 소개해드릴게요. 이 툴은 주문을 관리하고 목표를 달성하는 데 큰 도움이 됩니다. 먼저 첫 번째 주문을 이익 실현가(Take Profit)와 함께 설정한 후, EA를 실행하고 원하는 이익(pips)을 매개변수에 설정하면 됩니다. 이후 EA가 자동으로 포지션을 관리하며 설정한 이익 수익을 위한 pips를 모아줍니다. 이 전략은 현재 거래 쌍에서 열린 수동 거래를 관리하는 방법입니다. 전략은 현재 열린 거래에 그리드 관리 방식으로 포지션을 추가하며, 거래 간의 간격(pips)을 선택할 수 있습니다. 최대 15개의 거래까지 추가할 수 있으며, 처음 3개의 거래는 개별 이익 실현가로 관리되고, 4번째 거래부터는 전체 그리드를 공통 수준(손익 분기점)에서 종료합니다. 이익 실현가에 도달하면 거래를 다시 시작할 수 있으며, 손실이 허용된 위험 비율보다 클 경우 전체 사이클이 종료됩니다. 매개변수 설정 추가 거래 매개변수: AddNewTradeAfter – 마지막 거래 이후 그리드에 추가되는 거래 간의 거리(pips) “이익 실현가”: TakeProfit1Total (숫자) – 첫 번째 포지션에서 필요한 총 이익 실현가(pips) TakeProfit1Partitive – 사이클에서 첫 번째 포지션에 대한 초기 이익 실현가(pips) TakeProfit1Offset – 첫 번째 포지션의 마지막 이익 실현가와의 최소 거리(pips) TakeProfit 2/3 – 사이클에서 두 번째/세 번째 포지션에 대한 개별 이익 실현가(pips) TakeProfit 4/5/6/…15Total – 사이클에서 모든 포지션의 총 이익 실현가(pips) “거래 매개변수”: MaxOrders – 그리드에서 허용되는 최대 거래 수 위험 비율 % – 계좌 잔고의 손실 비율(모든 열린 포지션 종료) Lots – EA에 의해 열린 거래의 로트 크기 Slippage – 허용 가능한 슬리피지(포인트) 정보: 모든 거래 및 기능에 대한 매개변수는 EA의 설정에서 조정할 수 있습니다. Forex Trade Manager Grid는 차트에 현재 사이클의 이익/손실을 pips 및 계좌 통화로 표시해줍니다.

2023.01.10
Lazy Bot MT5: 일일 돌파 전략을 위한 EA 소개
MetaTrader5
Lazy Bot MT5: 일일 돌파 전략을 위한 EA 소개

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 5에서 사용할 수 있는 Lazy Bot MT5에 대해 자세히 알아보려고 합니다. 이 봇은 매일 자동으로 거래를 진행하며, 특히 일일 고점과 저점을 기준으로 주문을 생성하는 전략을 가지고 있습니다. 1. 입력 매개변수 EA 설정 // 외부 클래스 불러오기 #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\AccountInfo.mqh> #include <Trade\OrderInfo.mqh> // 코드 가독성을 위한 미리 정의된 변수 소개 #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) // 입력 매개변수 input string EASettings = "---------------------------------------------"; // EA 설정 input int InpMagicNumber = 123456; // 매직 넘버 input string InpBotName = "LazyBot_V1"; // 봇 이름 input double Inpuser_lot = 0.01; // 로트 수 input double Inpuser_SL = 5.0; // 손절매 (핍 단위) input double InpAddPrice_pip = 0; // 고점/저점에서 OP 가격까지의 거리 (핍 단위) input int Inpuser_SLippage = 3; // 허용되는 최대 슬리피지 (핍 단위) input double InpMax_spread = 0; // 허용되는 최대 스프레드 (0 = 플로팅) input bool isTradingTime = true; // 거래 허용 시간 input int InpStartHour = 7; // 시작 시간 input int InpEndHour = 22; // 종료 시간 input bool isVolume_Percent = false; // 볼륨 비율 허용 여부 input double InpRisk = 1; // 잔고 대비 리스크 비율 (%) 2. 로컬 변수 초기화 // 로컬 매개변수 datetime last; int totalBars; int Pips2Points; // 슬리피지 3 핍으로 설정 double Pips2Double; // 손절매 15 핍 double slippage; double acSpread; string strComment = ""; CPositionInfo m_position; // 거래 포지션 객체 CTrade m_trade; // 거래 객체 CSymbolInfo m_symbol; // 심볼 정보 객체 CAccountInfo m_account; // 계좌 정보 래퍼 COrderInfo m_order; // 보류 중인 주문 객체 3. 주요 코드 Lazy Bot은 매일 이전 일일 바의 고점과 저점을 기준으로 새로운 주문을 생성합니다. 기존의 주문은 삭제되고, 두 개의 보류 주문 "BUY_STOP", "SELL_STOP"이 생성됩니다 (테이크 프로핏 없음). 3.1 신호 계산 및 주문 전송 void OpenOrder() { double TP_Buy = 0, TP_Sell = 0; double SL_Buy = 0, SL_Sell = 0; // 최대 스프레드 체크 if (InpMax_spread != 0) { if (acSpread > InpMax_spread) { Print(__FUNCTION__, " > 현재 스프레드는 사용자 스프레드보다 큽니다!"); return; } } // 이전 바의 고점 및 저점 계산 double Bar1High = m_symbol.NormalizePrice(iHigh(m_symbol.Name(), PERIOD_D1, 1)); double Bar1Low = m_symbol.NormalizePrice(iLow(m_symbol.Name(), PERIOD_D1, 1)); // 로트 수 계산 double lot1 = CalculateVolume(); double OpenPrice = m_symbol.NormalizePrice(Bar1High + InpAddPrice_pip * Pips2Double); // BUY_STOP 주문 설정 SL_Buy = m_symbol.NormalizePrice(OpenPrice - Inpuser_SL * Pips2Double); totalBars = iBars(m_symbol.Name(), PERIOD_D1); string comment = InpBotName + ";" + m_symbol.Name() + ";" + totalBars; if (CheckVolumeValue(lot1) && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice) && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY) && CheckStopLoss(OpenPrice, SL_Buy)) { if (!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL_Buy, TP_Buy, ORDER_TIME_GTC, 0, comment)) { Print(__FUNCTION__, "--> 매수 주문 오류"); } } // SELL_STOP 주문 설정 OpenPrice = m_symbol.NormalizePrice(Bar1Low - InpAddPrice_pip * Pips2Double); SL_Sell = m_symbol.NormalizePrice(OpenPrice + Inpuser_SL * Pips2Double); if (CheckVolumeValue(lot1) && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice) && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL) && CheckStopLoss(OpenPrice, SL_Sell)) { if (!m_trade.SellStop(lot1, OpenPrice, m_symbol.Name(), SL_Sell, TP_Sell, ORDER_TIME_GTC, 0, comment)) { Print(__FUNCTION__, "--> 매도 주문 오류"); } } } 3.2 새로운 날: 모든 이전 주문 삭제 void DeleteOldOrds() { string sep = ";"; // 구분자 ushort u_sep; string result[]; for (int i = OrdersTotal() - 1; i >= 0; i--) { if (m_order.SelectByIndex(i)) { u_sep = StringGetCharacter(sep, 0); string Ordcomment = m_order.Comment(); int k = StringSplit(Ordcomment, u_sep, result); if (k > 2) { string sym = m_symbol.Name(); if ((m_order.Magic() == InpMagicNumber) && (sym == result[1])) { m_trade.OrderDelete(m_order.Ticket()); } } } } } 3.3 EA의 트레일링 손절매 기능 void TrailingSL() { double SL_in_Pip = 0; for (int i = PositionsTotal() - 1; i >= 0; i--) { if (m_position.SelectByIndex(i)) { if ((m_position.Magic() == InpMagicNumber) && (m_position.Symbol() == m_symbol.Name())) { double order_stoploss1 = m_position.StopLoss(); if (m_position.PositionType() == POSITION_TYPE_BUY) { SL_in_Pip = NormalizeDouble((Bid - order_stoploss1), _Digits) / Pips2Double; if (SL_in_Pip > Inpuser_SL) { order_stoploss1 = NormalizeDouble(Bid - (Inpuser_SL * Pips2Double), _Digits); m_trade.PositionModify(m_position.Ticket(), order_stoploss1, m_position.TakeProfit()); } } else if (m_position.PositionType() == POSITION_TYPE_SELL) { SL_in_Pip = NormalizeDouble((m_position.StopLoss() - Ask), _Digits) / Pips2Double; if (SL_in_Pip > Inpuser_SL) { order_stoploss1 = NormalizeDouble(Ask + (Inpuser_SL * Pips2Double), _Digits); m_trade.PositionModify(m_position.Ticket(), order_stoploss1, m_position.TakeProfit()); } } } } } } Lazy Bot MT5를 이용하면 일일 고점과 저점을 기반으로 한 전략으로 보다 체계적인 거래를 할 수 있습니다. 이제 이 EA를 통해 더욱 효율적인 트레이딩을 경험해 보세요!

2022.12.14
평균 회귀 전략: MetaTrader 4를 위한 완벽한 EA(자동매매)
MetaTrader4
평균 회귀 전략: MetaTrader 4를 위한 완벽한 EA(자동매매)

안녕하세요, 트레이더 여러분! 오늘은 평균 회귀 전략에 대해 이야기해보겠습니다. 이 전략은 주로 일간 차트에서 주요 외환 쌍에 가장 잘 작용하는데요, 여러 번의 거래를 통해 수익을 극대화할 수 있는 방법입니다. 전략 사용 전 체크리스트 먼저 데모 계좌에서 시험해보세요. 이 EA는 오픈 캔들의 가격으로만 거래합니다! 거래 중 손실이 발생할 때 로트 크기를 증가시키고 싶지 않다면, 'IncreaseFactor=0'으로 설정하세요. 이제 여러분이 사용할 수 있는 주요 입력값들을 살펴보겠습니다: 입력값 설정 Use_TP_In_Money: 금액으로 이익 실현 사용 (값: true/false). TP_In_Money: 금액으로 이익 실현 (값: 10-100). Use_TP_In_percent: 비율로 이익 실현 사용 (값: true/false). TP_In_Percent: 비율로 이익 실현 (값: 10-100). ------------여러 거래를 위한 자금 트레일링 스탑---------------------- Enable_Trailing: 자금으로 트레일링 활성화 (값: true/false). Take Profit In Money: 현재 통화로 이익 실현 (값: 25-200). Stop Loss In Money: 현재 통화로 손실 제한 (값: 1-20). -------------------------------------------------------------------------------------- Exit: 추세가 불리할 때 거래 종료 (값: true/false). BarsToCount: 카운트할 바 수 (값: 1-20). Lots: 로트 크기 (값: 0.01-1). Lots size Exponent: 로트 크기 지수 (값: 1.01-2). IncreaseFactor: 거래 손실 시 로트를 얼마나 증가시킬지 (값: 0.001-0.1). Stop_Loss: 손실 제한 (값: 30-500). / 여러 거래 시 600으로 설정. MagicNumber: 매직 넘버 (값: 1-100000). TakeProfit: 이익 실현 (값: 50-200). / 여러 거래 시 600으로 설정. FastMA: 빠른 이동평균 (값: 1-20). SlowMA: 느린 이동평균 (값: 50-200). Mom_Sell: 모멘텀 매도 트리거 (값: 0.1-0.9). Mom_Buy: 모멘텀 매수 트리거 (값: 0.1-0.9). ---------------------손실 제한 관리----------------------------- UseEquityStop: (값: true/false). TotalEquityRisk: (값: 0.01-20). ------------------------------------------------------------------------------- Max_Trades: 최대 거래 수 (1-12). FractalNum: 고점과 저점 수 (값: 1-10). ----------------단일 거래 시 설정------------------------ ///////////////////////////////////////////////////////////////////// USETRAILINGSTOP: 트레일링 스탑 사용 여부 (값: true/false). WHENTOTRAIL: 트레일링 시점 (값: 40-100). TRAILAMOUNT: 트레일링 금액 (값: 40-100). Distance From Candle: 캔들과의 거리 (값: 1-100). USECANDELTRAIL: 캔들 트레일 사용 여부 (값: true/false). X: 캔들 수 (값: 1-100). USEMOVETOBREAKEVEN: 손익 분기점으로 이동 활성화 (값: true/false). WHENTOMOVETOBE: 손익 분기점 이동 시점 (값: 1-30). PIPSTOMOVESL: 스탑로스를 이동할 핍 수 (값: 1-30). 이 EA는 몇 달마다 최적화를 해주어야 하며, 위의 입력값을 그대로 사용해야 합니다. 또한, 헤징 그리드 EA로 사용할 수도 있고, 단일 거래 EA로도 활용할 수 있습니다. 백테스트 수행 방법은 여기를 클릭하세요!

2022.10.26
고정 패러볼릭 SAR로 설정하는 트레일링 스탑 - 메타트레이더 5 활용하기
MetaTrader5
고정 패러볼릭 SAR로 설정하는 트레일링 스탑 - 메타트레이더 5 활용하기

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 고정 패러볼릭 SAR을 활용하여 트레일링 스탑을 설정하는 방법에 대해 알아보겠습니다. 이 기능을 통해 보다 효율적인 거래 관리를 할 수 있습니다. 파라미터 설정 트레일링 모드: 없음 / 고정 트레일링 / 고정 패러볼릭 SAR 이제 패러볼릭 SAR의 계산 부분을 살펴보겠습니다. bool CSampleExpert::LongModifiedEx(void) { bool res=false; //--- 트레일링 스탑 확인 if(m_trailing_max < m_last_bar.high) { double tp=m_position.TakeProfit(); double sl=m_position.StopLoss(); //--- 패러볼릭 SAR 계산 m_trailing_max = m_last_bar.high; m_trailing_step = fmin(InpPSAR_Maximum, m_trailing_step + InpPSAR_Step); double sar_stop = sl + (m_trailing_max - sl)* m_trailing_step; sar_stop=NormalizeDouble(sar_stop,m_symbol.Digits()); //--- if((sl==0.0 || sl < sar_stop) && sar_stop < m_symbol.Bid()) { //--- 포지션 수정 if(m_trade.PositionModify(Symbol(),sar_stop,tp)) printf("%s의 롱 포지션이 수정되었습니다", Symbol()); else { printf("%s 포지션 수정 에러: '%s'", Symbol(), m_trade.ResultComment()); printf("수정된 파라미터: SL=%f, TP=%f", sar_stop, tp); } //--- 수정 후 expert에서 종료 res=true; } } //--- 결과 return(res); } 이렇게 고정 패러볼릭 SAR을 활용하여 트레일링 스탑을 설정하면, 시장의 변동성을 보다 효과적으로 관리할 수 있습니다. 트레이딩에서 중요한 것은 항상 손절매를 설정하고, 이 도구를 통해 수익을 극대화할 수 있기를 바랍니다!

2022.07.09
처음 이전 6 7 8 9 10 11 12 13 14 15 16 다음 마지막