전역 초기화 실패!!!!!!! - 페이지 6

 
SDC :

int start() 대신 int OnCalculate()를 사용합니다. start()와 같은 모든 틱에서 실행됩니다. 전과 후는 다음과 같이 보일 것입니다.

OnCalculate의 형식 매개변수를 사용하면 더 독립적으로 사용할 수 있으며, 코더는 분명히 oop 서클에 있는 나쁜 나쁜 코더, 손목을 때리는 모든 종류의 전역 호출에 의존할 필요가 없습니다. 실제로는 둘 중 하나를 사용하는 데 큰 차이가 없습니다. 또한 OnCalculate는 mql5와 동일하므로 호환 코드를 작성할 수 있습니다.


고마워, SDC. 나는 당신이 무엇을 얻고 있는지 알 것 같아요. 나는 MetaQuotes가 이것으로 가고 있는 방향을 좋아하는지 확신하지 못합니다. 그들은 마이크로소프트가 한 것과 같은 일을 하고 있습니다. 코딩을 더 쉽게 만들 수 있지만 말하자면 "내부"에서 실제로 무슨 일이 일어나고 있는지 이해해야 하는 프로그래머의 필요성을 심각하게 줄여줍니다. 그것은 프로그래머의 기술과 이해를 감소시키기 때문에 제 생각에는 큰 문제입니다. 당신이하는 일의 마스터가되고 싶다면 가장 기본적인 수준에서 더 높은 개념까지 이해해야합니다. 저는 1978년에 프로그래밍을 시작했습니다. 우리는 바이너리와 8진 코드로 작성했습니다. 대부분의 사람들은 이제 단서가 없었을 것입니다. Microsoft는 수년 동안 내부에서 실제로 무슨 일이 일어나고 있는지 아는 것과 프로그래머를 완전히 분리하는 수준으로 프로그래밍 언어를 밀어붙이고 있으며 이는 우리에게 도움이 되지 않습니다. 그들의 의도는 낮은 수준에서 실제로 진행되고 있는 일을 이제 그들의 프로그래머만 보고 다른 모든 사람들은 그들에게 의존해야 한다는 것을 확인하는 것입니다.

내가 말하는 것의 예는 C++에서 C#으로의 진화입니다. 표면적으로 C#은 프로그래머가 스스로 수행하는 방법을 알 필요가 없도록 하고 프로세스에서 개발 시간을 단축할 수 있도록 낮은 수준의 "배관"을 수행하여 프로그래머의 삶을 더 쉽게 만들기 위한 것입니다. 물론, 달성했지만 비용은 얼마입니까? 우리 "오래된 타이머"는 직접 메모리 액세스와 사용 방법을 완전히 이해합니다. 우리는 "밑에서" 무슨 일이 일어나고 있는지 알고 있습니다. 특정 양의 메모리를 특별히 할당하거나 바이트 단위 또는 비트 단위로 메모리를 조작해야 하는 경우가 종종 있었습니다. C#의 높은 수준의 "클라우드"만 아는 사람이 단서가 있습니까? 아니요. 마이크로소프트에 전화하세요.

나는 내가 여기에서 호언장담을 했다는 것을 알고 있지만 MetaQuotes가 같은 방향으로 움직이고 있고 그것은 좋은 일이 아니라고 생각합니다. 실시간 데이터를 처리해야 하는 앱을 작성하는 것에 대해 이야기할 때는 확실히 좋지 않습니다. 우리 분야에서 실수는 누군가에게 많은 돈을 들일 수 있습니다. 내 개인적인 용도로만 사용하려는 앱을 망치면 그것으로 살 수 있습니다. 내가 판매하는 앱을 망치면 허용되지 않습니다.

BTW, OOP에서 사용되는 전역과 MQL에서 사용되는 전역이 같은 개념이라고 생각하지 않습니다. MQL은 진정한 객체 지향 언어라는 점에서 아직 유아기입니다. 사실 "글로벌"은 OOP에서 아무 의미가 없습니다. "정적" 변수라고 하며 동일한 클래스에서 생성된 모든 개체와 파생 계층 구조의 모든 클래스에서 사용할 수 있습니다. 특히 애플리케이션의 모든 것이 의존하는 매우 높은 수준의 클래스에서 사용될 때 데이터 캡슐화 이유와 유지 관리 악몽으로 인해 눈살을 찌푸리게 됩니다.

 

기본적으로 계정에서 숫자를 가져오려면 AccountBalance()를 사용해야 합니다.

따라서 균형이 정확히 어떻게 도출되는지 알고 싶다면 전혀 모릅니다. 개발자만 압니다.

 
ProfessorMetal :


고마워, SDC. 나는 당신이 무엇을 얻고 있는지 알 것 같아요. 나는 MetaQuotes가 이것으로 가고 있는 방향을 좋아하는지 확신하지 못합니다. 그들은 마이크로소프트가 한 것과 같은 일을 하고 있습니다. 코딩을 더 쉽게 만들 수 있지만 말하자면 "내부"에서 실제로 무슨 일이 일어나고 있는지 이해해야 하는 프로그래머의 필요성을 심각하게 줄여줍니다. 그것은 프로그래머의 기술과 이해를 감소시키기 때문에 제 생각에는 큰 문제입니다. 당신이하는 일의 마스터가되고 싶다면 가장 기본적인 수준에서 더 높은 개념까지 이해해야합니다. 저는 1978년에 프로그래밍을 시작했습니다. 우리는 바이너리와 8진 코드로 작성했습니다. 대부분의 사람들은 이제 단서가 없었을 것입니다. Microsoft는 수년 동안 내부에서 실제로 무슨 일이 일어나고 있는지 아는 것과 프로그래머를 완전히 분리하는 수준으로 프로그래밍 언어를 밀어붙이고 있으며 이는 우리에게 도움이 되지 않습니다. 그들의 의도는 낮은 수준에서 실제로 진행되고 있는 일을 이제 그들의 프로그래머만 보고 다른 모든 사람들은 그들에게 의존해야 한다는 것을 확인하는 것입니다.

내가 말하는 것의 예는 C++에서 C#으로의 진화입니다. 표면적으로 C#은 프로그래머가 스스로 수행하는 방법을 알 필요가 없도록 하고 프로세스에서 개발 시간을 단축할 수 있도록 낮은 수준의 "배관"을 수행하여 프로그래머의 삶을 더 쉽게 만들기 위한 것입니다. 물론, 달성했지만 비용은 얼마입니까? 우리 "오래된 타이머"는 직접 메모리 액세스와 사용 방법을 완전히 이해합니다. 우리는 "밑에서" 무슨 일이 일어나고 있는지 알고 있습니다. 특정 양의 메모리를 특별히 할당하거나 바이트 단위 또는 비트 단위로 메모리를 조작해야 하는 경우가 종종 있었습니다. C#의 높은 수준의 "클라우드"만 아는 사람이 단서가 있습니까? 아니요. 마이크로소프트에 전화하세요.

나는 내가 여기에서 호언장담을 했다는 것을 알고 있지만 MetaQuotes가 같은 방향으로 움직이고 있고 그것은 좋은 일이 아니라고 생각합니다. 실시간 데이터를 처리해야 하는 앱을 작성하는 것에 대해 이야기할 때는 확실히 좋지 않습니다. 우리 분야에서 실수는 누군가에게 많은 돈을 들일 수 있습니다. 내 개인적인 용도로만 사용하려는 앱을 망치면 그것으로 살 수 있습니다. 내가 판매하는 앱을 망치면 허용되지 않습니다.

BTW, OOP에서 사용되는 전역과 MQL에서 사용되는 전역이 같은 개념이라고 생각하지 않습니다. MQL은 진정한 객체 지향 언어라는 면에서 아직 유아기입니다. 사실 "글로벌"은 OOP에서 아무 의미가 없습니다. "정적" 변수라고 하며 동일한 클래스에서 생성된 모든 개체와 파생 계층 구조의 모든 클래스에서 사용할 수 있습니다. 특히 애플리케이션의 모든 것이 의존하는 매우 높은 수준의 클래스에서 사용될 때 데이터 캡슐화 이유와 유지 관리 악몽으로 인해 눈살을 찌푸리게 됩니다.

MQ의 방향은 mql4 - mql5 호환성을 달성하는 것이라고 생각합니다. 이제 우리가 사용할 수 있는 OnTick, OnTimer, OnCalculate 및 mql5 함수 어레이를 통해 이미 mql5 영역으로 이동하고 있음을 알 수 있습니다. 당신은 그것이 더 쉽게 만들지 않는다는 것을 알게 될 것입니다. 새 버전이 이전보다 우리에게 더 어려운 것이 있다면 이전 mql4를 사용하면 정말 조잡한 코드를 작성할 수 있으며 새 버전은 우리가 더 정확하기를 기대합니다.
 

그래서 ea 제너레이터를 더 이상 사용할 수 없습니다. 코드가 업데이트되지 않는 한 인디/EA를 직접 코딩해야 합니다.

실제로 규율은 프로그래밍을 하는 핵심입니다. 어렵지만 코딩에서 점점 더 강력해지고 있습니다.

 
SDC :
MQ의 방향은 mql4 - mql5 호환성을 달성하는 것이라고 생각합니다. 이제 OnTick, OnTimer, OnCalculate 및 현재 사용할 수 있는 mql5 함수 배열을 사용하여 mql5 영역으로 이동하고 있음을 알 수 있습니다. 당신은 그것이 더 쉽게 만들지 않는다는 것을 알게 될 것입니다. 새 버전이 이전보다 우리에게 더 어려운 것이 있다면 이전 mql4를 사용하면 정말 조잡한 코드를 작성할 수 있으며 새 버전은 우리가 더 정확하기를 기대합니다.


무슨 말인지 알겠어요. 나는 일부 문서를 보고 내가 새로운 방법의 사용법을 오해하고 있다는 것을 깨달았습니다. OnStart()는 스크립트 시작을 위한 것이고 OnCalculate()는 표시기에 대한 이전 start()를 대체하며 모든 사람이 MQL의 이전 구현에서 사용하고 새 틱이 수신될 때 표시기 코드(현재 실행 중이 아닌 경우) 및 마지막으로 OnTick()이 EA의 start()를 대체합니다. 다른 많은 변경 사항과 함께 당신이 옳습니다. "다시 배워야"하기 때문에 우리 삶이 더 쉬워지지 않습니다. 잠시 동안 여기에 있었고 많은 앱을 함께 만든 사람들을 위해 그것들을 계속 운영하기 위해 많은 재설계가 필요합니다. 나 자신은 MQL을 이제 막 다루기 시작했고 이것이 나에게 좋은 기회를 주었다. 내가 배운 것의 대부분은 이제 말 그대로 "배워야 한다".

더 엄격해지는 것은 좋은 일이라고 생각합니다. 익숙해지는 것이 고통스러울 수 있지만 사용자와 우리 자신에게 비용이 많이 드는 것으로 판명될 수 있는 오류의 가능성을 줄일 수 있습니다. 기업 세계에서 몇 년을 보내면서 우리의 실수로 인해 사용자에게 막대한 비용(그리고 우리의 일자리)이 손실될 수 있는 앱을 개발한 사람의 관점에서 저는 정확성의 챔피언입니다. 그러나 내가 파악한 것은 작업의 절반을 수행하는 OnCalculate()를 도입하는 것과 같은 작업을 수행하면 내부에서 무슨 일이 일어나고 있는지에 대한 이해가 줄어든다는 것입니다. 저는 C++에서 C#으로의 전환에 대해 이야기할 때 경험에서 우러나온 것입니다. "이것이 어떻게 작동하는지"를 아는 것에서 "이 버튼을 누르면 이런 일이 발생합니다"로 바뀌었습니다. 내가 올드 스쿨일 수도 있지만, 멍청하게 하는 것은 좋은 일이 아니라고 생각합니다. 이 재설계에는 좋은 점도 있고 나쁜 점도 있습니다.

 
deysmacro :

그래서 ea 제너레이터를 더 이상 사용할 수 없습니다. 코드가 업데이트되지 않는 한 인디/EA를 직접 코딩해야 합니다.

실제로 규율은 프로그래밍을 하는 핵심입니다. 어렵지만 코딩에서 점점 더 강력해지고 있습니다.


논쟁의 여지가 없습니다, 친구. 솔직히 말해서 EA 제너레이터를 사용하지 말았어야 했다고 생각합니다. "블랙박스"가 실제로 무엇을 하는지 전혀 모릅니다. 두 번째 진술에 관해서는, 나는 끝까지 당신과 함께합니다.
 
ProfessorMetal :

"이것이 어떻게 작동하는지"를 아는 것에서 "이 버튼을 누르면 이런 일이 발생합니다"로 바뀌었습니다. 내가 올드 스쿨일 수도 있지만, 멍청하게 하는 것은 좋은 일이 아니라고 생각합니다. 이 재설계에는 좋은 점도 있고 나쁜 점도 있습니다.

이렇게 보세요. 한 사람 또는 조직화된 사람들로 구성된 회사가 MT4와 같은 것을 완전히 바이너리 코드로 처음부터 프로그래밍하는 것은 사실상 불가능한 작업입니다. 주변에 있는 현대 컴퓨터 게임은 말할 것도 없습니다. 살아있는 사람이 2진법, 8진법, 16진법 또는 기본에 대한 단서조차 갖지 못할 때가 올 것입니다. 먼저 요소를 만들고 시간이 지남에 따라 블록을 얻고 전체 이야기, 전체 책을 얻습니다. 매번 같은 오래된 shi_이지만 플롯을 다시 조립하고 겉보기에 새로운 것으로 끝납니다. 세상은 변하고, 예전과 같은 시나리오에 갇힐 수는 없습니다! 항상 다시 배우고 매뉴얼을 먼저 읽어야 합니다. 그리고 또, 또, 또, 그리고 또. 그렇지 않으면 뒤쳐져 공룡이 됩니다.

 
Dadas :

이렇게 보세요. 한 사람 또는 조직화된 사람들로 구성된 회사가 MT4와 같은 것을 완전히 바이너리 코드로 처음부터 프로그래밍하는 것은 사실상 불가능한 작업입니다. 주변에 있는 현대 컴퓨터 게임은 말할 것도 없습니다. 살아있는 사람이 2진법, 8진법, 16진법 또는 기본에 대한 단서조차 갖지 못할 때가 올 것입니다. 먼저 요소를 만들고 시간이 지남에 따라 블록을 얻고 전체 이야기, 전체 책을 얻습니다. 매번 같은 오래된 shi_이지만 플롯을 다시 조립하고 겉보기에 새로운 것으로 끝납니다. 세상은 변하고, 똑같은 오래된 시나리오에 갇힐 수는 없습니다! 항상 다시 배우고 매뉴얼을 먼저 읽어야 합니다. 그런 다음 다시, 다시, 그리고 다시. 그렇지 않으면 뒤쳐져 공룡이 됩니다.


당신의 요점을 알겠어요, 다다스. 그리고 어느 정도까지는 동의합니다. 그러나 누군가는 항상 처음부터 주제를 알아야 하며 그렇지 않으면 카드의 집 전체가 무너질 것입니다. 제가 이해하고 있는 것에 대한 예시를 보여드리겠습니다. 저는 전문 교육자로 시간을 보냈습니다. 나는 수학과 물리학 조교수의 직위를 가지고 있습니다. 나는 커뮤니티 칼리지에서 가르쳤고 우리의 "영구" 물리학과는 나와 학과장으로 구성되어 있습니다.

당시 수학과는 통계, 미적분, 선형대수 등 모든 과목을 컴퓨터나 계산기 프로그램으로 가르치는 방향으로 기울고 있었다. 그들은 실제 주제에 대해 아무것도 가르치지 않았습니다. 모든 학생들은 프로그램을 사용하는 방법을 배웠습니다. 수학을 배우는 것이 아닙니다. 시작 버튼을 누르고 숫자를 입력하고 "이동" 버튼을 누르는 것입니다. 나는 학생들이 모든 "지시"를 따랐지만 여전히 문제를 잘못 이해했기 때문에 심하게 불평하게 되었습니다. 그들에게 나의 첫 번째 질문은 "계산자가 제시한 답이 합리적으로 보입니까?"였습니다. 응답? "글쎄, 난 모르겠어." 왜 몰랐을까? 그들은 수학에 대해 잘 몰랐기 때문입니다. 그들이 아는 것은 이 순서대로 이 버튼을 누르는 것뿐이었습니다. 그러면 계산기가 마법처럼 답을 뱉어낼 것입니다. 잘못된!

이제 원래의 요점으로 돌아갑니다. 내 파트너는 이것에 모두 찬성했습니다. 그의 논리? "언젠가는 모든 일이 이렇게 될 것입니다. 아무도 우리처럼 수학 및 물리학을 실제로 수행하는 방법을 알 필요가 없을 것입니다. 프로그램이 모든 것을 수행할 것입니다." 내 대답은 "예, 맞습니다. 그리고 그들이 받는 "답변이 완전히 비현실적일 때 정확히 어떻게 알 수 있습니까?" 그 문제에 대해, 사람들이 기계가 알아서 하도록 훈련받았기 때문에 기초 수학도 할 수 없는 지경에 이르렀을 때 이 모든 것을 작성하고 유지 관리할 사람이 누구입니까?" 내 요점을 알겠습니까? "작동 방식"을 알아야 하거나 Jim Morrison의 말에 따르면 이 집 전체가 불타고 있습니다." 그리고 친구야, 거기에 나와 같은 공룡이 들어왔다. 발로 차고 소리 지르며 내려갈 수도 있지만 끝까지 가르칠 것이다. 똥집이 불에 타면 내가 게으른 길을 빠져 나갔기 때문이 아닙니다. :-)

 
ProfessorMetal :


당신의 요점을 알겠어요, 다다스. 그리고 어느 정도까지는 동의합니다. 그러나 누군가는 항상 처음부터 주제를 알아야 하며 그렇지 않으면 카드의 집 전체가 무너질 것입니다. 제가 이해하고 있는 것에 대한 예시를 보여드리겠습니다. 저는 전문 교육자로 시간을 보냈습니다. 나는 수학과 물리학 조교수의 직위를 가지고 있습니다. 나는 커뮤니티 칼리지에서 가르쳤고 우리의 "영구" 물리학과는 나와 학과장으로 구성되어 있습니다.

당시 수학과는 통계, 미적분, 선형대수 등 모든 과목을 컴퓨터나 계산기 프로그램으로 가르치는 방향으로 기울고 있었다. 그들은 실제 주제에 대해 아무것도 가르치지 않았습니다. 모든 학생들은 프로그램을 사용하는 방법을 배웠습니다. 수학을 배우는 것이 아닙니다. 시작 버튼을 누르고 숫자를 입력하고 "이동" 버튼을 누르는 것입니다. 나는 학생들이 모든 "지시"를 따랐지만 여전히 문제를 잘못 이해했기 때문에 심하게 불평하게 되었습니다. 그들에게 나의 첫 번째 질문은 "계산자가 제시한 답이 합리적으로 보입니까?"였습니다. 응답? "글쎄, 난 모르겠어." 왜 몰랐을까? 그들은 수학에 대해 잘 몰랐기 때문입니다. 그들이 아는 것은 이 순서대로 이 버튼을 누르는 것뿐이었습니다. 그러면 계산기가 마법처럼 답을 뱉어낼 것입니다. 잘못된!

이제 원래의 요점으로 돌아갑니다. 내 파트너는 이것에 모두 찬성했습니다. 그의 논리? "언젠가는 모든 일이 이렇게 될 것입니다. 아무도 우리처럼 수학 및 물리학을 실제로 수행하는 방법을 알 필요가 없을 것입니다. 프로그램이 모든 것을 수행할 것입니다." 내 대답은 "예, 맞습니다. 그리고 그들이 받는 "답변이 완전히 비현실적일 때 정확히 어떻게 알 수 있습니까?" 그 문제에 대해, 사람들이 기계가 알아서 하도록 훈련받았기 때문에 기초 수학도 할 수 없는 지경에 이르렀을 때 이 모든 것을 작성하고 유지 관리할 사람이 누구입니까?" 내 요점을 알겠습니까? "작동 방식"을 알아야 하거나 Jim Morrison의 말에 따르면 이 집 전체가 불타고 있습니다." 그리고 친구야, 거기에 나와 같은 공룡이 들어왔다. 발로 차고 소리 지르며 내려갈 수도 있지만 끝까지 가르칠 것이다. 똥집이 불에 타면 내가 게으른 길을 빠져 나갔기 때문이 아닙니다. :-)


글쎄, 당신은 돈 키초테로 끝날 것입니다.

그리고 예, 우리는 그것을 보기 위해 살지는 않겠지만 조만간 그렇게 될 것입니다. 결국, 이 전체 우주가 어떻게 그리고 왜 작동하는지 아무도 모르지만 작동하고 있습니다. 당신은 우주 자체에서 올바른 답을 얻고 있는지 알고 있습니까? 당신은 그것을 어떻게 알 수 있습니까? 나는 수학자의 사고방식을 이해한다. 그들은 공식이 모든 것을 제어 하기를 원하고 공식이 어디에서 발생하는지 알고/이해하기를 원합니다. c/z 제어하기를 원합니다. 2+2=4, 그런데 왜? 이것이 과연 정답일까요? 진실은, 당신은 결코 통제할 수 없다는 것입니다.

그리고 결국 "전역 초기화 실패"라는 메시지가 표시되고 아무도 그 이유나 해결 방법을 모릅니다.

 
Dadas :


글쎄, 당신은 돈 키초테로 끝날 것입니다.

그리고 예, 우리는 그것을 보기 위해 살지는 않겠지만 조만간 그렇게 될 것입니다. 결국, 이 전체 우주가 어떻게 그리고 왜 작동하는지 아무도 모르지만 작동하고 있습니다. 당신은 우주 자체에서 올바른 답을 얻고 있는지 알고 있습니까? 당신은 그것을 어떻게 알 수 있습니까? 나는 수학자의 사고방식을 이해한다. 그들은 공식이 모든 것을 제어하기를 원하고 공식이 어디에서 발생하는지 알고/이해하기를 원합니다. c/z 제어하기를 원합니다. 2+2=4, 그런데 왜? 이것이 과연 정답일까요? 진실은, 당신은 결코 통제할 수 없다는 것입니다.

그리고 결국 "전역 초기화 실패"라는 메시지가 표시되고 아무도 그 이유나 해결 방법을 모릅니다.


LOL 나는 당신이 돈키호테를 의미했다고 생각합니다. 어쨌든, 요점은 우리가 무엇을 작업하고 있는지 이해해야 한다는 것입니다. 그렇지 않으면 궁극적으로 실패할 수 있습니다.