[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 1084

 
khorosh :

더 정확하게는 다음과 같을 것입니다.



이것이 훨씬 더 정확하고 이제 작동하는 방법입니다.

//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------

 
그런데 댓글을 작성할 때 코드를 코드로 강조하는데 왜 같은 색일까요? 또는 그렇게 할당할 필요가 있습니다. 실제 코드처럼 보이게 하려면?
 
kolyango :

M1을 시도했는데 다음 막대가 형성된 후 메시지가 나타나지 않습니다. 작동하지 않는 것은 무엇입니까?


그러나 작동하지 않습니다. 프로그램을 잘못 작성했습니다. 그리고 모두 자신의 코드가 어떻게 작동할지 모르기 때문입니다. 알아봅시다. 고문 기관:

 int start(){ // Спец. функция start
   if (Fun_New_Bar()){ //проверка наличия нового бара
     Alert ( "Сформировался новый бар" ); // Вывод на экран
  }
   return ( 0 ); // Выход из start()
}

새 틱이 도착하고 Fun_New_Bar() 함수가 호출됩니다. 메인 프로그램에 true를 반환하면 Alert가 팝업됩니다. 그렇지 않으면 EA는 반환으로 작업을 종료하고 새 틱을 기다립니다. 새로운 틱에서 모든 것이 반복됩니다.

코드가 작동하지 않는다는 말씀이신가요? 이제 서브루틴에 무엇이 있는지 살펴보겠습니다.

 bool Fun_New_Bar(){ // Ф-ия обнаружения нового бара
   static datetime New_Time= 0 ; // Время текущего бара
   bool New_Bar= false ; // Нового бара нет
   if (New_Time!=Time[ 0 ]){ // Сравниваем время
    New_Time=Time[ 0 ]; // Теперь время такое
    New_Bar= true ; // Поймался новый бар
  }
}

부울 함수가 선언되었습니다. 이것은 프로시저가 아니라 함수이기 때문에 호출된 주 프로그램에 무언가를 반환해야 합니다. 함수는 부울이므로 부울 값을 반환해야 합니다. 메인 프로그램에 최소한 무언가를 반환하는 라인은 어디에 있습니까? 없기! 즉, 프로그램 시작 시 함수에서 아무 것도 반환되지 않으므로 if (Fun_New_Bar()) 표현식은 괄호 안에 항상 false가 되고 경고가 팝업되지 않습니다.

더 가자. 왜 datetime을 선언했습니까? New_Time= 0 ; 정확히 정적? 어떤 이유로? 변수를 선언하고 즉시 0으로 초기화했습니다. 다음 틱에서 동일한 일이 발생합니다. 변수가 다시 선언되고 다시 0으로 초기화됩니다. 아래를 참조하십시오. if (New_Time!=Time[ 0 ]){ 이 줄은 변수 값이 현재 시간 과 다른지 확인합니다. 예, 변수는 0이고 현재 시간은 0이 아닙니다. 조건이 충족되면 현재 시간 값이 변수에 입력되고 New_Bar 매개변수가 true가 됩니다. 즉, 함수는 주 프로그램에 아무 것도 반환하지 않고 작업을 완료했습니다. 다음 틱에서 다시 New_Time은 Time[ 0 ]과 같지 않고 부등식 검사가 성공적으로 수행되고 다시 두 개의 후속 작업이 수행됩니다. 간단히 말해서 if (New_Time!=Time[ 0 ]) 조건이 테스트되면 괄호 안의 표현식은 모든 틱에서 true가 됩니다. 언제나. 문제는 그것이 항상 사실이라면 도대체 왜 이 검사가 여기에 필요한 것입니까? 그냥 제거하면 되나요? 이 두 변수가 모두 사용되지 않는 경우 New_Time=Time[ 0 ] 및 New_Bar= true를 할당하는 이유는 무엇입니까? 도대체 이 두 임무는 무엇을 위한 것일까요? 당신이 연주하고 싶어? 아니면 너무 게으른 생각?

 

두 번째로 실행된 MT4 터미널에서 실행되는 Expert Advisor에서 전역 변수 를 사용할 수 있도록 하는 방법은 무엇입니까?

 
DhP :

두 번째로 실행된 MT4 터미널에서 실행되는 Expert Advisor에서 전역 변수를 사용할 수 있도록 하는 방법은 무엇입니까?


API를 통해 또는 텍스트 문서를 통해.
 
drknn :

API를 통해 또는 텍스트 문서를 통해.

어떻게?
 
DhP :

어떻게?

API를 통해 나는 방법을 모릅니다. 가능하다고 읽었습니다. 텍스트 문서를 통해 - MQL4 이외의 언어로 dll-ku를 작성해야 합니다. 예를 들어 델파이에서 C++. dll은 터미널 외부에 있는 파일에 액세스할 수 있어야 합니다. 구현하는 것이 매우 현실적입니다. 그러면 모든 것이 투명해집니다. EA는 전역 변수의 새 값을 텍스트 문서에 입력하고 다른 EA는 이 값을 읽습니다. DLL은 두 조언자 모두에게 이 텍스트 문서에 대한 액세스 권한을 부여합니다. 이러한 질문은 이미 여기에서 제기되었습니다. 사람들은 두 개의 다른 터미널에서 고문의 상호 작업을 설정하는 방법과 같은 것을 질문했습니다.
 
kolyango :

이것이 훨씬 더 정확하고 이제 작동하는 방법입니다.

아니요, 작동하지 않습니다. 경고는 새 양초의 첫 번째 틱에 한 번이 아니라 매 틱마다 메시지를 채웁니다.
 
kolyango :



이것이 훨씬 더 정확하고 이제 작동하는 방법입니다.

//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------


기능은 내 것이 아닙니다. 인터넷에서 집어 들었지만 사용하지 않았습니다. 이제 나는 그것을주의 깊게 보았습니다. 교환원이 거기에 없습니다.

다음과 같이 정확할 것입니다.

 int start() // Спец. функция start
{
 if (Fun_New_Bar()) //проверка наличия нового бара
   {
    Alert( "Сформировался новый бар" ); // Вывод на экран
   }
return ( 0 ); // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{                   // .. нового бара
static datetime New_Time= 0 ; // Время текущего бара
bool New_Bar= false ; // Нового бара нет
if (New_Time!=Time[ 0 ]) // Сравниваем время
{
New_Time=Time[ 0 ]; // Теперь время такое
New_Bar= true ; // Поймался новый бар
}
return (New_Bar);
}
 
drknn :

API를 통해 나는 방법을 모릅니다. 가능하다고 읽었습니다. 텍스트 문서를 통해 - MQL4 이외의 언어로 dll-ku를 작성해야 합니다. 예를 들어 델파이에서 C++. dll은 터미널 외부에 있는 파일에 액세스할 수 있어야 합니다. 구현하는 것이 매우 현실적입니다. 그러면 모든 것이 투명해집니다. EA는 전역 변수의 새 값을 텍스트 문서에 입력하고 다른 EA는 이 값을 읽습니다. DLL은 두 조언자 모두에게 이 텍스트 문서에 대한 액세스 권한을 부여합니다. 이러한 질문은 이미 여기에서 제기되었습니다. 사람들은 두 개의 다른 터미널에서 고문의 상호 작업을 설정하는 방법과 같은 것을 질문했습니다.

고마워, 내가 볼게...