[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 396

 
7777877:

はい、おかげさまで...。しかし、なぜObjectSet(object_name,OBJPROP_TIMEFRAMES,PERIOD_H1)が(本来なら)機能しないのかを理解したいのです。言語そのものの不具合でしょうか。

事実上、PERIOD_H1 と OBJ_PERIOD_H1 の両方は、ある数値のアルファ置換に過ぎない。

OBJ_PERIOD_H1 = 0x0010 (現在のビルドの場合) = 0001 0000 (バイナリ)

PERIOD_H1 = 60 (本ビルドの場合) = 0011 1100 (バイナリ)


入れ替えが簡単なため、誤ってH4、H1、M30、M15の4つのタイムフレームを入れました。


そして、ObjectSet(object_name,OBJPROP_TIMEFRAMES,0x0010) を呼ぶ代わりに(これはあなたがやりたかったことです)、次のように呼びました。

ObjectSet(object_name,OBJPROP_TIMEFRAMES,0x3C)です。

 
datetime last_time;   // глобальная переменная

...

int start()
{
   if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      if(close[1]>open[1]) 
xBost_b=xBost_b+((close[1]-low[1])*10000);
   }

Time[0]とは何か、1タイムプラスにどのような影響を与えるのか?

 
DanLett:

Time[0]とは何か、1タイムプラスにどのような影響を与えるのか?

Time[0]は直近の(現在の)バーの開始時刻 です。新しいバーが来るとすぐに変わってしまう。

MetaEditorにTimeと入力し、F1キーを押すと詳細が表示されます。

 
ilunga:

Time[0]は直近の(現在の)バーの開始時刻です。新しいバーが来るとすぐに変わってしまう。

MetaEditorにTimeと入力し、F1キーを押すと詳細が表示されます。

これから読みます!ありがとうございました。
 
DanLett:
これから読みます!ありがとうございました。

それから、 iTime() を見るのを忘れないでください。
 
   datetime last_time;   // глобальная переменная
  int xBost_b;
  int xBost_s;
double hi=High[1];
double op=Open[1];
double cl=Close[1];
double lo=Low[1];
int Sum_xb;
int Sum_xs;
 
 if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      if(Close[1]>Open[1]) 
xBost_b=(hi-cl)*10000;
Sum_xb=Sum_xb+xBost_b;<---------не плюсует,выдает такое же число как и xBost

      if(Close[1]<Open[1])
 xBost_s=(cl-lo)*10000; 
Sum_xs=Sum_xs+xBost_s;    
Comment("\n kolvo_b=",xBost_b,"\n Sum_xb=",Sum_xb,"\n kolvo_s=",xBost_s,"\n Sum_xs=",Sum_xs);

   }
毎回プラスを出すにはどうしたらいいのでしょうか?
 
DanLett:
どうすれば毎回加算されるようになるのか?
グローバル 変数は、すべての関数の外側に置く必要があります。また、これらの変数をstaticとして宣言することもできます。
 
DanLett:
どうすれば毎回追加できるのか?
start() から last_time を取り出し、static に宣言する。
 
合成バー(https://www.mql5.com/ru/articles/1353)を使って、EA内の関数を始値のみで動作させるにはどうしたらよいでしょうか?通常のバーでは、現在のバーのオープン時間によって行われ、次のようになります if (Time[0] == prevtime4) return;
prevtime4=Time[0]; でも合成バーは時間なし...理論的にはbidが始値ならここに書けばいいのですが、どうすればいいのかがわかりません。
 

ローソク足の買いの最大 尾を見つけるにはどうしたらいいですか?

すなわち、現在のローソク足は、前の買いローソク足、我々は買いローソク足の尾を決定し、その後、我々はチャートを構築し続け、買いローソク足が再び現れ、再び尾を計算されて構築されています。

さて、これらのテールの最大値を求め、変数に書き込むにはどうすればよいのでしょうか。

int Sum_xb;
int Sum_xs;
datetime last_time;   // глобальная переменная
int Kol_vo_b;
int Kol_vo_s;
int Sr_zn_b;
int Sr_zn_s;
extern int Num_kolvo_b=10;
extern int Num_kolvo_s=10;
int Zn_b;
int Max_b;

int start()
  {
   
  int xBost_b;
  int xBost_s;
double hi=High[1];
double op=Open[1];
double cl=Close[1];
double lo=Low[1];


   if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      if(Close[1]>Open[1])
      { 
xBost_b=(hi-cl)*10000;
Kol_vo_b++;
}
      if(Close[1]<Open[1])
      {
 xBost_s=(cl-lo)*10000; 
 Kol_vo_s++;
 
   }
   
if (Kol_vo_b==Num_kolvo_b)
{
Kol_vo_b=0;
Sum_xb=0;
}
if (Kol_vo_s==Num_kolvo_s)
{
Kol_vo_s=0;
Sum_xs=0;
}  
 
Sum_xb=Sum_xb+xBost_b;
Sr_zn_b=Sum_xb/Kol_vo_b;

Sum_xs=Sum_xs+xBost_s;
Sr_zn_s=Sum_xs/Kol_vo_s;

Zn_b=xBost_b;
if(xBost_b>Zn_b)
Max_b=xBost_b;
}




Comment("\n xBost_b=",xBost_b,"\n Sum_xb=",Sum_xb,"\n Kol_vo_b=",Kol_vo_b,"\n Sr_zn_b=",Sr_zn_b,
"\n\n\n\n kolvo_s=",xBost_s,"\n Sum_xs=",Sum_xs,"\n Kol_vo_s=",Kol_vo_s,"\n Sr_zn_s=",Sr_zn_s,"\n\n\n\n Max_b=",Max_b);

return(0);
  }

最大値を求めるには、この部分をどう書けばいいのでしょうか!

Zn_b=xBost_b;
if(xBost_b>Zn_b)
Max_b=xBost_b;