[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 275

 
alsu:

int iの文字列とインデックスの初期化が見当たりません。スタジオでお願いします。

ZZY 私はリトアニア語がよくわからないので、コードのコメントにはちょっと戸惑いました)))

配列にゼロがあるアレイは正常に増加しています。プリントで見ることができます。

2013.04.08 23:18:37 2013.04.04 20:00テスト開始 EURUSD,M15:配列サイズ 19

が、配列にゼロを書き込んでしまいます。

2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[8]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[7]=0.00000000
04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[6]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[5]=0.00000000 2012.04.04 18:30:00 testavimas naktini fleta EURUSD,M15: avgPriceC[6]=0.0000000000000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[4]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[3]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[2]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[1]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[0]=0.00000000
値0 のすべてのエレメント

avgPriceC[i] = Close[1];

が、どうしたらいいのかわからない。何か別の理由があるのかもしれません。メタトレーダーも再インストールしました。役に立たなかった。

主データで始まり、終端が指定されていない無限配列を取得したい。

//greitas MA
extern int     MA_Period1     =  8;
extern int     plius1         =  100;
extern int     MA_Shift1      =  0;
extern int     MA_Method1     =  0;                                                 
//Letas MA
extern int     MA_Period2     =  13;
extern int     plius2         =  100;
extern int     MA_Shift2      =  0;
extern int     MA_Method2     =  3;                                                 
//Fleto pradzia
//fleto ipradzios eskojimas pagal indikatoriu arba laika
extern bool  start       =  true;    // true ->pagal indikatoriu, false->pagal laika
// pagal indikatoriu fleto pradzios pradesim ieskoti nuo sio laiko
extern int     startHourFlatMA        =  16;    
extern int     startMinFlatMA        =  00;
extern string  startstartFlatMA       = "16:00";
extern string  endstartFlatMA       = "00:00";
//suradus pagal indikatoriu dar lauksim kol uzsidarys BarEnd zvake
extern bool    zvakes_pabaiga = true;//ar lauksim kol uzsidarys M240 zvake, ar priimsim kad fletas prasidejo nuo susikirtimo
extern int     BarEnd         =  240;
datetime       LastTime;
//datetime       startTime;
// pagal laika fleto pradzios pradesim ieskoti nuo sio laiko
extern int     startHourFlat        =  0;   //
extern int     startMinFlat         =  0;    //

//fleto pabaiga
//Fleto pabaiga jei indikatorius duoda signala siame laiko tarpe
//Laiko tarpo pradzia
extern int     startHourEnd        =  4;    
extern int     startMinEnd         =  45;
//laiko tarpo pabaiga arba fleto pabaiga
extern int     endHourEnd        =  7;    
extern int     endMinEnd         =  30;

//Ar naudosom Volumes filtra
extern bool volFiltr = true;            //true -> naudosim,   false -> nanaudosim

//skirtumas tarp penktadienio uzdarymo ir pirmadienio atidarymo
extern int   gep = 300;  



//Naktinio-fletinio pipsavimo ijungimas
bool nightFlat = false; //true -> ijungtas,   false -> neijungtas



bool           susikirtimas = false;      
bool           flat; 
//masyvai
double chPriceH[], chPriceL[], chPriceO[], chPriceC[], chTime[];
double avgPriceH[], avgPriceL[], avgPriceO[], avgPriceC[]; 
int i = -1; // masyvu indeksas -1, nes toliau pridesim 1, o masyvu indeksacija prasideda nuo 0
int j = -1; // masyvu indeksas -1, nes toliau pridesim 1, o masyvu indeksacija prasideda nuo 0
int n = -1;                          // kintamasis naujo masyvo indeksacijai
int iH, iL ,iO, iC, iT;
double C[], T[], y[];
double max;                               //max skirtumas tarp LR median ir Close
//*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*--*-*--*-*-*-*-*-*-*-*-*-*--*-*-*-*-*-*-*-*-* 

int init ()
{
ArrayResize(chPriceH, 0);
ArrayResize(chPriceL, 0);
ArrayResize(chPriceO, 0);
ArrayResize(chPriceC, 0);
ArrayResize(chTime, 0);
ArrayResize(avgPriceH, 0); 
ArrayResize(avgPriceL, 0); 
ArrayResize(avgPriceO, 0); 
ArrayResize(avgPriceC, 0); 
ArrayResize (C, 0); 
ArrayResize (T, 0);
ArrayResize (y, 0);
}
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-**-*-*-*-*-*-*-*-*-*-
 int start()
 {
   double volMA11, volMA12, volMA21, volMA22;  
   double x[], y[]; 
   
   Print("******************STARTAS*****************************************");
   
   if(!TF_F_NewBar())return(0);
 
   volMA11 = iCustom(NULL, 15, "volumeMA",  2, 1);         
   volMA12 = iCustom(NULL, 15, "volumeMA",  2, 2);
   volMA21 = iCustom(NULL, 15, "volumeMA",  3, 1);
   volMA22 = iCustom(NULL, 15, "volumeMA",  3, 2);
    
   if(DayOfWeek()==1 || DayOfWeek()==2 || DayOfWeek()==3 || DayOfWeek()==4)                             //jei pirmadienis antradienis ar treciadienis, ar ketvirtadienis
   {         
      if(TimeCurrent()>= StrToTime(startstartFlatMA) && TimeCurrent()<= StrToTime(endstartFlatMA)+24*60*60)
      {
         //Print("fleto starto ieskojimo laikas prasidejo  "+TimeToStr(TimeCurrent())+" >= "+TimeToStr(StrToTime(startstartFlatMA))+
               //"  &&  "+TimeToStr(TimeCurrent())+" <= "+TimeToStr(StrToTime(endstartFlatMA)+24*60*60));
         bool laikas = true;
         Print("laikas = "+laikas);         
         if(volMA21 - volMA11 > 0 && volMA12 - volMA22 > 0)
         {                                                                                   //jei buvo susikirtimas
            susikirtimas = true;           
         }
         if(susikirtimas == true) 
         {
            if(zvakes_pabaiga)
            {
               if(iTime(NULL, BarEnd, 1)!= LastTime)
               {            
                  LastTime = iTime(NULL, BarEnd, 1);
                  flat = true;           
                  LastTime = iTime(NULL, BarEnd, 1);
              }
              else return(0);            
           }
           else flat = true;
           if(flat == true)
           {
               i++; 
             //Zinodami indekso eiles numeri galim keisti masyvo ilgi
            
            ArrayResize(avgPriceH,i); 
            ArrayResize(avgPriceL,i);
            ArrayResize(avgPriceO,i); 
            ArrayResize(avgPriceC,i);        
           Print("ArraySize     "+ArraySize(avgPriceC));
            //jei fletas prasidejo renkam duomenis i masyva zvakiu HL ir OC skaiciavimui
            
            avgPriceH[i] = High[1];    
            avgPriceL[i] = Low[1];     
            avgPriceO[i] = Open[1];   
            avgPriceC[i] = Close[1];
         
            j++; 
            
            ArrayResize(chPriceC,i); 
            ArrayResize(chTime,i);    
           } 
         for(int a=0; a<=i; a++)Print("avgPriceC["+a+"]="+avgPriceC[a]);
         for(int b=0; b<=j; b++)Print("chPriceC["+b+"]="+chPriceC[b]);
         for(int c=0; c<=j; c++)Print("chTime["+c+"]="+chTime[c]);
        }        
     }
  }
    
  return(0);
}
 
gince:


KIMの例でも


は、グローバルな宣言はなく、各関数がそれぞれy[]を持ちます。


コードとゼロについてですが、例を挙げて説明します。

int a[],n=5; ArrayResize(a,n) の場合、配列の 最後の要素の インデックスは n ではなく n-1 となります。持っていますね。

               i++; 
            
            ArrayResize(avgPriceH,i); 
            ArrayResize(avgPriceL,i);
            ArrayResize(avgPriceO,i); 
            ArrayResize(avgPriceC,i);        
            
            avgPriceH[i] = High[1];    
            avgPriceL[i] = Low[1];     
            avgPriceO[i] = Open[1];   
            avgPriceC[i] = Close[1];

明らかにアレイの境界の外側にある。したがって、ゼロ値が存在する。正しい方法は

            avgPriceH[i-1] = High[1];    
            avgPriceL[i-1] = Low[1];     
            avgPriceO[i-1] = Open[1];   
            avgPriceC[i-1] = Close[1];
 
tara:
まったく同じではなく、まったく違う。グローバルデータ、ローカルデータを読み込む。
見逃したのは残念です。CMMはローカル変 数を持つ。
 


タラとアルス





ありがとうございました。

 

こんにちは、私はこの質問で助けを必要としています:配列Mas[10]があります。各セルと各セルの積を求める必要がある。そこで、演算子 if(i==j) でセル自体の積を消去するような構成にしてみました。問題は、二重計算になってしまうことです。例えば、i=1 と j=2 の場合、i=2 と j=1 の場合と同じ結果になってしまうのです。二重計算を防ぐために、どのような条件を追加で書けばよいでしょうか。

for(i=0; i<10; i++)
{
   for(j=0; j<10; j++)
   {
      if(i==j) continue;
      x = Mas[i]*Mas[j];
   }
}
 
for(i=0; i<10; i++)
{
   for(j=i+1; j<10; j++)
   {
      //if(i==j) continue;
      x = Mas[i]*Mas[j];
   }
}
 
Roger:
ありがとうございます。
 

みなさん、こんにちは。

MQL4のコーディングに慣れていないのですが、サポートレベルやレジスタンスレベルに基づいたEAを書いて みたいのですが、これらのレベルを探すプログラムのコードをどのように書けばいいのかわかりません。私は不器用で、時間も限られているので、code baseで検索することができません。

ありがとうございました。あなたに利益が訪れますように!エルクが回りますように!)

 
Roger:
配列への書き込み処理に関するさまざまな理由から、配列を2次元にする必要がありました。つまり、今の配列はMas[2][5]のようになります。さて、同じ問題を解くには、2つのforループではなく、4つのループを作らなければならない。この場合、Rogerが 提案したバリエーションは機能しません。2次元配列を使用する場合、どのように解決すればよいのでしょうか?
 
Ekburg:

みなさん、こんにちは。

MQL4のコーディングに慣れていないのですが、サポートレベルやレジスタンスレベルに基づいたEAを書いてみたいのですが、これらのレベルを探すプログラムのコードをどのように書けばいいのかわかりません。私は不器用で、時間も限られているので、code baseで検索することができません。

ありがとうございました。あなたに利益が訪れますように!エルクが回りますように!)


CodeBaseのDailyPivotPointsに あるインジケータを見てみましょうきっとあなたのお役に立つと思いますGood Luck!