エラー、バグ、質問 - ページ 2247

 
A100:
build 1755, 1795 はエラーなしでコンパイルします。だから、先生 次第なんです...。特に、テンプレートがなくても問題ないので...テンプレートがどう影響するんだ!

1816を使用しています。はい、1795で問題なくコンパイルできます。別の1881を見てみたが、コンパイルできない。それで、ドクターについてですが、あれは長所だと思います。

 
fxsaber:

ユーザビリティの例があるといいですね。

STLはC++からきているので、使い勝手の例はそちらで見ることができます。MQLへの移植のポイントは、コンテナの抽象化とアルゴリズムの汎化という原則をできるだけ再現することです。特に、通常は計算を伴う複数のループで記述するところを、1行で記述することで、プログラミングのスタイルを簡略化することができます。

 
Stanislav Korotky:

STLはC++からきているので、そこで使い方の例を見ることができます。

残念ながら、私はこの言語を理解できません。

 

インジケータでは、周期を変更するとグローバル変数が ゼロにリセットされるということでよろしいでしょうか?

string test="";
int OnInit()
  {
   Print("N 1 = ",test);
   test="Rezult";
   Print("N 2 = ",test);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   Print("N 3 = ",test);
   return(rates_total);
  }

理論的にはEAのように、リセットされないはずなのですが・・・・。

ピリオドを変更したときに、グローバル変数のデータを保存するにはどうすればよいですか?

 
Vladimir Pastushak:

皆さん、インジケーターの周期を変更すると、グローバル変数が リセットされるということでよろしいでしょうか?

EAをゼロにしないのは異常だと思う
 
TheXpert:
EAでゼロにならないのは異常だと思う

このような変数は、必要に応じてリセットする必要があります。

グローバル 変数は、ピリオドを変更してもリセットされないはずですが...。

期間が変わってもデータを保存する方法がない...。
 
Vladimir Pastushak:

このような変数は、必要に応じてリセットする必要があります。

グローバル 変数は、ピリオドを変更してもリセットされないはずですが...。

期間が変わってもデータを保存するオプションがないのですが...。

どうしてそれができないのでしょうか?
選択肢はたくさんある。
一番便利なのは、リソースを介することだと思われます。
私自身、もうずいぶん長い間使っています。

 
Nikolai Semko:

そうでないわけがない。
選択肢はたくさんある。
私にとって一番便利なのは、rusursy経由のようです。
私自身、長く使っています。

例を挙げてください...

 
Vladimir Pastushak:

このような変数は、必要に応じてリセットする必要があります。

グローバル 変数は、ピリオドを変更してもリセット されないはずですが...。

期間が変わってもデータを保存するオプションがないのですが...。

なぜ、そうしてはいけないのでしょうか?新しい期間→新しい指標インスタンス。また、削除されたインジケータインスタンスの変数が、新しいインジケータインスタンスと何の関係があるのでしょうか?

 
Vladimir Pastushak:

例を挙げてください...

union DoubleUint { double d; uint u[2]; };


class Cdouble
  {
private:
   string            Name;
   uint              Var[2];
   uint              w;
   uint              h;
   DoubleUint        du;

public:
                     Cdouble(const string name,double var);
                    ~Cdouble();
   bool              Ok;
   bool              Set(double var);
   double            value;
  };

Cdouble::Cdouble(const string name,double var)
  {
   w=2;
   h=1;
   Ok=false;
   Name="::"+name+ IntegerToString(ChartGetInteger(0,CHART_WINDOW_HANDLE));
   if(ResourceReadImage(Name,Var,w,h))
     {
      du.u[0]=Var[0];
      du.u[1]=Var[1];
      value=du.d;
      Ok=true;
     }
   else
     {
      du.d=var;
      Var[0]=du.u[0];
      Var[1]=du.u[1];
      value=var;
      if(!ResourceCreate(Name,Var,2,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA)) printf("Error create Resource: "+DoubleToString(GetLastError(),0));
      else Ok=true;
     }
  }

Cdouble::~Cdouble()
  {
   if(_UninitReason!=REASON_RECOMPILE && _UninitReason!=REASON_CHARTCHANGE) ResourceFree(Name);
  }
//+------------------------------------------------------------------+
bool Cdouble::Set(double var)
  {
   du.d=var;
   Var[0]=du.u[0];
   Var[1]=du.u[1];
   value=var;
   Ok=false;
   if(!ResourceCreate(Name,Var,2,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA)) {printf("Error create Resource: "+DoubleToString(GetLastError(),0)); return(false);}
   else { Ok=true; return(true);}
  }
//+------------------------------------------------------------------+

そして、このクラスを使ったインジケーターそのものは以下の通りです。
TFをクリックすると、すべてがOKであることが確認できます。
#include <CVar\Variable.mqh>

Cdouble d ("abracadabra",-898767.98798);

int OnInit()
  {
   EventSetMillisecondTimer(1000);
   return(INIT_SUCCEEDED);
  }
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }

void OnTimer()
  {
   Comment(DoubleToString(d.value,5));
   d.Set(d.value+0.01);  
  }