Vladimir Karputov : 변수를 초기화하지 않는 습관은 종종 검은 백조로 이어지기 때문에 해로울 수 있습니다. 따라서 규칙으로 받아들여야 합니다. 변수를 생성하고 즉시 초기화해야 합니다.
OnInit()에서 초기화될 때 시간 프레임을 전환할 때 변수 값을 잃을 수 있습니다. 따라서 프로그램 논리에 방해가 될 수 있습니다.
//+------------------------------------------------------------------+ //| exTextInitGlobalVariables.mq5 | //| Copyright 2015, Artem A. Trishkin, Skype artmedia70 | //| https://login.mql5.com/ru/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright"Copyright 2015, Artem A. Trishkin, Skype artmedia70" #property link"https://login.mql5.com/ru/users/artmedia70" #property version"1.00" //--- input parameters inputint TestInput= 0 ; // Внешняя переменная int testInputGlobal=TestInput; // Значение внешней переменной, присвоенное на глобальном уровне int testInputInit; // Значение внешней переменной, присвоенное в OnInit()
//--- global variables int TestValueGlobalNoInitNo; // Не инициализирована значением нигде int TestValueGlobalYesInitNo= 0 ; // Инициализирована значением 0 при объявлении, не инициализирована в OnInit() //--- int TestValueGlobalNoInitYes; // Не инициализирована значением при объявлении, инициализирована в OnInit() нулём int TestValueGlobalYesInitYes= 0 ; // Инициализирована нулём и при объявлении, и в OnInit() //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ intOnInit () { //--- testInputInit=TestInput; TestValueGlobalNoInitYes= 0 ; TestValueGlobalYesInitYes= 0 ; //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ voidOnDeinit ( constint reason) { //---
} //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ voidOnTick () { //--- testInputInit++; testInputGlobal++; TestValueGlobalNoInitNo++; TestValueGlobalNoInitYes++; TestValueGlobalYesInitNo++; TestValueGlobalYesInitYes++; Comment ( "\n" + "=============================================" + "\n" + "Значение внешней переменной TestInput(" ,TestInput, "), присвоенное в OnInit(): " ,( string )testInputGlobal+ "\n" + "Значение внешней переменной TestInput(" ,TestInput, "), присвоенное на глобальном уровне: " ,( string )testInputGlobal+ //--- "\n" + "=============================================" + "\n" + "Не инициализирована значением нигде: " ,( string )TestValueGlobalNoInitNo+ "\n" + "Инициализирована значением 0 при объявлении, не инициализирована в OnInit(): " +( string )TestValueGlobalYesInitNo+ //--- "\n" + "=============================================" + "\n" + "Не инициализирована значением при объявлении, инициализирована в OnInit() нулём: " +( string )TestValueGlobalNoInitYes+ "\n" + "Инициализирована нулём и при объявлении, и в OnInit(): " +( string )TestValueGlobalYesInitYes ); } //+------------------------------------------------------------------+
OnInit()에서 초기화될 때 시간 프레임을 전환할 때 변수 값을 잃을 수 있습니다. 따라서 프로그램 논리에 방해가 될 수 있습니다.
고려하지 않는 경우:
초기화
클라이언트 터미널이 프로그램(EA 또는 사용자 지정 표시기)을 로드하고 전역 변수 초기화 프로세스를 시작한 직후 Init 이벤트가 전송되고 OnInit() 함수가 존재하는 경우 이를 처리합니다. 이 이벤트는 또한 금융 상품 및/또는 차트 기간을 변경한 후, MetaEditor에서 프로그램을 다시 컴파일한 후, Expert Advisor 또는 사용자 지정 지표 설정 창에서 입력 매개변수를 변경한 후 생성됩니다. EA는 계정 변경 후에도 초기화됩니다 . 스크립트의 경우 Init 이벤트가 발생하지 않습니다.
클라이언트 터미널이 프로그램(EA 또는 사용자 지정 표시기)을 로드하고 전역 변수 초기화 프로세스를 시작한 직후 Init 이벤트가 전송되고 OnInit() 함수가 존재하는 경우 이를 처리합니다. 이 이벤트는 또한 금융 상품 및/또는 차트 기간을 변경한 후, MetaEditor에서 프로그램을 다시 컴파일한 후, Expert Advisor 또는 사용자 지정 지표 설정 창에서 입력 매개변수를 변경한 후 생성됩니다. EA는 계정 변경 후에도 초기화됩니다 . 스크립트의 경우 Init 이벤트가 발생하지 않습니다.
그러면 무엇이든 돌릴 수 있습니다.
나는 Foma에 대해 이야기하고 그는 Yeryoma에 대해 이야기하고 있습니다 ...
그렇다면 그러한 상황에서 어떻게 의사 소통을합니까?
나는 OnInit()에서 무심코 전역 변수를 초기화하는 나쁜 습관 에 대해 이야기하고 있지만, 당신은 나에게 내가 알고 있는 도움을 줍니다.
동시에 강박적인 형태로 모든 초보자에게 중독을 부과합니다. USE 세대를 키우고 있습니까? 생각하지 않고 맹목적으로 선생을 따르는 자들의 클론?
그래서 Otkritie에서 MT5 주식을 거래할 수 있습니까?
블라디미르, 사람을 혼동하지 마십시오!
문서에서:
https://www.mql5.com/ru/docs/basis/variables/global변수를 초기화하지 않는 습관은 종종 검은 백조로 이어지기 때문에 해로울 수 있습니다. 따라서 규칙으로 받아들여야 합니다. 변수를 생성하고 즉시 초기화해야 합니다.
그만, 그만, 그만. "규칙으로 취하는 것"과 " OnInit()에서 이러한 변수에 명시적으로 초기화( 값 할당 )가 필요함"을 혼동하지 맙시다. 이는 명백한 거짓말입니다!
당신은 변수를 초기화할 수 없습니다 - 당신의 돈.
블라디미르가 부분적으로 옳습니다.
예를 들어,
언젠가, 나는 언제, 내가 변수를 선언했는지 기억나지 않는다
부울 STOP;
실제로 OnTick 에서 해결했습니다.
기본적으로 bool 은 false 여야 합니다.
나는 이것을 좋아했다:
{
if (!STOP) { Print ( "STOP" ); return ;}
}
하지만 이 코드는 작동하지 않았습니다 . bool STOP=false;
어떤 빌드에서 이런 상황이 한 번 있었는데 재현하지 않았습니다. 하지만이 오류가 발생했습니다.
블라디미르가 부분적으로 옳습니다.
변수를 초기화하지 않는 습관은 종종 검은 백조로 이어지기 때문에 해로울 수 있습니다. 따라서 규칙으로 받아들여야 합니다. 변수를 생성하고 즉시 초기화해야 합니다.
OnInit()에서 초기화될 때 시간 프레임을 전환할 때 변수 값을 잃을 수 있습니다. 따라서 프로그램 논리에 방해가 될 수 있습니다.
//| exTextInitGlobalVariables.mq5 |
//| Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
//--- input parameters
input int TestInput= 0 ; // Внешняя переменная
int testInputGlobal=TestInput; // Значение внешней переменной, присвоенное на глобальном уровне
int testInputInit; // Значение внешней переменной, присвоенное в OnInit()
//--- global variables
int TestValueGlobalNoInitNo; // Не инициализирована значением нигде
int TestValueGlobalYesInitNo= 0 ; // Инициализирована значением 0 при объявлении, не инициализирована в OnInit()
//---
int TestValueGlobalNoInitYes; // Не инициализирована значением при объявлении, инициализирована в OnInit() нулём
int TestValueGlobalYesInitYes= 0 ; // Инициализирована нулём и при объявлении, и в OnInit()
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//---
testInputInit=TestInput;
TestValueGlobalNoInitYes= 0 ;
TestValueGlobalYesInitYes= 0 ;
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
testInputInit++;
testInputGlobal++;
TestValueGlobalNoInitNo++;
TestValueGlobalNoInitYes++;
TestValueGlobalYesInitNo++;
TestValueGlobalYesInitYes++;
Comment
(
"\n" + "=============================================" +
"\n" + "Значение внешней переменной TestInput(" ,TestInput, "), присвоенное в OnInit(): " ,( string )testInputGlobal+
"\n" + "Значение внешней переменной TestInput(" ,TestInput, "), присвоенное на глобальном уровне: " ,( string )testInputGlobal+
//---
"\n" + "=============================================" +
"\n" + "Не инициализирована значением нигде: " ,( string )TestValueGlobalNoInitNo+
"\n" + "Инициализирована значением 0 при объявлении, не инициализирована в OnInit(): " +( string )TestValueGlobalYesInitNo+
//---
"\n" + "=============================================" +
"\n" + "Не инициализирована значением при объявлении, инициализирована в OnInit() нулём: " +( string )TestValueGlobalNoInitYes+
"\n" + "Инициализирована нулём и при объявлении, и в OnInit(): " +( string )TestValueGlobalYesInitYes
);
}
//+------------------------------------------------------------------+
OnInit()에서 초기화될 때 시간 프레임을 전환할 때 변수 값을 잃을 수 있습니다. 따라서 프로그램 논리에 방해가 될 수 있습니다.
고려하지 않는 경우:
초기화
클라이언트 터미널이 프로그램(EA 또는 사용자 지정 표시기)을 로드하고 전역 변수 초기화 프로세스를 시작한 직후 Init 이벤트가 전송되고 OnInit() 함수가 존재하는 경우 이를 처리합니다. 이 이벤트는 또한 금융 상품 및/또는 차트 기간을 변경한 후, MetaEditor에서 프로그램을 다시 컴파일한 후, Expert Advisor 또는 사용자 지정 지표 설정 창에서 입력 매개변수를 변경한 후 생성됩니다. EA는 계정 변경 후에도 초기화됩니다 . 스크립트의 경우 Init 이벤트가 발생하지 않습니다.
그러면 무엇이든 돌릴 수 있습니다.
고려하지 않는 경우:
초기화
클라이언트 터미널이 프로그램(EA 또는 사용자 지정 표시기)을 로드하고 전역 변수 초기화 프로세스를 시작한 직후 Init 이벤트가 전송되고 OnInit() 함수가 존재하는 경우 이를 처리합니다. 이 이벤트는 또한 금융 상품 및/또는 차트 기간을 변경한 후, MetaEditor에서 프로그램을 다시 컴파일한 후, Expert Advisor 또는 사용자 지정 지표 설정 창에서 입력 매개변수를 변경한 후 생성됩니다. EA는 계정 변경 후에도 초기화됩니다 . 스크립트의 경우 Init 이벤트가 발생하지 않습니다.
그러면 무엇이든 돌릴 수 있습니다.
나는 Foma에 대해 이야기하고 그는 Yeryoma에 대해 이야기하고 있습니다 ...
그렇다면 그러한 상황에서 어떻게 의사 소통을합니까?
나는 OnInit()에서 무심코 전역 변수를 초기화하는 나쁜 습관 에 대해 이야기하고 있지만, 당신은 나에게 내가 알고 있는 도움을 줍니다.
동시에 강박적인 형태로 모든 초보자에게 중독을 부과합니다. USE 세대를 키우고 있습니까? 생각하지 않고 맹목적으로 선생을 따르는 자들의 클론?