새로운 세대의 거래 프로그램이 도래했습니다. 고문의 인터페이스는 무엇이어야 합니까? - 페이지 12

 
Yury Kulikov :
모든 것이 어떻게 시작되었는지 :)
EA에서 구현된 파일 탐색기 표시기를 사용하여 인터페이스를 만드는 예에 대해 이야기했습니다. 그러나 "파일 탐색기"라는 단어에 집착하지 마십시오. 이것은 작업의 예이며 Expert Advisors에는 터미널 창의 탐색기, 차트의 개체, 터미널의 표시기 등 많은 유사한 작업이 있을 수 있습니다. 이것은 전역 변수 를 통해 지표에 입력하려는 목록(표) 행을 통해 구현된 작업의 작은 계층일 뿐입니다.
나는 지금 약간 혼란스러워서 귀하의 게시물의 요점 중 일부를 놓치고 있습니다. 양해를 구합니다. 잠시 후에 엔진, 스튜디오, 인터페이스, 어드바이저의 개념에 대해 자세히 설명하겠습니다. 우리가 그것에 대해 논의할 수 있습니다. :)
 

1. 그래픽 엔진의 개념.

2. 그래픽 코어의 개념.

3. MT 플랫폼용 비주얼 스튜디오를 만드는 단계.

4. EA 인터페이스 생성 메커니즘에 대한 설명.


1. 그래픽 엔진은 지표로 실행되는 프로그램입니다. 이 프로그램은 전적으로 사용자 인터페이스를 관리하도록 설계되었습니다. 일련의 기본 기능을 수행합니다.

  • 파일에서 GUI 코어 로드.
  • 사용자 인터페이스 설정을 저장합니다.
  • 인터페이스의 모든 프로세스에 대한 단일 조정된 관리 구현. 창 열기 및 닫기, 창 크기 조정, 창 이동, 창 병합, 크기 조정, 스크립트 재생, 개체 상태 변경, 개체 바인딩, 제어 매개변수 값 관리를 포함하는 인터페이스 관리의 "역학"을 구현합니다. 유형 및 속성에 따라 전역 생성 및 소멸. 변수.

그래픽 엔진은 다른 지표와 마찬가지로 차트에 추가됩니다. 여기에는 다음 창 세트가 포함됩니다.

  • 작업 표시줄의 오른쪽에는 엔진 자체의 서비스 창을 호출하는 여러 아이콘이 추가됩니다.
  • 파일 탐색기, 부트 파일이 특별한 위치에 있는 인터페이스가 있는 파일 목록 에서 선택됩니다. 폴더.
  • 이 단계에서 기본적인 역할을 하지 않는 선택적 설정 창.

여기에는 원칙적으로 그래픽 엔진의 개념이 소진됩니다. 그것 없이는 인터페이스의 작동이 불가능하다는 것이 중요합니다.



2. 그래픽 코어는 인터페이스의 모든 개체 및 창의 데이터를 포함하는 정보 블록으로 배열로 작성되고 파일로 저장됩니다.

이 블록은 그래픽 인터페이스의 디지털 반영입니다. 사용자의 지시에 따라 그래픽 엔진에 의해 로드됩니다. 그래픽 엔진 자체에는 자체 내부 그래프가 있습니다. 자체 창을 제공하는 커널이며 해당 커널 내에는 사용자 인터페이스가 (디지털로) 통합될 여지가 있습니다. 통합은 파일에서 그래픽 코어를 로드하는 과정에서 수행됩니다.


3. 내 이해에 따르면 MT 플랫폼에서 Visual Studio를 만드는 것은 두 단계로 나뉩니다.

  • 첫 번째 단계에서 인터페이스 생성자의 파일 버전이 생성됩니다. 여기에서 사용자는 테이블 템플릿으로 작업합니다. 사용자는 인터페이스 요소의 유형과 이름을 테이블에 입력하고 해당 매개변수의 속성을 설정합니다. 생성은 사용자가 창에서 요소의 올바른 위치에 대해 걱정할 필요가 없는 매우 쉬운 프로세스가 될 것이며(엔진이 모든 것을 자동으로 계산함) 요소를 배열하는 것으로 충분할 것입니다. 그에게 필요한 순서.
  • 두 번째 단계에서는 파일 생성자와 동일한 인터페이스 구성 방법이 구현되는 시각적 환경이 만들어지고 그 사용만 훨씬 더 쉽고 편리해집니다. 또한 컨트롤의 모양을 변경하는 기능도 추가됩니다. 일반적으로 사용자는 더 많은 그래픽 옵션을 갖게 됩니다.


4. 일반적인 용어로 인터페이스를 만드는 과정의 메커니즘을 설명하고 기술의 베일을 약간 열어보고 싶습니다. 파일을 통한 인터페이스 생성의 용이성은 어디에서 오는지 설명하십시오.

요점은 다음과 같습니다. 엔진에는 특수 기능이 있습니다. 최소한의 부팅 정보로 단일 파일을 기반으로 본격적인 그래픽 코어를 생성하는 기능. 이 파일의 부팅 정보는 설명이 필요 없고 사람이 읽을 수 있습니다. 작성 및 편집이 쉽습니다. 예를 들어 창을 생성하려면 "_CREATE_NEW_WINDOW"라고 쓰고 체크박스 "_CHECKBOX"와 이 체크박스의 이름을 생성하면 됩니다. (엔진은 자동으로 요소의 이름을 요소 자체의 이름으로 인식합니다. 매개변수의 이름으로).

이 함수는 "G_CORE_BUILDER()"라고 하며 두 가지 주요 소스에서 데이터를 가져오는 그래픽 코어를 빌드합니다. 사용자 생성 부트 파일과 "CONTENT[]" 배열에서 데이터를 가져옵니다. 창 및 제어 플랫폼의 일부입니다. "CONTENT[]"에는 개체 상태와 스크립트도 포함됩니다. 모든 것이 하나의 어레이에 있습니다. 일반적으로 "CONTENT[]"의 소스 자료 + 사용자 생성 부트 파일은 엔진이 작동하는 그래픽 코어를 빌드하기 위해 "G_CORE_BUILDER()" 함수에 의해 사용됩니다.

 

혼동을 피하기 위해 부트 파일이 두 가지 형식이 될 수 있음을 추가하고 싶습니다.

1. 매개변수의 창, 컨트롤 및 속성을 설명하는 사용자가 컴파일한 일련의 지침입니다. 이 경우 "G_CORE_BUILDER()" 함수가 부팅 단계에서 실행되고 그래픽 코어를 빌드합니다.

2. 엔진에 직접 로드되는 기성 그래픽 코어 형태. 이 변형에서는 "G_CORE_BUILDER()" 함수를 사용할 필요가 없습니다.

첫 번째 옵션은 인터페이스 생성자에서 사용되고 두 번째 옵션은 모든 응용 프로그램의 기성 인터페이스를 시작하는 데 사용됩니다.

기성품 그래픽 코어는 작업을 용이하게 하기 위해 커널 구축 시스템("G_CORE_BUILDER()" 및 "CONTENT[]") 배열이 제거되는 단순화된 버전의 엔진과 함께 로드됩니다.
 
Реter Konow :
그림을 그리는 것은 아직 인터페이스가 아닙니다. 가장 중요한 질문에 대해 침묵하고 있습니다. " 전역 변수 "를 통해 전문가가 지표와 상호 작용하는 방법은 모호하게 들립니다.
 
Yury Kulikov :
그림을 그리는 것은 아직 인터페이스가 아닙니다. 가장 중요한 질문에 대해 침묵하고 있습니다. " 전역 변수 "를 통해 전문가가 지표와 상호 작용하는 방법은 모호하게 들립니다.
현재 Expert Advisor와 인터페이스 간의 상호 작용 시스템은 글로벌을 통해 지표에서 구현됩니다. 변수, 나는 종이에 만 있고 아직 그것을 만들어 본 경험이 없습니다. 제가 발표한 내용을 좀 더 자세히 설명하도록 노력할 것이며, 그 내용에 모순이나 오류가 있으면 댓글 부탁드립니다.

1. 모든 사람이 알고 있는 사실을 상기시켜 드리겠습니다. 각 전역 변수는 차트에 로드된 모든 프로그램의 범위에 있습니다. 글로벌을 만들려면 변수를 호출해야 합니다. 함수에 변수의 이름과 값을 전달합니다.

2. 글로벌 변수는 인터페이스 로딩 단계에서 엔진에 의해 생성되며, 부트 파일을 읽어들입니다. 부트 파일 자체에는 glob의 이름이 포함됩니다. 변수 및 저장된(또는 사전 설정) 값.

3. 엔진 내부에는 요소 유형, 값 유형 및 매개변수 속성에 따라 제어 매개변수 값을 관리하는 특수 블록이 있습니다. 사용자가 "spin edit" 요소의 값을 되감거나 확인란을 선택하면 매개변수가 있는 제어 상호 작용 블록이 특정 값, 특정 변수로 특정 작업을 수행합니다.

4. 변수가 전역적이라는 사실 때문에 전문가는 그 값을 지속적으로 "관찰"하고 각 전역 값의 변화에 응답합니다. 내장된 알고리즘에 따른 변수.

5. 전문가 측에서는 전역 변수의 "관찰"을 수행할 수 있을 뿐만 아니라 기능 측면에서 해당 값에 대한 본격적인 작업을 수행할 수 있습니다. 여기서 glob이라는 것을 이해하는 것이 중요합니다. 변수는 조건부 로 두 가지 유형으로 나뉩니다. 사용자가 "제어"하는 변수, 그 값은 인터페이스의 컨트롤을 통해 사용자가 설정하고 변수는 EA의 기능에 의해 "제어"되며 값은 다음과 같습니다. 사용자 기능에 의해 결정됩니다.

6. 엔진은 차례로 두 조건부 유형의 전역에서 작동합니다. 변수. 사용자가 "제어하는"변수의 값과 "매개변수가 있는 제어 요소의 상호 작용 블록" 의 작동 원리와 전문가의 기능에 의해 "제어되는" 값으로 작업하는 원리를 설명했습니다. 동일한 블록은 조건부로 컨트롤을 두 가지 범주로 나눕니다. 값을 제어하는 범주와 값을 출력하는 범주(어떤 식으로든 표시). 이러한 각 요소(입력 필드, 진행률 표시줄 등...)는 해당 변수 값을 변경하는 이벤트를 구독합니다. 변수의 값이 변경되는 즉시 블록은 해당 요소에 접근하여 기본 요소 유형에서 제공되는 이 요소로 조작을 수행합니다.

블록은 모든 전역을 순환합니다. 타이머의 주파수에서 변수, 따라서 기능에 의해 제어되는 변수 값의 동작을 "따릅니다".

//------------------------------------------------ -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --
추신: 사용자 인터페이스에서 고문 설정을 로드하는 방법에 대한 질문과 관련하여 제 생각에는 이것이 다음에 수행될 것입니다. 방법:

EA가 작업하는 모든 전역 변수의 값(EA 설정을 나타내는 값 포함)은 EA의 언로딩 이벤트에서 소멸되기 전에 로드 파일에 저장됩니다. 인터페이스가 로드될 때마다 이러한 동일한 전역 변수가 다시 생성되고 이전 값을 사용합니다. 다음으로 Expert Advisor가 로드되고 해당 변수에 액세스합니다.
 
Реter Konow :

전역 변수 를 통해 텍스트(예: 파일 이름)를 전달하는 방법은 무엇입니까?

전문가는 어떻게 창을 활성화/비활성화할 수 있습니까?

Expert Advisor가 실행되는 동안 Expert Advisor는 어떻게 새 창을 만들 수 있습니까?

...

 
Yury Kulikov :

1. 전역 변수 를 통해 텍스트(예: 파일 이름)를 전달하는 방법은 무엇입니까?

2. 전문가는 어떻게 창을 활성화/비활성화할 수 있습니까?

3. Expert Advisor가 실행되는 동안 Expert Advisor는 어떻게 새 창을 만들 수 있습니까?

...

1. 이 문제는 아직 해결되지 않았습니다. 내 머리 꼭대기에서 몇 가지 옵션을 제공할 수 있습니다.

a) glob 자체의 이름으로 문자열을 전달합니다. 변하기 쉬운. 변수가 인덱싱되기 때문에 엔진과 전문가는 항상 해당 글로벌의 인덱스를 "알고" 있어야 합니다. 이름을 변경하고 문자열을 전달할 때마다 텍스트를 전달하기 위해 지워지고 다시 생성되는 변수입니다. 언뜻보기에는 옵션이 서투른 것처럼 보이지만 누가 알겠습니까? 개선 할 수 있습니다 ...

b) 한 변수의 값을 통해 문자열을 순차적으로 그러나 문자로 전달합니다. 여기서 문자 자체 대신 해당 숫자가 전송되고 전송 프로세스는 n번째 타이머 기간에서 수행됩니다. .

2. 현재 제 생각에는 전문가가 창을 활성화/비활성화하는 방법은 없습니다. 솔직히 말해서, 나는 당신이 의미하는 바를 잘 이해하지 못합니다. 사용자와 엔진만이 창을 다룰 것입니다. Expert Advisor는 변수 및 자체 기능에 대해서만 작동합니다. 그는 아직 인터페이스에 액세스할 수 없습니다. (네, 그리고 요점이 무엇입니까?)

3. 사용자가 자신의 재량에 따라 (구성 요소) 창 세트를 그룹화할 수 있는 새 (합성) 창은 예를 들어 주 메뉴 항목 "new 창문". 모든 그룹화 창은 인터페이스에서 이미 생성되었으며 사용자가 필요로 하는 정보를 그룹화하는 데 사용되는 합성 창의 수는 (조건부) 무제한일 수 있다는 것이 중요합니다. 창 세트와 그 내용은 파일에 저장됩니다.

 
Реter Konow : 그는 아직 인터페이스에 액세스할 수 없습니다. (예, 그리고 요점이 무엇입니까?)

의미는 기본입니다. 이벤트는 인터페이스에서만 발생하는 것이 아닙니다.

"타이타닉"으로 가는 길에 하나 이상의 빙산이 있을 것입니다. 잘못된 측면에서 프로젝트를 시작했으며 전역 변수 는 여기에서 도움이 되지 않습니다.

 
Yury Kulikov :

의미는 기본입니다. 이벤트는 인터페이스에서만 발생하는 것이 아닙니다.

"타이타닉"으로 가는 길에 하나 이상의 빙산이 있을 것입니다. 잘못된 측면에서 프로젝트를 시작했으며 전역 변수 는 여기에서 도움이 되지 않습니다.

글쎄, 내가 프로젝트를 어디에서 시작했어야 했다고 생각하고 무엇이 나를 도울 수 있습니까?
 
Реter Konow :
글쎄, 내가 프로젝트를 어디에서 시작했어야 했다고 생각하고 무엇이 나를 도울 수 있습니까?

전문가와 함께 시작해야 한다고 생각합니다. 나는 전문가와 관련된 세 가지 유형의 작업을 제공했지만 귀하의 인터페이스에서 실현 가능하지 않은 것으로 나타났습니다.

무엇을 도울 수 있습니까? 아마도 더 깊은 통합 또는 프로젝트를 "원격 제어"로 제한할 수 있습니다.