MetaTrader 4는 기록 깊이가 제한되어 있고 별도의 시간 프레임이 있으며 Open/High/Low/Close/Time[xxx]을 통해 기호 막대에 직접 액세스할 수 있습니다. 이러한 직접 액세스는 리소스 및 CPU 오버헤드 측면에서 구현하는 데 매우 비용이 많이 듭니다. 다른 Expert Advisors 및 터미널 자체와 충돌하지 않도록 각 Expert Advisor에는 이 데이터의 고유한 로컬 복사본이 있다는 사실을 생각해 보십시오.
기호 수가 증가하고(예: MT5에서는 5,000-10,000개의 악기를 가질 수 있음) 모든 시간 프레임의 기초로 깊은 분 이력을 사용하면 MT4의 방법을 사용하는 것이 기본적으로 불가능합니다. RAM이 충분하지 않으며 큰 청크를 복사해도 성능이 저하됩니다. 따라서 MT5에서는 더 이상 각 전문가에 대해 숨겨지고 값비싼 차트 복사본을 자동으로 유지 관리하지 않습니다.
대신에 우리는 개발자가 사용 가능한 전체 그래프가 아니라 로컬 어레이에 필요한 만큼의 데이터를 정확하게 요청하는 매우 경제적인 CopyXXX 기능으로 전환했습니다. 다음은 로컬 데이터로 가능한 가장 빠른 작업입니다(이전 데이터 대신 Open/High/Low/Close/Time[xxx]는 매우 비쌉니다). 또한 작성자는 이 데이터를 캐시하고 다음에 호출될 때 드물게 사용할 수 있습니다. . 메모리와 CPU의 절약은 엄청납니다. 또한 플랫폼 자체는 거대한 데이터베이스를 관리할 수 있는 손을 덜어줍니다. 이러한 데이터베이스에 대한 액세스는 항상 요청 시(제어되지 않은 직접 대신) 이를 통해 캐시를 유연하게 관리할 수 있습니다.
MQL4에서 Open/High/Low/Close/Time[xxx]에 쉽게 액세스하는 것은 현재 심볼과 타임프레임에만 관련되며 다른 심볼과 타임프레임의 다른 모든 데이터는 iClose/iLow( ...) 심각한 브레이크를 준 기능. MQL5에서 CopyXXX 기능의 통합 모델로 전환하면 상황이 근본적으로 개선되어 개발자가 단일 요청으로 필요한 데이터 조각을 얻고 여러 차단 호출을 만들지 않을 수 있습니다(각 단일 iClose 호출에서 차단에 대해 생각해 보세요).
...
CopyXXX의 성능은 어떻습니까?
메모리 절약 측면에서 - 질문이 없습니다. 그러나 각 틱 에서 CopyXXX를 호출하는 것은 따옴표 배열을 버퍼에 한 번 복사하고 Rates[X] 유형의 직접 인덱스로 액세스하는 것보다 훨씬 더 비쌉니다. "메모리 절약 대 CPU 시간 절약"이라는 고전적인 프로그래밍 딜레마가 나타납니다.
메모리 절약 측면에서 - 질문이 없습니다. 그러나 각 틱에서 CopyXXX를 호출하는 것은 따옴표 배열을 버퍼에 한 번 복사하고 Rates[X] 유형의 직접 인덱스로 액세스하는 것보다 훨씬 더 비쌉니다. "메모리 절약 대 CPU 시간 절약"이라는 고전적인 프로그래밍 딜레마가 나타납니다.
CopyXXX는 iClose/iOpen/iXXXX 기능과 동일한 속도 를 가집니다. iXXX만 한 번에 하나의 요소를 반환하는 반면 CopyXXX는 집합을 반환하므로 더 효율적이고 성능 이 좋습니다.
MT4 에서는 틱 핸들러가 실행될 때마다 EA의 로컬(캐시) 시장 환경에 로컬 차트 의 _모든_ 기록이 강제로 복사 된다는 점을 고려하지 않을 것입니다. 이 정보를 경제적으로 업데이트할 수 있는 방법이 있지만 이것은 매우 비쌉니다. MQL4의 특수 기능 RefreshRates 는 로컬 차트의 캐시 및 기록을 강제로 업데이트합니다.
CopyXXX를 호출하는 것이 훨씬 더 효율적이며 개발자는 이전에 요청한 데이터를 캐싱하기 위한 매우 정확하고 정확한 메커니즘을 가지고 있습니다. 예를 들어 매 틱마다 심층 기록을 다시 요청할 필요는 없지만 로컬에 저장/추가하고 가장 빠르게 액세스할 수 있습니다.
"직접"(사실 직접 액세스가 없음) 액세스 Open/High/Low/Close의 이전 방법을 비교하고 로컬 배열 double local[xxxx]로 작업하면 후자가 몇 배 더 빠릅니다. 따라서 로컬에서 자신에게 복사한 다음 반복적으로 요청된 데이터에 로컬로 빠르게 액세스하는 것이 좋습니다.
맙소사, 아직 MT4가 있습니다. :) 당신은 그것을 원합니다 - 하나의 악기에. 당신이 원하는 - 다른.
위험을 어디에서 보십니까?
"거래 플랫폼"을 개발/사용할 때 궁극적으로 누군가가 감수해야 하는 특정 비용과 위험이 있습니다.
다른 개발자의 소프트웨어에서 "가상화"에 관해서
모든 것이 자체적으로 사용되고 솔루션을 구현하는 사람들이 자신이 하는 일을 이해한다면 이는 좋은 일입니다.
주요 비용은 다음과 같습니다: 시스템 개발에 사용된 자금, 시스템 성능 유지에 사용된 자금 및 프로젝트 에 소요된 시간.
주요 위험: 실행 가능한 프로젝트의 구현에 너무 많은 시간이나 비용이 소요될 것이며(프로젝트는 성과를 거두지 못할 것입니다), 프로젝트는 다른 솔루션에 비해 효과적이지 않을 것이며, 코드 또는 알고리즘에 숨겨진 오류가 발생합니다. 프로젝트의 구현.
예, 은행 및 기타 시장 참여자는 필요한 기능을 갖춘 소프트웨어 개발에 의존하지만 동시에 엄청난 시간과 리소스를 소비합니다. 그렇게 함으로써 그들은 모든 위험을 감수합니다.
MT5에서 작업하는 경우(MT5를 사용하는 다양한 옵션)
물론 여기서 MQ는 대부분의 작업을 수행했지만 기능에 대한 특정 제한도 도입했습니다.
주요 비용은 다음과 같습니다. 시스템 성능을 유지하는 데 소요되는 자금과 프로젝트에 소요되는 시간.
주요 위험: 프로젝트는 다른 솔루션에 비해 효과적이지 않으며, 프로젝트를 구현하는 동안 코드 또는 알고리즘에 숨겨진 오류가 발생하고, 전체 시스템의 성능을 지속적으로 모니터링해야 합니다(문제로부터 보호 소프트웨어 및 하드웨어, 통신 품질, 전원 공급 장치, 데이터 보안 등을 모니터링합니다.)
물론 여기에서 특정 제한 및 예약과 함께 상업적 사용(다른 사람에게 사용 가능성 제공)에 대해 생각할 수 있습니다.
나는 그런 말을하지 않았다.
이 주제를 전혀 건드리지 않았으며 참여할 계획도 없습니다.
분명히 나는 생각했다 :
그러나 통합된 손절매와 이익실현은 실제로 가상 이며 때가 되면 시장에서 실행을 위해 버려집니다. 이 솔루션 에는 좋은 측면 이 있습니다. GO(보증 조항, 마진)를 절약할 수 있습니다.
새로운 데이터 액세스 기능이 무엇을 하고 왜 하는지 생각해 보십시오.
MetaTrader 4는 기록 깊이가 제한되어 있고 별도의 시간 프레임이 있으며 Open/High/Low/Close/Time[xxx]을 통해 기호 막대에 직접 액세스할 수 있습니다. 이러한 직접 액세스는 리소스 및 CPU 오버헤드 측면에서 구현하는 데 매우 비용이 많이 듭니다. 다른 Expert Advisors 및 터미널 자체와 충돌하지 않도록 각 Expert Advisor에는 이 데이터의 고유한 로컬 복사본이 있다는 사실을 생각해 보십시오.
기호 수가 증가하고(예: MT5에서는 5,000-10,000개의 악기를 가질 수 있음) 모든 시간 프레임의 기초로 깊은 분 이력을 사용하면 MT4의 방법을 사용하는 것이 기본적으로 불가능합니다. RAM이 충분하지 않으며 큰 청크를 복사해도 성능이 저하됩니다. 따라서 MT5에서는 더 이상 각 전문가에 대해 숨겨지고 값비싼 차트 복사본을 자동으로 유지 관리하지 않습니다.
대신에 우리는 개발자가 사용 가능한 전체 그래프가 아니라 로컬 어레이에 필요한 만큼의 데이터를 정확하게 요청하는 매우 경제적인 CopyXXX 기능으로 전환했습니다. 다음은 로컬 데이터로 가능한 가장 빠른 작업입니다(이전 데이터 대신 Open/High/Low/Close/Time[xxx]는 매우 비쌉니다). 또한 작성자는 이 데이터를 캐시하고 다음에 호출될 때 드물게 사용할 수 있습니다. . 메모리와 CPU의 절약은 엄청납니다. 또한 플랫폼 자체는 거대한 데이터베이스를 관리할 수 있는 손을 덜어줍니다. 이러한 데이터베이스에 대한 액세스는 항상 요청 시(제어되지 않은 직접 대신) 이를 통해 캐시를 유연하게 관리할 수 있습니다.
MQL4에서 Open/High/Low/Close/Time[xxx]에 쉽게 액세스하는 것은 현재 심볼과 타임프레임에만 관련되며 다른 심볼과 타임프레임의 다른 모든 데이터는 iClose/iLow( ...) 심각한 브레이크를 준 기능. MQL5에서 CopyXXX 기능의 통합 모델로 전환하면 상황이 근본적으로 개선되어 개발자가 단일 요청으로 필요한 데이터 조각을 얻고 여러 차단 호출을 만들지 않을 수 있습니다(각 단일 iClose 호출에서 차단에 대해 생각해 보세요).
...
CopyXXX의 성능은 어떻습니까?
메모리 절약 측면에서 - 질문이 없습니다. 그러나 각 틱 에서 CopyXXX를 호출하는 것은 따옴표 배열을 버퍼에 한 번 복사하고 Rates[X] 유형의 직접 인덱스로 액세스하는 것보다 훨씬 더 비쌉니다. "메모리 절약 대 CPU 시간 절약"이라는 고전적인 프로그래밍 딜레마가 나타납니다.
MT5보다 작지 않습니다. 이제 같은 질문을 스스로에게 하고 4개만 5개로 바꾸세요.
시장이 무엇인지 배우러 가십시오! 상인, 당신은 알고 있습니다 ...
저것들. 예를 들어 MT4가 스프레드 기록을 저장하거나 실제 거래량에 대해 "알" 수 있다는 말입니까(목발 및 기타 완전히 부적절한 솔루션 없이)?
스프레드가 분명히 실제 시장에서 고정되어 있지 않다는 데 동의합니까? 이동하여 MT4 테스터에서 스프레드가 변경되는 인용문에 대해 Expert Advisor를 테스트한 다음 이야기하겠습니다.
복잡한 논리를 가진 전문가의 성장을 위해 전 세계가 고객의 이익만큼 나를 괴롭히지 않습니다. ;)
타협 솔루션은 MT5 수준에서 가상 주문을 구성하는 것입니다. 그런 다음 누군가에게 필요한 그물과 주문 작업의 오래된 논리가 있을 것입니다.
그러한 "시각화"의 위험을 감수하시겠습니까?
MT5에서는 상관관계가 높은 서로 다른 상품의 거래를 사용하는 헤징으로 인해 오랫동안 솔루션을 사용하고자 하는 모든 사람.
예, 이 마진은 MT4보다 훨씬 더 많이 필요할 수 있지만 상식의 관점에서 이것은 맞습니다.
물론 이 경우 아무도 "가상" 계획을 취소하지 않았습니다.
저것들. 예를 들어 MT4가 스프레드 기록을 저장하거나 실제 거래량에 대해 "알" 수 있다는 말입니까(목발 및 기타 완전히 부적절한 솔루션 없이)?
스프레드가 분명히 실제 시장에서 고정되어 있지 않다는 데 동의합니까? 이동하여 MT4 테스터에서 스프레드가 변경되는 인용문에 대해 Expert Advisor를 테스트한 다음 이야기하겠습니다.
그러한 "시각화"의 위험을 감수하시겠습니까?
MT5에서는 상관관계가 높은 서로 다른 상품의 거래를 사용하는 헤징으로 인해 오랫동안 솔루션을 사용하고자 하는 모든 사람.
신이시여, 아직 MT4가 있습니다. :) 당신은 그것을 원합니다 - 하나의 악기에. 당신이 원하는 - 다른.
위험은 어디에서 보십니까?
CopyXXX의 성능은 어떻습니까?
메모리 절약 측면에서 - 질문이 없습니다. 그러나 각 틱에서 CopyXXX를 호출하는 것은 따옴표 배열을 버퍼에 한 번 복사하고 Rates[X] 유형의 직접 인덱스로 액세스하는 것보다 훨씬 더 비쌉니다. "메모리 절약 대 CPU 시간 절약"이라는 고전적인 프로그래밍 딜레마가 나타납니다.
CopyXXX는 iClose/iOpen/iXXXX 기능과 동일한 속도 를 가집니다. iXXX만 한 번에 하나의 요소를 반환하는 반면 CopyXXX는 집합을 반환하므로 더 효율적이고 성능 이 좋습니다.
MT4 에서는 틱 핸들러가 실행될 때마다 EA의 로컬(캐시) 시장 환경에 로컬 차트 의 _모든_ 기록이 강제로 복사 된다는 점을 고려하지 않을 것입니다. 이 정보를 경제적으로 업데이트할 수 있는 방법이 있지만 이것은 매우 비쌉니다. MQL4의 특수 기능 RefreshRates 는 로컬 차트의 캐시 및 기록을 강제로 업데이트합니다.
CopyXXX를 호출하는 것이 훨씬 더 효율적이며 개발자는 이전에 요청한 데이터를 캐싱하기 위한 매우 정확하고 정확한 메커니즘을 가지고 있습니다. 예를 들어 매 틱마다 심층 기록을 다시 요청할 필요는 없지만 로컬에 저장/추가하고 가장 빠르게 액세스할 수 있습니다.
"직접"(사실 직접 액세스가 없음) 액세스 Open/High/Low/Close의 이전 방법을 비교하고 로컬 배열 double local[xxxx]로 작업하면 후자가 몇 배 더 빠릅니다. 따라서 로컬에서 자신에게 복사한 다음 반복적으로 요청된 데이터에 로컬로 빠르게 액세스하는 것이 좋습니다.
맙소사, 아직 MT4가 있습니다. :) 당신은 그것을 원합니다 - 하나의 악기에. 당신이 원하는 - 다른.
위험을 어디에서 보십니까?
"거래 플랫폼"을 개발/사용할 때 궁극적으로 누군가가 감수해야 하는 특정 비용과 위험이 있습니다.
다른 개발자의 소프트웨어에서 "가상화"에 관해서
모든 것이 자체적으로 사용되고 솔루션을 구현하는 사람들이 자신이 하는 일을 이해한다면 이는 좋은 일입니다.
주요 비용은 다음과 같습니다: 시스템 개발에 사용된 자금, 시스템 성능 유지에 사용된 자금 및 프로젝트 에 소요된 시간.
주요 위험: 실행 가능한 프로젝트의 구현에 너무 많은 시간이나 비용이 소요될 것이며(프로젝트는 성과를 거두지 못할 것입니다), 프로젝트는 다른 솔루션에 비해 효과적이지 않을 것이며, 코드 또는 알고리즘에 숨겨진 오류가 발생합니다. 프로젝트의 구현.
예, 은행 및 기타 시장 참여자는 필요한 기능을 갖춘 소프트웨어 개발에 의존하지만 동시에 엄청난 시간과 리소스를 소비합니다. 그렇게 함으로써 그들은 모든 위험을 감수합니다.
MT5에서 작업하는 경우(MT5를 사용하는 다양한 옵션)
물론 여기서 MQ는 대부분의 작업을 수행했지만 기능에 대한 특정 제한도 도입했습니다.
주요 비용은 다음과 같습니다. 시스템 성능을 유지하는 데 소요되는 자금과 프로젝트에 소요되는 시간.
주요 위험: 프로젝트는 다른 솔루션에 비해 효과적이지 않으며, 프로젝트를 구현하는 동안 코드 또는 알고리즘에 숨겨진 오류가 발생하고, 전체 시스템의 성능을 지속적으로 모니터링해야 합니다(문제로부터 보호 소프트웨어 및 하드웨어, 통신 품질, 전원 공급 장치, 데이터 보안 등을 모니터링합니다.)
물론 여기에서 특정 제한 및 예약과 함께 상업적 사용(다른 사람에게 사용 가능성 제공)에 대해 생각할 수 있습니다.살펴보고 싶습니다
간단한 프로그램을 작성할 때 OOP를 사용하는 것의 간편함과 편리함이 특히 눈에 띄는 예가 있다.