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

 
CYBOPOB:


まあ、人間的に書かれていればいいのですが...最初のうちは全てがクリアに見えるのですが、少し経つと訳が分からなくなってきます...(笑)。

O.K.具体的な例です。


TPの移動が終了した時点で注文は終了しますが、SELLシグナルがキャンセルされていないため、新たな注文が開設され、これは受け入れがたいものです。

720秒を計測し、その後、新しい注文を開けることができます。では、この場合、この秒数は履歴の最初の順番と最後の順番、どちらから計測するのでしょうか?

そして、もしそうなら、どうするのか。Iプラスzなので、最初から数えるように出てくる?Brrrr:))


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


この関数は、最後にポジションを閉じてからの秒数を返します。
 

配列の長さが変わる、から見ています。

2013.04.08 19:06:05 2013.03.28 20:00 testavimas naktini fleta EURUSD,M15: ArraySize 21
しかし、すべての要素がゼロとして配列に書き込まれている。

2013.04.08 19:06:04 2013.03.28 16:00 testavimas naktini fleta EURUSD,M15: avgPriceC[19]=0.00000000
つまりこの行には配列要素に Close[1] 値が代入されていないのです。

avgPriceC[i] = Close[1];
その理由を説明できる人。
 

ヘルプ

インターリーブ変数で試しましたが、うまくいきませんでした。ArrayResizeは 配列の後に置かれました。結果は同じです。配列の中にゼロがある。

 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);
   
    double h = High[1];    
    double l = Low[1];     
    double o = Open[1];   
    double c = NormalizeDouble(iClose(NULL, 0, 1),Digits); 
    
   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++; 
                    
            avgPriceH[i] = h;   
            avgPriceL[i] = l;     
            avgPriceO[i] = o;   
            avgPriceC[i] = c;
            j++; 
            
            ArrayResize(chPriceC,j); 
            ArrayResize(chTime,j);    
           } 
         ArrayResize(avgPriceH,i); 
         ArrayResize(avgPriceL,i);
         ArrayResize(avgPriceO,i); 
         ArrayResize(avgPriceC,i);  
         
          Print("ArraySize     "+ArraySize(avgPriceC));
         
         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(    b=0; b<=j; b++)Print("chTime["+b+"]="+chTime[b]);
        }        
     }
  }
    
  return(0);
}
はV.272でスタートします。
 
gince:

ヘルプ

中間変数で試しましたが、うまくいきませんでした。ArrayResizeは 配列の後に置かれました。結果は同じです。配列の中にゼロがある。

v.272で始まる


あなたのコードには、int i の文字列とインデックスの初期化が見当たりません。スタジオに文字列を提出してください。

ZZY 私はリトアニア語がよくわからないので、コードのコメントで少し混乱しています)))

 
alsu:

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

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

//+------------------------------------------------------------------+
//|                                              naktinis fletas.mq4 |
//|                                        Ñåðãåé (urdala) Ðàøåâñêèé |
//|                                            gintaraitis@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Ñåðãåé (urdala) Ðàøåâñêèé"
#property link      "gintaraitis@gmail.com"




//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);
}
//-----------------------------------------------------------------
 bool TF_F_NewBar()               
{   
   static datetime TimeLast;                                  
   if(TimeLast!=Time[0])   
   {
      TimeLast=Time[0];   
      return(true);                              
   } 
   return(false);
}
 
gince:



配列y[]をグローバルとスタート関数の2回宣言していますね。
 
tara:

配列y[]をグローバルとスタート関数の2回宣言していますね。


KIMの例でも

#define r 30
void start() {
  double x[r], y[];
  for (int i=0; i<r; i++) x[i]=Close[i+1];
  ArrayLR(x, y);
  for (i=0; i<r; i++)
    SetArrow(170, Red, "arr"+i, Time[i+1], y[i]);
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 20.05.2008                                                     |
//|  Îïèñàíèå : Ôîðìèðóåò ìàññèâ çíà÷åíèé ëèíåéíîé ðåãðåññèè.                  |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    x - ìàññèâ çíà÷åíèé ÷èñëîâîãî ðÿäà                                      |
//|    y - ìàññèâ çíà÷åíèé ëèíåéíîé ðåãðåññèè                                  |
//+----------------------------------------------------------------------------+
void ArrayLR(double& x[], double& y[]) {
  double a, b, c, sx=0, sx2=0, sxy=0, sy=0;
  int    i, n=ArraySize(x);

  if (n>1) {
    for (i=0; i<n; i++) {
      sx+=i+1;
      sy+=x[i];
      sxy+=(i+1)*x[i];
      sx2+=(i+1)*(i+1);
    }
    a=sx*sy-n*sxy;
    c=sx*sx-n*sx2;
    if (c!=0) a=a/c; else a=0;
    b=(sy-a*sx)/n;
    ArrayResize(y, n);
    for (i=0; i<n; i++) y[i]=a*(i+1)+b;
  } else Print("ArrayLR(): Íåäîñòàòî÷íîå êîëè÷åñòâî ýëåìåíòîâ ðÿäà! n=", n);
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 12.10.2007                                                     |
//|  Îïèñàíèå : Óñòàíîâêà çíà÷êà íà ãðàôèêå                                    |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    cd - êîä çíà÷êà                                                         |
//|    cl - öâåò çíà÷êà                                                        |
//|    nm - íàèìåíîâàíèå               ("" - âðåìÿ îòêðûòèÿ òåêóùåãî áàðà)     |
//|    t1 - âðåìÿ îòêðûòèÿ áàðà        (0  - òåêóùèé áàð)                      |
//|    p1 - öåíîâîé óðîâåíü            (0  - Bid)                              |
//|    sz - ðàçìåð çíà÷êà              (0  - ïî óìîë÷àíèþ)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
//+----------------------------------------------------------------------------+
 
gince:


KIMの例では、また


タクシーがいい?それとも乗っていく?
 
まったく同じではなく、まったく違う。グローバルおよびローカルデータ 続きを読む