기고글 토론 "Expert Advisor 최적화 시 커스텀 조건 만들기" - 페이지 3

 

많은 실험을 통해 저도 비슷한 결론에 도달했습니다. 이 글과 토론을 찾는 데 왜 이렇게 오래 걸렸는지 모르겠습니다.

저는 브레이크 아웃 및 추세 타기 전략이 수익성이 높은 몇 개의 거래에만 적용되는 경향이있는 문제에서 시작했습니다. 이 소수의 거래에서 너무 많은 수익이 발생하여 최적화 도구가이 소수의 거래에만 "관심"을 갖고 넓은 스톱과 원거리 테이크 이익을 사용하고 신호가이 소수의 거래를 최대한 포착하고 우유를 짜도록했습니다. 이것은 100 개의 거래가있는 20 년 샘플에서도 발생했습니다. 위험 대비 수익 비율로 최적화할 때에도 이러한 거래가 수익의 90%를 차지했기 때문에 어떤 대가를 치르더라도 이러한 거래에서 실행을 추구했습니다. 저는 브레이크아웃/트렌드 라이딩 전략의 머리를 자르지 않고 어떤 식으로든 이 동작을 제한하고 싶었습니다. 최소 거래와 최소 수익 계수 (약 1.3)가 충족되는 한 상대 dd 퍼센트 (수익에 대한 dd 비율이 아니라 dd 상대 퍼센트 만)를 최적화하면 앞으로 좋은 결과를 얻을 수 있다는 것을 알았습니다.


//............... 

sinput double mint; //최적화를 위해 최소 거래를 설정합니다. 거래 수가 적은 런에 페널티를 부과합니다. 

sinput double minpf; //최적화를 위한 최소 수익률입니다. 수익률이 낮은 실행에 페널티를 부과합니다.

//...............

double OnTester()

{ 

	 double dd=TesterStatistics(STAT_BALANCE_DDREL_PERCENT);//균형 대신 형평성도 앞으로 잘 작동했습니다.

	 double pf=TesterStatistics(STAT_PROFIT_FACTOR);

	 int    tt=TesterStatistics(STAT_TRADES); 

	 double custom=(100-dd);

	 if (mint>t) custom=custom*(tt/mint); // 최소 거래량 미충족 시 페널티 부과

	 if (minpf>minpf) custom=custom*((pf-1)/(minpf-1)) // 이 라인은 또한 패배를 마이너스로 만들고 페널티를 더 낮은 PF를 부과합니다.

	 return(custom); 

}

 

 

수익이 포함되지 않는 것은 잘못된 것 같지만 최소 수익률 기준이 있기 때문에 대부분 상당히 수익성이 높은 실행이 상단에 표시됩니다. 수익성 있는 실행에서 dd를 잘라내면 일반적으로 수익이 증가합니다. 어쨌든 수익성이 더 높은 거래를 선택하고 최종 손질을 수작업으로 신중하게 수동으로 수행하면(예: 이 훌륭한 글 https://www.mql5.com/ko/articles/156 의 마지막 부분 ) 최적화 프로그램이 많은 커브 피팅을 피하면서 초기 작업을 많이 수행하도록 할 수 있습니다. 저는 다음과 같은 코드를 사용하여 실험한 결과 다양한 결과를 얻었습니다. (실험에는 퍼센트 기반 점수 외에 추가 가중치를 넣기 시작하면 위험도 변경 및 시작 밸런스도 포함되어야 합니다.)

//.............

sinput double pfw //이익 계수 가중치 

//.............

        double custom=(100-dd)+(pf-1)*pfw;
//...........
Guide to Testing and Optimizing of Expert Advisors in MQL5
Guide to Testing and Optimizing of Expert Advisors in MQL5
  • 2010.10.12
  • Samuel
  • www.mql5.com
This article explains the step by step process of identifying and resolving code errors as well as the steps in testing and optimizing of the Expert Advisor input parameters. You will learn how to use Strategy Tester of MetaTrader 5 client terminal to find the best symbol and set of input parameters for your Expert Advisor.
 

이 글이 MT4에도 적용 가능한지 알려주실 수 있나요? 이미 MT5의 많은 속성을 채택한 것 같습니다.

일반적으로 제 작업은 MT5 테스터에서 쉽게 볼 수 있듯이 MT4 테스터에서 LR 상관 관계 LR 표준 오차 값만 가져 오는 것입니다.

테스트 실행이 끝날 때 deinit() 함수에서 이러한 값을 읽고 최적화 된 매개 변수의 값과 함께 파일에 쓰고 싶습니다.

누군가 이미 이러한 작업을 수행했으며 준비된 결과 (LR 상관 관계 및 LR 표준 오차 값을 계산하는 데 필요한 함수)를 저와 공유하여 바퀴를 재발 명 할 필요가 없습니까?

 
solandr:

이 글이 MT4에도 적용 가능한지 알려주실 수 있나요? 이미 MT5의 많은 속성을 채택한 것 같습니다.

일반적으로 제 작업은 MT5 테스터에서 쉽게 볼 수 있듯이 MT4 테스터에서 LR 상관 관계 LR 표준 오차 값만 가져 오는 것입니다.

테스트 실행이 끝날 때 deinit() 함수에서 이러한 값을 읽고 최적화 된 매개 변수의 값과 함께 파일에 쓰고 싶습니다.

누군가 이미 이러한 작업을 수행했으며 준비된 결과 (LR 상관 관계 및 LR 표준 오차 값을 계산하는 데 필요한 함수)를 저와 공유하여 바퀴를 다시 발명 할 필요가 없습니까?

과거 거래에 대한 LR 상관관계 및 LR 표준오차를 계산하는 예는 AlgLib (MQL4\Scripts\Alglib\UseAlglib.mq4)에서 확인할 수 있습니다.
 
Automated-Trading:
기록 내 거래에 대한 LR 상관관계 및 LR 표준오차 계산 예제는 AlgLib (MQL4\Scripts\Alglib\UseAlglib.mq4)에서 확인할 수 있습니다.
감사합니다! 검토해 보겠습니다.
 
solandr:
감사합니다! 조사해볼게요.

알았어요 상관관계가 계산된 것 같습니다.

제가 생각해야 할 유일한 것은이 점이 MT4 빌드 670 테스터에서 작동하지 않는다는 사실입니다:

//--- 초기 잔액 얻기
      if(order_type==6) // op_balance=6
        {
         if(NormalizeDouble(OrderProfit()+OrderSwap(),2)>=0.0)
            if(balance==0.0)
               balance=OrderProfit();
        }

테스터에는 유형 6의 주문이 없습니다.

즉, MT4 테스터에서 실행하고 다운로드 한 zip 파일에 포함 된 UseAlglib.mq4의 코드를 deinit () 함수 호출을 통해 사용할 때입니다.

잔고는 0으로 유지됩니다. 그런 다음" 잔액이 0인거래 작업 "이라는 오류가 인쇄됩니다.

MT4 테스터에서 필요한 초기 잔액 값을 코드 자체에 삽입하기 만하면 모든 것이 완벽하게 계산되었습니다.

아마도 개발자는 향후 버전의 라이브러리에서이 점을 고려할 수 있습니다.

 

다음 코드를 사용하여 켈리 기준 (전략)을 테스트했습니다:


double OnTester(void)
  {
   //https://www.investopedia.com/articles/trading/04/091504.asp
   double w=((TesterStatistics(STAT_PROFIT_TRADES)+TesterStatistics(STAT_LOSS_TRADES))>0)?TesterStatistics(STAT_PROFIT_TRADES)/(TesterStatistics(STAT_PROFIT_TRADES)+TesterStatistics(STAT_LOSS_TRADES)):0; // 당첨 확률
   double r=((TesterStatistics(STAT_GROSS_LOSS)!=0)&&(TesterStatistics(STAT_LOSS_TRADES)!=0)&&(TesterStatistics(STAT_PROFIT_TRADES)!=0))?(TesterStatistics(STAT_GROSS_PROFIT)/TesterStatistics(STAT_PROFIT_TRADES))/(-TesterStatistics(STAT_GROSS_LOSS)/TesterStatistics(STAT_LOSS_TRADES)):0; // 승/패 비율;
   double Kelly=(r!=0)?w-((1-w)/r):0; // 켈리 기준
   return(Kelly);
  }


메타트레이더 전략 테스터가 0(0) 수익 거래를 수익 거래로 계산하는지 잘 모르겠습니다. 누구 있나요?

 
Ingvar Engelbrecht:

이 우주에서 외로운 늑대인 제가 다시 돌아왔네요 :-)

계산된 직선의 기울기를 방정식에 넣으려고 직진성 사용자 정의 기준을 사용해 보았습니다. 그대로 사용하면 매우 미약한 수익에 대해 매우 높은 등급을 받을 수 있습니다. 최종 수익만 추가하면

을 추가해도 더 나아지지 않습니다. 실제 기울기를 방정식에 추가하기 위해 아래에 표시된 코드 릴케를 변경했습니다.

완벽한 해결책은 아니지만 제가 원하는 것에 더 가깝습니다. 결과를 잔액 또는 이익과 함께 사용하면 다음 코드를 사용하면 잘 작동합니다.


나는 당신이 이것을 게시 한 지 너무 오래되었다는 것을 알고 있지만 여전히 이것을 가지고 놀고 있거나 다른 누군가가 동일한 직진성 기준 구현을 찾고있는 경우를 대비하여.

여기에서 작동하는 공개 솔루션을 찾았습니다 https://community.darwinex.com/t/equity-curve-straigthness-optimization-with-metatrader/3976

Equity Curve Straigthness Optimization with Metatrader
Equity Curve Straigthness Optimization with Metatrader
  • 2018.05.16
  • KlondikeFX
  • community.darwinex.com
An underrated feature of Metatrader’s Backtester is its ability to define a custom fitness function for the genetic optimization process. Meaning that you no longer are limited to rather simple metrics like final balance or profit factor but can evaluate the quality of each test run with your own individual calculations. To give a quick...
 

관련 튜토리얼에는 다른 튜토리얼에 있는 EA 프로그래밍과 같은 정보가 너무 많아서 EA를 구매하고 최소한의 프로그래밍 능력 만있는 일반 펀터에게는 적용 할 수 없습니다.

기본적으로 유전 알고리즘에서 MT5의 유일한 유용한 기준은 "잔고 최대"이며, 여러 쌍에서 사용하기 위해 몇 번 반복하고 결과를 통해 낮은 드로 다운을 찾을 때까지 낚시해야한다는 것을 알게되었습니다.

필요한 기준 :- 드로다운이 20 미만인 최대 잔고, 드로다운이 10 미만인 최대 잔고

 
잘 읽었습니다, 외로운 늑대 😁