//+------------------------------------------------------------------+ //| 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 ); } //+------------------------------------------------------------------+
では、OtkritieでMT5の株を取引することは可能なのか、不可能なのか?
ウラジミール、彼を混乱させるな!
ドキュメントより
https://www.mql5.com/ru/docs/basis/variables/global変数を初期化しない習慣は有害で、この動作はしばしば「ブラックスワン」を引き起こすからです。したがって、変数を作ってすぐに初期化するのが鉄則です。
おっとっと、おっとっと。ルールとして守る」と「OnInit()でこれらの 変数を明示的に初期化(値を代 入)しなければ ならない」を混同しないようにしましょう。
あなたは、変数を初期化する必要はありません。
ウラジミールの言うことは一部正しい。
以下はその一例です。
昔々、いつだったか忘れたが、私はある変数を宣言した。
bool STOP。
を作成し、実際にOnTickで 使用します。
デフォルトでは、boolは false であるべきです
そうしました。
{
if(!STOP) {Print("STOP");return;}
}
boolSTOP=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()で初期化中にタイムフレームを切り替えると、変数の値が失われる可能性があります - そのため、プログラムロジックにエラーが発生する可能性があります。
考慮しない場合。
イニシャル
クライアント端末がプログラム(Expert Advisorまたはカスタムインジケータ)をロードし、グローバル変数の初期化を開始するとすぐに、Initイベントが送信され、OnInit() 関数(ある場合)によって処理されます。このイベントは、証券やチャートの期間が変わった後、MetaEditorでプログラムを再コンパイルした後、Expert Advisorやカスタムインディケータの設定ウィンドウから入力パラメータを変更した後にも生成されます。Expert Advisor もアカウント変更後、初期化 されます。スクリプトの場合、Initイベントは生成されません。
であれば、何でも作れます。
考慮しない場合。
イニシャル
クライアント端末がプログラム(Expert Advisorまたはカスタムインジケータ)をロードし、グローバル変数の初期化を開始するとすぐに、Initイベントが送信され、OnInit() がある場合は、それによって処理されます。このイベントは、証券やチャートの期間が変わった後、MetaEditorでプログラムを再コンパイルした後、Expert Advisorやカスタムインディケータの設定ウィンドウから入力パラメータを変更した後にも生成されます。Expert Advisor もアカウント変更後、初期化 されます。スクリプトの場合、Initイベントは生成されません。
何でもできるんです。
私はトーマスのことを話し、彼はユアーズのことを話す...。
そんなとき、どのようにコミュニケーションをとるのでしょうか。
OnInit()でグローバル変数を軽率に 初期化する悪癖について 話します。
同時に、あなたは自分の有害な習慣を、疑う余地のない形ですべての新参者に押し付けているのです。E.S.T.の世代を育成しているのか?何も考えず、先生に盲従する人たちのクローン?