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

 
PolarSeaman:

このようなサイクルは3つあります。交換したら、端末がフリーズした。

4つ数えました。

   int i;

   SetIndexDrawBegin(0,Bars-cb);
   SetIndexDrawBegin(1,Bars-cb);

   double avg;

   ki=2.0/(p+1);

   int total;
   int limit = GetRecalcIndex(total,rates_total,prev_calculated);

   for(i=limit; i>=0; i--) 
      fx1[i]=Close[i];

   for(int m=0; m<=s; m++)
     {
      z1=fx1[0];
      for(i=0; i<=limit; i++) {z1=z1+(fx1[i]-z1)*ki; hp[i]=z1;}

      z2=fx1[limit];
      for(i=limit; i>=0; i--) {z2=z2+(fx1[i]-z2)*ki; fx1[i]=(hp[i]+z2)/2;}
     }

   fs=0;
   for(i=limit; i>=0; i--)
     {
      if(fx1[i]>fx1[i+1]) fs=1;
      if(fx1[i]<fx1[i+1]) {if(fs==1) fx2[i+1]=fx1[i+1]; fs=2;}
      if(fs==2) fx2[i]=fx1[i]; else fx2[i]=0.0;

      avg=iATR(NULL,0,ATR,i+10);
      upper[i] = hp[i] + distance*avg;
      lower[i] = hp[i] - distance*avg;

      if(Close[i+1+barsig]<upper[i+1+barsig] && Close[i+barsig]>upper[i+barsig])
         dnar[i]=High[i]+arrots*Point; else dnar[i]=EMPTY_VALUE;

      if(Close[i+1+barsig]>lower[i+1+barsig] && Close[i+barsig]<lower[i+barsig])
         upar[i]=Low[i]-arrots*Point; else upar[i]=EMPTY_VALUE;
     }

何もハングアップしない。アレイの オーバーランはないはずです。ただし、ゼロバーの値が正しく計算されていないと私は思います。

 
Ihor Herasko:

4つ数えました。

何もハングアップしない。アレイの外には オーバーランはないはずです。ただし、ゼロバーの値が正しく計算されていないような気がします。

ありがとうございます、大丈夫です。ゼロバーでは必要ない。 最初のバーから取得したいが、ポジションが無秩序に開かれる。

sell_1_B=NormalizeDouble(iCustom(Symbol(),0,"HiLo",1,1),Digits);
sell_1_1_B=NormalizeDouble(iCustom(Symbol(),0,"HiLo",1,2),Digits);

if(sell_1_1_B==0.0&&sell_1_B!=0.0)
{открываю sell}
if(sell_1_1_B!=0.0&&sell_1_B==0.0)
{открываю buy}

なぜ?

 
Ihor Herasko:

テスターでは、ビジュアライゼーションの上で、このように

オッペン

最初のキンク、テスト開始時にエラーが出たインジケータは、テスト開始後にチャートに投げると直線を構築する

壊しちゃった)

 

Expert Advisorのボタンにグラフィカルツールの「選択」を入れて、ボタンをクリックするとカーソルの下にツールアイコンが表示され、それを伸ばすことができるようにするにはどうしたらいいか、教えてください。

そして、それはすでに指定されたプロパティを持つはずです

 
PolarSeaman:

テスターでは、ビジュアライゼーションの上で、このように

最初のキンク、テスト開始時にエラーが出たインジケータは、テスト開始後にチャートに投げると直線を構築する

壊しちゃった)

なるほど、指定した本数のバーを 1ティックごとに履歴全体を再計算する再描画インジケータですね。非常に悪い解決策です。それなら、この方法でやるしかない。

   int i;

   SetIndexDrawBegin(0,Bars-cb);
   SetIndexDrawBegin(1,Bars-cb);

   double avg;

   ki=2.0/(p+1);

   int total;
   int limit = GetRecalcIndex(total,rates_total,prev_calculated);

   for(i=total; i>=0; i--) 
      fx1[i]=Close[i];

   for(int m=0; m<=s; m++)
     {
      z1=fx1[0];
      for(i=0; i<=total; i++) {z1=z1+(fx1[i]-z1)*ki; hp[i]=z1;}

      z2=fx1[total];
      for(i=total; i>=0; i--) {z2=z2+(fx1[i]-z2)*ki; fx1[i]=(hp[i]+z2)/2;}
     }

   fs=0;
   for(i=total; i>=0; i--)
     {
      if(fx1[i]>fx1[i+1]) fs=1;
      if(fx1[i]<fx1[i+1]) {if(fs==1) fx2[i+1]=fx1[i+1]; fs=2;}
      if(fs==2) fx2[i]=fx1[i]; else fx2[i]=0.0;

      avg=iATR(NULL,0,ATR,i+10);
      upper[i] = hp[i] + distance*avg;
      lower[i] = hp[i] - distance*avg;

      if(Close[i+1+barsig]<upper[i+1+barsig] && Close[i+barsig]>upper[i+barsig])
         dnar[i]=High[i]+arrots*Point; else dnar[i]=EMPTY_VALUE;

      if(Close[i+1+barsig]>lower[i+1+barsig] && Close[i+barsig]<lower[i+barsig])
         upar[i]=Low[i]-arrots*Point; else upar[i]=EMPTY_VALUE;
     }

もちろん不快ではありますが、効果はあります。

 
なぜ変数宣言で この構文が使えないのか?
int K=20;
int TIKET[K];
 
igrok333:
なぜ変数宣言で この構文が使えないのか?

Kは変数だからです。編纂時の価値は不明。それを実現するためには、Kを定数にする必要があります。

#define  K 20
int TIKET[K];
 
Ihor Herasko:

そうですね、指定した本数のバーの 履歴を1ティックごとに全て再計算する再描画インジケーターですから。これは非常に悪い解決策です。それなら、この方法でやるしかない。

もちろん不快ではありますが、効果はあります。

ありがとうございます。これだけ時間をかけても20本(!?)のバーが描かれるんですから、もっとかもしれませんね。

嘆願書を作成しましょうか?

3本以上のバーを再描画するインジケーターの流通を禁止 する法律を作れ!

国会で審議されるためには、1年間で合計10万人の署名を集める必要があります。

 
PolarSeaman:

ありがとうございます。この間、彼は20本(!)のバーを描き、もしかしたらそれ以上かもしれないので、それ以上は見ていません。

cbを小さく設定すると、再描画されるバーが少なくなります。

嘆願書を作成しましょうか?

3本以上のバーを再描画するインジケーターの流通を禁止 する法律を作れ!

1年間で10万人の署名を集めるだけで、議会で審議されるようになります。

)))

 

EAに特定の日付を除外・追加する方法を教えてください。

例えば、2018年3月2日に取引しないこと。様々なオプションを試したが、日付で混乱した。

TimeDayOfYear (TimeCurrent()) != StrToTime("2018.03.02")