표준 기능/접근법의 대체 구현 - 페이지 13

 
Реter Konow :

블록의 시작 부분은 다음과 같습니다.

내가 당신을 이해하는 한 당신은 자신만의 통역 언어를 만들었습니다.

  • 인터페이스 자체를 이 언어의 텍스트 파일로 만듭니다.
  • 그런 다음 Java 시스템과 유사하게 기본 프로그램 자체의 본문이 이 텍스트 파일을 로드하고 기본적으로 배열인 "바이트코드"로 변환합니다.
  • 이 배열에서 인터페이스 이미지가 형성됩니다.

이 정도?

그리고 또 다른 어리석은 질문:

서로 다른 요소로 구성된 각각의 창 - 하나의 리소스입니까, 아니면 여러 개입니까?

위협 아마도 가장 좋은 비유는 HTML이겠지만

내가 전에 말했듯이, 당신의 아이디어는 그래픽 디자이너가 필요합니다. Andrey Barinov의 .

또한 동영상 이 너무 깁니다. 45분에서 5분, 바람직하게는 최대 3분으로 줄여야 합니다.

 
A100 :

스스로 답을 찾아보셨나요?

힌트: Google 검색 창에 "DBL_MANT_DIG 53 52"를 입력하십시오.

네, 고마워요. 설립하다.

 
Nikolai Semko :

1. 내가 당신을 이해하는 한 당신은 당신만의 통역 언어를 만들었습니다.

  • 인터페이스 자체를 이 언어의 텍스트 파일로 만듭니다.
  • 그런 다음 Java 시스템과 유사하게 기본 프로그램 자체의 본문이 이 텍스트 파일을 로드하고 기본적으로 배열인 "바이트코드"로 변환합니다.
  • 이 배열에서 인터페이스 이미지가 형성됩니다.

이 정도?

2. 그리고 또 다른 어리석은 질문:

서로 다른 요소로 구성된 각각의 창 - 하나의 리소스입니까, 아니면 여러 개입니까?

위협 아마도 가장 좋은 비유는 HTML이겠지만

내가 전에 말했듯이, 당신의 아이디어는 그래픽 디자이너가 필요합니다. Andrey Barinov의 .

또한 동영상 이 너무 깁니다. 45분에서 5분, 바람직하게는 최대 3분으로 줄여야 합니다.

1. 네, "인터프리터"의 정의가 제가 만든 것과 가장 잘 맞는 것으로 나타났습니다.

  • 네, 맞습니다. 인터페이스는 텍스트 파일로 생성됩니다. 보다 정확하게는 "문자열 SOURCE[]" 배열은 인디케이터에 연결된 파일 내부에서 직접 초기화됩니다. (사용자는 "KIB-code"를 작성하여 어레이를 초기화합니다.) 또한 표시기 파일은 사용자가 컴파일하고 배열의 내용은 EventChartCustom()을 사용하여 생성자(EA)에 전달됩니다.

  • 생성자 내에서 사용자 지정 "KIB 코드"는 문자열에서 "슬라이싱" 형식으로 허용됩니다. 전달된 각 문자열은 128자의 연결입니다. 이러한 문자열은 분할되어 생성자 측의 SOURCE 배열 복사본에 기록됩니다. 그런 다음 "SOURCE" 배열의 내용을 "int G_CORE[][]" 배열의 내용으로 바꾸는 "Core Builder"가 실행됩니다. 이것이 "핵심"입니다. 한 콘텐츠를 다른 콘텐츠로 변환하는 블록으로, 5000줄 이상의 코드(함수 집합으로 구성됨)입니다.
  • .
  • 변환은 모든 요소와 창 플랫폼의 프로토타입을 포함하는 중간 배열 "int TEMPLATES[]"의 도움으로 이루어집니다. "SOURCE[]"(사용자 생성)의 지시에 따라 메인 코어가 조립됩니다. 요소 템플릿은 "TEMPLATES"에서 가져오고 "G_CORE"로 변환됩니다.
  • .
  • 커널이 빌드되면 "엔진"(GUI 역학 관리를 담당하는 생성자의 일부)이 빌드된 커널과 함께 작업을 시작합니다. 필요한 캔버스를 그리고 창을 엽니다.

2. 각각의 형성된 창은 몇 개의 캔버스(리소스)입니다. 처음 두 가지는 창 플랫폼입니다. 이전에는 다른 그리기 방법을 사용했기 때문에 일부 세부 사항이 반투명하고 그래프가 표시되었습니다. 이를 피하기 위해 배경에 다른 캔버스를 추가했습니다. 그런 다음 기술이 향상되었지만 캔버스는 배경에 남아있었습니다. 그는 기술에 "뿌리를 잡고" 이제 그를 제거하기가 어렵습니다. 하지만 결국 제거하고 창 플랫폼은 하나의 캔버스로 구성됩니다.

또한 "필드"(탭으로 전환된 이미지)는 그 자체로 캔버스입니다. 여기에는 기성품 이미지가 포함되어 있으므로 가능한 한 빨리 전환됩니다. 같은 캔버스에 모든 것을 그리면 어쩔 수 없이 이미지 전환이 느려집니다. 다시 그려야 겠습니다. 일반적으로 이것이 최선의 선택이라는 결론에 도달했습니다.


3. 비주얼 그래픽 디자이너 - 나의 목표였고 지금도 마찬가지입니다. 구현 초기에 매우 가까워졌습니다. 그 구조에 대한 이해가 있습니다. 개념의 구현에 필요한 모든 것이 있습니다. 나는 그것을 만드는 방법을 알고 있습니다. 시간이 걸릴 뿐입니다.


추신. 내 발달의 특징은 자발성 입니다. 나는 인터프리터나 HTML에 익숙하지 않았고 그들이 어떻게 작동하는지 몰랐습니다. 그러나 이것이 비슷한 것을 만들고 만드는 것을 막지는 못합니다. 잘되면 계속 할 생각입니다. :)

 
Реter Konow :

언뜻보기에 당신은 메모리를 매우 낭비적으로 사용하고 있습니다. 내가 틀릴 수도 있지만.

그리고 내가 보기에 이상적으로는 가격 차트 위에 투명도를 지원하는 캔버스가 하나만 있어야 합니다.

MQL5의 성능은 올바르게 코딩하면 메모리에 기성품 블록이 없어도 즉석에서 전체 인터페이스를 형성하기에 충분해야 합니다.

부피가 큰 인터페이스가 성능을 향상시키려면 메모리 리소스를 희생해야 한다는 점을 배제하지는 않습니다.

지금까지 귀하의 접근 방식에서 한 가지 큰 이점이 있습니다.

본격적인 그래픽 디자이너 를 만드는 것이 더 쉬울 것입니다. 실제 MQL 코드보다 마크업 코드를 생성하는 것이 더 쉽습니다.


그러나 이것은 코끼리 같은 작업입니다.
 
Nikolai Semko :

언뜻보기에는 메모리를 매우 낭비적으로 사용하고 있습니다. 내가 틀릴 수도 있지만.

그리고 내가 보기에 이상적으로는 가격 차트 위에 투명도를 지원하는 캔버스가 하나만 있어야 합니다.

MQL5의 성능은 올바르게 코딩하면 메모리에 기성품 블록이 없어도 즉석에서 전체 인터페이스를 형성하기에 충분해야 합니다.

부피가 큰 인터페이스가 성능을 향상시키려면 메모리 리소스를 희생해야 한다는 점을 배제하지는 않습니다.

지금까지 귀하의 접근 방식에서 한 가지 큰 이점이 있습니다.

본격적인 그래픽 디자이너 를 만드는 것이 더 쉬울 것입니다. 실제 MQL 코드보다 마크업 코드를 생성하는 것이 더 쉽습니다.


그러나 이것은 코끼리 같은 작업입니다.

상대적으로 작은 메모리 오버런이 여전히 존재합니다. 당신이 맞습니다. 텍스트나 아이콘과 같은 요소 개체는 "불필요하게" 코어에서 235개의 속성을 받지만 자체 속성은 몇 배나 적습니다. 요소의 기본 개체인 기본 개체에는 235개의 속성이 모두 있어야 하지만 아이콘 및 텍스트 개체에는 더 적은 수의 속성이 있습니다. 이것은 메모리 오버런을 생성합니다.

기본 요소 개체의 행에 다른 60개의 셀을 추가하면 텍스트와 아이콘 속성을 넣을 수 있다는 아이디어입니다. 이렇게 하면 코어가 "더 넓어지지만" 개체의 3분의 2가 제거될 수 있습니다.

메모리가 크게 절약되고 커널 빌드 속도가 향상됩니다. 그러나 이것은 기술적으로 어렵습니다. 많은 재작업이 필요합니다. 지금까지 메모리 소비와 빌드 시간은 상당히 수용 가능합니다. 그러나 완벽에는 한계가 없습니다 ...


하나의 캔버스를 사용하는 것은 좋은 생각이 아닙니다. 그리고 요점이 무엇입니까? 각 창에 하나의 캔버스를 사용하고 각 필드에 하나의 캔버스를 사용하는 것이 훨씬 쉽습니다. 일반 캔버스는 훨씬 더 자주 다시 그려야 합니다. 모든 이미지 전환 시 또는 모든 창 전환 시. 스크롤할 때... 다시 그리기가 항상 빠르지는 않다는 점을 고려해야 합니다. 알고리즘에 관한 것이 아니라 그래픽의 "트릭"에 관한 것입니다. 설명할 것:

간단한 직사각형 레이블(예: 정사각형)을 그리는 경우 원하는 값(색상)으로 원하는 셀을 초기화하는 픽셀 배열을 통해 한 주기입니다.

프레임이 있는 사각형을 그리는 경우 픽셀 배열을 통해 두 주기입니다.

테두리와 아이콘이 있는 정사각형을 그리면 세 개의 주기가 됩니다.

표면 그라디언트가 있는 테두리와 그림자가 있는 아이콘이 있는 정사각형을 그리는 경우 픽셀 배열을 통해 4회 이상 순환해야 합니다.

따라서 그래픽이 차가울수록 이 픽셀 배열을 주기적으로 "다리미"해야 원하는 이미지를 생성할 수 있습니다. 따라서 다시 그릴 필요가 적을수록 좋습니다.

모든 이미지에 대해 하나의 캔버스를 사용하면 모든 것을 계속해서 다시 그려야 합니다. 따라서 이것은 적합한 솔루션이 아닙니다.


추신. 임무는 물론 코끼리지만 나는 그것을 처리할 수 있습니다. 그래도 주저하지 않고 도와드리겠습니다.

ZYY. 영상 감사합니다, 감동입니다! :)

 
Реter Konow :


마우스로 창의 크기를 변경합니까?
그렇다면 빨간색 상자 가 나타납니까?

 
Nikolai Semko :

마우스로 창의 크기를 변경합니까?
그렇다면 빨간색 상자 가 나타납니까?

무슨 광장을 말씀하시는지 이해가 안됩니다.

동적 창의 크기는 마우스로 변경됩니다. 다른 방법은?


추신. 동적 창은 처음에 전체 화면 크기를 갖습니다. 또한 원하는 크기로 "자릅니다". 즉, 이미 생성된 비트맵의 미리 설정된 최대 공간에서 모든 역동성을 구현합니다.

 

반올림의 주제를 계속합니다.
확장된 SSE4.1 명령어 시스템 세트를 지원하는 최신 인텔 프로세서에는 반올림 명령어 ROUND{PS, PD}가 있다는 사실을 여기서 알았습니다. 확실히 AMD도 비슷한 것이 있습니다.

https://ru.wikipedia.org/wiki/SSE4#SSE4a

http://o-ili-v.ru/wiki/SSE4

어떤 일이 발생합니까? MQL5 컴파일러는 프로세서 수준에서 이 명령을 사용하지 않습니까? 왜냐하면 내 Intel Kaby Lake 프로세서는 이 세트를 지원합니다.

그리고 훨씬 더 많은 벡터의 스칼라 곱셈이 있습니다.

SSE4 — Википедия
  • ru.wikipedia.org
SSE4 — новый набор команд микроархитектуры Intel Core, впервые реализованный в процессорах серии Penryn (не следует путать с SSE4A от AMD)[1]. Он был анонсирован 27 сентября 2006 года, однако детальное описание стало доступно только весной 2007 года. Более подробное описание новых возможностей процессоров для программистов можно найти на сайте...