찻주전자의 질문 - 페이지 111

 
openlive :

지금 문제

2012.02.26 15:47:46 테스터 파일 C:\Users\openlive\AppData\Roaming\MetaQuotes\Terminal\9C3619DDD286B60B1DB9B989A2FFC701\MQL5\Files \signal10000.2]v 열기 오류

먼저 C:\Users\openlive\AppData\Roaming\MetaQuotes\Terminal\9C3619DDD286B60B1DB9B989A2FFC701\MQL5\Files\ 폴더에 무엇이 있는지 확인하십시오.

둘째, MQL5에는 오류 32가 없습니다. 이상하다... 파일을 열려고 해서 핸들을 확인하고, 열려고 해서 마지막 에러 코드를 확인하니?

 
DenisR :
"수학 모드"란 무엇입니까?
수학적 계산 모드에서는 히스토리를 통한 실행이 없습니다. 이로 인해 거래 작업 을 사용하지 않고 수학적 계산을 수행해야 할 때 최대 속도가 달성됩니다. 이 모드 에서 거래 EA를 최적화하면 (이력 데이터, 스프레드 등의 EA에 대한 막대/틱 입력으로) 시장 환경을 직접 모델링해야 합니다. 이 경우 모든 종류의 기록 데이터를 사용할 수 있으며 이전에 준비된 파일에서 가져옵니다.
 
DenisR :
"수학 모드"란 무엇입니까?

이 모드에서는 OnTester()만 호출됩니다. 그러나 OnTester()에서 계산의 복잡성과 양은 제한되지 않습니다. 주어진 입력 매개변수로 Expert Advisor의 이익을 직접 계산하면 테스터의 유전자 알고리즘 을 최적화에 사용할 수 있습니다.
 

이해를 도와주세요. 제 뇌가 끓고 있습니다.

1. x64 OS로의 전환은 4바이트 이상의 RAM에서 "표시"할 수 없기 때문이라는 것을 이해합니다. x64 OS가 있는데 포인터가 4바이트를 차지하는 이유는 무엇입니까(mql뿐만 아니라 C++에서도 적용됨)?

2. MT4에 대한 질문: dll 함수를 호출할 때 왜:

 #import "MemoryDLL.dll"
void fn( double j[]);           // Подозреваю что так отдается адрес?
#import

int start()
{
   double dVal[1];
   fn(dVal);
   retutn(0);
} 

dll 변수에서 일반적으로 다음과 같은 방식으로 허용될 수 있습니다.

 extern "C" __declspec(dllexport) void fn( double &j);       // Почему так работает????
// и так
extern "C" __declspec(dllexport) void fn( double *j);       // Думаю что должно работать только так

포인터와 참조가 아이디어에 따라 호환되지 않아야 한다고 가정하지만, 예를 들어 double에 대한 포인터가 나에게서 4바이트를 차지하기 때문입니다.

작동 방식은 다음과 같습니다.

 #import "MemoryDLL.dll"
void fn( double j);           
#import
                                                   // Согласен

extern "C" __declspec(dllexport) void fn( double j);  

작동하지 않음:

 #import "MemoryDLL.dll"
void fn( double j);           
#import
                                                   // Почему нет???

extern "C" __declspec(dllexport) void fn( double &j);  

적어도 당연히 (여러 어레이를 전송하고 싶습니다)? 나는 뒤를 통과하고 싶지 않다.

 
220Volt :

적어도 당연히 (여러 어레이를 전송하고 싶습니다)? 나는 뒤를 통과하고 싶지 않다.

그리고 MQL에서 누가 &를 함수 선언에 넣을까요?
 
sergeev :
그리고 MQL에서 누가 &를 함수 선언에 넣을까요?

예, 아마도 맞을 것입니다. 그러나 모두 동일하게 MKL은 C에 따라 어떻게 든 작동하지 않습니다(틀릴 수 있음).

 
220Volt :

예, 아마도 맞을 것입니다. 그러나 모두 동일하게 MKL은 C에 따라 어떻게 든 작동하지 않습니다(틀릴 수 있음).

전달에 한 가지 차이점이 있습니다. 모든 것은 참조 &로만 전달되어야 하며 클래스 객체 만 ' * ' 포인터로 전달할 수 있습니다.

 

나는 기본 메모리 조각이 주소와 값의 두 부분으로 구성되어 있다고 생각했습니다. 주소를 전송하는 경우 "값" 필드에서 전송된 섹션의 주소와 함께 일부 변수에 있어야 합니다. 따라서 이러한 옵션이 동시에 올바르게 작동하는 방법을 이해할 수 없습니다.

 extern "C" __declspec(dllexport) void fn( double &j);  
// и так
extern "C" __declspec(dllexport) void fn( double *j);  
// Прототип для MQL - void fn(&s[]);

유형에 대한 설명을 찾으려고 시도할 수 있습니다. 메모리 조각이 "있는 그대로" 전송되고 수신 측에서 메모리로 무엇을 할지 결정합니다(주소를 값에 쓰거나 주소 복사). 그러나 이 가설은 다음과 같이 작동하지 않는다는 사실에 의해 파괴됩니다.

 extern "C" __declspec(dllexport) void fn( double j);  

// Прототип для MQL - void fn(&s[]);

설명을 다시 찾으려고 시도할 수 있습니다. 첫 번째 duvuh에서 입력은 "값" 필드에 주소가 지정되고 수신 측에서는 이를 사용하여 수행할 작업을 결정합니다. 이와 대조적으로 C ++에서 컴파일러는 그의 의견에 따라 다음과 같이 할 수 없다고 말합니다.

fn( int *x)
{
}

int i;
fn(&i);

또는 다음과 같이:

fn( int &x)
{
}

int i;
fn(i); 
일반적으로 나는 모순 외에는 아무것도 보지 않습니다.
 

나는 스스로에게 물었고 나는 대답할 것이다.

링크와 포인터가 거의 같은 것이라는 결론에 이르렀습니다. 작은 차이점이 있습니다.

  • 링크에 주소를 한 번만 쓸 수 있고 포인터에 여러 번 쓸 수 있습니다.
  • 훌륭한 구문

매우 중요한 점은 호출된 함수 에 링크 또는 포인터와 같은 인수가 있으면 주소가 실제로 전달된다는 것입니다. 이것은 dll에서 호출할 때 이해하는 것이 매우 중요합니다.

 

스토캐스틱의 주선과 표시선의 교차점의 정확한 값을 찾는 방법을 주전자에 알려주십시오.

시각적으로 간단하지만 프로그래밍 방식으로 구현하는 방법은 무엇입니까?