시스템트레이딩

마지막 종료 거래 확인하기 - 메타트레이더 5를 위한 코드
MetaTrader5
마지막 종료 거래 확인하기 - 메타트레이더 5를 위한 코드

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 마지막으로 종료된 거래의 데이터를 확인하는 방법에 대해 알아보려고 합니다. 이 코드를 사용하면 반복문 없이도 간편하게 마지막 거래 정보를 가져올 수 있습니다. 코드 사용 방법 현재 날짜의 시작 시간을 설정할 변수를 생성합니다. (이건 선택 사항입니다.) 차트 출력을 위해 사용할 기타 변수를 생성합니다. (이것도 선택 사항입니다.) 이 코드를 OnTick(); 함수 안에 넣으면 매 틱마다 결과를 보여줍니다. 바당 한 번만 설정할 수도 있습니다. 바당 한 번으로 설정할 수 있습니다. // 변수 설정 string DayStart = "00:00"; // 하루 시작 시간 double LastClosed_Profit; // 마지막 종료 거래의 수익 string TradeSymbol, TradeType; // 전문가 초기화 -------------------- int OnInit()   {    return(INIT_SUCCEEDED);   } // 전문가 비활성화 ------------------- void OnDeinit(const int reason)   {   } // 전문가 OnTick -------------------------- void OnTick()   { // 마지막 종료 거래 확인.    CheckLastClosed();   } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void CheckLastClosed()   {    datetime HistoryTime = StringToTime(DayStart); // 시작일부터 현재까지의 거래 이력    if(HistorySelect(HistoryTime,TimeCurrent))      {       int Total = HistoryDealsTotal();       // 마지막 거래의 티켓 번호를 가져와서 선택합니다.       ulong Ticket = HistoryDealGetTicket(Total -1);       // 필요한 정보를 가져옵니다.       LastClosed_Profit = NormalizeDouble(HistoryDealGetDouble(Ticket,DEAL_PROFIT),2);       TradeSymbol      = HistoryOrderGetString(Ticket,ORDER_SYMBOL);       // 매도 거래 식별       if(HistoryDealGetInteger(Ticket,DEAL_TYPE) == DEAL_TYPE_BUY)         {          TradeType = "매도 거래";         }       // 매수 거래 식별       if(HistoryDealGetInteger(Ticket,DEAL_TYPE) == DEAL_TYPE_SELL)         {          TradeType = "매수 거래";         }       // 차트 출력       Comment("\n","총 거래 수 - :  ", Total,               "\n","마지막 거래 티켓 - :  ", Ticket,               "\n", "마지막 종료 수익 -:  ", LastClosed_Profit,               "\n", "마지막 거래 유형 -:  ", TradeType);      }   } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ 전체 거래 이력을 확인하고 싶다면, HistorySelect(); 함수를 아래와 같이 사용하시면 됩니다. // 전체 이력 가져오기 HistorySelect(0,TimeCurrent());

2024.04.22
메타트레이더 5를 위한 자동 매도 및 이익 실현 시스템 트레이딩
MetaTrader5
메타트레이더 5를 위한 자동 매도 및 이익 실현 시스템 트레이딩

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 사용할 수 있는 유용한 시스템 트레이딩인 Close by Button과 Profit 기능에 대해 알아보려고 합니다. 이 EA의 특징: 이 EA는 이전에 존재했던 구 EA를 수정한 버전입니다. 사용 방법: 1. 이 EA를 원하는 심볼에 추가하세요. 2. 이익 실현(TP), 손절매(SL), 트레일링, 주문 종료, 이익 또는 손실의 임계값 등의 변수 값을 설정합니다. 3. 이 EA는 특정 매직 넘버에 기반하지 않기 때문에, 모바일 기기에서 주문을 하더라도 이 EA가 자동으로 SL, TP 및 트레일링을 수정해 줍니다. 주요 수정 기능: 1. 5개의 버튼으로 구분되어 있습니다. 2. 매개변수 "CLOSE IF PROFIT-xxxx"에 따라 이익에 도달하면 모든 주문을 자동으로 종료합니다. (사용하지 않으려면 0으로 설정) 예를 들어, 100.0으로 설정하면 이익이 $100에 도달했을 때 모든 주문이 자동으로 종료됩니다. 0.0으로 설정하면 이 기능이 비활성화됩니다. 3. 매개변수 "CLOSE IF LOSS-xxxx"에 따라 손실에 도달하면 모든 주문을 자동으로 종료합니다. (사용하지 않으려면 0으로 설정) 예를 들어, -70.0으로 설정하면 손실이 -$70에 도달했을 때 모든 주문이 자동으로 종료됩니다. 0.0으로 설정하면 이 기능이 비활성화됩니다. 행복한 트레이딩 되세요! 업데이트 내역: - 매수 종료 버튼 추가 - 매도 종료 버튼 추가 - 사용하지 않는 매개변수 "Lots" 제거

2024.04.21
QuickTradeKeys123: 메타트레이더 5용 빠르고 효율적인 EA
MetaTrader5
QuickTradeKeys123: 메타트레이더 5용 빠르고 효율적인 EA

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 유용하게 사용될 수 있는 QuickTradeKeys 123 EA에 대해 소개해드릴게요. 이 EA는 빠르고 효율적인 시장 반응을 위해 설계되었답니다. 단 한 번의 키 입력으로 차트에서 직접 거래를 시작할 수 있어요. 기능 요약 QuickTradeKeys 123의 주요 기능은 다음과 같습니다: 키 '1': 미리 설정된 로트 크기로 매수 포지션을 엽니다. 키 '2': 미리 설정된 로트 크기로 매도 포지션을 엽니다. 키 '3': 지정된 매직 넘버에 따라 EA가 연 포지션을 모두 닫습니다. 이 EA는 초보자부터 전문가까지 모두 쉽게 사용할 수 있으며, 키보드를 통해 즉각적인 매매 조작이 가능하답니다. 적용 범위 QuickTradeKeys 123 EA는 모든 통화쌍과 시간대에 적합합니다. 최적의 성능을 위해서는 낮은 스프레드와 원활한 시장 접근이 권장됩니다. 설치 방법 EA를 원하는 차트에 드래그 앤 드롭한 후, 메타트레이더에서 자동 거래가 활성화되었는지 확인하세요. EA가 거래를 실행할 수 있도록 권한을 부여하고, 필요에 따라 입력 설정에서 매직 넘버를 조정하면 끝입니다. 중요 사항 이 EA는 사용자가 기본 개념과 관련된 위험을 충분히 이해하지 않는 한 실제 계좌에서는 사용하지 않는 것이 좋습니다. 먼저 데모 계좌에서 EA를 테스트하여 그 동작을 익히는 것을 권장드립니다. 이제 여러분도 QuickTradeKeys 123 EA를 활용해 보세요! 성공적인 트레이딩을 기원합니다!

2024.04.20
MetaTrader 5를 위한 카운터 코드 블록 활용하기
MetaTrader5
MetaTrader 5를 위한 카운터 코드 블록 활용하기

01. 'X' 회를 카운트한 후 코드 실행하기. Step 01 - 카운트 한계를 설정할 변수를 생성합니다. 이 변수는 코드의 입력 파라미터로 사용할 수 있습니다. Step 02 - 카운트된 횟수를 저장할 또 다른 변수를 만듭니다. Step 03 - 카운터와 설정한 카운트 한계가 같아지면, 지정한 코드 블록이 실행됩니다. Step 04 - 코드가 실행된 후에는 반드시 카운터를 초기화해야 합니다. 그렇지 않으면 무한히 카운트됩니다. 카운터 블록에 필터링 조건을 추가할 수 있습니다. 예를 들어, >> "이 조건이 참이면 한 번 카운트해라." input int count = 50; // 카운트 한계를 입력으로 설정 int Counter; // 카운터 변수 // Expert 초기화 -------------------- int OnInit() { return(INIT_SUCCEEDED); } // Expert 비활성화 ------------------- void OnDeinit(const int reason) { } // Expert OnTick -------------------------- void OnTick() { Counter ++; // 매 틱마다 카운터를 1 더함. Comment("현재 카운트 -:", Counter); if(Counter == count) // 'X' 회 카운트 후 실행 | 이 블록은 각 카운트마다 한 번만 실행됩니다. {      // 여기에 코드를 추가하세요...... Alert(count," 회 카운트됨"); Counter = 0; // 코드 블록 끝에서 카운터를 초기화합니다. 필수입니다. } } // OnTick 종료  <<---------------------- 02. 'X' 회 실행 후 'X' 회 대기하기. 이 방법은 대기하고 실행하거나, 실행하고 대기하는 용도로 사용할 수 있습니다. Step 01 - 카운트 한계와 대기 한계를 설정할 변수를 생성합니다. 이 변수들도 코드 최적화를 위해 입력 파라미터로 사용할 수 있습니다. Step 02 - 카운트 한계와 대기 한계를 저장할 변수를 만듭니다. Step 03 - 카운터와 설정한 카운트 한계가 같아지면 지정한 코드 블록이 실행됩니다. Step 04 - 대기변수와 대기 한계가 같아지면 잠시 대기합니다. Step 05 - 대기 한계에 도달했을 때, 카운터와 대기변수를 반드시 초기화해야 합니다. 그렇지 않으면 작동이 멈출 수 있습니다. 카운터 블록과 대기 블록에도 필터링 조건을 설정할 수 있습니다. 예를 들어, >> "이 조건이 참이면 잠시 대기해라." input int count = 50; // 카운트 한계를 입력으로 설정 input int wait = 50; // 대기 한계를 입력으로 설정 int Counter; // 카운터 변수 기본값은 "0" int Waiter; // 대기 변수 기본값은 "0" // Expert 초기화 -------------------- int OnInit()   {    return(INIT_SUCCEEDED);   } // Expert 비활성화 ------------------- void OnDeinit(const int reason)   {   } // Expert OnTick -------------------------- void OnTick()   {    Comment("카운트된 틱 -: ", Counter, "\n", "대기된 틱 -: ", Waiter);    if(Counter < count) // 'X' 회 실행      {       Counter++; // 카운터 업데이트       // 여기에 코드를 추가하세요.      }    else       if(Waiter < wait) // 'X' 회 대기         {          Waiter++; // 대기 변수 업데이트          // 여기에 코드를 추가하세요.         }    if(Waiter == wait) // 대기 한계 도달      {       Counter = 0; // 카운터 초기화       Waiter = 0; // 대기 변수 초기화      } }   } // OnTick 종료  <<---------------------- //+------------------------------------------------------------------+ 특별 -: 위 코드를 수정하여 "X 회 실행 후 멈추기" 기능을 만들 수 있습니다. 대기 코드 블록을 제거하면 특정 회수만큼 카운트하고, 카운터가 초기화될 때까지 작동을 멈춥니다. 전역 변수로 이러한 변수를 생성하면 코드의 어디서든 초기화할 수 있습니다.

2024.04.14
새로운 캔들 감지하는 코드 블록 (MT5용) - 더 빠르고 가벼운 방법
MetaTrader5
새로운 캔들 감지하는 코드 블록 (MT5용) - 더 빠르고 가벼운 방법

안녕하세요, 트레이더 여러분! 오늘은 새로운 캔들을 감지하는 방법에 대해 이야기해볼게요. 이전에는 시간을 기준으로 새로운 바를 감지했었는데, 이번에는 바 수를 이용해서 감지해보려고 해요. 이 방법이 시간 기반 방법보다 훨씬 가볍고 빠르답니다. 먼저, 정수형 데이터 타입으로 바 수를 저장할 변수를 선언합니다. 초기화할 때 BarsTotal_OnInt에 바 수를 할당합니다. 실시간 차트에서 바 수를 할당하기 위해 iBars(); 함수를 사용하여 BarsTotal_OnTick 변수에 바 수를 업데이트합니다. 이 변수는 매 틱마다 업데이트됩니다. 코드의 정확성을 확인하기 위해 코멘트와 알림을 사용합니다. int BarsTotal_OnInt; int BarsTotal_OnTick; //+------------------------------------------------------------------+ //| Expert initialization function                                   | //+------------------------------------------------------------------+ int OnInit()   {      BarsTotal_OnInt = iBars(NULL,PERIOD_CURRENT); // 초기화 시 총 바 수 할당    return(INIT_SUCCEEDED);   }    void OnTick() // OnTick 함수   {      BarsTotal_OnTick = iBars(NULL,PERIOD_CURRENT); // 최신 바 수 저장       if(BarsTotal_OnTick > BarsTotal_OnInt) // 새로운 바가 도착했을 때    {     BarsTotal_OnInt = BarsTotal_OnTick; // 기록 업데이트     Alert("새로운 바가 도착했습니다");     Comment("기록의 바 수 -: ", BarsTotal_OnInt, "\n", "실시간 바 수 -: ", BarsTotal_OnTick); // 여기에 코드를 추가하세요. -------------------------- // 나중에 사용할 플래그/변수를 업데이트할 수 있습니다.    }   }

2024.04.11
가상 손절매 및 이익 실현 설정으로 거래 관리하기 - 메타트레이더 4용 EA(자동매매)
MetaTrader4
가상 손절매 및 이익 실현 설정으로 거래 관리하기 - 메타트레이더 4용 EA(자동매매)

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 4에서 가상 손절매와 이익 실현을 설정하고, 트레일링 스탑 기능이 포함된 가상 대기 주문을 관리하는 스크립트인 ‘Virtual_SL_TP_Pending_with_SL_Trailing.mq4’에 대해 알아보겠습니다. 이 스크립트는 거래를 효과적으로 관리하는 데 큰 도움이 됩니다. 이제 그 기능을 자세히 살펴볼까요? 스크립트 구성 요소 저작권 및 링크: 저작권 정보와 제작자 웹사이트 링크가 포함되어 있습니다. 버전: 스크립트의 버전 정보를 나타냅니다. 설명: 스크립트에 대한 정보, 제작자의 이메일 주소, 지적 재산 관련 사항 및 소프트웨어 사용 시 주의사항이 포함되어 있습니다. 입력 매개변수: EA의 동작을 사용자 맞춤형으로 설정할 수 있는 외부 변수입니다. 여기에는 다음과 같은 항목이 포함됩니다: StopLossPoints: 초기 손절매 포인트. TakeProfitPoints: 초기 이익 실현 포인트. SpreadThreshold: 가상 손절매/이익 실현을 위한 스프레드 임계값. TrailingStopPoints: 가상 대기 주문을 위한 트레일링 스탑 포인트. EnableTrailing: 트레일링 스탑 활성화 여부 설정. 전역 변수: 스크립트 전반에서 사용되는 변수로 초기 스프레드, 가상 손절매, 가상 이익 실현 및 대기 주문 가격을 저장합니다. 초기화 함수 (OnInit): 차트에 EA가 부착될 때 초기 설정을 진행합니다. 입력 매개변수를 기반으로 초기 가상 손절매, 이익 실현 및 대기 주문 가격을 계산합니다. 틱 함수 (OnTick): 가격의 모든 틱에 대해 호출됩니다. 스프레드가 임계값을 초과했는지 확인하고 가상 손절매, 이익 실현 및 대기 주문 가격을 조정합니다. 또한 가격이 가상 손절매 또는 이익 실현에 도달하면 포지션을 종료합니다. 트레일링 스탑이 활성화된 경우 가격이 대기 주문 가격에 도달하면 트레일링 손절매가 포함된 가상 대기 주문을 발주합니다. 포지션 종료 함수 (ClosePosition): 가격이 가상 손절매 또는 이익 실현에 도달하면 포지션을 종료합니다. 대기 주문 발주 함수 (PlacePendingOrder): 트레일링 스탑이 활성화된 경우 트레일링 손절매를 포함한 가상 대기 주문을 발주합니다. 이 EA는 가상 레벨과 트레일링 스탑 기능을 사용하여 거래를 유연하게 관리할 수 있는 방법을 제공합니다. 메타트레이더 4에서 거래 관리 프로세스를 자동화해 보세요!

2024.04.10
간단하면서 지속적인 추세 추종 전략으로 매수 및 매도하기 - MetaTrader 4용 스크립트
MetaTrader4
간단하면서 지속적인 추세 추종 전략으로 매수 및 매도하기 - MetaTrader 4용 스크립트

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 4에서 사용할 수 있는 간단한 지속적인 추세 추종 전략에 대해 이야기해볼까 해요. 이 스크립트는 미리 설정된 조건에 따라서 매수와 매도를 자동으로 실행해주는 기능을 가지고 있습니다. 함께 자세히 살펴보도록 하죠!스크립트 구조초기화: 스크립트가 성공적으로 초기화되면 메시지를 출력합니다.비초기화: 스크립트가 비초기화되면 해당 메시지를 출력합니다.OnTick 함수: 이 함수는 시장에서 새로운 틱(가격 변화)이 발생할 때마다 실행됩니다.포지션 추적 변수 초기화: 스크립트는 열린 매수와 매도 포지션을 추적하는 변수를 초기화합니다.열린 주문 확인: 모든 열린 주문을 반복하여 현재 열린 매수 또는 매도 포지션이 있는지 확인합니다.매수 포지션 열기: 열린 매수 포지션이 없고 "OpenBuyPosition" 플래그가 true로 설정되어 있으면, 현재 시장의 매도 가격을 기준으로 매수 포지션을 열려고 합니다. 이때 손절매와 이익 실현 가격도 설정합니다.매도 포지션 열기: 열린 매도 포지션이 없고 "OpenSellPosition" 플래그가 true로 설정되어 있으면, 현재 시장의 매수 가격을 기준으로 매도 포지션을 열려고 합니다. 이 역시 손절매와 이익 실현 가격을 설정합니다.닫힌 주문 확인: 닫힌 주문이 있는지 확인합니다. 만약 매수 또는 매도 주문이 이익을 내며 종료되면, 해당 포지션 플래그를 초기화합니다.입력 파라미터: 스크립트는 로트 크기, 손절매, 이익 실현 가격, 매수 또는 매도 포지션을 열지 여부를 조정할 수 있는 플래그와 같은 입력 파라미터를 제공합니다.면책 조항: 스크립트에는 사용자가 자신의 책임 하에 사용해야 한다는 경고가 포함되어 있으며, 잠재적인 손실이나 손해에 대해 제작자가 책임을 지지 않는다는 내용이 있습니다.결론적으로 이 스크립트는 지속적인 추세 추종 전략을 기반으로 매수 및 매도 주문을 자동으로 실행하는 과정을 자동화하는 것을 목표로 하고 있습니다. 사용자들은 로트 크기와 거래 방향과 같은 매개변수를 자유롭게 설정할 수 있습니다. 하지만, 실제 거래 환경에서 사용하기 전에 충분한 테스트를 거치는 것이 중요하다는 점, 잊지 마세요!

2024.04.10
MT5에서 현재 시장 가격에 따른 트레일링 스탑 코드 블록 작성하기
MetaTrader5
MT5에서 현재 시장 가격에 따른 트레일링 스탑 코드 블록 작성하기

이 코드 블록은 손절매를 사용하든 사용하지 않든 작동합니다. 필요 사항 Trade.mqh 파일을 포함해야 CTrade 클래스를 사용할 수 있습니다. 이 클래스를 통해 포지션과 주문을 다룰 수 있습니다. #include <Trade\Trade.mqh> // <<------------------------------------------ 이 "Trade.mqh"를 포함하여 CTrade 클래스를 사용하세요. 트레일링 거리 조정을 위한 입력 파라미터를 설정해야 합니다. 이 설정은 필수는 아니지만 편리합니다. input double Traling_Step = 3.0; CTrade 클래스의 인스턴스를 정의해야 합니다. 이름은 원하는 대로 설정할 수 있습니다. OnInit 이벤트 핸들러 다음에 정의하는 것이 좋습니다. 현재 실행 중인 포지션이 있는지 확인하는 if 문을 생성해야 합니다. 이 문장은 매 틱마다 Check_TrailingStop(); 함수를 호출합니다. 이는 EA가 트레일링을 부드럽고 정확하게 진행하도록 하기 위해 중요합니다. 이 문장을 OnTick 이벤트 핸들러의 맨 위에 배치해야 제대로 작동합니다. //+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { //--- create timer EventSetTimer(60); //--- return(INIT_SUCCEEDED);}CTrade trade; // <<------------------------------------------ "CTrade" 클래스를 선언합니다. 원하는 이름으로 변경할 수 있습니다. 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"를 사용하여 트레일링 스탑 수정      }    }    }  }}

2024.04.05
MT5를 위한 새로운 바 탐지 코드 완벽 가이드
MetaTrader5
MT5를 위한 새로운 바 탐지 코드 완벽 가이드

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 새로운 바(캔들)를 탐지하는 간단한 코드를 소개할게요. 이 코드를 통해 거래의 효율성을 높일 수 있습니다. 이 코드의 기본 원리는 아주 간단합니다. 먼저, 이전 바의 시간을 저장해두고, 여기에 60초를 더합니다. 이렇게 하면 현재 바의 마감 시간 값을 얻을 수 있습니다. 이후 현재 시간이 현재 바의 마감 시간과 일치할 때, 새로운 바가 생성되었다고 판단하게 됩니다. 이 코드에서는 플래그(NewBarReceived)를 사용하여 이 코드 블록이 여러 번 호출되는 것을 방지합니다. 즉, 이 코드는 바(캔들)당 한 번만 실행됩니다. Comment();와 playsound("ok.wav");는 코드의 정확성을 확인하기 위한 것입니다. 필요 없으시면 제거하셔도 괜찮습니다. 현재 시간이 현재 캔들의 마감 시간을 초과하면 플래그가 false로 리셋되어 다음 바의 도착을 확인할 수 있습니다. (코드 내 주석을 확인하세요.) //+------------------------------------------------------------------+ //|                                               New Bar Detect.mq5 | //|                                                  by H A T Lakmal | //|                                                   https://t.me/Lakmal846 | //+------------------------------------------------------------------+ bool NewBarReceived = false; // 제어용 플래그. //+------------------------------------------------------------------+ //| Expert initialization function                                   | //+------------------------------------------------------------------+ int OnInit()   { //--- 타이머 생성    EventSetTimer(60); //---    return(INIT_SUCCEEDED);   } //+------------------------------------------------------------------+ //| Expert deinitialization function                                 | //+------------------------------------------------------------------+ void OnDeinit(const int reason)   { //--- 타이머 삭제    EventKillTimer();   } //+------------------------------------------------------------------+ //| Expert tick function                                             | //+------------------------------------------------------------------+ void OnTick()   {    datetime TimePreviousBar = iTime(_Symbol,PERIOD_M1,1);    datetime TimeCurrentClose = TimePreviousBar + 60; // 현재 바의 마감 시간.    datetime Time_Current = TimeCurrent();    if(Time_Current == TimeCurrentClose && NewBarReceived == false)      {       PlaySound("ok.wav");   // 코드가 제대로 작동하는지 확인.       NewBarReceived = true; // 플래그를 업데이트하여 중복 호출 방지.       // 여기에 코드를 추가하세요 ----- (무언가를 수행)      }    else       if(Time_Current > TimeCurrentClose)         {          NewBarReceived = false; // 다음 바 오픈을 위해 플래그 리셋.          // 여기에 코드를 추가하세요 ----- (무언가를 수행)         }    Comment("\n" +  "\n" +  "현재 바 시간: " + TimeToString(TimePreviousBar,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +            "\n" + "현재 마감 시간: " +TimeToString(TimeCurrentClose,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +            "\n" + "현재 시간: " + TimeToString(Time_Current,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + "\n" +"\n" + "새로운 바 수신 여부: " + NewBarReceived); // 계산 확인용   } //+------------------------------------------------------------------+ //| 타이머 함수                                                   | //+------------------------------------------------------------------+ void OnTimer()   { //---   } //+------------------------------------------------------------------+ //| 거래 함수                                                   | //+------------------------------------------------------------------+ void OnTrade()   { //---   } //+------------------------------------------------------------------+ //| 차트 이벤트 함수                                              | //+------------------------------------------------------------------+ void OnChartEvent(const int id,                   const long &lparam,                   const double &dparam,                   const string &sparam)   { //---   } //+------------------------------------------------------------------+ 이제 이 코드를 활용하여 새로운 바가 생성될 때마다 효율적으로 대응할 수 있게 되었습니다. 다른 질문이 있으시면 댓글로 남겨주세요!

2024.04.05
MetaTrader 4에서 수익 및 손실 자동 마감하기: 새로운 기능 소개
MetaTrader4
MetaTrader 4에서 수익 및 손실 자동 마감하기: 새로운 기능 소개

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 4에서 사용할 수 있는 수익 및 손실 자동 마감 EA에 대한 업데이트 소식을 전해드리려고 합니다. 이 EA는 계좌 통화로 수익과 손실을 계산하여 모든 거래를 마감해 줍니다. //+------------------------------------------------------------------------------------------------------------------------------+ //| 수익 및 손실 자동 마감 EA V2 최적화: 새로운 기능 //| //| 1. 오류 처리 추가: 거래를 마감하거나 삭제할 수 없는 상황을 처리하기 위한 오류 처리 기능이 추가되었습니다. //| 2. 코드 최적화: 반복을 줄이고 가독성을 높이기 위해 코드가 최적화되었습니다. //| 3. 효율성: 불필요한 반복문이나 계산이 제거되었습니다. //| 4. EA 비활성화 시 모든 차트 객체를 지우도록 설정되었습니다. //+------------------------------------------------------------------------------------------------------------------------------+ EA의 설정을 0으로 두면 아무런 작업도 수행하지 않습니다. Positive_Closure_in_Account_Currency는 현재 자본금보다 높아야 하며, 그렇지 않으면 거래가 즉시 실행됩니다. 예시: 자본금이 55,000$이고 Positive_Closure_in_Account_Currency를 55,500$로 설정하면 500$의 이익을 목표로 합니다. Positive_Closure_in_Account_Currency > 0 && < 55,000$ = 즉시 실행 Negative_Closure_in_Account_Currency는 현재 자본금보다 낮아야 하며, 그렇지 않으면 거래가 즉시 실행됩니다. 예시: 자본금이 55,000$이고 Negative_Closure_in_Account_Currency를 54,500$로 설정하면 500$의 손실을 목표로 합니다. Negative_Closure_in_Account_Currency > 55,000$ = 즉시 실행 스프레드의 급등은 스프레드 수치를 줄여서 피할 수 있지만, 시장은 언제나 원하는 대로 움직이기 때문에 더 큰 이익이나 손실이 발생할 수 있습니다. 또한, 설정한 스프레드가 거래되는 쌍의 평균 스프레드보다 낮으면 해당 포지션은 실행되지 않습니다. 경고: 이 소프트웨어는 본인의 책임 하에 사용하시기 바랍니다. 외환 시장은 매우 변동성이 큽니다! #property copyright       "Copyright 2024, MetaQuotes Ltd." #property link           "https://www.mql5.com" #property version         "1.01" #property description     "persinaru@gmail.com" #property description     "IP 2024 - 무료 오픈 소스" #property description     "이 EA는 모든 거래를 계좌 통화로 계산된 수익과 손실의 기준에 따라 마감합니다." #property description    "" #property description    "경고: 이 소프트웨어는 본인의 책임 하에 사용하시기 바랍니다." #property description    "이 스크립트의 제작자는 손상이나 손실에 대한 책임을 지지 않습니다." #property description    "" #property strict #property show_inputs extern string   Closures = "EA는 수익이나 손실에 도달했을 때 모든 거래와 보류 중인 주문을 마감합니다. 수익과 손실은 계좌 통화로 계산됩니다.";  extern int Positive_Closure_in_Account_Currency      = 0;  extern int Negative_Closure_in_Account_Currency      = 0;  extern int Spread = 10;

2024.03.25
MQL5를 활용한 알고리즘 트레이딩을 위한 신경망 활용법
MetaTrader5
MQL5를 활용한 알고리즘 트레이딩을 위한 신경망 활용법

MQL5를 활용한 신경망 트레이딩 안내서 책 'MQL5를 활용한 알고리즘 트레이딩을 위한 신경망'는 머신러닝과 신경망을 트레이딩에 적용하는 방법을 배우고 싶은 트레이더를 위한 필독서입니다. 이 책은 고급 인공지능 기법을 활용한 트레이딩 전략을 개발하고자 하는 알고리즘 트레이더들을 위해 만들어졌습니다. 책의 구성 이 책은 신경망과 MQL5에서의 통합에 필요한 모든 내용을 다루는 7개의 챕터로 구성되어 있습니다. 쉽게 따라 할 수 있는 설명을 통해 머신러닝의 기본 개념을 배우고, 합성곱 신경망(convolutional networks), 순환 신경망(recurrent networks) 등 다양한 신경망 유형과 더 복잡한 아키텍처 솔루션 및 주의 메커니즘(attention mechanisms)을 발견하게 됩니다. 실용적인 예제와 통합 방법 책에서는 MQL5 환경 내에서 이러한 솔루션을 트레이딩 로봇에 통합하는 데 도움이 되는 다양한 실용적인 예제를 제공합니다. 또한, 모델 수렴을 개선하기 위한 방법인 배치 정규화(Batch Normalization)와 드롭아웃(Dropout) 기법도 다룹니다. 신경망 훈련 및 전략 통합 저자는 신경망을 훈련시키고 이를 트레이딩 전략에 통합하는 방법에 대한 실질적인 가이드를 제공하여, 트레이더들이 훈련된 모델의 성능을 새로운 데이터에서 테스트하고 실제 금융 시장에서의 잠재력을 평가할 수 있도록 돕습니다. 지금 시작하세요! 책 'MQL5를 활용한 알고리즘 트레이딩을 위한 신경망'은 단순한 책이 아닙니다. 고급 의사결정 기법을 트레이딩 알고리즘에 통합하여 금융 성과를 개선하는 데 도움을 줄 수 있는 유용한 가이드입니다. 지금 바로 머신러닝의 고급 기능을 배우기 시작하고, 당신의 트레이딩을 한 단계 끌어올려 보세요!

2024.02.29
초보자를 위한 매뉴얼 트레이딩 EA - 메타트레이더 4에서의 활용법
MetaTrader4
초보자를 위한 매뉴얼 트레이딩 EA - 메타트레이더 4에서의 활용법

안녕하세요, 트레이더 여러분! 오늘은 초보자를 위해 설계된 매뉴얼 트레이딩 EA인 [Buy_Sell_Close]에 대해 소개해드리겠습니다. 이 EA는 백테스팅 비주얼 모드와 실시간 트레이딩 모두에서 활용할 수 있습니다. 자신만의 트레이딩 시스템을 백테스팅으로 연습해보세요! [Buy_Sell_Close] EA를 수동으로 조작하면서, 백테스트의 속도를 조정하거나 일시정지하여 실제 트레이딩 연습을 수월하게 할 수 있습니다. 기능 소개: [Lots] 버튼: 입력 박스에서 롯 수를 수정할 수 있습니다. [BUY] 버튼: 이 버튼을 누르면 롯 수 만큼의 매수 주문이 추가됩니다. [SELL] 버튼: 이 버튼을 누르면 지정한 롯 수 만큼의 매도 주문이 추가됩니다. [SL Modify TP] 버튼: 이 버튼을 눌러 현재 가격에 대한 손절매(SL) 및 이익 실현(TP) 거리를 수정할 수 있습니다. [Close All Buy] 버튼: 이 버튼을 누르면 모든 매수 주문이 종료됩니다. [Close All Sell] 버튼: 이 버튼을 누르면 모든 매도 주문이 종료됩니다. [Close All Orders] 버튼: 이 버튼을 누르면 모든 주문이 종료됩니다. 화면 오른쪽에는 현재 열려 있는 주문과 이익 등의 정보가 표시됩니다. 파라미터 설명: MM: 자동으로 위험 비율을 사용하여 기본 롯 수를 계산합니다. Risk: 잔고가 10,000일 경우 0.2 핸드로 설정됩니다. Lots: MM이 FALSE일 경우 고정 롯 수를 사용합니다. SL: 기본 손절매는 250 마이크로 포인트입니다. TP: 기본 이익 실현은 500 마이크로 포인트입니다. 기타 UI 관련 파라미터도 설정할 수 있습니다. 여러분의 트레이딩 시스템을 연습하는 데 도움이 되길 바랍니다. 감사합니다!

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