프로젝트 열기 - DIY 테스터 최적화 도구 - 페이지 2

 
사실, 컴파일러의 반응을 미리 알지 못합니다. 표시기 본문에서 거래 상수를 건너뛸까요 말까요?
놓칠 가능성이 높습니다.

물론 그래야 합니다. 별도의 유형이 아니라 모두 정수일 뿐입니다.

작은 조언.

당연히 테스터를 위해 또는 다른 방식으로 전략을 다시 작성할 필요가 없는 것이 바람직합니다. 따라서 작성된 전략은 테스터 내부와 테스터 없이(실제 생활에서) 모두 작동합니다.

라이브러리의 도움으로 이 작업을 수행할 수 있습니다.
1. 거래와 관련된 모든 기능의 이름을 변경합니다.
2. 2개의 라이브러리를 생성합니다. 첫 번째 코드는 테스트용 코드를 포함하고(실제로 주문을 보내지 않고), 두 번째 코드는 단순히 표준 함수 호출에서 매개변수를 복제합니다. 작업/테스트 전환은 단순히 라이브러리를 교체하여 수행됩니다.

물론 이 모든 것을 하나의 라이브러리에 배치하고 전환을 위한 전역 매개변수를 입력할 수 있지만 이는 아마도 불필요할 것입니다.

그리고 IMHO가 그러한 테스터의 작성을 근본적으로 단순화하는 기능을 MT에 하나 더 도입하는 것이 좋을 것입니다. 이것은 현재 마지막 막대를 설정하는 기능입니다.

저것들. 테스트 중인 히스토리에 1000개의 막대가 있다고 가정해 보겠습니다.
우리는 200 bar를 마지막으로 정의하고 Close[0] 대신 Close[200]을 모든 곳에서 대체합니다. 그리고 이 기능은 모든 내장 기능에서 작동(영향)해야 합니다.

그러면 테스터는 이 값이 설정되고(테스트의 마지막 막대) 시작 기능이 전략에서 호출 되는 막대 번호에 의해 주기처럼 보일 것입니다.

실제로는 그렇게 간단하지 않습니다 :)
포인트가 더 필요합니다..
 
이해가 안되네요 설명 부탁드립니다.
2. 2개의 라이브러리를 생성합니다. 첫 번째 코드는 테스트용 코드를 포함하고(실제로 주문을 보내지 않고), 두 번째 코드는 단순히 표준 함수 호출에서 매개변수를 복제합니다. 작업/테스트 전환은 단순히 라이브러리를 교체하여 수행됩니다.

"테스트용 코드"라는 문구는 테스터의 코드입니까 아니면 고문의 코드입니까? 지정합니다.

그리고 이것도
저것들. 테스트 중인 히스토리에 1000개의 막대가 있다고 가정해 보겠습니다.
우리는 200 bar를 마지막으로 정의하고 Close[0] 대신 Close[200]을 모든 곳에서 대체합니다.
그리고 이 기능은 모든 내장 기능에서 작동(영향)해야 합니다.


모든 EA 코드는 표시기 코드로 쉽게 변환할 수 있습니다.
EA의 start() 블록을 가져오고변수 선언 후에 for(testerconter=Bars;testerconter>=0;testerconter--) 구성을 추가합니다.
{
괄호로 끝
}
링크를 사용하는 모든 장소는 [testerconter+link]로 대체됩니다.

다음은 내장 MACD_sample.mq4 EA의 예입니다.
원본 텍스트:
   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,1);


변경

   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,testerconter+0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,testerconter+1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,testerconter+0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,testerconter+1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,testerconter+0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,testerconter+1);


보시다시피 문제가 없습니다. 원하는 경우 나중에 언제든지 testerconter=0을 재정의할 수 있습니다.
코드는 Expert Advisor가 아닌 Expert Advisor의 본문에서 실행됩니다.

 
"테스트용 코드"라는 문구는 테스터의 코드입니까 아니면 고문의 코드입니까? 지정합니다.

첫 번째 라이브러리에서 함수
_OrderSend(Symbol(), OP_SELL, 1, Bid, 5, Bid + Stop * Point, Bid - Take * Point);


테스터에서 주문 실행 을 에뮬레이트합니다. 테스터의 주문 목록에 추가하고 서버에 주문을 보내지 않습니다.

두 번째 라이브러리에서 이 함수는 단순히 내장 함수를 호출합니다.

int _OrderSend( string symbol, int cmd, double volume, double price, int slippage, 
                double stoploss, double takeprofit, string comment=NULL, int magic=0, 
                datetime expiration=0, color arrow_color=CLR_NONE) 
{
   return (OrderSend(symbol, cmd, volume, price, slippage, stoploss, 
                        takeprofit, comment, magic, expiration, arrow_color) );
}


모든 EA 코드는 표시기 코드로 쉽게 변환할 수 있습니다.
EA의 start() 블록을 가져오고 변수 선언 후에 for(testerconter=Bars;testerconter>=0;testerconter--) 구성을 추가합니다.
{
괄호로 끝
}
링크를 사용하는 모든 장소는 [testerconter+link]로 대체됩니다.

글쎄, 나는 같은 것에 대해 이야기하고 있습니다.
MT(기본값 0)에서 testerconter 변수의 값을 설정하는 함수를 호출하는 대신 대체하는 것이 더 쉬울 것이며 이 대체([testerconter+reference])는 MT 자체에서 수행됩니다.
그렇다면 이러한 대체는 전략 자체에서 이루어질 필요가 없습니다.

for(testerconter=Bars;testerconter>=0;testerconter--)
{
   SetTestPoint(testerconter);
      далее текст эксперта без переделки,
      или лучше вызов его функции start (или _start)
}



교체하세요. "따라서 우리가 1000개의 바를 가지고 있다고 가정해 봅시다..."
그리고 다시 페이지가 남았습니다.

 
나는 그것을 인용문으로 대체했습니다. 귀하의 텍스트가 떠나는 것 같습니다. 귀하의 예에서 강제 줄 바꿈 을 만드십시오.
~에 대한
int _OrderSend(문자열 기호, ....


결론: 우리는 같은 것에 대해 이야기하고 있는 것 같습니다. 현재 마지막 막대에 대한 요청은 잠시 잊어도 됩니다.
그렇게 하려고 노력해야 합니다.
지금은 표준 거래 기능을 재정의하고 _.. 접두사를 사용할 수도 있습니다. 훨씬 더 견고합니다. :)
 
avm으로
이런 식으로 테스트할 수 있습니다. 그리고 충분한 품질. 그러나 불행히도 보편주의는 작동하지 않을 것입니다.
나는 이 테스트에 몇 주를 보냈다. 언뜻보기에 모든 것이 간단해 보입니다.


나는 당신이 "많은 피를 흘리며"테스트했다고 의심합니다. 즉,거래 기능 을 재정의하지 않았습니다. 그리고 모든 새로운 테스트
새 테스터 표시기를 작성해야 합니다. 그러나 한 번만 수행하면 충분합니다. 그러면 문제가 없습니다.
내가 틀렸다면 - 기능을 배치 - 인색하지 마십시오.
 
또 다른 순간.

분명히 Expert Advisor에서 직접 시작 기능 을 호출하는 것은 불가능합니다.
따라서 Expert Advisor의 코드 자체를 라이브러리에 작성하고 _init, _deinit 및 _start 기능을 추가하는 것이 좋습니다.

그런 다음 EA 자체에서 다음과 같이 작성합니다.
#include ".....";
   ...............

int init()
{
   return(_init());
}

int deinit()
{
   return(_deinit());
}

int start()
{
   return(_start());
}


매개변수를 처리하는 방법이 약간 불분명합니다.

 
따라서 여러 Expert Advisors/신호를 하나의 차트에 결합할 수 있습니다.
오메가에서 수행하는 방법:
#include "A1.....";
#include "A2.....";
   ...............

int init()
{
   _initA1();
   _initA2();
   return(0);
}

int deinit()
{
   _deinitA1();
   _deinitA2();
   return(0);
}

int start()
{
   _startA1();
   _startA2();
   return(0);
}


별로 예쁘지는 않지만 작동합니다.
일반적으로 자체 제작 이벤트 처리 시스템을 얻습니다. :))

 
어쩌면 더 쉬울까요? mq4 파일(어드바이저 코드 포함)에 대해 설정되는 파서 스크립트가 만들어집니다.
그는 이 코드를 처리합니다. 모든 종류의 포함, 작업 배열을 Balance , Equity 등 아래에 삽입합니다.
변수 이름을 Lots 및 _Lots(및 기타)로 바꿉니다. 일반적으로 그는 거친 일을 할 것입니다.
파일로 출력을 처리하고 전달하기만 하면 됩니다. :)
간단한 파이프라인 방법.
 
avm으로
이런 식으로 테스트할 수 있습니다. 그리고 충분한 품질. 그러나 불행히도 보편주의는 작동하지 않을 것입니다. 나는 이 테스트에 몇 주를 보냈다. 언뜻보기에는 모든 것이 간단 해 보입니다.

나는 당신이 "많은 피를 흘리며"테스트했다고 의심합니다. 즉, 거래 기능을 재정의하지 않았습니다. 그리고 각각의 새로운 테스트는 새로운 테스터 지표를 작성해야 했습니다. 그러나 한 번만 수행하면 충분합니다. 그러면 문제가 없습니다. 내가 틀렸다면 - 기능을 배치 - 인색하지 마십시오.

확실히 맞아. "큰 피". 교체가 없었습니다. 그런 테스터를 MT3.x에서 다시 만들었습니다. MQL4는 하늘과 땅이 다른 것처럼 MQL2와 다릅니다. 하지만 MQL4 기능을 활용하지 않았습니다. 심리적 혼란. 먼저 생각한 다음 작업해야 했습니다.
그 여성은 "먼저 생각하고 나서 말하십시오"라는 조언을 받았습니다. 여자는 "아직도 말하지 않은 걸 어떻게 생각하냐"고 답했다.
 
파서에 대해 조금 앞서서 먼저 함수를 작성해야 합니다. 그러나 개발자가 말한 것을 기억합니다. 다중 통화 테스터(포트폴리오)는 없을 것입니다. 아니면 내가 뭔가를 혼동하고 있습니까? 내가 혼동하지 않는다면 - 더욱 당신 자신을 쓰는 것이 필요합니다.