Mt4 지원 종료. - 페이지 20 1...131415161718192021222324252627...47 새 코멘트 Georgiy Merts 2017.09.10 19:55 #191 Alexey Viktorov : 이것으로 시작하지 않는 것이 좋습니다. 그게 벅찬 일입니다. 이 글에서 그를 잘 알지도 못하는 OOP의 서포터인 나조차도 혼미에 빠졌다... 나는 아무것도 이해하지 못했다. 따라서 가장 낮은 수준에서 차이점을 설명하려고합니다. 더 쉬울 수 있습니다. OOP - 단일 인터페이스를 정의할 수 있습니다. 그 후 - 모든 플랫폼 관련 사항은 "숨겨져" 작업을 방해하지 않습니다. 물론 이것은 순전히 절차적 접근 방식으로 수행될 수 있습니다. 그러나 각 기능에서 모든 플랫폼을 한 번에 처리해야 하기 때문에 절차 버전을 지원하는 것이 더 어려울 것입니다. Реter Konow 2017.09.10 20:28 #192 약간의 지연에 대해 사과드립니다. 다음은 함수의 첫 번째 버전입니다. 그것은 더 개선되고 발전될 수 있습니다. 누구든지 오류를 발견하면 의견을 말하십시오. //+------------------------------------------------------------------+ //| Новый бар.mq4 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" #property strict //------------------------ datetime Время_последнего_бара; //------------------------ //Счетчики //------------------------ int Частота_таймера = 25 ; int Минута; int 5 _Минут; int 15 _Минут; int 30 _Минут; int 1 _Час; int 4 _Часа; int 1 _День; //------------------------ //Флаги //------------------------ bool Новый_минутный_бар; bool Новый_5_минутный_бар; bool Новый_15_минутный_бар; bool Новый_30_минутный_бар; bool Новый_часовой_бар; bool Новый_4_часовой_бар; bool Новый_дневной_бар; //-------------------------------------------- //Значения временных периодов в миллесекундах. //-------------------------------------------- #define M1 60000 #define M5 300000 #define M15 900000 #define M30 1800000 #define H1 3600000 #define H4 14000000 #define D1 84000000 //------------------------ //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit () { //--- create timer EventSetMillisecondTimer ( 25 ); //------------------------------------------------------------- //Записываем время последнего бара на момент загрузки эксперта. //Для корректного начала работы, робота нужно запустить на М1. //------------------------------------------------------------- Время_последнего_бара = Time [ 0 ]; //------------------------------------------------------------- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { //--- destroy timer EventKillTimer (); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick () { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ //--------------------------------------------------------------- //Считаем время в счетчиках. Для каждого таймфрейма свой счетчик. //Как только значение счетчика достигает количество миллесекунд в //периоде таймфрейма, счетчик обнуляется и выставляется флаг нового //бара этого таймфрейма. Этот флаг остается до тех пор, пока //один из вызовов функции Новый_бар() не снимет его. //Таким образом, флаг нового бара любого таймфрейма остается до тех //пор, пока пользователь не узнает этот факт, вызвав функцию Новый_бар(). //--------------------------------------------------------------- void OnTimer () { static bool Ведется_отсчет; //--------------------------- if (!Ведется_отсчет && Time [ 0 ] != Время_последнего_бара) { Ведется_отсчет = true ; } //--------------------------- if (Ведется_отсчет) { Минута ++; 5 _Минут ++; 15 _Минут ++; 30 _Минут ++; 1 _Час ++; 4 _Часа ++; 1 _День ++; //-------------------------- if (Минута*Частота_таймера >= M1) { Новый_минутный_бар = true ; Минута = 0 ; } //-------------------------- if ( 5 _Минут*Частота_таймера >= M5) { Новый_5_минутный_бар = true ; 5 _Минут = 0 ; } //-------------------------- if ( 15 _Минут*Частота_таймера >= M15) { Новый_15_минутный_бар = true ; 15 _Минут = 0 ; } //-------------------------- if ( 30 _Минут*Частота_таймера >= M30) { Новый_30_минутный_бар = true ; 30 _Минут = 0 ; } //-------------------------- if ( 1 _Час*Частота_таймера >= H1) { Новый_часовой_бар = true ; 1 _Час = 0 ; } //-------------------------- if ( 4 _Часа*Частота_таймера >= H4) { Новый_4_часовой_бар = true ; 4 _Часа = 0 ; } //-------------------------- if ( 1 _День*Частота_таймера >= D1) { Новый_дневной_бар = true ; 1 _День = 0 ; } //-------------------------- } } //-------------------------- //-------------------------- bool Новый_бар( int Таймфрейм = M1) { bool Новый_бар; //----------------------- switch (Таймфрейм) { case M1: //----------------------- Новый_бар = Новый_минутный_бар; if (Новый_бар)Новый_минутный_бар = false ; return (Новый_бар); //----------------------- break ; //----------------------------- case M5: //----------------------- Новый_бар = Новый_5_минутный_бар; if (Новый_бар)Новый_5_минутный_бар = false ; return (Новый_бар); //----------------------- break ; //----------------------------- case M15: //----------------------- Новый_бар = Новый_15_минутный_бар; if (Новый_бар)Новый_15_минутный_бар = false ; return (Новый_бар); //----------------------- break ; //----------------------------- case M30: //----------------------- Новый_бар = Новый_30_минутный_бар; if (Новый_бар)Новый_30_минутный_бар = false ; return (Новый_бар); //----------------------- break ; //----------------------------- case H1: //----------------------- Новый_бар = Новый_часовой_бар; if (Новый_бар)Новый_часовой_бар = false ; return (Новый_бар); //----------------------- break ; //----------------------------- case H4: //----------------------- Новый_бар = Новый_4_часовой_бар; if (Новый_бар)Новый_4_часовой_бар = false ; return (Новый_бар); //----------------------- break ; //----------------------------- case D1: //----------------------- Новый_бар = Новый_дневной_бар; if (Новый_бар)Новый_дневной_бар = false ; return (Новый_бар); //----------------------- break ; //----------------------------- } //----------------------- return ( false ); } //-------------------------- //+------------------------------------------------------------------+ Andrey Kisselyov 2017.09.10 20:32 #193 @Peter Konow 는 OOP가 없어도 쉽게 만들 수 있고 생각하고 시도할 수 있습니다. 감사합니다. Реter Konow 2017.09.10 20:37 #194 사용자가 New_bar() 함수를 호출하는 즉시 요청된 시간 프레임의 새 막대 이벤트에 대한 응답을 받습니다. 이 경우 함수 호출 후 새로운 막대의 이벤트가 발생하면 이벤트 플래그가 제거됩니다. 즉, 원하는 시간대의 새로운 바에 대한 알림은 각 바에 대해 한 번만 받을 수 있습니다. 결국 새 막대에 대한 알림을 받은 후 이 막대는 더 이상 새 것이 아닙니다. Georgiy Merts 2017.09.10 20:38 #195 Реter Konow : 다음은 함수의 첫 번째 버전입니다. 그것은 더 개선되고 발전될 수 있습니다. 누구든지 오류를 발견하면 의견을 말하십시오. 오프핸드 - 모든 것이 괜찮은 것처럼. 깊이 파고 들지 않았습니다. 개인적으로 나는 아마도 이전 시간과 현재 시간 을 막대의 지속 시간으로 나눌 것입니다. 값이 변경되면 새 막대가 나타납니다. 그러나 가능합니다. 스타일은 개인적으로 변수의 타입으로 어떤 타입인지 판단이 불가능해서 조금 짜증이 납니다. (저는 "헝가리식 표기법, 어떤 변수의 접두어가 그 타입의 축약명일 때"에 익숙합니다) , 하지만 아마도 이것은 불필요할 것입니다. Реter Konow 2017.09.10 20:38 #196 Andrey Kisselyov : @Peter Konow 는 OOP가 없어도 쉽게 만들 수 있고 생각하고 시도할 수 있습니다. 감사합니다. 물론 가능한 일입니다. 나는 그것을 위해 한 시간이 있었다. 무언가를 생각하고 잘라낼 수 있습니다. 이 모든 것이 가능합니다. Mickey Moose 2017.09.10 20:39 #197 Andrey Kisselyov : @Peter Konow 는 OOP가 없어도 쉽게 만들 수 있고 생각하고 시도할 수 있습니다. 감사합니다. 내가 올바르게 이해하는 한. 목표는 그것을 작동시키는 것입니다. 그가 이 기능으로 보호된 파일을 게시했다면 - 인생에서 그들은 그것이 그런 식으로 작성되었다고 추측하지 않았을 것입니다. Реter Konow 2017.09.10 20:41 #198 George Merts : 오프핸드 - 모든 것이 괜찮은 것처럼. 깊이 파고 들지 않았습니다. 개인적으로 나는 아마도 이전 시간과현재 시간 을 막대의 지속 시간으로 나눌 것입니다. 값이 변경되면 새 막대가 나타납니다. 그러나 가능합니다. 스타일은 개인적으로 변수의 타입으로 어떤 타입인지 판단이 불가능해서 조금 짜증이 납니다. (저는 "헝가리식 표기법, 어떤 변수의 접두어가 그 타입의 축약명일 때"에 익숙합니다) , 하지만 아마도 이것은 불필요할 것입니다. 글쎄요, 스타일에 대한 인식은 습관의 문제입니다. 나뭇가지에 있는 코드를 읽는 것도 어렵습니다. 가끔 짜증날 뿐입니다. Andrei01 2017.09.10 20:44 #199 George Merts : 더 쉬울 수 있습니다. OOP - 단일 인터페이스를 정의할 수 있습니다. 그 후 - 모든 플랫폼 관련 사항은 "숨겨져" 작업을 방해하지 않습니다. 물론 이것은 순전히 절차적 접근 방식으로 수행될 수 있습니다. 그러나 각 기능에서 모든 플랫폼을 한 번에 처리해야 하기 때문에 절차 버전을 지원하는 것이 더 어려울 것입니다. 단일 인터페이스는 모든 계산 작업을 프로그래밍하는 데 완전히 적용할 수 없다는 것은 이미 논의된 것 같습니다... 인터페이스의 형태로 아름다움을 가져오는 것은 기성 코드에만 적용할 수 있는 순전히 미용적인 절차이며, 코드의 추가 지원 및 개선 ... Andrey Kisselyov 2017.09.10 20:48 #200 Mickey Moose : 내가 올바르게 이해하는 한. 목표는 그것을 작동시키는 것입니다. 그가 이 기능으로 보호된 파일을 게시했다면 - 인생에서 그들은 그것이 그런 식으로 작성되었다고 추측하지 않았을 것입니다. 단순히 작동하는 것이 아니라 오류 없이 빠르고 정확하게 작동하고 소스 코드에서 구조화된 모양과 이해하기 쉬운 쓰기가 있는 것이 바람직합니다. 감사합니다. 1...131415161718192021222324252627...47 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
이것으로 시작하지 않는 것이 좋습니다. 그게 벅찬 일입니다. 이 글에서 그를 잘 알지도 못하는 OOP의 서포터인 나조차도 혼미에 빠졌다... 나는 아무것도 이해하지 못했다. 따라서 가장 낮은 수준에서 차이점을 설명하려고합니다.
더 쉬울 수 있습니다.
OOP - 단일 인터페이스를 정의할 수 있습니다. 그 후 - 모든 플랫폼 관련 사항은 "숨겨져" 작업을 방해하지 않습니다.
물론 이것은 순전히 절차적 접근 방식으로 수행될 수 있습니다. 그러나 각 기능에서 모든 플랫폼을 한 번에 처리해야 하기 때문에 절차 버전을 지원하는 것이 더 어려울 것입니다.
약간의 지연에 대해 사과드립니다.
다음은 함수의 첫 번째 버전입니다. 그것은 더 개선되고 발전될 수 있습니다. 누구든지 오류를 발견하면 의견을 말하십시오.
감사합니다.
다음은 함수의 첫 번째 버전입니다. 그것은 더 개선되고 발전될 수 있습니다. 누구든지 오류를 발견하면 의견을 말하십시오.
오프핸드 - 모든 것이 괜찮은 것처럼. 깊이 파고 들지 않았습니다.
개인적으로 나는 아마도 이전 시간과 현재 시간 을 막대의 지속 시간으로 나눌 것입니다. 값이 변경되면 새 막대가 나타납니다. 그러나 가능합니다.
스타일은 개인적으로 변수의 타입으로 어떤 타입인지 판단이 불가능해서 조금 짜증이 납니다. (저는 "헝가리식 표기법, 어떤 변수의 접두어가 그 타입의 축약명일 때"에 익숙합니다) , 하지만 아마도 이것은 불필요할 것입니다.
@Peter Konow 는 OOP가 없어도 쉽게 만들 수 있고 생각하고 시도할 수 있습니다.
감사합니다.
@Peter Konow 는 OOP가 없어도 쉽게 만들 수 있고 생각하고 시도할 수 있습니다.
감사합니다.
내가 올바르게 이해하는 한. 목표는 그것을 작동시키는 것입니다. 그가 이 기능으로 보호된 파일을 게시했다면 - 인생에서 그들은 그것이 그런 식으로 작성되었다고 추측하지 않았을 것입니다.
오프핸드 - 모든 것이 괜찮은 것처럼. 깊이 파고 들지 않았습니다.
개인적으로 나는 아마도 이전 시간과현재 시간 을 막대의 지속 시간으로 나눌 것입니다. 값이 변경되면 새 막대가 나타납니다. 그러나 가능합니다.
스타일은 개인적으로 변수의 타입으로 어떤 타입인지 판단이 불가능해서 조금 짜증이 납니다. (저는 "헝가리식 표기법, 어떤 변수의 접두어가 그 타입의 축약명일 때"에 익숙합니다) , 하지만 아마도 이것은 불필요할 것입니다.
글쎄요, 스타일에 대한 인식은 습관의 문제입니다. 나뭇가지에 있는 코드를 읽는 것도 어렵습니다. 가끔 짜증날 뿐입니다.
더 쉬울 수 있습니다.
OOP - 단일 인터페이스를 정의할 수 있습니다. 그 후 - 모든 플랫폼 관련 사항은 "숨겨져" 작업을 방해하지 않습니다.
물론 이것은 순전히 절차적 접근 방식으로 수행될 수 있습니다. 그러나 각 기능에서 모든 플랫폼을 한 번에 처리해야 하기 때문에 절차 버전을 지원하는 것이 더 어려울 것입니다.
단일 인터페이스는 모든 계산 작업을 프로그래밍하는 데 완전히 적용할 수 없다는 것은 이미 논의된 것 같습니다... 인터페이스의 형태로 아름다움을 가져오는 것은 기성 코드에만 적용할 수 있는 순전히 미용적인 절차이며, 코드의 추가 지원 및 개선 ...
내가 올바르게 이해하는 한. 목표는 그것을 작동시키는 것입니다. 그가 이 기능으로 보호된 파일을 게시했다면 - 인생에서 그들은 그것이 그런 식으로 작성되었다고 추측하지 않았을 것입니다.
감사합니다.