//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int _OnInit()
{
//------------------------------------------------//Initializing program interface://------------------------------------------------Initialize();//------------------------------------------------
2.関数の実装
voidInitialize()
{
//------------------------------------------------//Opening the windows://------------------------------------------------//1. "Main Parameters".
w_14_Main_Parameters();//------------------------------------------------//------------------------------------------------//2. "Input parameters".w_10_Input_parameters();//------------------------------------------------//------------------------------------------------//3. "Setting example 1"w_6_Settings_example_1();//------------------------------------------------//------------------------------------------------//Initializing the elements://------------------------------------------------w6_d_p5_S_EDIT_Spin_the_value(55);w6_i_p3_H_SLIDER_Roll_the_value(55);w14_i_p3_V_SLIDER_Vertical_slider(55);w14_s_p4_EDIT_Max("100");w14_s_p4_EDIT_Min("0");w14_s_p4_EDIT_Selected("55");w15_i_p2_P_BAR_P1(55);w15_s_p4_VALUE_V1("55");//------------------------------------------------
}
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int_OnInit()
{
//------------------------------------------------//Initializing program interface://------------------------------------------------Initialize();//------------------------------------------------
voidInitialize()
{
//------------------------------------------------//Opening the windows://------------------------------------------------//1. "Main Parameters". w_14_Main_Parameters();//2. "Input parameters".w_10_Input_parameters();//3. "Setting example 1"w_6_Settings_example_1();
//------------------------------------------------//Initializing the elements://------------------------------------------------ w6_d_p5_S_EDIT_Spin_the_value(55);
w6_i_p3_H_SLIDER_Roll_the_value(55);
w14_i_p3_V_SLIDER_Vertical_slider(55);
w14_s_p4_EDIT_Max("100");
w14_s_p4_EDIT_Min("0");
w14_s_p4_EDIT_Selected("55");
w15_i_p2_P_BAR_P1(55);
w15_s_p4_VALUE_V1("55");//------------------------------------------------
}
case Settings_example_1___Spin_the_value:
//------------------------------------------------------------------------------------------------------//What to do when the value is set?//------------------------------------------------------------------------------------------------------//Min value: NOT SET | Max value: NOT SET | V_step: 1.7 | Default value: 468.99 | Digits: 3//------------------------------------------------------------------------------------------------------w6_i_p3_H_SLIDER_Roll_the_value((int)value);
//------------------------------------------------------------------------------------------------------//Your comment://------------------------------------------------------------------------------------------------------break;
case Settings_example_1___Roll_the_value:
//------------------------------------------------------------------------------------------------------//What to do when the slider's handle is moved?//------------------------------------------------------------------------------------------------------//Min value: 0 | Max value: 100 | V_step: 1 | Default value: 55 | Digits: Integer value//------------------------------------------------------------------------------------------------------
//Transferring the value:
w14_i_p3_V_SLIDER_Vertical_slider((int)value);
w6_d_p5_S_EDIT_Spin_the_value((double)value);
//------------------------------------------------------------------------------------------------------//Your comment://------------------------------------------------------------------------------------------------------break;
case Main_Parameters___Vertical_slider:
//------------------------------------------------------------------------------------------------------//What to do when the slider's handle is moved?//------------------------------------------------------------------------------------------------------//Min value: 0 | Max value: 100 | V_step: 1 | Default value: 50 | Digits: Integer value//------------------------------------------------------------------------------------------------------
{
//----------------------------------------------------- //Transferring value to other destinations://----------------------------------------------------- w14_s_p4_EDIT_Percent(value);//-----------------------------------------------------w14_s_p4_EDIT_Selected(value);//-----------------------------------------------------w15_i_p2_P_BAR_P1((int)value);//-----------------------------------------------------w15_s_p4_VALUE_V1(value);//-----------------------------------------------------w6_i_p3_H_SLIDER_Roll_the_value((int)value);//-----------------------------------------------------w6_d_p5_S_EDIT_Spin_the_value((double)value);//-----------------------------------------------------w8_s_p4_CELL_Account_balance__Value(value);//------------------------------------------------------------------------------------------------------//Your comment://------------------------------------------------------------------------------------------------------
}
break;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int _OnInit()
{
//------------------------------------------------//Initializing program interface://------------------------------------------------
Initialize();
//----------------------------------------------------------//Checking default value of the parameters in the group: //----------------------------------------------------------Risk_management_group_1();//----------------------------------------------------------
パラメータ境界の時差保護とユーザー警告の実装に関するトピックを続ける前に、それに直接先行するもう一つのトピックについて触れておく。すなわち、パラメータのプリセット である。
ほとんどのMQLプログラムには入力 カテゴリの変数があります。これらはグローバル・レベルで宣言され、1つの設定ウィンドウで見ることができます。このウィンドウはプログラムの開始時に表示され、その中でユーザーは「外部」変数の初期値を変更することができます。しかしその前に、ユーザーはプログラム内部で外部変数を初期化します。重要なのは、プログラムのプリセットは万能ではないということであり、そのために、起動のたびに設定する可能性を必要とする変数のカテゴリーが存在するのである。また、プログラム実行中に手動で外部変数にアクセスすることは不可能であり、再起動が必要であることも知られている。グラフィカル・インターフェースでは、この必要性がなくなります。プログラム設定は実行時に開くことができます。
しかし、開始時にプログラム・パラメーターに初期値を設定する必要性は変わらない。
グラフィカル・インターフェースの場合 、 標準設定ウィンドウが不要になるため、入力 タイプの変数を宣言する意味がなくなりますが、本質は変わりません。 入力 変数の代わりに、コントロールのパラメータに初期値を設定する必要があります。
プログラムの初期化では、標準ウィンドウではなく、独自のウィンドウに 初期値を設定する関数を呼び出す必要があります。 オプションとして、V_CURRENT 値やON/OFF 状態などを設定するインターフェイス構築の段階で、KIB-constructorでこれを行うこともできますが、現在はプログラムで要素を初期化することが可能です。これにより、コンストラクタ内での要素の初期化とプログラム内での要素の初期化を組み合わせることが可能になりました。
そのため、OnInit() から呼び出される特別な関数が必要になります。
この関数は具体的に何をするのか:
この関数は何と呼ばれるのでしょうか?
私はこれをInitialize() と呼ぶことにするが、誰でも独自の変種を思いつくことができる。
重要な のは、この関数はどのインターフェイスのExpert Advisorにもなければ ならないということです。Expert Advisorの OnTick() 関数やインジケーターのOnCalculate() 関数と比較することができます。これを理解することが重要です。
関数はどのような値を返しますか?
関数はvoid 型です。 値を返す必要はありません。呼び出されると、必要なウィンドウを開き、項目のパラメータを初期化し、場合によってはいくつかのプロパティをプリセットします。基本的にはそれだけだ。理論的には、この中でパラメータの初期値を設定することもできるが、値の制御はAPIファイルやタイマーからのエレメント・イベント時に呼び出される別の関数で実装することになると思う。次のバージョンでは、コントロール・コールのプリントアウトを書くことになるだろう。
*現時点では、Expert Advisorsのインターフェイスのコンセプトは形成されたばかりであり、多くの発見があることを考慮する ことが重要です。
以下は、現在のデモ・プロジェクトにおける Expert Advisor のインターフェース初期化関数の例である:
1.関数の呼び出し
2.関数の実装
今のところ、関数の構造は次のようになっている。非常に単純な関数。ウィンドウを開き、要素のパラメータに必要な値を送る。ウィンドウを開くと、再描画を追加することなく要素の必要な値が即座に表示されるので、要素の初期化とウィンドウの開き方をところどころ変更することは可能である。しかし、これらは些細なことです。
それでは、本題であるパラメータの段階的保護の実装に 移りましょう。
14.パラメータ境界の段階的保護の実現:
//------------------------------------------------------------------------------------------------------------
プリセットされた範囲内で設定を制御するロジックを記述し、警告システムを作成する:
//-----------------------------------------------------------------------------
進めましょう:
1.選択された要素のパラメータの初期値を設定し、必要なウィンドウを開きます。そのために、Initialise() 関数を作成 し、 _OnInit() 関数内で呼び出します。
結果:必要なウィンドウが開き、対象の要素に 初期値が設定さ れる。
2.APIファイルを開き、エレメントの接続を記述 します。各エレメントの 場合 、呼び出しを記述し、チェーン内の他のターゲット・エレメントに値を渡します:
3.接続をテストする:
結果:要素の値は意図したとおりに接続されている。
4.要素グループのパラメータを制御する関数を記述する:void Risk_management_group_1().
Risk_management_group_1()関数を_OnInit()関数から呼び出す:
結果:意図したとおりに動作するが、入力フィールドに値を入力する際、警告ウィンドウが表示されても入力された値がリセットされない(要改善)。
(*また 、 フレームの色の設定はアップデートで追加されましたが、現在のバージョンにはありません)。
次の課題は、入力したパラメーターを「キャンセル」ボタンでキャンセルすることを考えることだ。
これは非常に難しい課題だが、すでに部分的に実装 した。以前の機能を復元してみるつもりだ。