조언자
// MQL4&5-code #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #ifdef __MQL5__ #define Bid ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )) #define Ask ( SymbolInfoDouble ( _Symbol , SYMBOL_ASK )) #endif // __MQL5__ // Idea - https://www.mql5.com/ru/code/7464 #property strict input int Shift = 3 ; input int Limit = 18 ; input double Lots = 0.1 ; int PriceToInteger( const double Price ) { return (( int )(Price / _Point + 0.1 )); } void OnTick () { static int PrevBid = PriceToInteger( Bid ); static int PrevAsk = PriceToInteger( Ask ); const int IntBid = PriceToInteger( Bid ); const int IntAsk = PriceToInteger( Ask ); const bool TradeTime = ( TimeCurrent () % ( 24 * 60 * 60 ) < D'1970.01.01 23:50' ); // exclude swaps if (TradeTime && (IntAsk - IntBid < Limit)) { if ((IntBid - PrevBid >= Shift)) OrderSend ( _Symbol , OP_SELL , Lots, Bid , 0 , 0 , 0 ); if (PrevAsk - IntAsk >= Shift) OrderSend ( _Symbol , OP_BUY , Lots, Ask , 0 , 0 , 0 ); } PrevBid = IntBid; PrevAsk = IntAsk; for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--) if ( OrderSelect (i, SELECT_BY_POS ) && ((!TradeTime) || ( OrderProfit () > 0 ) || (( OrderType () == OP_BUY ) && (PriceToInteger( OrderOpenPrice ()) - IntBid >= Limit)) || (( OrderType () == OP_SELL ) && (IntAsk - PriceToInteger( OrderOpenPrice ()) >= Limit)))) OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 0 ); }
결과
MT4 보고서
상징 | EURUSD(유로 vs USD) | ||||
기간 | 1분 (M1) 2017.04.10 00:00 - 2017.04.14 20:58 (2017.04.10 - 2017.04.16) | ||||
모델 | 모든 틱(가용 가능한 모든 시간 프레임을 기반으로 한 가장 정확한 방법) | ||||
옵션 | 시프트=3; 제한=18; 로트=0.1; | ||||
역사의 바 | 7292 | 시뮬레이션된 진드기 | 1865515 | 시뮬레이션 품질 | 99.00% |
그래프 불일치 오류 | 0 | ||||
초기 보증금 | 100000.00 | 확산 | 변하기 쉬운 | ||
순이익 | -10863.90 | 총 이윤 | 2528.70 | 총 손실 | -13392.60 |
수익성 | 0.19 | 우승 기대 | -0.49 | ||
절대 드로다운 | 10864.70 | 최대 드로다운 | 10864.70 (10.86%) | 상대적인 하락 | 10.86% (10864.70) |
총 거래 | 21954 | 숏포지션(%원) | 12016년 (68.60%) | 롱포지션(%원) | 9938 (67.03%) |
수익성 있는 거래(전체의 %) | 14904 (67.89%) | 거래 손실(전체의 %) | 7050 (32.11%) | ||
가장 큰 | 수익성 있는 거래 | 3.00 | 무역 손실 | -4.40 | |
중간 | 수익성 있는 거래 | 0.17 | 무역 손실 | -1.90 | |
최대 금액 | 연속 우승(이익) | 155 (46.60) | 연속 손실(손실) | 115 (-210.10) | |
최대 | 연속 이익 (승수) | 46.60 (155) | 연속 손실(손실 수) | -210.10 (115) | |
평균 | 연속 이득 | 5 | 지속적인 손실 | 2 |
MT5 보고서
전략 테스터 보고서 | ||||||||||||
Alpari-MT5(빌드 1596) | ||||||||||||
설정 | ||||||||||||
조언자: | 운이 좋은 | |||||||||||
상징: | EURUSD | |||||||||||
기간: | 엠원 (2017.04.10 - 2017.04.16) | |||||||||||
옵션: | 시프트=3 | |||||||||||
제한=18 | ||||||||||||
로트=0.1 | ||||||||||||
브로커: | 알파리 인터내셔널 리미티드 | |||||||||||
통화: | USD | |||||||||||
초기 보증금: | 100 000.00 | |||||||||||
어깨: | 1:100 | |||||||||||
백테스트 | ||||||||||||
기록 품질: | 해당 없음 | |||||||||||
바: | 7192 | 티키: | 1865415 | 기호: | 하나 | |||||||
순이익: | -10 863.90 | 잔액에 의한 절대 손실: | 10 863.90 | 다음을 통한 절대적 감소: | 10 864.70 | |||||||
총 이윤: | 2 528.70 | 잔액별 최대 인출액: | 10 863.90 (10.86%) | 자기자본으로 인한 최대 손실액: | 10 864.70 (10.86%) | |||||||
총 손실: | -13 392.60 | 잔액별 상대적 하락: | 10.86% (10 863.90) | 자기 자본에 의한 상대적 하락: | 10.86% (10 864.70) | |||||||
수익성: | 0.19 | 우승 기대치: | -0.49 | 마진 수준: | 863.58% | |||||||
회복 계수: | -1.00 | 샤프 비율: | -0.50 | Z-점수: | -52.22 (99.74%) | |||||||
AHPR: | 1.0000(-0.00%) | LR 상관관계: | -1.00 | 온테스터 결과: | 0 | |||||||
GHPR: | 1.0000(-0.00%) | LR 표준 오차: | 149.82 | |||||||||
총 거래: | 21954 | 짧은 거래(% 승): | 12016년 (68.60%) | 긴 거래(% 승): | 9938 (67.03%) | |||||||
총 거래: | 43908 | 수익성 있는 거래(전체의 %): | 14904 (67.89%) | 손실 거래(전체의 %): | 7050 (32.11%) | |||||||
가장 큰 수익을 내는 거래: | 3.00 | 가장 큰 손실 거래: | -4.40 | |||||||||
평균 수익성 거래: | 0.17 | 평균 손실 거래: | -1.90 | |||||||||
최대 연속 상금 수(이익): | 155 (46.60) | 최대 연속 손실 수(손실): | 115 (-210.10) | |||||||||
최대 연속 이익(승리 횟수): | 46.60 (155) | 최대 연속 손실(손실 수): | -210.10 (115) | |||||||||
평균 연속 승리: | 5 | 평균 연속 손실: | 2 |
결과 일치!
성능
2017.05 . 08 01 : 45 : 42.765 EURUSD,M1: 1865415 tick events ( 7292 bars, 1865515 bar states) processed in 0 : 00 : 03.682 (total time 0 : 00 : 04.400 )
MT5 로그
2017.05 . 08 02 : 04 : 53.278 Core 1 EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0 : 00 : 12.309 (including ticks preprocessing 0 : 00 : 00.203 ).
MT4 테스터는 MT5 테스터보다 3배 더 빨랐습니다. MT5 속도 저하가 타사 라이브러리 사용으로 인한 것인지 의심이 가는 경우 이 Expert Advisor의 간단한 MT4 논리를 MQL5에 자신의 방식으로 다시 작성하고 가설을 테스트할 수 있습니다.
Threat MT5 테스터는 손으로 모든 Bases 폴더를 청소할 때까지 훨씬 느리게 작업했습니다. 이러한 상황을 고려하여 결과를 제시합니다.
트랜잭션 기록에 빠르게 액세스할 수 있는 새 빌드(이번 주에 출시할 예정)의 Alpari-MT5-Demo 서버에서 다음을 얻었습니다.
EURUSD,M1: 1865417 ticks, 7192 bars generated. Test passed in 0 : 00 : 05.578 .
MT5는 데이터와 작업 자체를 에이전트의 외부 프로세스로 전송하기 위한 시스템 오버헤드가 있어 작은(초) 작업과 비교할 때 큰 오류가 발생합니다.
음, MT5에서 테스터의 복잡성과 품질은 1000분의 1초 더 정확합니다. 즉, 밀리초 정확도로 많은 계측기의 동기식 모델링, 세계 변화를 스크롤하는 동안의 공정한 슬립/지연 및 많은 작은 기능입니다. 같은 장소에서 비용의 순환이 아닙니다.
수십 배의 느린 속도 - 모든 데이터의 초기 초기화/동기화 및 다운로드와 혼동하지 않습니까? 모든 것이 로그에 기록됩니다. 디스크의 파일은 어떤 경우에도 건드리지 않아야 합니다.
%userdata%\MetaQuotes 디렉터리(예: C:\Users\%username%\AppData\Roaming\MetaQuotes)를 바이러스 백신 단계에 추가하는 것이 좋습니다. 데이터가 있고 패스에 바이러스 백신을 추가하면 터미널과 테스터의 데이터에 대한 액세스 속도가 크게 향상됩니다.
그렇지 않으면 그들은 metatester[64].exe가 실행되는 것을 보고 네트워크 포트와 터미널과 테스터가 작성한 많은 대용량 데이터 파일을 열 때 그러한 활발한 테스트 활동을 전개합니다. 일부 트레이더의 경우, 바이러스 백신이 실행 중인 metatester[64].exe 파일을 확인할 시간조차 없고 터미널이 몇 초 만에 액세스할 수 없기 때문에 테스터에게도 떨어질 시간이 있습니다.
MT5 테스터의 복잡성과 품질은 1000분의 1초 정확도로 많은 계측기의 동기식 모델링, 세계 변화의 스크롤 중 공정한 슬립/지연 및 많은 작은 기능과 같이 훨씬 더 높습니다.
이것은 MT4+TDS 조합에도 있습니다. 또한 MT5에는 없는 기능이 몇 가지 더 있습니다. 하지만 물론 다중 통화는 없습니다.
약 10배 더 느림
처음에는 TDS가 특히 MT5를 느리게 한다고 생각하여 메모리를 지웠습니다. 동시에 Bases 폴더(디스크 공간이 부족함). 그 후 MT5는 단일 실행을 2배 더 빠르게 수행하기 시작했습니다(그 전에는 재부팅해도 도움이 되지 않았습니다). 아무리 생각해도 TDS 브레이크에 대한 가설을 확인할 수 없었다. 컴퓨터에 바이러스 백신이 없었습니다.
Alpari-MT5 서버 - 실제.
위협 전체 검색을 위한 MT4-optimizer 출시 - 14분. MT5(요원 한 명만 남음) - 시간이 많이 걸릴 것 같습니다. 결과는 오전/오후 게시하겠습니다.
전표는 어디에서 왔습니까?
당신은 완전히 다른 것을 의미합니다. MT5 테스터에서 Delay 필드로 플레이하면 완전히 다른 것을 알 수 있습니다. MQL5 코드의 일반적인 Sleep(2500)도 테스터에서 실행될 때 전 세계가 계속 모델링될 때 코드에 지연이 발생합니다. 실행 지연 필드 는 서버에 100ms 핑을 보낸 경우 거래가 실행되는 방식을 효과적으로 보여줍니다.
차수 브레이크가 있을 수 없습니다. 그리고 MT5가 자체적으로 잘 작동하는데 왜 MT5에 추가 사항이 있어야 합니까?
검색 정보 - 설정 및 제한이 없습니다.바이러스 백신 부족에 대해-오랫동안 7의 모든 버전에는 이미 모든 파일을 잘 검사하는 정기적이고 눈에 띄지 않는 Windows Defender가 있습니다.
때로는 SSD 드라이브에서도 파일 작업에 눈에 띄는 지연이 발생합니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
fxsaber , 2017.05.07 21:55
Alpari-MT5 거래 서버
FOREX 기호의 틱 기록에 중복 틱이 있는 이유는 무엇입니까?
테스터는 Expert Advisors를 중복으로 구동하고 그 중 절반이 있습니다. 그에 상응하는 성능 저하를 두 번 얻을 필요가 있습니까?
당신은 아직도 내가 말하는 슬립이 무엇인지 이해하지 못하고 있습니다. MT4에서는 기본적으로 작동하지 않습니다.
틱이 아니라 µl5 프로그램을 실행하는 과정에서 멈출 때 틱이 계속되고 세상이 도는 것입니다. Sleep(3000)을 작성하고 프로그램은 3초를 기다리며 틱이 틱하는 동안 시장이 시뮬레이션됩니다.
테스터에서 실행 지연 필드를 200ms로 설정하면 거래를 실행할 때 200의 네트워크 대기 시간이 시뮬레이션되어 시장 미끄러짐이나 재호 가가 발생합니다.
또한 이것은 다중 통화 시스템의 프레임워크 내에서 시장 프로세스를 모델링하는 완전히 다른 강력한 수준입니다. 그리고 더 중요한 것은 멀리 떨어진 양도할 수 있는 과정에서입니다. 예를 들어, 10,000km 떨어진 에이전트가 작업을 실행하는 동안 코드에서 누락된 기호에 대한 액세스에 대한 동적 요청을 갑자기 수신하고 마스터에게 이 데이터를 요청하고 이를 시장 세계에 통합하고 계속 실행할 수 있습니다.
당신은 아직도 내가 말하는 슬립이 무엇인지 이해하지 못하고 있습니다. MT4에서는 기본적으로 작동하지 않습니다.
틱이 아니라 µl5 프로그램을 실행하는 과정에서 멈출 때 틱이 계속되고 세상이 도는 것입니다. Sleep(3000)을 작성하고 프로그램은 3초를 기다리며 틱이 틱하는 동안 시장이 시뮬레이션됩니다.
이것은 MT4에서 지금 작동하지 않습니다.
테스터에서 실행 지연 필드를 200ms로 설정하면 거래를 실행할 때 200의 네트워크 대기 시간이 시뮬레이션되어 시장 미끄러짐이나 재호가가 발생합니다.
이제 MT4에서 작동합니다.
또한 이것은 다중 통화 시스템의 프레임워크 내에서 시장 프로세스를 모델링하는 완전히 다른 강력한 수준입니다. 그리고 더 중요한 것은 멀리 떨어진 양도할 수 있는 과정에서입니다. 예를 들어, 10,000km 떨어진 에이전트가 작업을 실행하는 동안 코드에서 누락된 기호에 대한 액세스에 대한 동적 요청을 갑자기 수신하고 마스터에게 이 데이터를 요청하고 이를 시장 세계에 통합하고 계속 실행할 수 있습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
"MetaTrader 4에서 MQL5 마법사 작업의 기성품 전문가 고문" 기사에 대한 토론
fxsaber , 2017.03.09 13:02
비교를 위해 Tick Data Suite 평가판을 사용하는 것이 좋습니다(호환: MT4 빌드 940 - 1052).
MT5 테스터에서 "by real ticks" 모드를 선택합니다. 저장하고 TDS를 통해 MT4 테스터에 공급하십시오.
T두 테스터의 견적이 100% 일치하면 트랜잭션 측면뿐만 아니라 속도 측면에서도 정확하게 비교할 수 있습니다.
그러면 Expert Advisors의 전환/생성을 양방향으로 비교할 수 있습니다.
MT4 빌드 1072, MT5 빌드 1596 Alpari-MT5 거래 서버.
MT4 테스터 설정 스크린샷
두 테스터의 통화는 USD입니다. 이것은 EURUSD의 동일한 MT5 테스터에서 변환 기호의 더 많은 눈금을 가져오지 않도록 합니다.
우리는 두 테스터 모두에서 이러한 크로스 플랫폼 Expert Advisor를 시작합니다.
MT4 테스터 로그
MT5 테스터 로그
우리는 각 테스터로부터 받은 파일이 동일한지 확인합니다. 테스터의 틱은 동일합니다.
이것으로 주제에 대한 두 테스터의 준비가 완료되었습니다.