English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
신경망 저렴하고 쾌활합니다 - NeuroPro와 MetaTrader 5의 연결

신경망 저렴하고 쾌활합니다 - NeuroPro와 MetaTrader 5의 연결

MetaTrader 5통합 | 12 10월 2021, 13:36
115 0
ds2
ds2

NeuroPro에 대하여

NeuroPro 프로그램은 1998년에 러시아 연구소 중 한 곳에서 작성되었으며 오늘날에도 여전히 유효합니다.

Windows XP, Vista 및 Windows 7에서 효율적으로 실행됩니다. 테스트하지 않았기 때문에 이후 버전의 Windows에서 어떻게 작동하는지 알 수 없습니다.

NeuroPro에 대하여

그림. 1. NeuroPro에 대하여

버전 0.25는 무료이며 인터넷의 많은 웹사이트에서 찾을 수 있습니다. NeuroPro는 시그모이드 활성화 함수를 사용하여 다층 신경망을 생성할 수 있습니다. 이제 막 신경망을 배우기 시작했다면 이 단계에서 더 많은 기능이 필요하지 않습니다. NeuroPro의 인터페이스는 러시아어로 되어 있으며 다른 언어로 번역되지 않았다는 것을 명심해야 합니다.

신경망은 한 데이터 어레이에서 교육된 다음 다른 데이터 어레이에서 테스트할 수 있습니다. 이 기능은 선택된 네트워크 구조가 과적합되기 쉬운지, 그리고 실제 계정과 같은 과거 데이터 외부에서 지속적으로 거래할 수 있는지를 신속하게 이해할 수 있도록 하기 때문에 거래자에게 필수적인 기능입니다.

더 깊이 파고드는 것을 좋아하는 사람들은 신경망의 가중치뿐만 아니라 어떤 네트워크 입력이 네트워크 운영의 결과에 가장 영향을 미치는지 볼 수 있는 기회를 가집니다. 초보자는 이 과정이 필요하지 않으며 프로그램의 이 부분을 건너뛸 수 있습니다. 이 정보는 신경망에 의해 식별된 패턴이 무엇인지 추측하고 검색을 계속할 수 있는 곳을 볼 수 있도록 해주기 때문에 성배를 찾는 숙련된 거래자들에게 유용합니다.

이 외에도 NeuroPro에는 네트워크 구조의 최소화 기기와 같은 다양한 설정과 유용한 유틸리티 외에는 어려운 기능이 없습니다. 이러한 메뉴 섹션은 필수적으로 사용할 수 없기 때문에 초보자는 문제를 복잡하게 하거나 기본 설정만 사용할 필요가 없습니다.

트레이더의 관점에서 NeuroPro의 단점은 MetaTrader 5와의 통합 부재입니다. 실제로 이 기사는 주로 MetaTrader 5의 시장 및 지표 데이터를 NeuroPro로 로드한 다음 수신된 신경망을 MQL5의 Expert로 변환하는 데 사용됩니다.

주제를 발전시켜 보면, NeuroPro로 만들 신경망은 모든 뉴런 가중치로 MQL5 스크립트로 변환될 것이라고 말할 수 있습니다 (다른 신경망 프로그램에서와 같은 DLL 포함 시스템과 달리). 이를 통해 빠른 작업 및 컴퓨터 리소스 사용을 최소화할 수 있습니다. 이것이 NeuroPro를 사용하는 확실한 장점입니다. 이 기능은 모든 거래 전략을 수립하는 데 사용할 수 있으며, 전문가가 거의 즉시 결정을 내려야 하는 요구 사항에 따라 거래 전략을 확장할 수도 있습니다.


거래 전략

이 기사에서는 스케일링 전문가의 생성, 교육 및 테스트 프로세스가 많은 특성을 가지고 있으며 이 기사를 넘어서기 때문에 스케일링을 고려하지 않을 것입니다.

교육을 위해 우리는 H1 기간과 인기 통화 쌍 EURUSD를 위한 간단한 전문가(EA)를 만들 것입니다. 전문가에게 마지막 날의 시장 동향과 같은 지난 24개 바를 분석하고, 다음 시간 동안의 가격 변동 방향을 예측한 후, 그 정보를 바탕으로 거래를 하도록 하십시오.


MetaTrader에서 NeuroPro로 데이터를 로드하는 방법

지원되는 데이터 형식

NeuroPro는 DBMS 형식(Table DBMS Paradox)과 DBF(Table DBMS FoxPro 및 dBase)로만 데이터를 읽습니다. DBF는 세계에서 가장 흔한 형식이며, 경험 많은 프로그래머라면 여러 번 접했을 것입니다. 우리도 이 형식을 사용할 거예요.

NeuroPro의 데이터 전송 알고리즘은 다음과 같습니다:

  1. MetaTrader 스크립트를 작성하고 필요한 데이터를 쉼표로 나눈 CSV 형식의 텍스트 파일에 로드합니다;
  2. 특수 프로그램을 사용하여 CSV를 DBF로 변환합니다;
  3. NeuroPro에서 DBF를 엽니다.

MetaTrader에서 데이터 로드하기

로드 데이터 스크립트를 작성할 때 몇 가지 뉘앙스를 고려해야 합니다.

  • DBF의 데이터 필드 이름은 11개 기호보다 길 수 없으며, 일부 변환기는 10개로 축소됩니다. 그렇기 때문에 필드 이름은 10개 이하의 기호여야 합니다:
  • 막대 입력의 수가 많은 신경 네트워크에서 필드 이름은 대개 "BarN" 유형입니다. 여기서 N은 막대의 순차적 숫자입니다. 이 경우 24개의 필드가 있으므로 이름은 "Bar1"에서 "Bar24"까지 다양합니다. 필수는 아니지만 "Bar___N__"와 같은 필드의 이름을 쓰는 것이 좋습니다(처음에는 밑줄 세 개, 그 다음에는 두 개). 더 아래로 내려가서 Expert를 작성할 때 그 이유를 알게 될 것입니다.

아래는 당사의 테스트 전략을 위한 준비된 스크립트입니다(이 문서에도 첨부되어 있습니다):

#property script_show_inputs
//+------------------------------------------------------------------+
input string    Export_FileName  = "NeuroPro\\data.csv"; // File for export (in the "MQL5/Files" folder)
input int       Export_Bars_Skip = 0;                    // Number of historical bars to skip before export
input int       Export_Bars      = 5000;                 // Number of lines for export
//+------------------------------------------------------------------+
const int inputlen=24;    // Number of past bars analyzed by the trading strategy
//+------------------------------------------------------------------+
void OnStart()
  {
   //--- create a file
   int file=FileOpen(Export_FileName,FILE_WRITE|FILE_CSV|FILE_ANSI,',');

   if(file!=INVALID_HANDLE)
     {
      //--- write the data header
      string row="date";
      for(int i=0; i<=inputlen; i++)
        {
         if(StringLen(row)) row+=",";
         //========================================================
         // Note! 
         // In the Expert substitute underscores for [].
         // A field name in the DBase format is no longer than 11 symbols. Calc reduces it down to 10.
         // Maximum number of fields in the DBase format is 128-512, depending on the version.
         //========================================================
         StringConcatenate(row,row,"Bar___",i,"__");
        }
      FileWrite(file,row);

      //--- copy required data from history
      MqlRates rates[],rate;
      int count=Export_Bars+inputlen;
      if(CopyRates(Symbol(),Period(),1+Export_Bars_Skip,count,rates)<count)
        {
         Print("Error! Insufficient historical data for exporting required data.");
         return;
        }
      ArraySetAsSeries(rates,true);

      //--- write down the data      
      for(int bar=0; bar<Export_Bars; bar++)
        {
         row="";
         //--- closing price of the 1st bar will be the zero level for normalization of others
         double zlevel=rates[bar+1].close; 
         for(int i=0; i<=inputlen; i++)
           {
            if(StringLen(row)) row+=",";
            rate=rates[bar+i];
            if(i==0) row+=TimeToString(rate.time,TIME_DATE || TIME_MINUTES)+",";
            row+=DoubleToString(rate.close-zlevel,Digits());
           }
         FileWrite(file,row);
        }
      FileClose(file);
      Print("Data export successfully completed.");
     }
   else Print("Error! Failed to create a file for data export. ",GetLastError());
  }

-->

이제 터미널에서 시작하겠습니다. 성공적으로 완료되면 Expert 저널에 해당 메시지를 입력합니다.

스크립트에서 만든 데이터 파일에는 대략 다음과 같은 내용이 포함되어 있습니다.

첫 번째 문자열에는 테이블 필드 이름이 있습니다. 그런 다음 필드 값을 쉼표로 나눈 문자열을 따릅니다.

date,Bar___0__,Bar___1__,Bar___2__,Bar___3__,Bar___4__,Bar___5__,Bar___6__,Bar___7__,Bar___8__,Bar___9__,Bar___10__,Bar___11__,Bar___12__,Bar___13__,Bar___14__,Bar___15__,Bar___16__,Bar___17__,Bar___18__,Bar___19__,Bar___20__,Bar___21__,Bar___22__,Bar___23__,Bar___24__
2014.09.25,-0.0008,0.0000,-0.0005,-0.0014,0.0007,0.0035,0.0035,0.0036,0.0047,0.0052,0.0050,0.0046,0.0046,0.0047,0.0049,0.0052,0.0049,0.0053,0.0055,0.0056,0.0067,0.0056,0.0097,0.0105,0.0113
2014.09.25,0.0005,0.0000,-0.0009,0.0012,0.0040,0.0040,0.0041,0.0052,0.0057,0.0055,0.0051,0.0051,0.0052,0.0054,0.0057,0.0054,0.0058,0.0060,0.0061,0.0072,0.0061,0.0102,0.0110,0.0118,0.0123
2014.09.25,0.0009,0.0000,0.0021,0.0049,0.0049,0.0050,0.0061,0.0066,0.0064,0.0060,0.0060,0.0061,0.0063,0.0066,0.0063,0.0067,0.0069,0.0070,0.0081,0.0070,0.0111,0.0119,0.0127,0.0132,0.0130
2014.09.25,-0.0021,0.0000,0.0028,0.0028,0.0029,0.0040,0.0045,0.0043,0.0039,0.0039,0.0040,0.0042,0.0045,0.0042,0.0046,0.0048,0.0049,0.0060,0.0049,0.0090,0.0098,0.0106,0.0111,0.0109,0.0122

CSV에서 DBF로 변환

여러 가지 방법이 있습니다.

  • Microsoft Excel 2007 이전 버전입니다. CSV 파일을 열고 DBF 형식으로 데이터를 저장할 수도 있습니다. 매우 오래된 버전의 Excel에는 65535개의 문자열만 사용할 수 있습니다. 따라서, 이 용량은 H1 기간의 10년 역사에 맞기 때문에 일반적으로 거래에 충분합니다.
  • Microsoft Excel 2007 이상 버전입니다. DBF에 저장할 수 없습니다. 엑셀을 강화시키는 추가 기능은 인터넷에서 찾을 수 있습니다;
  • Microsoft Access(데이터 베이스 작업을 위한 Microsoft Office 패키지 프로그램). 테이블은 텍스트 파일(CSV)에서 가져온 다음 DBF 파일로 내보내 데이터 베이스에 만들 수 있습니다;
  • 지정된 유틸리티 컨버터 CSV-DBF. 그것들은 많이 있고, 비록 대부분이 유료이긴 하지만, 다양한 제조사들이 인터넷에서 발견될 수 있습니다;
  • free OpenOffice 패키지의 Calc Calc는 Excel과 거의 유사합니다. CSV 파일을 열고 DBF에 저장할 수 있습니다.

위의 모든 방법은 직관적이며 사용하기 쉬워야 합니다.

나열된 방법 중 하나로 변환을 수행하겠습니다. 마지막 것은 NeuroPro가 무료 프로그램이고 무료 Calc 뒤에 있는 아이디어가 가장 가깝기 때문에 사용할 것입니다. 공식 웹 사이트에서 OpenOffice를 다운로드 할 수 있습니다 - http://www.openoffice.org/.

변환 프로세스

  1. Start Calc. CSV 확장자를 사용하여 데이터 파일을 엽니다.
  2. Calc가 데이터 인식 마법사를 시작합니다.
  3. 마법사 매개 변수에 필드를 쉼표로 구분하도록 지정합니다.

여기서 또 다른 중요한 점은 숫자의 정수 부분과 분수 부분의 구분자입니다. 내 컴퓨터의 구성("시작" > "제어판" > "언어 및 지역 표준"")에 따라 점이 구분 기호로 사용됩니다. 우리의 CSV 파일에서도 점을 사용합니다. 계산에서 숫자를 올바르게 읽으려면 구분자도 지정해야 합니다. 변환 마법사의 설정에서 필요한 언어를 선택하여 수행할 수 있습니다. 점이 표준 구분 기호이므로 영어의 변형 중 하나를 선택합니다.

마법사의 올바른 설정이 스크린샷에 표시됩니다:

 

그림. 2. CSV 파일에서 가져오기 마법사 설정


팁: CSV 파일 변환 시 언어 선택을 건너뛰려면 계산 설정: 메뉴 "도구" > "옵션"에서 기본 언어로 설정한 다음 스크린샷에서 녹색으로 강조 표시된 대로 언어를 설정할 수 있습니다.



그림. 3. Calc에서 Locale 설정


4) 따라서 CSV 파일이 업로드되고 데이터가 자동으로 열에 저장됩니다:



그림. 4. 성공적으로 열린 CSV 파일


5) DBF 형식으로 데이터를 올바르게 작성하려면 해당 유형과 정밀도를 지정해야 합니다.

이를 위해 번호가 있는 모든 열을 강조 표시하고 스크린샷에서 녹색으로 강조 표시된 대로 속성을 할당합니다:


 

그림. 5. 숫자가 있는 열 설정하기


6) DBF: 메뉴 "파일" > "다른 이름으로 저장"에 저장합니다. 대화창에서 파일 형식 "dBase(*.dbf)"를 선택합니다.


그림. 6. DBF 형식으로 파일을 저장하는 대화상자


그런 다음 "저장"을 누릅니다.

7) Calc에서선택한 형식을 확인하라는 메시지를 표시합니다:



그림. 7. Calc는 DBF 대신 표준 ODF 형식으로 파일을 저장할 것을 권장합니다.


"현재 형식 유지" 버튼을 눌러 선택 사항을 확인합니다.

8) Calc는 DBF 파일의 텍스트 데이터에 사용할 코드를 묻습니다. 이 예에는 이러한 데이터가 없고 텍스트 데이터는 신경 네트워크에서 사용할 수 없으므로 다음을 지정할 수 있습니다:


그림. 8. 파일의 텍스트 코딩을 선택하기


이제 우리는 신경망에 필요한 MetaTrader로부터 수신된 데이터를 포함하는 DBF 확장자를 가진 파일을 가지고 있습니다.


NeuroPro에서 신경망을 만들고 훈련시키는 방법

1) NeuroPro 시작합니다.

2) 작업 프로젝트를 만듭니다. 메뉴 "파일" > "만들기":

그림. 9. 빈 프로젝트가 생성되었습니다. 


3) 프로젝트 창에서 "데이터 파일 열기" 버튼을 누르고 나타나는 대화 상자에서 DBF 파일을 엽니다:


그림. 10. DBF 파일이 미래 신경망에 사용하기 위해 열렸습니다.


4) 프로젝트 창에서 "새 네트워크"를 클릭합니다: 열려 있는 창에는 두 개의 탭이 있습니다. 먼저 "입력 및 출력" 탭을 채우겠습니다.

"Bar__0__" 필드에 네트워크의 출력 뉴런을 지정합니다. 나머지 필드 "Bar___N__"는 입력으로 지정됩니다:


그림. 11. 신경망의 입력과 출력의 구성 


출력 뉴런에 필요한 정확도를 지정할 수도 있습니다. Forex에서는 1포인트 즉, 우리의 경우 0.0001입니다.

5) 이제 "네트워크 구조" 탭으로 넘어가겠습니다. 여기서 중간 계층(입력 및 출력 계층 제외)의 수와 각 계층의 뉴런 수를 지정할 수 있습니다. 이 학습 예제에서는 각각 20개의 뉴런을 포함하는 3개의 층을 만들 것입니다.


그림. 12. 신경 네트워크 계층의 구성


6) "만들기" 버튼을 누르면 네트워크를 사용할 수 있습니다:

그림. 13. 새로 만들어지고 설정된 신경망이 프로젝트에 나타났습니다.


7) "Neural Network" 메뉴 > "Testing"으로 이동하여 새로운 네트워크 및 훈련되지 않은 네트워크가 가격 예측에 어떻게 대처하고 있는지 확인하십시오.

테스트 결과에서 알 수 있듯이, 이 훈련되지 않은 신경망은 5% 미만의 경우에서 지정된 정확도(오차가 1점을 초과하지 않음)로 가격을 예측했습니다. 평균적으로 가격 예측 오차는 약 10점 정도였습니다:

그림. 14. 훈련되지 않은 신경망의 예측 정확도에 대한 통계입니다.


8) 이제 우리는 우리의 데이터를 바탕으로 네트워크를 훈련시켜야 합니다.

다시 프로젝트 창으로 이동하여 메뉴에서 "Neural Network" > "Training"을 누릅니다. 학습 진행률 표시기가 나타납니다. 프로세스가 끝날 때까지 기다립니다:

그림. 15. 신경망의 학습 과정에 대한 지표

9) 프로젝트 창으로 돌아가서 "Neural network" > "Testing"으로 이동합니다.

네트워크는 크게 개선되었습니다. 가격 예측은 16% 사례에서 정확했으며 평균 예측 오차는 4점입니다.

그림. 16. 훈련된 네트워크의 예측 정확도에 대한 통계

네트워크가 몇 가지 배운 것이 있습니다. 우리는 그것을 MetaTrader에 양도할 것입니다.

신경망을 NeuroPro에서 MetaTrader 5로 전송하는 방법

NeuroPro는 MetaTrader 5에 대해 아무것도 모르고 신경망을 직접 통과할 수 없습니다. 저는 신경망을 MQL5 코드 조각으로 변환하는 반자동 방법을 알아냈습니다.

다른 많은 신경 네트워크 프로그램과 달리, NeuroPro는 텍스트로 사용되는 신경 네트워크의 구조를 보여줄 수 있습니다. 입력 모멘트에서 네트워크를 이탈할 때까지의 모든 데이터 변환을 순차적으로 설명하는 공식 집합입니다. 공식에는 모든 계층, 모든 뉴런, 이미 대체된(훈련된) 연결 가중치 값과의 모든 연결이 포함됩니다.

이를 보려면 "신경 네트워크" > "언어화" 메뉴로 이동하십시오. 이 경우 공식은 다음과 같습니다:

그림. 17. 훈련된 신경망의 작업을 결정하는 공식

실제로, 이러한 공식들의 집합은 추상 프로그래밍 언어로 작성된 프로그램의 소스 코드로 간주될 수 있습니다. 구문이 MQL5와 일치하도록 이 코드를 수정하기만 하면 됩니다. 이러한 변경은 모든 텍스트 편집기에서 수행할 수 있습니다. 이 프로세스를 부분적으로 자동화하려면 구문을 대량 교체할 수 있는 편집기를 사용하는 것이 좋습니다. 이 작업은 Word, 무료 버전 Writer(OpenOffice 패키지), Excel, 계산 및 Windows의 메모장에서 수행할 수 있습니다.

이러한 공식을 직접 MQL5 코드로 변경할 수 있지만, 이 프로세스를 최적화한 경험을 공유하여 더 빨리 수행할 수 있도록 하겠습니다.

저의 예시에서는 Windows 7(윈도우 7)에서 메모장을 사용할 것입니다.

1) 우리는 NeuroPro에 훈련된 신경망을 가진 공개 프로젝트를 가지고 있습니다. "신경 네트워크" > "언어화"로 이동합니다. 여기서 공식이 있는 창이 열립니다(위의 스크린샷 참조).

2) 이 창의 내용을 메뉴 "파일" > "다른 이름으로 저장"에 저장합니다.

3) 이제 메모장에서 이 파일을 엽니다.

4) 문구 교체 기능 "편집" > "바꾸기" 메뉴를 호출합니다.

수행할 대체 작업 목록:

 무엇을 바꿀까요?대체합니다.
Comment
___[
triple underscore
__
]
double underscore
--
- -
MQL(C와 유사한 다른 언어)의 이중 마이너스도 이중 의미를 가질 수 있기 때문에 두 개의 마이너스(공식에서의 음수 공여)를 공백으로 나눕니다. 이는 컴파일 오류로 이어질 수 있습니다.
 시그모이드(Sigmoid)시그모이드(Sigmoid)
함수 이름을 라틴어로 변환합니다(참고로 프로그램은 러시아어입니다). (MetaEditor도 Kyrill을 지원하므로 할 필요가 없습니다.)
 신드롬(Syndrom)Syndrome
변수 이름을 라틴어로 변환합니다(MetaEditor도 키릴 문자를 지원하므로 의미가 없습니다).

그림. 18. 삼중 밑줄을 대괄호로 바꿉니다.

교체를 수행하려면 "모두 바꾸기" 단추를 사용합니다.

대괄호 대신 밑줄을 빠르게 대체할 수 있도록 가격 필드를 "BAR___N__"라고 불렀습니다. 즉, 모든 네트워크 입력을 배열로 표시합니다.

여러 개별 변수보다 배열을 선언하고 일련 가격 데이터로 채우는 것이 더 쉽습니다.


5) 앞에서 언급한 것처럼 어레이를 선언하려면 모든 입력 및 출력의 열거를 변경해야 합니다:

Before
After

데이터 기본 필드(초기 징후)는 다음과 같습니다:

       BAR[1]

       BAR[2]

       BAR[3]

       BAR[4]

       BAR[5]

       BAR[6]

       BAR[7]

       BAR[8]

       BAR[9]

       BAR[10]

       BAR[11]

       BAR[12]

       BAR[13]

       BAR[14]

       BAR[15]

       BAR[16]

       BAR[17]

       BAR[18]

       BAR[19]

       BAR[20]

       BAR[21]

       BAR[22]

       BAR[23]

       BAR[24]

 

데이터 베이스 필드(최종 신드롬):

       BAR[0]

double BAR [25];
-->


6) 뉴런 활성화 함수는 MQL5 프로그램 함수처럼 보여야 합니다:

Before
After

Sigmoid1(A)=A/(0.1+|A|)

Sigmoid2(A)=A/(0.1+|A|)

Sigmoid3(A)=A/(0.1+|A|)

double Sigmoid1 (double A)
{
  return A/(0.1 + MathAbs(A));
}

double Sigmoid2 (double A)
{
  return A/(0.1 + MathAbs(A));
}

double Sigmoid3 (double A)
{
  return A/(0.1 + MathAbs(A));
}
-->

7) MQL5 규칙에 따르면 모든 공식의 끝에 세미콜론을 삽입하고 주석을 올바르게 작성(또는 삭제)하고 모든 초기화된 변수에 유형 선언을 추가해야 합니다.

우리의 경우, 이 유형은 중간 층에 있는 뉴런 이름에 대해서만 선언된 것이 아니다. 우리는 "double"이라는 단어를 60번 수동으로 입력하는 대신 대량 텍스트 대체를 다시 사용할 것입니다. 우리는 뉴런 이름을 가진 문자열의 시작을 강조할 필요가 있습니다 (뉴런 이름은 공식의 오른쪽 부분에도 사용되며 "더블"이라는 단어를 삽입할 필요가 없기 때문에 문자열의 시작 부분의 여백도 강조해야 합니다:

그림. 19. 바꿀 텍스트를 강조 표시

강조 표시된 텍스트를 복사한 후 텍스트 바꾸기 대화 상자에 삽입하여 동일한 텍스트로 대체하고 "더블"이라는 단어를 추가합니다.

그림. 20. 유형 이름을 변수에 추가합니다.


"모두 바꾸기" 버튼을 누르는 것을 잊지 마십시오.


8) NeuroPro에 작은 버그가 있습니다. 신경망에 상수 값을 입력하면 텍스트 형식으로 이 입력의 정규화 공식에 0으로 나누기가 포함됩니다. 우리의 경우 "BAR___1__"은 그러한 입력입니다. 막대 정규화의 기준점이기 때문에 항상 0을 가집니다.

값이 일정한 입력은 예측에 영향을 미치지 않으므로 이상적으로 "BAR___1__"을 신경망에 입력해서는 안 됩니다. 그러나 이 값이 입력되었다면 NeuroPro에서 생성된 공식을 조정해야 합니다. 컴파일러로부터의 오류 메시지를 방지하려면 "BAR__1__"을 여기에 영구적으로 입력되는 값으로 대체해야 합니다. 이 경우 0입니다:

Before
After
BAR[1]=(BAR[1]-0)/0;
-->
BAR[1]=0;
-->


9) 또 다른 사소한 버그가 있습니다. (NeuroPro의 개발자는 신경망의 텍스트 설명이 프로그램 코드로 사용될 것이라고 생각하지 않았기 때문에 주의 깊게 확인하지 않았습니다.)

맨 마지막 공식에는 닫는 괄호가 하나 더 있습니다. 이 버그는 매우 작지만 MetaEditor 컴파일러를 혼란스럽게 합니다. 해당 문자열의 추가 괄호를 가리키지는 않지만 프로그램의 다른 부분에서는 중괄호를 사용하지 않습니다. 당신이 우연히 그것을 고칠 수 있도록 명심해 두세요.

Before
After
BAR[0]=((BAR[0]*0.0180000001564622)+0.000599999912083149)/2);
-->
BAR[0]=((BAR[0]*0.0180000001564622)+0.000599999912083149)/2;
-->

이 절에서 설명하는 작업은 정기적으로 연습하는 경우 몇 분밖에 걸리지 않습니다. 일일이 목록을 기억할 필요는 없습니다. 다음 컴파일에서 MetaEditor는 코드의 수정되지 않은 부분을 오류로 지적합니다.

마지막으로, 모든 공식을 MQL5 형식으로 변환한 후 결과 코드를 메모장에서 MetaEditor로 전송하고 Expert에 필요한 나머지 코드를 추가하면 됩니다. 확실히, 만약 여러분이 NeuroPro에서 만들어진 신경망을 정기적으로 사용한다면, 이 단계는 쉬울 것입니다. 기존 Expert의 이전 신경망을 메모장에서 새로운 신경망의 MQL5 코드로 바꾸기만 하면 됩니다. 말 그대로 1분 정도 걸릴 겁니다.

MetaTrader 5에서 작업할 준비가 완료된 Expert의 최종 코드(애플리케이션에서 이 기사로 이 코드를 다운로드할 수도 있습니다):

input double    Lots = 0.1;        // Deal volume
input double    MinPrognosis = 0;  // Open deals with a forecast more promising than the current one
//+------------------------------------------------------------------+
const int inputlen=24; // Number of past bars analyzed by the trading strategy
//+------------------------------------------------------------------+
double Sigmoid1(double A)
  {
   return A/(0.1 + MathAbs(A));
  }
//+------------------------------------------------------------------+
double Sigmoid2(double A)
  {
   return A/(0.1 + MathAbs(A));
  }
//+------------------------------------------------------------------+
double Sigmoid3(double A)
  {
   return A/(0.1 + MathAbs(A));
  }
//+------------------------------------------------------------------+
double CalcNeuroNet()
  {
//--- get current quotes for neural network
   MqlRates rates[],rate;
   CopyRates(Symbol(),Period(),0,inputlen+1,rates);
   ArraySetAsSeries(rates,true);

//--- neural network inputs
   double BAR[512]; // 512 - maximum permissible number of fields in the DBF format

//--- fill the array of the neural network input data
//--- closing price of the 1st bar will be the zero level for normalization of others
   double zlevel=rates[1].close; 

   for(int bar=0; bar<=inputlen; bar++)
     {
      rate=rates[bar];
      BAR[bar]=rate.close-zlevel;
     }

//==============================================
// Calculate the neural network with NeuroPro formulas
//==============================================

//--- preprocessing of the data base input fields for training the network:
   BAR[1]=0;//(BAR[1]-0)/0;
   BAR[2]=(BAR[2]- -0.0003)/0.009;
   BAR[3]=(BAR[3]-4.999992E-5)/0.01045;
   BAR[4]=(BAR[4]-0.0011)/0.011;
   BAR[5]=(BAR[5]-0.00285)/0.01335;
   BAR[6]=(BAR[6]-0.004050001)/0.01625;
   BAR[7]=(BAR[7]-0.00495)/0.01695;
   BAR[8]=(BAR[8]-0.0049)/0.0172;
   BAR[9]=(BAR[9]-0.0046)/0.0171;
   BAR[10]=(BAR[10]-0.00395)/0.01755;
   BAR[11]=(BAR[11]-0.0037)/0.0184;
   BAR[12]=(BAR[12]-0.0034)/0.0188;
   BAR[13]=(BAR[13]-0.0029)/0.0194;
   BAR[14]=(BAR[14]-0.002499999)/0.0196;
   BAR[15]=(BAR[15]-0.00245)/0.01935;
   BAR[16]=(BAR[16]-0.00275)/0.01925;
   BAR[17]=(BAR[17]-0.0028)/0.0194;
   BAR[18]=(BAR[18]-0.002950001)/0.01965;
   BAR[19]=(BAR[19]-0.002649999)/0.01965;
   BAR[20]=(BAR[20]-0.002699999)/0.0197;
   BAR[21]=(BAR[21]-0.00275)/0.01945;
   BAR[22]=(BAR[22]-0.00225)/0.01955;
   BAR[23]=(BAR[23]-0.0019)/0.0195;
   BAR[24]=(BAR[24]-0.00225)/0.01935;

//--- syndromes of the 1st level:
   double Syndrome1_1=Sigmoid1( 0.07165167*BAR[1]-0.08914512*BAR[2]+0.160242*BAR[3]-0.1136391*BAR[4]+0.01358515*BAR[5]+0.3755009*BAR[6]-0.1433693*BAR[7]+0.224411*BAR[8]+0.03298632*BAR[9]-0.2551045*BAR[10]-0.1418581*BAR[11]+0.007130164*BAR[12]-0.08727393*BAR[13]-0.2567087*BAR[14]+0.1118081*BAR[15]+0.73848*BAR[16]+0.05880548*BAR[17]-0.1544689*BAR[18]+0.192913*BAR[19]-0.1743894*BAR[20]-0.2184512*BAR[21]-0.2290305*BAR[22]+0.3946579*BAR[23]-0.02947071*BAR[24]-0.08091708 );
   double Syndrome1_2=Sigmoid1( -0.08248464*BAR[1]+0.3076621*BAR[2]-0.0500868*BAR[3]-0.6526818*BAR[4]+0.04266862*BAR[5]+0.581119*BAR[6]-0.0356447*BAR[7]+0.0292943*BAR[8]-0.3660156*BAR[9]-0.3244759*BAR[10]+0.05519342*BAR[11]+0.2419113*BAR[12]-0.2178954*BAR[13]+0.4037299*BAR[14]-0.1593139*BAR[15]+0.3567515*BAR[16]+0.08094382*BAR[17]-0.01788837*BAR[18]-0.379636*BAR[19]+0.6658992*BAR[20]-0.1899142*BAR[21]+0.02259956*BAR[22]+0.767949*BAR[23]-0.5380562*BAR[24]-0.06307755 );
   double Syndrome1_3=Sigmoid1( -0.08426282*BAR[1]-0.172721*BAR[2]+0.1749717*BAR[3]-0.07916483*BAR[4]-0.0523758*BAR[5]+0.1935233*BAR[6]+0.01627235*BAR[7]+0.1254414*BAR[8]-0.1101555*BAR[9]-0.02285305*BAR[10]-0.14389*BAR[11]+0.1788775*BAR[12]-0.007144043*BAR[13]+0.1925385*BAR[14]-0.08001231*BAR[15]-0.2021703*BAR[16]+0.08694438*BAR[17]+0.3090158*BAR[18]-0.3330302*BAR[19]+0.2519112*BAR[20]-0.2170611*BAR[21]-0.2216277*BAR[22]+0.09618518*BAR[23]+0.049888*BAR[24]-0.06465426 );
   double Syndrome1_4=Sigmoid1( 0.02806905*BAR[1]+0.07787746*BAR[2]+0.1972721*BAR[3]-0.247464*BAR[4]-0.008635854*BAR[5]-0.1975036*BAR[6]-0.0652089*BAR[7]-0.1276176*BAR[8]-0.3386112*BAR[9]-0.103951*BAR[10]+0.08352495*BAR[11]-0.1821419*BAR[12]-0.05604611*BAR[13]-0.05922695*BAR[14]-0.1670811*BAR[15]+0.002476109*BAR[16]-0.03657883*BAR[17]-0.09295338*BAR[18]+0.2500353*BAR[19]-0.03980102*BAR[20]+0.1059941*BAR[21]-0.4037244*BAR[22]-0.08735184*BAR[23]+0.1546644*BAR[24]+0.1966186 );
   double Syndrome1_5=Sigmoid1( 0.03832016*BAR[1]-0.09065858*BAR[2]+0.2356484*BAR[3]-0.2436682*BAR[4]+0.09812659*BAR[5]+0.09220826*BAR[6]+0.434221*BAR[7]-0.005478878*BAR[8]-0.1657191*BAR[9]-0.2605299*BAR[10]+0.3523667*BAR[11]+0.3595579*BAR[12]+0.3402678*BAR[13]-0.3346431*BAR[14]+0.1215327*BAR[15]-0.1869196*BAR[16]+0.07256371*BAR[17]-0.09229603*BAR[18]-0.09961994*BAR[19]+0.2491707*BAR[20]+0.3703756*BAR[21]+0.1369175*BAR[22]+0.0560869*BAR[23]-0.007567503*BAR[24]-0.01722363 );
   double Syndrome1_6=Sigmoid1( -0.06897662*BAR[1]-0.4182717*BAR[2]+0.200378*BAR[3]-0.4152234*BAR[4]-0.2081593*BAR[5]+0.3120443*BAR[6]-0.1582431*BAR[7]+0.1900958*BAR[8]+0.002503331*BAR[9]+0.02297609*BAR[10]+0.03145982*BAR[11]+0.1816629*BAR[12]+0.1854629*BAR[13]-0.1660063*BAR[14]+0.3112128*BAR[15]-0.4799304*BAR[16]-0.100519*BAR[17]-0.1523588*BAR[18]+0.07141552*BAR[19]+0.2336634*BAR[20]+0.01279082*BAR[21]-0.2179644*BAR[22]+0.4898897*BAR[23]-0.1818153*BAR[24]-0.1783737 );
   double Syndrome1_7=Sigmoid1( -0.003986856*BAR[1]-0.3409385*BAR[2]-0.3122248*BAR[3]+0.5656545*BAR[4]+0.07564658*BAR[5]+0.07956024*BAR[6]+0.1820322*BAR[7]-0.05595554*BAR[8]+0.1027963*BAR[9]+0.2596273*BAR[10]+0.1156801*BAR[11]+0.04490443*BAR[12]+0.1426405*BAR[13]+0.06763341*BAR[14]-0.03249188*BAR[15]-0.1912978*BAR[16]-0.2003477*BAR[17]-0.2413947*BAR[18]+0.3188735*BAR[19]-0.2899658*BAR[20]+0.06846272*BAR[21]+0.08726751*BAR[22]-0.2134383*BAR[23]-0.436768*BAR[24]+0.08075105 );
   double Syndrome1_8=Sigmoid1( 0.05597013*BAR[1]+0.3358757*BAR[2]+0.1041476*BAR[3]-0.334706*BAR[4]-0.07069201*BAR[5]+0.06152828*BAR[6]+0.1577689*BAR[7]+0.1737777*BAR[8]-0.7711719*BAR[9]-0.2970988*BAR[10]+0.06691784*BAR[11]+0.0528774*BAR[12]+0.06260363*BAR[13]+0.2449201*BAR[14]-0.3098814*BAR[15]+0.06859511*BAR[16]+0.1355444*BAR[17]-0.15844*BAR[18]+0.2791151*BAR[19]-0.412524*BAR[20]+0.228981*BAR[21]-0.4042732*BAR[22]+0.197847*BAR[23]+0.477078*BAR[24]-0.2478239 );
   double Syndrome1_9=Sigmoid1( 0.02181781*BAR[1]-0.1042198*BAR[2]-0.02412975*BAR[3]+0.1485616*BAR[4]+0.07645424*BAR[5]-0.02779776*BAR[6]-0.1519209*BAR[7]-0.1878287*BAR[8]+0.1637603*BAR[9]+0.248636*BAR[10]+0.2032469*BAR[11]-0.03869069*BAR[12]+0.02014448*BAR[13]-0.2079489*BAR[14]+0.08846121*BAR[15]+0.1025348*BAR[16]+0.01593455*BAR[17]-0.4964754*BAR[18]+0.1635097*BAR[19]-0.04561989*BAR[20]-0.0662128*BAR[21]-0.2423395*BAR[22]+0.2898602*BAR[23]+0.03824728*BAR[24]-0.07471437 );
   double Syndrome1_10=Sigmoid1( -0.02918137*BAR[1]+0.06085975*BAR[2]-0.3056079*BAR[3]-0.5144019*BAR[4]-0.1966296*BAR[5]+0.04413594*BAR[6]+0.03249943*BAR[7]+0.08405613*BAR[8]-0.08797813*BAR[9]+0.06621616*BAR[10]-0.2226632*BAR[11]-0.1000158*BAR[12]+0.0106046*BAR[13]-0.1383344*BAR[14]+0.05141285*BAR[15]-0.1009147*BAR[16]-0.1503479*BAR[17]+0.2877283*BAR[18]-0.2209365*BAR[19]+0.1310906*BAR[20]-0.1188305*BAR[21]-0.002668453*BAR[22]+0.1106755*BAR[23]+0.3884961*BAR[24]+0.0006983803 );
   double Syndrome1_11=Sigmoid1( -0.04872056*BAR[1]-0.5066758*BAR[2]+0.08158222*BAR[3]+0.2647052*BAR[4]+0.3632542*BAR[5]+0.4538754*BAR[6]-0.1346472*BAR[7]+0.16742*BAR[8]+0.2974689*BAR[9]+0.3446769*BAR[10]-0.2784187*BAR[11]+0.2461497*BAR[12]-0.166853*BAR[13]-0.4296628*BAR[14]+0.7343794*BAR[15]+0.2154892*BAR[16]-0.4086125*BAR[17]-0.6446049*BAR[18]-0.5614476*BAR[19]-0.593914*BAR[20]+0.5039462*BAR[21]+0.113933*BAR[22]+0.3599374*BAR[23]-0.5517*BAR[24]+0.1249064 );
   double Syndrome1_12=Sigmoid1( -0.09035824*BAR[1]-0.2619464*BAR[2]+0.5151641*BAR[3]+0.08415102*BAR[4]+0.007849894*BAR[5]-0.3585253*BAR[6]-0.3458216*BAR[7]-0.006490127*BAR[8]+0.1933572*BAR[9]+0.1655464*BAR[10]-0.2591909*BAR[11]+0.2810482*BAR[12]-0.3552095*BAR[13]+0.1032239*BAR[14]-0.2380441*BAR[15]-0.6082169*BAR[16]-0.3652177*BAR[17]+0.4065064*BAR[18]-0.1538232*BAR[19]-0.03332642*BAR[20]+0.06235149*BAR[21]-0.08935639*BAR[22]-0.2274701*BAR[23]+0.2350571*BAR[24]-0.1009272 );
   double Syndrome1_13=Sigmoid1( -0.05370994*BAR[1]+0.2999545*BAR[2]-0.2855853*BAR[3]+0.1123754*BAR[4]+0.2561198*BAR[5]-0.2846766*BAR[6]+0.008345681*BAR[7]+0.1896221*BAR[8]-0.1973753*BAR[9]+0.3510076*BAR[10]+0.4492245*BAR[11]-0.09004608*BAR[12]+0.002758034*BAR[13]+0.03157447*BAR[14]+0.02175433*BAR[15]-0.399723*BAR[16]-0.2736914*BAR[17]+0.1198452*BAR[18]+0.2808644*BAR[19]-0.06968442*BAR[20]-0.5771574*BAR[21]+0.3748633*BAR[22]-0.2721373*BAR[23]-0.2329663*BAR[24]+0.07683773 );
   double Syndrome1_14=Sigmoid1( 0.094418*BAR[1]+0.2155959*BAR[2]-0.4787674*BAR[3]+0.3605456*BAR[4]+0.06799955*BAR[5]+0.607367*BAR[6]-0.3518007*BAR[7]+0.1633829*BAR[8]+0.3040094*BAR[9]+0.3707297*BAR[10]+0.02556368*BAR[11]-0.0885786*BAR[12]-0.3713907*BAR[13]-0.2014098*BAR[14]-0.289242*BAR[15]-0.09950806*BAR[16]-0.5361071*BAR[17]+0.4154459*BAR[18]+0.02827369*BAR[19]-0.04972957*BAR[20]-0.1700879*BAR[21]+0.2973098*BAR[22]-0.2097459*BAR[23]-0.0422597*BAR[24]+0.2318914 );
   double Syndrome1_15=Sigmoid1( 0.02161242*BAR[1]+0.5484816*BAR[2]+0.002152426*BAR[3]-0.3017516*BAR[4]+0.02010602*BAR[5]-0.8008425*BAR[6]-0.2985114*BAR[7]+0.5151479*BAR[8]+0.1572166*BAR[9]-0.04494689*BAR[10]+0.2529401*BAR[11]-0.02046412*BAR[12]-0.05892481*BAR[13]-0.1359019*BAR[14]-0.2005993*BAR[15]+0.03077302*BAR[16]+0.745619*BAR[17]-0.4197147*BAR[18]-0.1354882*BAR[19]-0.6034228*BAR[20]-0.04950687*BAR[21]-0.1093793*BAR[22]-0.46851*BAR[23]+0.2340346*BAR[24]-0.1910115 );
   double Syndrome1_16=Sigmoid1( 0.06201033*BAR[1]+0.2311719*BAR[2]-0.6587076*BAR[3]-0.1937433*BAR[4]-0.3063492*BAR[5]+0.0458253*BAR[6]+0.2621455*BAR[7]-0.3292437*BAR[8]-0.07124191*BAR[9]+0.03962434*BAR[10]-0.03539502*BAR[11]+0.1602975*BAR[12]+0.1252141*BAR[13]-0.1939677*BAR[14]-0.3524359*BAR[15]-0.02675135*BAR[16]-0.1550312*BAR[17]+0.2015329*BAR[18]-0.1383009*BAR[19]+0.3079963*BAR[20]+0.06971535*BAR[21]-0.2415089*BAR[22]-0.03791533*BAR[23]+0.01494107*BAR[24]+0.01395546 );
   double Syndrome1_17=Sigmoid1( -0.03211073*BAR[1]-0.2057187*BAR[2]-0.2208917*BAR[3]+0.1034868*BAR[4]+0.003785761*BAR[5]-0.1510143*BAR[6]-0.04637882*BAR[7]-0.01963908*BAR[8]-0.3622932*BAR[9]+0.03135398*BAR[10]-0.1296021*BAR[11]-0.2571803*BAR[12]+0.02485986*BAR[13]-0.05831699*BAR[14]+0.2441404*BAR[15]+0.4313999*BAR[16]-0.05117986*BAR[17]-0.06832605*BAR[18]-0.01433043*BAR[19]-0.3331767*BAR[20]-0.09270683*BAR[21]+0.1077102*BAR[22]+0.0517161*BAR[23]+0.1463209*BAR[24]+0.08033083 );
   double Syndrome1_18=Sigmoid1( -0.01044874*BAR[1]+0.8255618*BAR[2]-0.3581862*BAR[3]+0.2379437*BAR[4]-0.05247816*BAR[5]+0.3858318*BAR[6]-0.04216846*BAR[7]+0.2305764*BAR[8]-0.2754549*BAR[9]+0.1255125*BAR[10]-0.1954638*BAR[11]+0.04934186*BAR[12]-0.08713531*BAR[13]+0.08193728*BAR[14]-0.01578137*BAR[15]+0.04301662*BAR[16]-0.01941852*BAR[17]+0.0321704*BAR[18]-0.4490997*BAR[19]-0.2165072*BAR[20]+0.5094138*BAR[21]-0.08077756*BAR[22]-0.1167052*BAR[23]+0.008337143*BAR[24]-0.1847742 );
   double Syndrome1_19=Sigmoid1( 0.07863438*BAR[1]+0.6541001*BAR[2]-0.0287532*BAR[3]-0.07992863*BAR[4]-0.1936443*BAR[5]+0.2021953*BAR[6]+0.5814793*BAR[7]+0.1076662*BAR[8]-0.2505759*BAR[9]-0.1958519*BAR[10]+0.2982949*BAR[11]-0.130183*BAR[12]-0.2418064*BAR[13]-0.03213368*BAR[14]-0.1050228*BAR[15]-0.04116086*BAR[16]+0.1059578*BAR[17]-0.09407587*BAR[18]+0.2511382*BAR[19]+0.03090675*BAR[20]-0.2050715*BAR[21]+0.07968493*BAR[22]-0.1085312*BAR[23]-0.3073632*BAR[24]+0.1479857 );
   double Syndrome1_20=Sigmoid1( 0.01779699*BAR[1]+0.1517631*BAR[2]+0.1832252*BAR[3]+0.4329565*BAR[4]-0.1528609*BAR[5]-0.2424133*BAR[6]+0.1942621*BAR[7]+0.1390828*BAR[8]-0.3387062*BAR[9]+0.3891163*BAR[10]+0.3485644*BAR[11]+0.06489421*BAR[12]-0.01458877*BAR[13]-0.1127466*BAR[14]+0.1122861*BAR[15]-0.1973242*BAR[16]+0.4340822*BAR[17]-0.633949*BAR[18]+0.1276167*BAR[19]+0.2476585*BAR[20]-0.4445719*BAR[21]+0.6248969*BAR[22]-0.2169943*BAR[23]-0.501359*BAR[24]-0.1358235 );

//--- syndromes of the 2nd level:
   double Syndrome2_1=Sigmoid2( 0.2332734*Syndrome1_1-0.2002641*Syndrome1_2-0.03174414*Syndrome1_3-0.3868614*Syndrome1_4-0.1933812*Syndrome1_5-0.2366997*Syndrome1_6+0.3920829*Syndrome1_7+0.1015497*Syndrome1_8-0.1333193*Syndrome1_9+0.05584235*Syndrome1_10-0.2983295*Syndrome1_11+0.1034668*Syndrome1_12-0.4040487*Syndrome1_13-0.2103508*Syndrome1_14-0.2480657*Syndrome1_15-0.1906435*Syndrome1_16+0.2692898*Syndrome1_17+0.2760854*Syndrome1_18-0.1738693*Syndrome1_19-0.1861307*Syndrome1_20-0.07152162 );
   double Syndrome2_2=Sigmoid2( -0.1242675*Syndrome1_1+0.05587832*Syndrome1_2+0.1567961*Syndrome1_3+0.1077346*Syndrome1_4-0.2112047*Syndrome1_5+0.04008683*Syndrome1_6-0.1716478*Syndrome1_7+0.3083204*Syndrome1_8-0.1864694*Syndrome1_9+0.08867304*Syndrome1_10-0.06801239*Syndrome1_11-0.1810985*Syndrome1_12-0.05133555*Syndrome1_13+0.2981661*Syndrome1_14-0.01543425*Syndrome1_15-0.1859617*Syndrome1_16+0.027973*Syndrome1_17-0.1715439*Syndrome1_18-0.1249511*Syndrome1_19+0.5925598*Syndrome1_20-0.279602 );
   double Syndrome2_3=Sigmoid2( -0.4745722*Syndrome1_1-0.1248492*Syndrome1_2-0.1128288*Syndrome1_3+0.1485692*Syndrome1_4-0.3948999*Syndrome1_5+0.2633227*Syndrome1_6-0.2046695*Syndrome1_7-0.03632757*Syndrome1_8+0.259578*Syndrome1_9-0.07442582*Syndrome1_10+0.06552354*Syndrome1_11-0.2452848*Syndrome1_12-0.1599011*Syndrome1_13+0.1749917*Syndrome1_14-0.07113215*Syndrome1_15-0.1524421*Syndrome1_16+0.3606906*Syndrome1_17+0.3524929*Syndrome1_18+0.1315838*Syndrome1_19+0.1981817*Syndrome1_20+0.0126604 );
   double Syndrome2_4=Sigmoid2( -0.3605324*Syndrome1_1+0.2803221*Syndrome1_2+0.07412126*Syndrome1_3+0.2101911*Syndrome1_4-0.1933928*Syndrome1_5-0.2068641*Syndrome1_6+0.1302721*Syndrome1_7+0.04962961*Syndrome1_8+0.2879501*Syndrome1_9-0.04214102*Syndrome1_10-0.02194729*Syndrome1_11-0.0501424*Syndrome1_12+0.007969459*Syndrome1_13+0.1151657*Syndrome1_14+0.04063402*Syndrome1_15+0.1461606*Syndrome1_16-0.07482237*Syndrome1_17-0.3319329*Syndrome1_18+0.2494595*Syndrome1_19-0.09345333*Syndrome1_20-0.1831799 );
   double Syndrome2_5=Sigmoid2( -0.03081687*Syndrome1_1-0.419345*Syndrome1_2-0.01301429*Syndrome1_3+0.008855551*Syndrome1_4+0.2869771*Syndrome1_5+0.06881366*Syndrome1_6-0.1612982*Syndrome1_7-0.491662*Syndrome1_8+0.04266098*Syndrome1_9-0.7546657*Syndrome1_10+0.0472151*Syndrome1_11-0.5099863*Syndrome1_12+0.1196823*Syndrome1_13+0.2611973*Syndrome1_14-0.0241531*Syndrome1_15-0.5843646*Syndrome1_16+0.08374172*Syndrome1_17+0.041931*Syndrome1_18-0.181801*Syndrome1_19+0.6314354*Syndrome1_20+0.2967799 );
   double Syndrome2_6=Sigmoid2( 0.2783457*Syndrome1_1+0.05858535*Syndrome1_2+0.03348543*Syndrome1_3-0.09202126*Syndrome1_4+0.09466362*Syndrome1_5-0.01946918*Syndrome1_6-0.008507644*Syndrome1_7+0.1967683*Syndrome1_8-0.1593684*Syndrome1_9+0.2202749*Syndrome1_10-0.2754305*Syndrome1_11-0.08108314*Syndrome1_12+0.1606592*Syndrome1_13+0.03723634*Syndrome1_14+0.3494412*Syndrome1_15-0.139782*Syndrome1_16+0.03641316*Syndrome1_17-0.1216527*Syndrome1_18-0.2194063*Syndrome1_19+0.3015033*Syndrome1_20-0.1307777 );
   double Syndrome2_7=Sigmoid2( -0.1451617*Syndrome1_1-0.1851998*Syndrome1_2-0.2149245*Syndrome1_3-0.05804037*Syndrome1_4-0.03970402*Syndrome1_5+2.506166E-6*Syndrome1_6+0.223578*Syndrome1_7-0.1718342*Syndrome1_8+0.001228896*Syndrome1_9-0.03911417*Syndrome1_10+0.3167912*Syndrome1_11+0.2213001*Syndrome1_12-0.3518667*Syndrome1_13-0.6146168*Syndrome1_14-0.1061097*Syndrome1_15-0.3044312*Syndrome1_16-0.04269538*Syndrome1_17-0.1753355*Syndrome1_18+0.1989161*Syndrome1_19-0.3667244*Syndrome1_20+0.2514035 );
   double Syndrome2_8=Sigmoid2( -0.1430153*Syndrome1_1-Syndrome1_2+0.02704678*Syndrome1_3+0.09941091*Syndrome1_4+0.07057924*Syndrome1_5-0.3370984*Syndrome1_6+0.1565579*Syndrome1_7-0.6226992*Syndrome1_8-0.4750121*Syndrome1_9+0.0914355*Syndrome1_10+0.7518402*Syndrome1_11-0.3350138*Syndrome1_12-0.3099903*Syndrome1_13+0.01266479*Syndrome1_14-0.7965527*Syndrome1_15-0.1753905*Syndrome1_16-0.1435609*Syndrome1_17+0.1683903*Syndrome1_18+0.1800467*Syndrome1_19+0.02699256*Syndrome1_20+0.3138063 );
   double Syndrome2_9=Sigmoid2( -0.2611458*Syndrome1_1-0.03994129*Syndrome1_2-0.2299157*Syndrome1_3+0.3549923*Syndrome1_4-0.001759748*Syndrome1_5-0.1117837*Syndrome1_6+0.03037107*Syndrome1_7+0.2023677*Syndrome1_8+0.2628252*Syndrome1_9+0.09683131*Syndrome1_10+0.2576693*Syndrome1_11-0.06357097*Syndrome1_12-0.2162403*Syndrome1_13-0.2190126*Syndrome1_14-0.1675369*Syndrome1_15-0.2458067*Syndrome1_16-0.06660707*Syndrome1_17-0.2096998*Syndrome1_18+0.2432118*Syndrome1_19+0.06210691*Syndrome1_20+0.1555794 );
   double Syndrome2_10=Sigmoid2( 0.1120118*Syndrome1_1-0.09789048*Syndrome1_2-0.1146162*Syndrome1_3-0.02268722*Syndrome1_4-0.4754501*Syndrome1_5+0.1567527*Syndrome1_6+0.4281512*Syndrome1_7+0.1428995*Syndrome1_8+0.4317052*Syndrome1_9-0.1987304*Syndrome1_10-0.3471439*Syndrome1_11-0.2485701*Syndrome1_12+0.2200699*Syndrome1_13-0.1804247*Syndrome1_14+0.5553524*Syndrome1_15+0.004284344*Syndrome1_16-0.5408193*Syndrome1_17-0.2304406*Syndrome1_18+0.2462995*Syndrome1_19+0.1687378*Syndrome1_20+0.480715 );
   double Syndrome2_11=Sigmoid2( 0.2892572*Syndrome1_1+0.2819389*Syndrome1_2-0.2116477*Syndrome1_3-0.1031269*Syndrome1_4-0.2198152*Syndrome1_5-0.2882532*Syndrome1_6-0.7462316*Syndrome1_7+0.7820893*Syndrome1_8-0.05574411*Syndrome1_9-0.1144354*Syndrome1_10-0.1073154*Syndrome1_11+0.5092962*Syndrome1_12-0.07017706*Syndrome1_13-0.5550667*Syndrome1_14-0.5170746*Syndrome1_15-0.1299864*Syndrome1_16+0.03325708*Syndrome1_17-0.5107772*Syndrome1_18+0.04024922*Syndrome1_19+0.1836878*Syndrome1_20+0.0346345 );
   double Syndrome2_12=Sigmoid2( -0.10614*Syndrome1_1+0.06027444*Syndrome1_2+0.08108542*Syndrome1_3-0.1568731*Syndrome1_4+0.1509192*Syndrome1_5-0.1630516*Syndrome1_6+0.01426157*Syndrome1_7+0.02186926*Syndrome1_8+0.1099893*Syndrome1_9-0.02269597*Syndrome1_10-0.04576464*Syndrome1_11-0.161096*Syndrome1_12-0.1901706*Syndrome1_13-0.02513908*Syndrome1_14+0.1317106*Syndrome1_15-0.06866668*Syndrome1_16+0.1083753*Syndrome1_17+0.1449683*Syndrome1_18+0.006118122*Syndrome1_19+0.1255394*Syndrome1_20-0.3822223 );
   double Syndrome2_13=Sigmoid2( -0.01638931*Syndrome1_1+0.1172011*Syndrome1_2-0.1022018*Syndrome1_3+0.1098846*Syndrome1_4+0.3456185*Syndrome1_5-0.276273*Syndrome1_6-0.1697723*Syndrome1_7-0.1394644*Syndrome1_8+0.0530486*Syndrome1_9+0.04139024*Syndrome1_10-0.02131393*Syndrome1_11+0.1144992*Syndrome1_12-0.1791101*Syndrome1_13+0.124498*Syndrome1_14+0.2169005*Syndrome1_15+0.06764794*Syndrome1_16+0.3542189*Syndrome1_17+0.0647957*Syndrome1_18+0.01778502*Syndrome1_19-0.0183728*Syndrome1_20-0.09863564 );
   double Syndrome2_14=Sigmoid2( 0.1046498*Syndrome1_1+0.1199886*Syndrome1_2-0.3787079*Syndrome1_3+0.568437*Syndrome1_4-0.09216721*Syndrome1_5-0.07998162*Syndrome1_6-0.1422648*Syndrome1_7-0.220407*Syndrome1_8+0.00417607*Syndrome1_9+0.2042087*Syndrome1_10+0.2614584*Syndrome1_11+0.04491196*Syndrome1_12+0.1860093*Syndrome1_13-0.1642074*Syndrome1_14+0.3918036*Syndrome1_15+0.05427575*Syndrome1_16-0.0002294437*Syndrome1_17+0.008295977*Syndrome1_18-0.2818146*Syndrome1_19-0.3877438*Syndrome1_20+0.03536745 );
   double Syndrome2_15=Sigmoid2( -0.1754033*Syndrome1_1-0.0528489*Syndrome1_2-0.1744897*Syndrome1_3+0.1113354*Syndrome1_4+0.1185713*Syndrome1_5-0.0231303*Syndrome1_6+0.006316248*Syndrome1_7-0.08525342*Syndrome1_8+0.1568578*Syndrome1_9+0.2965699*Syndrome1_10+0.2781587*Syndrome1_11+0.2391527*Syndrome1_12-0.08555941*Syndrome1_13-0.2362186*Syndrome1_14+0.1128907*Syndrome1_15-0.04770778*Syndrome1_16-0.0139725*Syndrome1_17+0.1079882*Syndrome1_18-0.09141354*Syndrome1_19+0.3320866*Syndrome1_20-0.3015116 );
   double Syndrome2_16=Sigmoid2( 0.1962015*Syndrome1_1+0.0192374*Syndrome1_2-0.1578716*Syndrome1_3+0.03360523*Syndrome1_4+0.04818176*Syndrome1_5+0.2462966*Syndrome1_6-0.2103649*Syndrome1_7+0.01318523*Syndrome1_8-0.09349868*Syndrome1_9+0.08476428*Syndrome1_10-0.06272572*Syndrome1_11+0.2246324*Syndrome1_12+0.2539908*Syndrome1_13-0.2059217*Syndrome1_14-0.08641216*Syndrome1_15-0.09780023*Syndrome1_16+0.0005770256*Syndrome1_17-0.2842666*Syndrome1_18-0.05383059*Syndrome1_19-0.2822465*Syndrome1_20+0.2277268 );
   double Syndrome2_17=Sigmoid2( 0.5981864*Syndrome1_1+0.5172131*Syndrome1_2-0.2310352*Syndrome1_3-0.1814138*Syndrome1_4-0.2148922*Syndrome1_5+0.562911*Syndrome1_6+0.5865576*Syndrome1_7-0.2790301*Syndrome1_8-0.3841165*Syndrome1_9+0.3223535*Syndrome1_10+0.2096305*Syndrome1_11+0.08284206*Syndrome1_12+0.7050048*Syndrome1_13+0.4129859*Syndrome1_14+0.2116682*Syndrome1_15+0.2213966*Syndrome1_16-0.1637594*Syndrome1_17+0.1191863*Syndrome1_18-0.6626714*Syndrome1_19-0.9127383*Syndrome1_20-0.1505798 );
   double Syndrome2_18=Sigmoid2( -0.008298698*Syndrome1_1-0.1847953*Syndrome1_2-0.1930849*Syndrome1_3-0.1005524*Syndrome1_4+0.0737519*Syndrome1_5+0.04218475*Syndrome1_6-0.422835*Syndrome1_7+0.06019862*Syndrome1_8-0.2056148*Syndrome1_9+0.3398327*Syndrome1_10-0.2526269*Syndrome1_11-0.06098709*Syndrome1_12-0.1447722*Syndrome1_13-0.05216306*Syndrome1_14-0.09496115*Syndrome1_15+0.2071376*Syndrome1_16+0.03088453*Syndrome1_17-0.521363*Syndrome1_18-0.06449924*Syndrome1_19-0.4105364*Syndrome1_20+0.3204305 );
   double Syndrome2_19=Sigmoid2( -0.1376712*Syndrome1_1-0.0153131*Syndrome1_2+0.04377801*Syndrome1_3+0.08896239*Syndrome1_4+0.03197494*Syndrome1_5-0.02259021*Syndrome1_6+0.008662836*Syndrome1_7-0.1961185*Syndrome1_8-0.0720102*Syndrome1_9+0.05738823*Syndrome1_10-0.004060962*Syndrome1_11-0.3752605*Syndrome1_12+0.02065136*Syndrome1_13+0.1263955*Syndrome1_14-0.05906902*Syndrome1_15+0.4029721*Syndrome1_16-0.159444*Syndrome1_17-0.1619136*Syndrome1_18+0.3338208*Syndrome1_19-0.0656369*Syndrome1_20+0.1602566 );
   double Syndrome2_20=Sigmoid2( -0.003900121*Syndrome1_1+0.3159288*Syndrome1_2+0.2550703*Syndrome1_3+0.05409481*Syndrome1_4+0.06660215*Syndrome1_5-0.1948439*Syndrome1_6-0.370153*Syndrome1_7+0.5337713*Syndrome1_8-0.06716464*Syndrome1_9+0.550526*Syndrome1_10+0.4723933*Syndrome1_11+0.09457724*Syndrome1_12+0.5613732*Syndrome1_13+0.3709611*Syndrome1_14-0.07680532*Syndrome1_15-0.5097623*Syndrome1_16+0.4023384*Syndrome1_17+0.2330064*Syndrome1_18-0.09448317*Syndrome1_19+0.2668969*Syndrome1_20-0.2110061 );

//--- syndromes of the 3rd level:
   double Syndrome3_1=Sigmoid3( -0.05101856*Syndrome2_1-0.04933448*Syndrome2_2+0.03248681*Syndrome2_3-0.05835526*Syndrome2_4-0.01888579*Syndrome2_5-0.07940733*Syndrome2_6-0.04341835*Syndrome2_7-0.07906266*Syndrome2_8+0.2054683*Syndrome2_9+0.1553352*Syndrome2_10-0.07296721*Syndrome2_11-0.01849408*Syndrome2_12-0.07505544*Syndrome2_13+0.08666297*Syndrome2_14-0.2001411*Syndrome2_15+0.07931387*Syndrome2_16+0.1598745*Syndrome2_17+0.01308129*Syndrome2_18+0.159161*Syndrome2_19+0.1903208*Syndrome2_20+0.0190388 );
   double Syndrome3_2=Sigmoid3( 0.0643296*Syndrome2_1+0.3451192*Syndrome2_2-0.1247545*Syndrome2_3+0.03276825*Syndrome2_4+0.303136*Syndrome2_5+0.03152885*Syndrome2_6+0.1118743*Syndrome2_7-0.3860323*Syndrome2_8-0.08593427*Syndrome2_9-0.2664599*Syndrome2_10+0.213205*Syndrome2_11-0.0977626*Syndrome2_12-0.2923501*Syndrome2_13-0.3133417*Syndrome2_14-0.1915279*Syndrome2_15+0.4333939*Syndrome2_16+0.02110274*Syndrome2_17+0.5802879*Syndrome2_18+0.03386912*Syndrome2_19+0.08908307*Syndrome2_20+0.06071822 );
   double Syndrome3_3=Sigmoid3( -0.08613513*Syndrome2_1+0.1200513*Syndrome2_2+0.3818525*Syndrome2_3-0.09603316*Syndrome2_4-0.2353039*Syndrome2_5-0.1816488*Syndrome2_6+0.002517342*Syndrome2_7-0.2414117*Syndrome2_8+0.2011739*Syndrome2_9-0.3057347*Syndrome2_10-0.4593749*Syndrome2_11-0.2228307*Syndrome2_12+0.03512295*Syndrome2_13+0.4402955*Syndrome2_14-0.1967632*Syndrome2_15+0.07873345*Syndrome2_16+0.1981131*Syndrome2_17-0.2677957*Syndrome2_18+0.1719814*Syndrome2_19-0.474854*Syndrome2_20+0.01101439 );
   double Syndrome3_4=Sigmoid3( 0.02534361*Syndrome2_1+0.1845266*Syndrome2_2+0.149674*Syndrome2_3-0.1454014*Syndrome2_4+0.00701888*Syndrome2_5+0.08219463*Syndrome2_6+0.05163066*Syndrome2_7-0.1836077*Syndrome2_8+0.1429968*Syndrome2_9+0.518382*Syndrome2_10-0.00966637*Syndrome2_11-0.1674386*Syndrome2_12+0.1387497*Syndrome2_13+0.1385897*Syndrome2_14-0.01148864*Syndrome2_15+0.3751494*Syndrome2_16-0.08906862*Syndrome2_17-0.06286599*Syndrome2_18+0.2061662*Syndrome2_19-0.07524439*Syndrome2_20-0.08077133 );
   double Syndrome3_5=Sigmoid3( 0.3856083*Syndrome2_1-0.01700347*Syndrome2_2-0.1044575*Syndrome2_3+0.111998*Syndrome2_4-0.5157402*Syndrome2_5-0.05508286*Syndrome2_6-0.3101066*Syndrome2_7-0.5261913*Syndrome2_8-0.05983765*Syndrome2_9+0.1723307*Syndrome2_10-0.2564277*Syndrome2_11+0.06385356*Syndrome2_12-0.07245655*Syndrome2_13+0.1154206*Syndrome2_14-0.3492871*Syndrome2_15+0.136372*Syndrome2_16+0.3627071*Syndrome2_17-0.3074959*Syndrome2_18+0.4425845*Syndrome2_19-0.9329191*Syndrome2_20+0.01476912 );
   double Syndrome3_6=Sigmoid3( 0.5246867*Syndrome2_1-0.2347829*Syndrome2_2+0.01062111*Syndrome2_3+0.2374777*Syndrome2_4-0.02361662*Syndrome2_5+0.1804156*Syndrome2_6+0.07669501*Syndrome2_7-0.142881*Syndrome2_8+0.2566245*Syndrome2_9+0.1024709*Syndrome2_10-0.04695484*Syndrome2_11-0.004103919*Syndrome2_12+0.3340242*Syndrome2_13-0.3702791*Syndrome2_14+0.1852374*Syndrome2_15+0.02175477*Syndrome2_16+0.09901489*Syndrome2_17-0.1502062*Syndrome2_18+0.3814779*Syndrome2_19-0.06319473*Syndrome2_20+0.2657273 );
   double Syndrome3_7=Sigmoid3( 0.1613003*Syndrome2_1-0.2738772*Syndrome2_2-0.03304096*Syndrome2_3+0.3934855*Syndrome2_4+0.3955218*Syndrome2_5-0.3004892*Syndrome2_6+0.1339742*Syndrome2_7+0.09475601*Syndrome2_8+0.03064043*Syndrome2_9-0.7264652*Syndrome2_10-0.4579849*Syndrome2_11-0.1183059*Syndrome2_12+0.2197721*Syndrome2_13-0.08493897*Syndrome2_14+0.2115426*Syndrome2_15-0.07834542*Syndrome2_16-0.3884689*Syndrome2_17-0.101394*Syndrome2_18+0.1002519*Syndrome2_19-0.07787764*Syndrome2_20+0.3529212 );
   double Syndrome3_8=Sigmoid3( -0.3544801*Syndrome2_1+0.03471621*Syndrome2_2-0.2373467*Syndrome2_3-0.2836286*Syndrome2_4+0.01646966*Syndrome2_5+0.06978795*Syndrome2_6-0.03310004*Syndrome2_7+0.01844743*Syndrome2_8+0.05259214*Syndrome2_9-0.05343668*Syndrome2_10+0.3971725*Syndrome2_11-0.08770485*Syndrome2_12-0.2040168*Syndrome2_13+0.1109144*Syndrome2_14-0.06249888*Syndrome2_15-0.5860764*Syndrome2_16+0.1217078*Syndrome2_17+0.2471277*Syndrome2_18-0.03716509*Syndrome2_19-0.1908655*Syndrome2_20+0.03838157 );
   double Syndrome3_9=Sigmoid3( 0.1542789*Syndrome2_1+0.3505224*Syndrome2_2+0.06042741*Syndrome2_3+0.08956298*Syndrome2_4-0.03655836*Syndrome2_5-0.3083843*Syndrome2_6+0.2483124*Syndrome2_7-0.1132483*Syndrome2_8-0.3571556*Syndrome2_9-0.04335312*Syndrome2_10+0.005499069*Syndrome2_11+0.371572*Syndrome2_12-0.1199554*Syndrome2_13+0.1160574*Syndrome2_14-0.01656827*Syndrome2_15+0.09481092*Syndrome2_16-0.07926448*Syndrome2_17+0.3847227*Syndrome2_18+0.1039986*Syndrome2_19-0.02874756*Syndrome2_20-0.2311832 );
   double Syndrome3_10=Sigmoid3( -0.5099882*Syndrome2_1-0.2619184*Syndrome2_2+0.2441412*Syndrome2_3-0.02311796*Syndrome2_4+0.004243354*Syndrome2_5-0.04681544*Syndrome2_6+0.1402575*Syndrome2_7-0.03166823*Syndrome2_8-0.2629028*Syndrome2_9-0.03275445*Syndrome2_10-0.311464*Syndrome2_11+0.3158014*Syndrome2_12-0.04689252*Syndrome2_13+0.1556217*Syndrome2_14-0.02266529*Syndrome2_15-0.15192*Syndrome2_16+0.02253294*Syndrome2_17+0.04638374*Syndrome2_18-0.4847055*Syndrome2_19-0.0543578*Syndrome2_20-0.4383866 );
   double Syndrome3_11=Sigmoid3( 0.09181526*Syndrome2_1-0.009475656*Syndrome2_2+0.08283823*Syndrome2_3+0.06638021*Syndrome2_4-0.04110251*Syndrome2_5+0.03041244*Syndrome2_6-0.2266526*Syndrome2_7+0.3537511*Syndrome2_8+0.2091044*Syndrome2_9-0.2312607*Syndrome2_10-0.01409533*Syndrome2_11-0.06294888*Syndrome2_12+0.1980267*Syndrome2_13+0.07864135*Syndrome2_14-0.01312789*Syndrome2_15+0.02964603*Syndrome2_16-0.1720168*Syndrome2_17-0.01523064*Syndrome2_18+0.07354444*Syndrome2_19+0.1534344*Syndrome2_20+0.04784121 );
   double Syndrome3_12=Sigmoid3( -0.01962976*Syndrome2_1-0.1254692*Syndrome2_2+0.01237085*Syndrome2_3-0.006583595*Syndrome2_4-0.06446695*Syndrome2_5-0.1581757*Syndrome2_6-0.01416831*Syndrome2_7+0.08909909*Syndrome2_8+0.02427519*Syndrome2_9+0.06101634*Syndrome2_10-0.07296847*Syndrome2_11-0.02960677*Syndrome2_12+0.1195403*Syndrome2_13+0.007260199*Syndrome2_14-0.005008513*Syndrome2_15+0.07686368*Syndrome2_16-0.1097991*Syndrome2_17+0.02348211*Syndrome2_18-0.01508969*Syndrome2_19+0.06078456*Syndrome2_20+0.1424098 );
   double Syndrome3_13=Sigmoid3( -0.1845686*Syndrome2_1-0.1120369*Syndrome2_2+0.1346949*Syndrome2_3+0.2425685*Syndrome2_4+0.1310953*Syndrome2_5-0.1957272*Syndrome2_6+0.2163845*Syndrome2_7+0.04189415*Syndrome2_8+0.05685329*Syndrome2_9-0.1108158*Syndrome2_10-0.04702755*Syndrome2_11-0.2698838*Syndrome2_12+0.05045844*Syndrome2_13+0.1487544*Syndrome2_14+7.648221E-5*Syndrome2_15-0.04902162*Syndrome2_16+0.3119571*Syndrome2_17-0.2076546*Syndrome2_18+0.1465537*Syndrome2_19+0.2386554*Syndrome2_20+0.09121808 );
   double Syndrome3_14=Sigmoid3( 0.015057*Syndrome2_1-0.07630379*Syndrome2_2+0.10373*Syndrome2_3-0.01276504*Syndrome2_4+0.01637872*Syndrome2_5+0.1570177*Syndrome2_6+0.02290879*Syndrome2_7+0.1426407*Syndrome2_8-0.3037595*Syndrome2_9-0.1183627*Syndrome2_10-0.05010238*Syndrome2_11-0.06874149*Syndrome2_12+0.0325584*Syndrome2_13-0.1127614*Syndrome2_14+0.1010367*Syndrome2_15+0.2743505*Syndrome2_16+0.02752565*Syndrome2_17-0.01011515*Syndrome2_18-0.1072115*Syndrome2_19-0.1723324*Syndrome2_20-0.1862434 );
   double Syndrome3_15=Sigmoid3( -0.0602835*Syndrome2_1+0.1044827*Syndrome2_2-0.03398157*Syndrome2_3+0.1103081*Syndrome2_4-0.2517793*Syndrome2_5-0.1388755*Syndrome2_6+0.1680355*Syndrome2_7+0.08541053*Syndrome2_8+0.2264198*Syndrome2_9+0.1319854*Syndrome2_10+0.2397746*Syndrome2_11+0.04893836*Syndrome2_12+0.07067535*Syndrome2_13+0.03666123*Syndrome2_14-0.2249698*Syndrome2_15+0.1039975*Syndrome2_16+0.03130547*Syndrome2_17+0.1295152*Syndrome2_18-0.1380298*Syndrome2_19-0.2716908*Syndrome2_20+0.3049682 );
   double Syndrome3_16=Sigmoid3( 0.006898584*Syndrome2_1+0.172121*Syndrome2_2+0.08287619*Syndrome2_3-0.2843233*Syndrome2_4+0.3360839*Syndrome2_5-0.06360124*Syndrome2_6+0.08605669*Syndrome2_7+0.1303328*Syndrome2_8+0.176666*Syndrome2_9+0.3064248*Syndrome2_10+0.03492442*Syndrome2_11-0.1337793*Syndrome2_12+0.2166045*Syndrome2_13+0.1651906*Syndrome2_14-0.2159452*Syndrome2_15-0.02087162*Syndrome2_16-0.1321865*Syndrome2_17+0.02330898*Syndrome2_18-0.1607926*Syndrome2_19+0.100959*Syndrome2_20+0.3113509 );
   double Syndrome3_17=Sigmoid3( 0.2484581*Syndrome2_1+0.07501616*Syndrome2_2-0.2955785*Syndrome2_3-0.06893355*Syndrome2_4-0.110545*Syndrome2_5+0.009258383*Syndrome2_6-0.04150206*Syndrome2_7-0.1581711*Syndrome2_8-0.1503464*Syndrome2_9-0.1641756*Syndrome2_10+0.2800875*Syndrome2_11+0.1470316*Syndrome2_12+0.08529772*Syndrome2_13-0.07939056*Syndrome2_14+0.1105667*Syndrome2_15-0.003909521*Syndrome2_16-0.1663841*Syndrome2_17+0.1384012*Syndrome2_18-0.2260507*Syndrome2_19-0.1310463*Syndrome2_20+0.03011392 );
   double Syndrome3_18=Sigmoid3( 0.2167049*Syndrome2_1+0.1083723*Syndrome2_2+0.03713056*Syndrome2_3-0.07394339*Syndrome2_4-0.08689396*Syndrome2_5+0.1893489*Syndrome2_6-0.004869457*Syndrome2_7+0.06987588*Syndrome2_8-0.1505099*Syndrome2_9+0.1717843*Syndrome2_10+0.07792218*Syndrome2_11+0.02835098*Syndrome2_12+0.03617713*Syndrome2_13+0.1599271*Syndrome2_14-0.1617647*Syndrome2_15-0.04720658*Syndrome2_16+0.004165665*Syndrome2_17-0.1073883*Syndrome2_18+0.06164433*Syndrome2_19+0.01017194*Syndrome2_20-0.1073146 );
   double Syndrome3_19=Sigmoid3( 0.1966043*Syndrome2_1-0.06785608*Syndrome2_2-0.02568222*Syndrome2_3+0.2323583*Syndrome2_4-0.1949882*Syndrome2_5-0.0180097*Syndrome2_6-0.1995831*Syndrome2_7-0.3007537*Syndrome2_8+0.03133066*Syndrome2_9-0.3836962*Syndrome2_10+0.8646971*Syndrome2_11-0.04459784*Syndrome2_12+0.1127359*Syndrome2_13+0.3645059*Syndrome2_14+0.3924035*Syndrome2_15+0.2070317*Syndrome2_16-0.1975317*Syndrome2_17+0.249992*Syndrome2_18-0.1090982*Syndrome2_19+0.9234442*Syndrome2_20+0.0260936 );
   double Syndrome3_20=Sigmoid3( -0.1054238*Syndrome2_1+0.01094678*Syndrome2_2+0.1854347*Syndrome2_3-0.03105933*Syndrome2_4-0.1428708*Syndrome2_5+0.1660853*Syndrome2_6-0.0540761*Syndrome2_7+0.08364562*Syndrome2_8+0.01462638*Syndrome2_9+0.05958234*Syndrome2_10+0.05540805*Syndrome2_11+0.1415959*Syndrome2_12-0.2088391*Syndrome2_13-0.02437577*Syndrome2_14+0.03789431*Syndrome2_15+0.1342704*Syndrome2_16+0.02136465*Syndrome2_17+0.1529594*Syndrome2_18-0.2515772*Syndrome2_19-0.009984408*Syndrome2_20-0.02554057 );

//--- final syndromes:
   BAR[0]=0.377357*Syndrome3_1-0.1995524*Syndrome3_2+0.44664*Syndrome3_3-0.2634062*Syndrome3_4-0.1150927*Syndrome3_5-0.3349093*Syndrome3_6-0.3639574*Syndrome3_7+0.2705039*Syndrome3_8+0.5313437*Syndrome3_9+0.2664694*Syndrome3_10+0.1713557*Syndrome3_11+0.1208919*Syndrome3_12-0.4120659*Syndrome3_13+0.3021899*Syndrome3_14+0.4149051*Syndrome3_15+0.7103375*Syndrome3_16+0.1180793*Syndrome3_17-0.2354599*Syndrome3_18-0.1013937*Syndrome3_19+0.3054902*Syndrome3_20+0.03919306;

//--- postprocessing of the final syndromes:
   BAR[0]=((BAR[0]*0.0180000001564622)+0.000599999912083149)/2;

   return (BAR[0]);
  }
//+------------------------------------------------------------------+

double Prognosis;

//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
void OnTick()
  {
//--- receive a price forecast from a neural network
   Prognosis=CalcNeuroNet();
//--- perform necessary trade actions
   Trade();
  }
//+------------------------------------------------------------------+
void Trade()
  {
   //--- close an opened position if it does not fit the forecast
   if(PositionSelect(_Symbol))
     {
      long type=PositionGetInteger(POSITION_TYPE);
      bool close=false;
      if((type == POSITION_TYPE_BUY)  && (Prognosis <= 0)) close = true;
      if((type == POSITION_TYPE_SELL) && (Prognosis >= 0)) close = true;
      if(close)
        {
         CTrade trade;
         trade.PositionClose(_Symbol);
        }
     }

   //--- if there are no positions, then open by the forecast
   if((Prognosis!=0) && (!PositionSelect(_Symbol)))
     {
      CTrade trade;
      if(Prognosis >  MinPrognosis) trade.Buy (Lots);
      if(Prognosis < -MinPrognosis) trade.Sell(Lots);
     }
  }

-->


테스트하기

신경 네트워크 교육을 위한 데이터를 제공한 같은 기간에 Expert를 실행합니다. 이 Expert는 EURUSD, H1용으로 작성되었습니다(학습 시간은 거의 10개월입니다).

예측 이익이 스프레드와 비교할 수 있는 값인 경우 거래를 시작할 의미가 없습니다. Expert에는 이러한 경우에 대한 필터가 내장되어 있습니다. 입력 파라미터 MinPrognosis를 0.0005로 설정합니다.

고정 거래량(볼륨)은 0.1 로트입니다.

다음과 같은 결과를 얻었습니다:

그림. 21. MetaTester의 전문가 조언자(EA) 테스트 통계입니다.

그림. 21. MetaTester의 전문가 조언자(EA) 테스트 통계입니다.


그림. 22. MetaTester에서 Expert Advisor를 테스트한 후의 지분 차트

그림. 22. MetaTester에서 Expert Advisor를 테스트한 후의 지분 차트


지속적으로 증가하는 지분은 신경망 Expert를 개발하는 모든 단계가 올바르게 구현되었음을 보여줍니다.

전문가(Expert)가 학습하고 있는 기간 동안의 이익은 그 외의 이익을 보장하지 않는다는 것을 명심해야 합니다. 실제 수익성 있는 신경망을 만들기 위해서는 신경망의 작동 원리에 대한 심층적인 지식과 거래에서의 중요한 경험이 필요합니다. 이 글에서 저는 어떻게 신경 네트워크 도구를 사용하는지를 보여드렸고 이제 그것을 효율적으로 만드는 것은 여러분에게 달려 있습니다.


결론

NeuroPro는 독특한 프로그램입니다. 우리는 신경망이 NeuroPro에서 MetaTrader 5 Expert로 몇 분 안에 옮겨지는 것을 볼 수 있는 기회를 가졌습니다.

다른 많은 신경 네트워크 프로그램들은 이러한 이점을 가지고 있지 않습니다. 이것이 바로 NeuroPro가 강력하게 권장되는 이유입니다.


MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/830

파일 첨부됨 |
NeuroPro_allOS.zip (7824.54 KB)
neuropro.mq5 (68.46 KB)
SQL 및 MQL5: SQLite 데이터베이스로 작업하기 SQL 및 MQL5: SQLite 데이터베이스로 작업하기
이 문서는 프로젝트에서 SQL을 사용하는 데 관심이 있는 개발자를 대상으로 합니다. SQLite의 기능과 장점을 설명합니다. 이 문서에서는 SQLite 기능에 대한 특별한 지식이 필요하지 않지만 SQL에 대한 최소한의 이해만으로도 유용합니다.
비디오 튜토리얼: MetaTrader 신호 서비스 비디오 튜토리얼: MetaTrader 신호 서비스
이 비디오 튜토리얼은 15분 만에 MetaTrader 신호 서비스가 무엇인지 설명하고, 거래 신호에 가입하는 방법과 우리 서비스에서 신호 공급자가 되는 방법을 자세히 보여줍니다. 이 튜토리얼을 시청하면 거래 신호에 가입하거나 자체 신호를 게시 및 홍보할 수 있습니다.
세줄 브레이크 차트(Three Line Break Chart)를 구성하기 위한 지시자 세줄 브레이크 차트(Three Line Break Chart)를 구성하기 위한 지시자
이 기사는 스티브 니슨이 그의 책 "캔들스틱 그 너머"에서 제안한 3행 브레이크 차트(Three Line Break Chart)에 관한 것입니다. 이 차트의 가장 큰 장점은 이전 이동과 관련하여 가격의 사소한 변동을 필터링할 수 있다는 것입니다. 우리는 차트 구성의 원칙, 지표의 코드, 그리고 그것을 기반으로 한 거래 전략의 몇 가지 예를 논의할 것입니다.
지연되지 않는(Non-Lagging) 디지털 필터 생성하기 지연되지 않는(Non-Lagging) 디지털 필터 생성하기
이 문서에서는 스트림 데이터에서 유용한 신호(트렌드)를 결정하는 방법 중 하나를 설명합니다. 마켓 견적에 적용된 소규모 필터링(스무딩) 테스트는 마지막 막대에 다시 그려지지 않은 지연되지 않는 디지털 필터(지시자)를 만들 수 있는 가능성을 보여줍니다.