시스템트레이딩

트렌드에서의 고점과 저점 - MetaTrader 4를 위한 자동매매 시스템
MetaTrader4
트렌드에서의 고점과 저점 - MetaTrader 4를 위한 자동매매 시스템

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 4에서 활용할 수 있는 자동매매 시스템에 대해 이야기해보려고 해요. 이 EA는 하락 추세에서 새로운 저점이 형성되고 과매도 RSI가 발생할 때 매수하는 전략을 가지고 있습니다. 또한, 이 시스템은 추세 범위와 품질을 설정할 수 있는 입력값들을 제공하죠. 매도는 새로운 고점에서 이루어지며, 매수와 동일한 방식으로 진행됩니다. 과거 캔들 수, 추세 조건을 위한 회고 기간 설정. 과거 핍 수, 최소 핍 회고 범위. 추세 품질은 1에서 10까지, 1은 느슨한 추세, 10은 품질 높은 추세를 의미합니다. 스톱은 핍으로 설정되며, 목표는 스톱의 일정 비율로 설정됩니다. 100은 1:1의 리스크-보상 비율을 의미하고, 200은 1:2 등의 비율을 의미합니다. 로트 수는 0.01로 설정되어 있으며, 변동 가능합니다. RSI 기간은 14로 설정되어 있으며, 과매도 및 과매수 레벨은 각각 40과 60으로 설정 가능합니다. 사전 설정된 파라미터는 수익성이 보장되지 않으며, 최적화를 위한 다양한 입력값이 있습니다. 입력값 17의 takeprofitinpips는 5핍으로 설정된 값을 무시하세요. 이 자동매매 시스템이 여러분의 거래에 도움이 되길 바라며, 궁금한 점이 있으면 언제든지 댓글로 남겨주세요!

2021.08.30
브레이크 이븐 이후 추가 거래하기 - MetaTrader 4를 위한 EA 활용법
MetaTrader4
브레이크 이븐 이후 추가 거래하기 - MetaTrader 4를 위한 EA 활용법

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 4에서 사용할 수 있는 매력적인 EA에 대해 이야기해볼게요. 이 EA의 가장 큰 장점은 주문 수를 세는 기능입니다. int OrdersCounter()   {    int counter=0; //---    for(int i=OrdersTotal()-1; i>=0; i--)       if(OrderSelect(i,SELECT_BY_POS))          if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) // 이 EA로 개설된 주문인지 확인            { //--- 브레이크 이븐이 발생했는지 확인    /* 매수의 경우, 손절매가 개설 가격 이상인 경우만 해당. 대기 주문이 있을 경우에는 적합하지 않습니다. 매수와 매도에만 적합합니다.*/             double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();             if(!XBreakeven) // 브레이크 이븐이나 트레일링 스톱이 발생하지 않았을 경우               {                counter++; // 포지션 수 세기               }            }    return counter;   } 여기서 우리는 브레이크 이븐이나 트레일링 스톱이 발생하지 않은 주문만을 세고 있습니다. 즉, 개설 가격을 보호하지 않은 모든 주문을 세고 있다는 것이죠. double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();             if(!XBreakeven) // 브레이크 이븐이나 트레일링 스톱이 발생하지 않았을 경우 이렇게 세어놓은 값을 통해 최대 포지션 수를 제한할 수 있습니다. 저의 경우, 한 번에 하나의 주문만 설정해 두었습니다.    if(OrdersCounter()<MaximumOrders) 브레이크 이븐이 발생하면 이 함수는 해당 주문을 세지 않게 됩니다. 예를 들어, 하나의 포지션만 있을 때, 카운팅 결과는 0이 되므로 새로운 매도 주문을 열 수 있게 되는 것이죠. 이 기능이 없었다면 브레이크 이븐을 설정하는 것도 힘들었을 것입니다. void BreakEvenFunction()   { //---    for(int i=OrdersTotal()-1; i>=0; i--)       if(OrderSelect(i,SELECT_BY_POS))          if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())            { // 매수의 경우, 입찰가가 개설 가격 + 브레이크 이븐 핍스보다 높을 때             double xHybrid = OrderType()==OP_BUY ? (Bid>OrderOpenPrice()+BreakevenPips*_Point && OrderStopLoss()<OrderOpenPrice()) : (Ask<OrderOpenPrice()-BreakevenPips*_Point && OrderStopLoss()>OrderOpenPrice());             /* 매수의 경우, 손절매가 개설 가격 이상일 때만 해당. 매도는 반대입니다. */             if(xHybrid)               {                bool modfy = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);               }            }   } 이제 여러분도 이 기능을 시도해 보세요!

2021.07.13
이동 평균 돌파 전략: 메타트레이더 4에서의 활용법
MetaTrader4
이동 평균 돌파 전략: 메타트레이더 4에서의 활용법

안녕하세요, 트레이더 여러분! 오늘은 이동 평균을 활용한 돌파 전략에 대해 알아보겠습니다. 이 전략은 메타트레이더 4에서 쉽게 적용할 수 있으니, 함께 살펴보죠. 전략 개요 이 전략은 두 개의 이동 평균을 기반으로 하며, 돌파 신호를 통해 매수 또는 매도 기회를 포착합니다. 자, 이제 입력값들을 자세히 살펴보겠습니다. 입력 값 설명 inp1: 20일 지수 이동 평균(EMA)이 30일 EMA보다 높아야 합니다. inp2: 30일 EMA가 50일 EMA보다 높아야 합니다. inp3: 돌파 바의 시작 가격이 30일 EMA 위에 있어야 합니다. inp4: 돌파 설정 - '조용한 바' 카운트는 돌파보다 높은 바의 수를 의미합니다. 조용한 바 범위: 최소 범위는 핍(pips) 단위로 설정합니다. inpulse 강도: 기본값은 1.1로, 이는 돌파가 조용한 바 범위의 고점보다 최소 10% 이상이어야 함을 의미합니다. 최적화 단계 값: 0.1로 설정하고 1에서 5까지 시작합니다. inp5: 전체 바의 % 값으로 위크 길이를 설정합니다. 최적화 범위는 0-100입니다. inp6: 돌파 바의 저점은 20일 EMA보다 같거나 낮아야 하며, 손절매 목표를 핍 단위로 설정합니다. 이 전략을 통해 보다 효과적으로 매수 및 매도 신호를 잡을 수 있습니다. 다음 이미지를 참고해 보세요! 마무리하자면, 이 이동 평균 돌파 전략은 메타트레이더 4에서 유용하게 활용할 수 있는 기술입니다. 여러분의 트레이딩에 도움이 되길 바랍니다!

2021.07.03
MetaTrader 4를 위한 Validate Me 프레임워크로 트레이딩 로봇 제작하기
MetaTrader4
MetaTrader 4를 위한 Validate Me 프레임워크로 트레이딩 로봇 제작하기

Validate Me 프레임워크 안녕하세요, 트레이더 여러분! 오늘은 시장의 매수 및 매도 주문을 활용하여 시장 검증에 대응하는 로봇을 코딩하는 방법에 대해 이야기해보려고 해요. 이 프레임워크는 트레이딩 로봇이 시장에 출시되기 전에 반드시 통과해야 할 몇 가지 체크 사항을 다룹니다. 이 내용은 교육적인 목적으로 작성되었습니다. 매수 주문 코드 예시 ask=MarketInfo(_Symbol,MODE_ASK);          bid=MarketInfo(_Symbol,MODE_BID);          sl=(OrderStopPips==0)?0.0:bid-ExtOrderStop;          if(sl!=0.0 && ExtOrderStop<StopLevel)             sl=bid-StopLevel;          tp=(OrderTakePips==0)?0.0:ask+ExtOrderTake;          if(tp!=0.0 && ExtOrderTake<StopLevel)             tp=ask+StopLevel;          GetLot=CheckVolumeValue(Lots);          if(!CheckStopLoss_Takeprofit(OP_BUY,ExtOrderStop,ExtOrderTake))             return;          if(CheckMoneyForTrade(GetLot,OP_BUY))             order=OrderSend(_Symbol,OP_BUY,GetLot,ask,10,sl,tp,"FrameWork",678,0,Blue); 프레임워크 입력값

2021.06.22
듀얼 스탑로스: 숨겨진 스탑로스와 일반 스탑로스를 함께 활용하기
MetaTrader4
듀얼 스탑로스: 숨겨진 스탑로스와 일반 스탑로스를 함께 활용하기

안녕하세요, 트레이더 여러분! 오늘은 포지션을 열 때 가장 중요한 돈 관리에 대해 이야기해볼까요? 트레이딩에서 리스크를 관리하고 자본을 조절하는 데에는 여러 방법이 있지만, 그 중 하나가 바로 특정 마진 손실을 설정하는 것입니다. 많은 트레이더는 포지션에 스탑로스나 이익 실현 가격을 설정하고, 이를 포지션 수정 창에 입력하면, 브로커 서버가 해당 가격에 도달하는 즉시 포지션을 닫아줄 것이라고 생각합니다. 하지만, 사실 이는 정확히 그렇지 않답니다. 브로커의 계좌 유형에 따라 다르기 때문인데요, ECN 계좌의 경우, 브로커에게 스탑로스나 이익 실현 가격을 제시하면, 가격이 해당 한계에 도달했을 때 브로커는 가능한 첫 가격에서 포지션을 종료합니다. 이를 잘 이해하지 못하면, 거래 내역을 다시 한 번 살펴보시길 권장합니다. 거기서 보면, 설정한 가격과 다른 가격에서 일부 주문이 종료되어 예상보다 더 많은 손실이나 이익이 발생한 것을 확인할 수 있을 것입니다. 이 현상은 바로 슬리피지 때문입니다. 또한, 일부 트레이더는 손실 한계를 정확하게 설정할 필요가 없다고 생각하기도 합니다. 이러한 트레이더들을 위해 숨겨진 스탑로스가 탄생했습니다. 이 로봇은 바로 이러한 목적을 위해 설계된 것입니다. 이제 숨겨진 스탑로스와 일반 스탑로스를 함께 사용할 수 있게 되었습니다! 기존처럼 일반 스탑로스를 손쉽게 설정할 수 있습니다. 로봇을 사용하든 수동으로 거래하든 상관없이요. 이 로봇을 새로운 차트에 실행하면, 모든 포지션을 관리할 수 있습니다. 입력 값은 숨겨진 스탑로스와 일반 스탑로스 간의 거리를 결정합니다. 이 값은 포인트 단위로 설정되므로, 주의가 필요합니다.

2021.04.23
스캘퍼 보조기구 v1.0 - 메타트레이더 4을 위한 최고의 도구
MetaTrader4
스캘퍼 보조기구 v1.0 - 메타트레이더 4을 위한 최고의 도구

스캘핑은 전세계 트레이더들 사이에서 가장 인기 있는 거래 전략 중 하나로, 대부분의 트레이더가 최소 한 번은 시도해본 경험이 있습니다. 스캘퍼는 하루에 10번 이상의 거래를 하기 때문에, 각 거래에 대해 손절매(Stop Loss)와 익절(Take Profit)을 설정하는 것이 다소 지루할 수 있습니다. 여러 금융 상품에서 거래하고 손익 분기점(Break Even)을 목표로 한다면, 모든 주문을 관리하는 것은 더욱 복잡해지고 실수할 가능성도 높아집니다. 특히 낮은 시간대(타임프레임)에서 여러 통화쌍을 거래할 경우, 잠깐 자리를 비운 사이에 급격한 가격 변동이 발생할 수 있어 손익 분기점 기회를 놓칠 수 있습니다. 이렇게 빠른 가격 회귀가 발생할 경우, 수익성 있는 거래가 손실로 바뀔 수 있다는 불안감이 항상 따라다닐 것입니다. 이 전문가 도구를 사용하면 손절매와 익절의 금액을 쉽게 설정할 수 있습니다. 거래를 시작하자마자 이 도구는 자동으로 초기 값을 설정하며, 가격이 원하는 방향으로 충분히 이동할 경우 거래는 리스크가 없는 상태가 되거나 손익 분기점으로 조정됩니다. 모든 입력 값은 포인트(POINT) 기준으로 설정됩니다. extern double WhenToMoveToBE /// 가격이 주문 진입점에서 얼마나 떨어져 있어야 EA가 손익 분기점으로 조정할지를 결정합니다. extern double BEAmount /// 손절매의 진입점까지의 거리를 설정합니다.

2021.04.23
목표 손익에 따라 주문 종료하기 - MetaTrader 4의 유용한 도구
MetaTrader4
목표 손익에 따라 주문 종료하기 - MetaTrader 4의 유용한 도구

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 4에서 사용할 수 있는 유용한 EA(Expert Advisor)에 대해 이야기해보려고 합니다. 이 EA는 목표 수익과 손실을 설정하여 자동으로 주문을 종료해주는 도구입니다. 필요한 입력값 이 EA를 사용하기 위해서는 다음과 같은 세 가지 입력값이 필요합니다: 목표 수익 손실 컷 매직 넘버 코드 초기화 EA가 실행되면 먼저 OnInit() 함수가 호출됩니다. 이 함수에서는 입력값과 변수를 초기화합니다. int OnInit() {    //---    if(inTargetProfitMoney <= 0)      {       Alert("잘못된 입력입니다");       return(INIT_PARAMETERS_INCORRECT);      }    inCutLossMoney = MathAbs(inCutLossMoney) * -1; //---    return(INIT_SUCCEEDED); } 주문 처리 가격 변동이 발생할 때마다 OnTick() 함수가 호출되어 현재의 총 수익 또는 손실을 계산합니다. void OnTick() { //---    double tFloating = 0.0;    int tOrder = OrdersTotal();    for(int i=tOrder-1; i>=0; i--)      {        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))          {          if(OrderMagicNumber() == inMagicNumber)            {             tFloating += OrderProfit()+OrderCommission() + OrderSwap();            }        }    }    if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0))      {        fCloseAllOrders();      } } 모든 주문 종료하기 이제 fCloseAllOrders() 함수를 통해 모든 주문을 종료합니다. void fCloseAllOrders() {    double priceClose = 0.0;    int tOrders = OrdersTotal();    for(int i=tOrders-1; i>=0; i--)      {        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))          {          if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL))            {              priceClose = (OrderType()==OP_BUY)?MarketInfo(OrderSymbol(), MODE_BID):MarketInfo(OrderSymbol(), MODE_ASK);              if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold))                {                  Print("경고: 주문 종료 실패");              }            }        }    } } 더 자세한 정보와 MQL4 코드 교육을 원하신다면, 저희 텔레그램에 가입해 주세요! t.me/codeMQL 즐거운 트레이딩 되세요!

2021.03.31
메타트레이더 4에서 트레일링 스탑과 매직넘버 활용하기
MetaTrader4
메타트레이더 4에서 트레일링 스탑과 매직넘버 활용하기

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 4에서 트레일링 스탑을 설정하는 방법에 대해 이야기해 보려고 합니다. 트레일링 스탑은 우리의 거래를 지원해 주며, 손실을 줄이고 이미 확보한 이익을 보호하는 데 큰 도움을 줍니다. 트레일링 스탑 설정하기 먼저, 트레일링 스탑의 입력 매개변수를 설정하는 코드부터 살펴보겠습니다. input    bool     isTrailingStop = true;  // 트레일링 스탑 활성화 input    int      trailingStart  = 15;    // 트레일링 시작 (핍) input    int      trailingStep   = 5;     // 트레일링 스탭 (핍) input    int      MagicNumber = 0;        // 매직 넘버 전역 변수 선언하기 // 전역 변수 double   myPoint    = 0.0; EA 초기화 함수 이제 EA를 실행하면 OnInit() 함수가 처음으로 실행되고, 이 함수에서 입력 변수를 검증하고 초기화합니다. int OnInit()   {       if (isTrailingStop && trailingStart <= 0){       Alert ("매개변수가 잘못되었습니다");       return(INIT_PARAMETERS_INCORRECT);    }       myPoint     = GetPipPoint(Symbol());       return(INIT_SUCCEEDED);   } 가격 변동 시 OnTick() 함수 실행 가격이 움직일 때마다 OnTick() 함수가 실행되어 setTrailingStop() 함수를 호출합니다. void OnTick()   { //---    setTrailingStop(MagicNumber);      } setTrailingStop() 함수 구현하기 void setTrailingStop(int magicNumber=0){    if (isTrailingStop==false) return;       int      tOrder = 0;    string   pair = "";    double   sl = 0.0, tp = 0.0;       pair = Symbol();       tOrder = OrdersTotal();    for (int i=tOrder-1; i>=0; i--){       bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);       if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){          if (OrderType() == OP_BUY){             if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice()                   && (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() )                 )             {                sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits());                if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){                   Print ("#", OrderTicket(), " 손실 업데이트 실패");                }             }          }                   if (OrderType() == OP_SELL){             if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice()                   && ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0)                )             {                sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() );                if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){                   Print ("#", OrderTicket(), " 손실 업데이트 실패");                }             }       } // 매직넘버 끝    }// for 종료 } GetPipPoint() 함수 핍 포인트를 가져오는 함수도 필요합니다. // GetPipPoint 함수 double GetPipPoint(string pair) {    double point= 0.0;    int digits = (int) MarketInfo(pair, MODE_DIGITS);    if(digits == 2 || digits== 3) point= 0.01;    else if(digits== 4 || digits== 5) point= 0.0001;    return(point); } 질문이 있으신가요? 궁금한 점이 있으시면 댓글로 남겨주세요! 또한, 저희 그룹 공유에 참여하실 수도 있습니다. t.me/codeMQL SignalForex 앱 다운로드 저희는 SignalForex 앱도 제공하고 있습니다. 이 앱을 다운로드하여 사용하시면 더 수익성 있는 거래에 도움이 됩니다! SignalForex 앱 다운로드하기

2021.03.30
처음 이전 1 2 3 4 5 6 7 8 9 10 11 다음 마지막