제 스캘퍼는 두 가지 시나리오를 거래합니다. 강세 오더 블록과 그와 대칭을 이루는 약세 오더 블록이죠. 전략 테스터는 이 두 가지 모두에 대해 동일한 수익 계수를 보여주었습니다. 저는 각 시나리오에 똑같이 적용되는 입력값을 조정하는 데 2주를 보냈습니다.
그 후 거래들을 설정 유형별로 분류해 보았습니다. USDCAD M1 차트에서 강세 쪽이 손실의 88%를 차지한 반면, 약세 쪽은 거의 손익분기점에 가까웠습니다. 제가 필요로 했던 그 수치는 처음부터 제 거래 내역 속에 이미 존재하고 있었던 것입니다. 단지 제가 그것을 읽어낼 방법이 없었을 뿐이었습니다.
이 강의는 그 데이터를 해석해 줍니다.
시작 시에 설정 유형을 한 번 등록합니다. 각 유형마다 ID가 반환됩니다. 이 ID는 매직 넘버 베이스에 추가되므로, 주문이 전송되는 순간부터 각 주문은 고유한 설정 태그를 갖게 됩니다.
그 후, 원장(ledger)은 각 설정에 대해 세 가지 질문에 답합니다. 승패 횟수는 얼마인지, 스왑 및 수수료를 차감한 순수익은 얼마인지, 그리고 승률이 아직 신뢰도를 확보했는지 여부입니다.
바로 그 마지막 질문을 해결하기 위해 이 기능을 만들었습니다. 3번의 거래에서 3번 모두 승리했다면 승률은 100%입니다. 이는 동전을 던졌을 때 44%의 확률로 앞면이 나오는 경우, 12번 시도 중 약 한 번꼴로 달성되는 수치이기도 합니다. 따라서 이 클래스는 원시 승률 옆에 윌슨 점수 하한값을 출력하고, 이를 보상 비율이 요구하는 손익분기점 승률과 비교합니다. 1:2의 경우, 그 기준선은 33.3%입니다. 설정이 비관적인 승률조차 이 기준선을 넘을 때만 신뢰할 수 있는 것으로 간주됩니다. 초기에는 모든 결과가 “아직 신뢰할 수 없음”으로 표시됩니다. 거래 횟수가 20회뿐이라면, 이것이 솔직한 답변입니다.
#include <CSetupLedger.mqh> CSetupLedger ledger; int SETUP_BULL, SETUP_BEAR; int OnInit() { ledger.Init(552001); // 당신의 마법의 거점 SETUP_BULL = ledger.Register("Bullish OB"); // id 0 -> magic 552001 SETUP_BEAR = ledger.Register("Bearish OB"); // ID 1 -> 매직 552002 ledger.RebuildFromHistory(); // 계정에서 레코드를 읽어옵니다 Print(ledger.Report(2.0)); // 2.0 = 위험 대비 수익률 return INIT_SUCCEEDED; }
주문이 발주되기 전에 해당 세팅을 거래에 적용하세요.
trade.SetExpertMagicNumber((ulong)ledger.MagicFor(SETUP_BULL));포지션이 청산되면 매도하세요.
double net = 0.0; if(ledger.ProcessClosedPosition(posId, setupId, net)) Print(ledger.Report(2.0));
Report() 는 하나의 텍스트 블록을 반환합니다 . 이 함수는 Print () 와 Comment ()의 역할을 모두 수행합니다. 다음은 USDCAD M1 차트에서 제가 실제로 실행한 예시입니다.
Per-setup ledger (breakeven win rate at 1:2.0 = 33.3%) --------------------------------------------------------------------- Bullish OB 235/529 raw 30.8% wilson 27.6% net -5819.94 not yet trusted Bearish OB 191/393 raw 32.7% wilson 29.0% net -811.42 not yet trusted

같은 보고서를 Comment ()에 전달하면 EA가 실행되는 동안 차트 모서리에 표시됩니다 . 봉에 표시된 상자는 진입 라벨입니다. 이는 거래가 체결되기 전 해당 설정의 기록을 보여줍니다. 여기 패널에는 4승 6패로 표시되어 있습니다. 순수 승률은 40%, 윌슨 하한선은 16.8%입니다. 따라서 10번의 거래 결과로 볼 때 여전히 ‘아직 신뢰할 수 없음’이라는 평가가 나오는데, 이것이 바로 이 열의 핵심입니다.
이 수치는 승패 비율을 나타냅니다. 즉, 강세 설정에서는 764회, 약세 설정에서는 584회의 거래가 이루어졌습니다. 두 순이익을 합산하면 테스터의 순손실과 센트 단위까지 정확히 일치합니다. 이 보고서를 포함한 어떤 장부도 신뢰하기 전에, 반드시 여러분의 출력 결과로 직접 이 대조 작업을 수행해 보십시오. 설정별 거래 횟수의 합계가 테스터의 총 거래 횟수와 일치하지 않는다면, 포지션이 잘못 집계된 것이며 해당 기준선을 초과하는 모든 백분율 수치는 무의미합니다.
이 내용을 수기로 작성할 때는 대개 이 부분을 틀리기 쉽습니다. 저도 이 강의가 개설되기 전에는 그중 두 가지를 틀렸습니다.
‘거래(Deal)’는 ‘트레이드(Trade)’와 다릅니다. MT5 내역은 ‘거래(Deal)’ 목록입니다. 세 단계에 걸쳐 청산된 포지션은 세 건의 ‘OUT’ 거래로 기록됩니다. 거래 목록을 순회하며 수익이 난 각 거래를 ‘승리’로 집계하면, 단 한 번의 수익성 있는 트레이드가 세 번의 승리로 기록됩니다. 장부는 DEAL_POSITION_ID 기준으로 집계하므로, 부분 청산도 여전히 한 번으로만 계산됩니다.
DEAL_PROFIT은 최종 결과가 아닙니다 . 스왑과 수수료는 별도의 필드에 기록됩니다. 스윙 EA의 경우 이 차이는 표면적인 것에 불과하지만, 스캘핑 EA의 경우 이 차이가 해당 세팅이 수익을 냈는지 여부를 결정합니다. 가격 변동으로 3 USD의 수익을 냈지만 수수료로 4 USD를 지불한 거래는 손실입니다. 장부는 수익에 스왑과 수수료를 더하여 합산합니다.
POSITION_TICKET은 POSITION_IDENTIFIER와 다릅니다 . HistorySelectByPosition() 은 식별자를 요구합니다 . 네팅 계좌에서는 두 값이 대부분 동일하므로, 헤징 계좌나 부분 청산으로 인해 값이 달라질 때까지는 이 버그가 드러나지 않습니다. 그런 경우 선택 결과가 비어 있고 아무런 정보도 제공하지 않습니다.
등록 순서는 데이터 형식입니다. 설정 ID는 이미 청산된 거래의 매직 넘버 내부에만 존재합니다. 다음 달에 목록 중간에 새로운 설정을 삽입하면, 이전에 해당 ID를 가졌던 설정의 모든 과거 거래가 아무런 오류 메시지 없이 새로운 설정의 거래로 바뀌게 됩니다. 오류가 발생하지 않습니다. 그 시점부터 숫자 값만 단순히 틀리게 됩니다.
새로운 설정은 목록의 맨 끝에 추가해야 합니다. 설정을 폐기할 경우, ID가 계속 할당된 상태로 유지되도록 Register () 호출을 그대로 두십시오. 등록 블록 위에 이 내용을 설명하는 짧은 주석을 달아두면 큰 도움이 됩니다.
이 기능은 포지션당 하나의 레코드를 유지합니다. 동일한 네팅 포지션에 두 번째 진입을 추가하는 EA의 경우, 전체 거래가 첫 번째 설정에 귀속됩니다. 만약 여러분의 EA가 그렇게 작동한다면, 대신 거래별 모델이 필요합니다.
설정 건수는 최대 16건입니다. 더 많은 건수가 필요하면 SETUP_LEDGER_MAX 값을 늘리십시오. 한 계좌에 16건의 설정이 있다는 것은 16개의 작은 표본을 의미하며, 윌슨(Wilson) 열에서 이를 확인할 수 있습니다.
순 결과가 정확히 0인 경우 손실로 간주됩니다. 무승부 거래는 드물며, 이를 승리로 취급하는 것이 오히려 더 호의적인 오류입니다.
ProcessClosedPosition()은 HistorySelectByPosition ()을 호출하므로 전역 히스토리 선택 기능을 대체합니다 . 이후 다시 선택하지 않은 상태에서 자체 히스토리 루프 도중에 이 함수를 호출하지 마십시오.
또한 이 함수는 아이디어 자체가 아니라 청산 시점을 평가합니다. 방향은 정확히 파악했지만 스탑을 잘못 설정한 세팅은 나쁜 세팅으로 평가됩니다. 내일 무엇을 거래할지 결정하는 데 있어 이는 틀림없이 올바른 답입니다. 하지만 아이디어 자체가 타당했는지를 판단하는 것과는 다릅니다.
MetaTrader 5. 표준 라이브러리 외에는 별도의 종속성이 없습니다. 파일을 MQL5/Include/ 폴더에 넣고 포함시키면 됩니다 . 빌드 6190에서 작성 및 테스트되었습니다.
마지막으로 한 가지 더 말씀드립니다. 단일 인-샘플 백테스트를 기반으로 구축된 원장은 해당 백테스트를 측정할 뿐입니다. 이는 전략의 유효성을 검증하지 않습니다. 튜닝한 적이 없는 기간에 대한 아웃-샘플 테스트는 별도의 작업이며, 이 클래스는 이를 대체하지 않습니다.
— 알리 라즈푸트
MetaQuotes Ltd에서 영어로 번역함.
원본 코드: https://www.mql5.com/en/code/77531
Session Candle Counter: candles numbered from the cash open, DST aware
프랑크푸르트, 런던, 뉴욕 또는 도쿄의 현물 시장 개장 시간을 기준으로, 당일 거래일의 각 캔들에 번호를 매깁니다. 기준 시간은 거래소 현지 시간을 브로커 서버 시간으로 변환할 때 자동 일광 절약 시간제가 적용되므로, 개장 후 첫 번째 캔들은 여름과 겨울을 불문하고 항상 1번으로 표시됩니다.
Spread Monitor
Spread Monitor is an MQL5 Expert Advisor that draws a colour-coded panel on the chart. The panel shows the current spread of the attached symbol in points, along with the average, minimum, and maximum over a rolling history. It also counts how many stored samples exceeded a warning level, and turns the status row red when the current spread is above that level. The utility does not place orders. Inputs control the warning level, the history size, the refresh interval, and the panel position. Panel objects are removed when the EA is detached.
Line Master – Fast and Slow Trend Lines with Trend Change Signals
Line Master is a trend-following indicator for MetaTrader 5 that displays fast and slow dynamic price lines to help traders identify market direction and potential trend changes. Blue represents a bullish trend, while red represents a bearish trend. Visual markers highlight changes in the indicator's trend state. The indicator includes adjustable Fast Length and Slow Length parameters, allowing traders to customize its sensitivity. It can be used on forex, gold (XAUUSD), indices, and other MT5-supported markets. For better results, combine its signals with price action, support and resistance levels, and proper risk management. Signals are not guaranteed and should be confirmed before entering a trade.
PropGuard Lite - daily and max loss guard for prop firm accounts
Risk tool for prop firm accounts: closes all positions and blocks new trades when the daily loss or max loss limit is reached. Never opens trades on a live chart.