그러나 작동하지 않습니다. 프로그램을 잘못 작성했습니다. 그리고 모두 자신의 코드가 어떻게 작동할지 모르기 때문입니다. 알아봅시다. 고문 기관:
새 틱이 도착하고 Fun_New_Bar() 함수가 호출됩니다. 메인 프로그램에 true를 반환하면 Alert가 팝업됩니다. 그렇지 않으면 EA는 반환으로 작업을 종료하고 새 틱을 기다립니다. 새로운 틱에서 모든 것이 반복됩니다.
코드가 작동하지 않는다는 말씀이신가요? 이제 서브루틴에 무엇이 있는지 살펴보겠습니다.
부울 함수가 선언되었습니다. 이것은 프로시저가 아니라 함수이기 때문에 호출된 주 프로그램에 무언가를 반환해야 합니다. 함수는 부울이므로 부울 값을 반환해야 합니다. 메인 프로그램에 최소한 무언가를 반환하는 라인은 어디에 있습니까? 없기! 즉, 프로그램 시작 시 함수에서 아무 것도 반환되지 않으므로 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를 할당하는 이유는 무엇입니까? 도대체 이 두 임무는 무엇을 위한 것일까요? 당신이 연주하고 싶어? 아니면 너무 게으른 생각?
Tk이 코드를 시도하십시오. 작동하는 것 같습니다. 옳고 그름을 보세요. 문제가 있으면 수정하십시오.
//-------------------------------------------------------------------- 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("Сформировался новый бар"); // Вывод на экран } } //--------------------------------------------------------------------
drknn : 아니오, 정확하지 않습니다. 이 코드를 문자로 구문 분석했습니다. 아무것도 이해하지 못하셨나요?
그리고 제대로 작동하는 것 같습니다! M1 기간에 확인:
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); }
잘, 글쎄, 읽는 방법을 알고 있습니까, 아니면 위에서 말했듯이 올바른 코드가 아닙니다. 새 양초에서 한 번이 아니라 매 틱마다 경고음이 울립니다. 위 참조 - 올바른 코드를 제공했습니다. 완전한 사티아를 위해 당신에게 부족한 것은 무엇입니까? 코드가 올바르지 않은 이유를 아십니까? 이미 설명했지만, 서브루틴은 항상 true를 반환하고 true만 반환하기 때문에 잘못된 것입니다. 경고는 모든 틱에 나타납니다! 프로그래밍은 추측 게임이 아닙니다. 여기서 생각해야 합니다.
기능은 내 것이 아닙니다. 인터넷에서 집어 들었지만 사용하지 않았습니다. 이제 나는 그것을주의 깊게 보았습니다. 교환원은 거기에 빠졌습니다.
다음과 같이 정확할 것입니다.
또 옳지 않아! Fun_New_Bar()가 항상 true를 반환하므로 EA는 매 틱마다 다시 경고음을 울립니다. 그렇다면 문제는 계속해서 true를 반환하는 경우 왜 Fun_New_Bar() 함수가 필요한 것입니까?
그러나 작동하지 않습니다. 프로그램을 잘못 작성했습니다. 그리고 모두 자신의 코드가 어떻게 작동할지 모르기 때문입니다. 알아봅시다. 고문 기관:
새 틱이 도착하고 Fun_New_Bar() 함수가 호출됩니다. 메인 프로그램에 true를 반환하면 Alert가 팝업됩니다. 그렇지 않으면 EA는 반환으로 작업을 종료하고 새 틱을 기다립니다. 새로운 틱에서 모든 것이 반복됩니다.
코드가 작동하지 않는다는 말씀이신가요? 이제 서브루틴에 무엇이 있는지 살펴보겠습니다.
부울 함수가 선언되었습니다. 이것은 프로시저가 아니라 함수이기 때문에 호출된 주 프로그램에 무언가를 반환해야 합니다. 함수는 부울이므로 부울 값을 반환해야 합니다. 메인 프로그램에 최소한 무언가를 반환하는 라인은 어디에 있습니까? 없기! 즉, 프로그램 시작 시 함수에서 아무 것도 반환되지 않으므로 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를 할당하는 이유는 무엇입니까? 도대체 이 두 임무는 무엇을 위한 것일까요? 당신이 연주하고 싶어? 아니면 너무 게으른 생각?
Tk이 코드를 시도하십시오. 작동하는 것 같습니다. 옳고 그름을 보세요. 문제가 있으면 수정하십시오.
//--------------------------------------------------------------------
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("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------
Tk이 코드를 시도하십시오. 작동하는 것 같습니다. 올바른지 여부를 확인하십시오.
kolyango: 올바른 코드를 보여드리겠습니다. 보다.
아니오, 정확하지 않습니다. 이 코드를 문자로 구문 분석했습니다. 아무것도 이해하지 못하셨나요?
그리고 제대로 작동하는 것 같습니다! M1 기간에 확인:
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);
}
그리고 제대로 작동하는 것 같습니다! M1 기간에 확인:
또 옳지 않아! Fun_New_Bar()가 항상 true를 반환하므로 EA는 매 틱마다 다시 경고음을 울립니다. 그렇다면 문제는 계속해서 true를 반환하는 경우 왜 Fun_New_Bar() 함수가 필요한 것입니까?
New_Time=Time[ 0 ] функция Fun_New_Bar() не будет возвращать истину
kolyango: 올바른 코드를 보여드리겠습니다. 보다.
drknn :
... Программирование - это не игра в угадайки - тут думать надо...
... 글쎄, 적어도, 적어도 때때로 ... :-)))
그리고 Bars를 사용하는 옵션은 Bars의 값이 새로운 Bar의 출현으로 인해 변경될 수 있기 때문에 덜 바람직합니다.
잘 알려주세요 - 차트의 초 수는 새로운 막대가 등장한다는 사실을 제외하고는 다른 것과 관련하여 여전히 변경될 수 있습니다??? :))))))
아, 네, 맞습니다. 업로드 내역입니다. :) 똑같이, 그 기능은 모든 틱 에서 짹짹 소리를 낼 것입니다 - 그것은 시간을 정확하게 기억하지 못합니다.