구조에 입력 매개변수를 넣지 않는 이유는 무엇입니까?

 

나는 "수업의 고문"접근 방식에 대해 이야기하고 있습니다. 별도의 .mqh 파일에 클래스가 있는 Expert Advisor에 입력 매개변수를 전달 하는 데 문제가 있습니다. 나는 두 가지 방법을 사용한다

  1. 입력 매개변수는 하나 이상의 초기화 함수에 의해 EA 클래스의 필드에 복사됩니다. 가장 보편적인 접근 방식이지만 변수가 많은 경우 시간이 가장 많이 소요됩니다.
  2. 클래스는 입력 변수 뒤에 정의되므로 EA에서 볼 수 있습니다. 단점은 여러 클래스 인스턴스를 사용할 때 유연성이 떨어진다는 것입니다. 플러스 - 최소한의 글쓰기.

 input double LotSize = 0.1 ;
// другие input переменные...

#include <MyLib\MyClassEA.mqh>
CMyClassEA MyEA;

그러나 MQL 언어를 확장하고 구조에 입력 변수를 배치하면 어떻게 될까요? 마찬가지로 포인터를 모방하기 때문에 C++ 및 C와 호환되지 않습니다. 그렇다면 더 나아가지 않는 이유는 무엇입니까?

 struct InputVars
{
     input double Lot   = 0.1 ;
     input int     Magik = 100 ;
} ivars;

그런 다음 ivars 변수를 알고리즘 클래스에 전달하고 복사하는 등의 작업이 가능합니다.

브레인 스토밍 수준에서 아이디어를 취하십시오))

 

나는 오랫동안 많은 설정으로 작업해야 하는 필요성을 처리해야 했습니다. 가능하면 DLL을 통해 매개변수가 탭으로 구분되는 특수 대화 상자 를 만들어 이 문제를 해결합니다. 초기화 후 이 창은 숨겨지고 프로그램은 평소와 같이 작동합니다.

이제 MQL에 비슷한 것이 있으면 방대한 매개변수 목록을 스크롤하지 않습니다. 제안 자체, 배열 방법이 흥미롭습니다. 구문만 약간 다릅니다.

 input struct VolumeParams                               // Здесь название вкладки
{
     // Содержимое вкладки
     double Lot1 = 0.01 ;
     double Lot2 = 0.02 ;
     double LotRatio = 1.5 ;
};
 
Ihor Herasko :

나는 오랫동안 많은 설정으로 작업해야 하는 필요성을 처리해야 했습니다. 가능하면 DLL을 통해 매개변수가 탭으로 구분되는 특수 대화 상자를 만들어 이 문제를 해결합니다. 초기화 후 이 창은 숨겨지고 프로그램은 평소와 같이 작동합니다.

이제 MQL에 비슷한 것이 있으면 방대한 매개변수 목록을 스크롤하지 않습니다. 제안 자체, 배열 방법이 흥미롭습니다. 구문만 약간 다릅니다.


맞아, 그래서 더 짧음) 그러나 dll을 사용하면 시장에 가지 않을 것입니다.

대화 상자를 사용하면 테스터 의 매개변수를 최적화 할 수 없습니다.

 

다음과 같이 더 좋습니다.

 struct VolumeParams                              
{
     double lot;         //название параметра
     double LotRatio;     //название параметра
     int tp;             //название параметра
     int sl;             //название параметра
     int orders;         //название параметра
};
VolumeParams ParamBuf[ 5 ];

input ParamBuf[ 0 ];         // Здесь название вкладки
input ParamBuf[ 1 ];         // Здесь название вкладки
input ParamBuf[ 2 ];         // Здесь название вкладки
input ParamBuf[ 3 ];         // Здесь название вкладки
input ParamBuf[ 4 ];         // Здесь название вкладки
 

IMHO, 우수한 아이디어는 OOP의 개념에 해당합니다. 지금까지 2가지 옵션이 표시됩니다.

1) FrameInputs 스타일

parameters

[out] 매개변수 이름 및 값에 대한 설명이 있는 문자열 배열

매개변수_카운트

[out] parameters[] 배열 의 요소 수입니다 .

2) MqlParams 스타일.

 

나는 항상 첫 번째 방법을 사용합니다.

Expert Advisor가 거래(적어도 데모에서, 적어도 실제에서)에 배치되면 매개변수가 고정되고 하나의 매개변수만 Expert Advisor 클래스에 전달됩니다(위험 비율). 그럼에도 불구하고 튜닝 매개변수는 동일한 구조로 작성되고 Expert Advisor 내부에서 정의됩니다. 생성자 또는 특수 기능에 있습니다.

 
Alexey Volchanskiy :

나는 "수업의 고문"접근 방식에 대해 이야기하고 있습니다. 별도의 .mqh 파일에 클래스가 있는 Expert Advisor에 입력 매개변수를 전달 하는 데 문제가 있습니다.

문제를 느끼지 못했습니다. 클래스 생성자에 템플릿을 등록하면 됩니다.

 
fxsaber :

문제를 느끼지 못했습니다. 클래스 생성자에 템플릿을 등록하면 됩니다.


글쎄, 당신은 고객과 의사 소통하지 않았습니다)

...여기서 고객은 10개의 항목을 원하고 각 단계에는 고유한 tp/sl/lot/trail/entry 신호가 있습니다.

테스터에서 모두 최적화되어 있음)

 
Taras Slobodyanik :

글쎄, 당신은 고객과 의사 소통하지 않았습니다)

...여기서 고객은 10개의 항목을 원하고 각 단계에는 고유한 tp/sl/lot/trail/entry 신호가 있습니다.

테스터에서 모두 최적화되어 있음)

그렇다면 이것이 스레드의 주제와 어떤 관련이 있습니까?

 
fxsaber :

그렇다면 이것이 스레드의 주제와 어떤 관련이 있습니까?


토론 자체는 실제로 스레드 제목에서 약간 벗어났습니다. 이제 TS 게시물의 두 번째 부분이 더 많이 논의되고 있습니다.

알렉세이 볼찬스키

그러나 MQL 언어를 확장하고 구조에 입력 변수를 배치하면 어떻게 될까요? 마찬가지로 포인터를 모방하기 때문에 C++ 및 C와 호환되지 않습니다. 그렇다면 더 나아가지 않는 이유는 무엇입니까?

그런 다음 ivars 변수를 알고리즘 클래스에 전달하고 복사하는 등의 작업이 가능합니다.

 
fxsaber :

그렇다면 이것이 스레드의 주제와 어떤 관련이 있습니까?


이것은 사실입니다. 이 모든 매개변수 힙을 작성하려면 구조를 정의하고 입력 매개변수에 넣는 것으로 충분합니다.

사유: