MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 94

 
Vikon:
ここで、クラス内の関数の呼び出しについて、private: public: の方法、クラスへのデータの渡し方、クラスからの結果の取得方法について説明します。今のところこれです!

クラス内では、結果は何らかの方法で計算されなければならない。また、あなたが関与しないクラスは、今結果を返す必要があるが、他の時点では必要ないことをどのように理解するのでしょうか?

そこで、外部から呼び出せるクラス内部のメソッドが必要になります。だから、公開しなければならないのです。

もちろん、クラス内のすべてのデータを読み込んでクラス変数に書き込むプライベートメソッドを作り、パブリックメソッドはそのプライベートメソッドを呼び出すということもできますが。しかし、いずれにせよ何らかのメソッドが呼び出されなければならない。そして、プライベートメソッドで何をカウントするのか、どれだけ複雑な計算をするのか、どんな変数で計算するのか、すべて自分次第、自分の責任で決めることができるのです。

 
Vikon:
それは、クラスの中でどのように関数を呼び出すか、すなわちprivate:public:をどうするか、クラスにどのようにデータを渡すか、クラスからどのように結果を得るか、という点だ。今のところ、これだ!
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      inputA=1;
input int      inputB=3;

class ASD
  {
private:
   // Здесь располагаются переменные и функции, доступные только внутри класса
public:
   int Add(int a,int b)
     {
      Print(__FUNCTION__,": Результат сложения: a",a," + b",b," = ",a+b);
      return(a+b);
     }
  } ar;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ar.Add( inputA, inputB );
  }
//+------------------------------------------------------------------+
動作するように見えるが、正しいかどうかは確認していない)
 
Alexey Kozitsyn:
動作するはずです。正しいかどうかは確認していません)

お待たせしました!ありがとうございます!もう動き出しましたよ〜。

スクリプトの

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   ar.sf ();
  }

クラスとなります。

class ASD
  {
private:
  int d;
  int g (int a_s,int a_d){d=a_s+a_d;return (d=a_s+a_d); }
public:
void fg (int a_s,int a_d)  { g (a_s,a_d); }
void sf ()                 {Alert (d);}
  };

Alert の結果は 8 ですが、これはクラスからのアラートであり、スクリプトからのアラートが必要です。

 
Vikon:

ほら、ありがとう、もう動き出しましたよ〜。

スクリプトの

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   ar.sf ();
  }

クラスとなります。

class ASD
  {
private:
  int d;
  int g (int a_s,int a_d){d=a_s+a_d;return (d=a_s+a_d); }
public:
void fg (int a_s,int a_d)  { g (a_s,a_d); }
void sf ()                 {Alert (d);}
  };

Alert の結果は 8 ですが、これはクラスからのアラートであり、今はスクリプトからのアラートが必要です。

さて、クラスでAlert() メソッドを宣言し、ar.Alert()と呼びますが、今はsf()メソッドも同じように動作しています。dフィールドに値を書き込んだ後、何を見たいのかがよくわからないのですが?
 
Alexey Kozitsyn:
さて、クラスでAlert()メソッドを宣言し、ar.Alert()と呼びますが、今はsf()メソッドでも同じことができますね。フィールドdに値を書き込んだ後、何を確認したいのかがよくわからないのですが?
sf()メソッドを呼ばずにdの値を取得したい場合は、publicメソッドint GetD() const { return( d ); }を追加する必要があります。そして、スクリプトにAlert( ar.GetD() ) と記述します。
 
Alexey Kozitsyn:
動作するように見えるが、まだ確認していない)

みんな!!(笑本当にありがとうございました。了解しました。

スクリプトを使用します。

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   Alert ( ar.sf ());
  }

クラスとなります。

class ASD
  {
private:
  int d;
  int g   (int a_s,int a_d)  {return (d=a_s+a_d); }
public:
  void fg (int a_s,int a_d)  { g (a_s,a_d); }
  int sf  ()                 {return (d);}    
  
  };


噛み砕きます!

 

このスレッドで誰がテスターが壊れたと書いたか覚えていませんが、壊れたも同然かもしれないと答えることができます。異なる時間の塊を飲み込んだり、任意のセグメントからカウントを開始したりする(ただし、すべての引用は存在する)。

見るべき人が見ればわかると思うんです。

 
こんにちは、MRoubd関数をMSDN
からインポート することができるかどうか教えていただけませんか?
(指定された値の倍数に丸められた数値を返す)

または丸め方、例えば 2285.13 は (0.25) の倍数になるように 2285.00 __ 2285.25 __ 2285.50 __ 2285.75
 
口座ではなく、ペアのレバレッジを知るには?
 
SAMER:
口座ではなく、ペアのレバレッジを知るには?

提供されるレバレッジの大きさ。

long liverage=AccountInfoInteger(ACCOUNT_LEVERAGE);