初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 681

 
post_ek:
では、OtkritieでMT5の株を取引することは可能なのか、不可能なのか?
できますよ!株か先物のどちらかのみとなります(MT5プラットフォームは 1つだけ無料で提供されます)。2つ目は、月額使用料を支払う必要があります。私が記憶している限りでは、そうです。詳しくはオトクリティの個人アカウントでご確認ください。
 
Alexey Kozitsyn:

ウラジミール、彼を混乱させるな!

ドキュメントより

https://www.mql5.com/ru/docs/basis/variables/global
変数を初期化しない習慣は、しばしば「ブラックスワン」を引き起こすので、有害である。だから、変数を作って、一度に初期化する、ということをルール化したほうがいいんです。
 
Vladimir Karputov:
変数を初期化しない習慣は有害で、この動作はしばしば「ブラックスワン」を引き起こすからです。したがって、変数を作ってすぐに初期化するのが鉄則です。
ストップ!ストップ!ストップルールを作るため」と「OnInit()でこれらの変 数を明示的に初期化(値を代 する必要がある」を混同しないようにしましょう- これは率直に言って嘘です!
 
Alexey Kozitsyn:
おっとっと、おっとっと。ルールとして守る」と「OnInit()でこれらの 変数を明示的に初期化(値を代しなければ ならない」を混同しないようにしましょう。
あなたは、変数を初期化する必要はありません。
 
Vladimir Karputov:
あなたは、変数を初期化する必要はありません。
もう一度言います。チャンスと責任を混同してはいけない
 

ウラジミールの言うことは一部正しい。

以下はその一例です。

昔々、いつだったか忘れたが、私はある変数を宣言した。

bool STOP。

を作成し、実際にOnTickで 使用します。

デフォルトでは、boolは false であるべきです

そうしました。

void OnTick ()

{

if(!STOP) {Print("STOP");return;}

}

boolSTOP=falseを 指定していなかったため、コードが失敗してしまいました。

この状況は、あるビルドで一度発生したもので、後で再現することはありませんでした(ビルドに何らかのバグがあったのか、それとも他の何かか分かりませんが)。

 
Vladislav Andruschenko:

ウラジミールの言うことは一部正しい。

決して、変数を初期化しないままにしておくことを呼びかけているのではありません。しかし、初心者にアドバイスをするとき、特に自分のアドバイスが唯一の正しい解決策であるとは言わないことです。
 
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
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
         );
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

OnInit()で初期化中にタイムフレームを切り替えると、変数の値が失われる可能性があります - そのため、プログラムロジックにエラーが発生する可能性があります。

考慮しない場合。

イニシャル

クライアント端末がプログラム(Expert Advisorまたはカスタムインジケータ)をロードし、グローバル変数の初期化を開始するとすぐに、Initイベントが送信され、OnInit() 関数(ある場合)によって処理されます。このイベントは、証券やチャートの期間が変わった後、MetaEditorでプログラムを再コンパイルした後、Expert Advisorやカスタムインディケータの設定ウィンドウから入力パラメータを変更した後にも生成されます。Expert Advisor もアカウント変更後、初期化 されます。スクリプトの場合、Initイベントは生成されません。

であれば、何でも作れます。

 
Vladimir Karputov:

考慮しない場合。

イニシャル

クライアント端末がプログラム(Expert Advisorまたはカスタムインジケータ)をロードし、グローバル変数の初期化を開始するとすぐに、Initイベントが送信され、OnInit() がある場合は、それによって処理されます。このイベントは、証券やチャートの期間が変わった後、MetaEditorでプログラムを再コンパイルした後、Expert Advisorやカスタムインディケータの設定ウィンドウから入力パラメータを変更した後にも生成されます。Expert Advisor もアカウント変更後、初期化 されます。スクリプトの場合、Initイベントは生成されません。

何でもできるんです。

私はトーマスのことを話し、彼はユアーズのことを話す...。

そんなとき、どのようにコミュニケーションをとるのでしょうか。

OnInit()でグローバル変数を軽率に 初期化する悪癖について 話します。

同時に、あなたは自分の有害な習慣を、疑う余地のない形ですべての新参者に押し付けているのです。E.S.T.の世代を育成しているのか?何も考えず、先生に盲従する人たちのクローン?

理由: