Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 418

 

Merhaba, strateji tester günlüğünden şu hatayı aldım:

2015.08.26 14:09:47.704 2001.08.29 16:15 dizi 'Kamikadze_MA_V_04_42_Fibo_03.mq4' (929,29) içinde aralık dışında

(929,29), dizedeki karakterin dize ve sıra numarası mı?

 
-Aleks- :

Merhaba, strateji tester günlüğünden şu hatayı aldım:

2015.08.26 14:09:47.704 2001.08.29 16:15 dizi 'Kamikadze_MA_V_04_42_Fibo_03.mq4' (929,29) içinde aralık dışında

(929,29), dizedeki karakterin dize ve sıra numarası mı?

Evet.
 
-Aleks- :

Merhaba, strateji tester günlüğünden şu hatayı aldım:

2015.08.26 14:09:47.704 2001.08.29 16:15 dizi 'Kamikadze_MA_V_04_42_Fibo_03.mq4' (929,29) içinde aralık dışında

(929,29), dizedeki karakterin dize ve sıra numarası mı?

Derleyici genellikle hatayı doğrudan belirtmez, ancak yakınlarda bir yerdedir)
 
Karputov Vladimir :
Evet.

İki yıl boyunca çalışıyor ve sonra bam ve bir hata - Bu noktada çok fazla sipariş olduğunu düşünüyorum. İşte kod, burada yanlış olan şey (kalın harflerle vurgulanmıştır) - söyle bana - lütfen


            if(!CloseOk)
              {
               if(OrderType()==OP_BUY)
                 {
                  //Print("BUY=",OrderTicket());      
                  nBuy++;
                  if(lastTimeBuy<1 || lastTimeBuy<OrderOpenTime())lastTimeBuy=OrderOpenTime();
                  //if (TP_Error<stplvl/Point)TP_Error=stplvl/Point;
                  //if (OrderOpenPrice()+stplvl>MAT)NewTP=Ask+TP_Error*Point;else NewTP=MAT;
                  //if (TP_Error==0)NewTP=MAT;
                  NewTP=NormalizeDouble(MAT,Digits);
                  if(MathAbs(NewTP-OrderTakeProfit())>1*Point)
                    {//модифицируем ТП
                     if(swCommentary)
                        Print("Модификация Тейк-Профита BUY "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice());
                     ModifyStopTake(0,stpls,NewTP);takepr=NewTP;
                    }
                  if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()+BU*Point) && //безубыток
                     Bid>BUbuy && Ask>(OrderOpenPrice()+BU*Point+stplvl) &&
                     (Levl_Zerro==0 || (maMirrorOBuy<(OrderOpenPrice()-Levl_Zerro*Point))))
                    {
                     if(swCommentary)Print("Безубыток BUY "+DoubleToStr(OrderOpenPrice()+BU*Point,Digits));
                     if(maMBlock!=1){Print("BUY 2");ModifyStopTake(0,OrderOpenPrice()+BU*Point,takepr);stpls=OrderOpenPrice()+BU*Point;}
                     OrderBU[NorderBU]=OrderTicket();NorderBU++;

                    }//maMBlock!=1&&
                  if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL)
                    {
                     if(swCommentary)Print("BARSL BUY");ClosePosBySelect();
                     if(blockBarSL>0)
                       {
                        YesBarSLBuy=0;if(swCommentary)Print("blockBARSL BUY");
                        //ClosePositions("NULL",OP_BUY,Magic);
                        ClosePosBySelect();
                       }
                    }//BARSL
                 }
               if(OrderType()==OP_SELL)
                 {
                  //Print("SELL=",OrderTicket());
                  nSell++;
                  if(lastTimeSell<1 || lastTimeSell<OrderOpenTime())lastTimeSell=OrderOpenTime();
                  //if (TP_Error<stplvl/Point)TP_Error=stplvl/Point;
                  //if (OrderOpenPrice()-stplvl<MAT)NewTP=Bid-TP_Error*Point;else NewTP=MAT;
                  //if (TP_Error==0)NewTP=MAT;
                  NewTP=NormalizeDouble(MAT,Digits);
                  if(MathAbs(NewTP-OrderTakeProfit())>1*Point)
                    {//модифицируем ТП
                     if(swCommentary)
                        Print("Модификация Тейк-Профита SELL "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice()+
                              " STOP="+OrderStopLoss());
                     ModifyStopTake(0,stpls,NewTP);takepr=NewTP;
                    }
                  if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()-BU*Point) && Bid<BUsell && //безубыток
                     Bid<(OrderOpenPrice()-BU*Point-stplvl) &&
                     (Levl_Zerro==0 || ((OrderOpenPrice()+Levl_Zerro*Point)<maMirrorOSell)))
                    {
                     if(swCommentary)Print("Безубыток SELL "+DoubleToStr(OrderOpenPrice()-BU*Point,Digits));
                     if(maMBlock!=1){Print("SELL 2");ModifyStopTake(0,OrderOpenPrice()-BU*Point,takepr);stpls=OrderOpenPrice()-BU*Point;}
                     OrderBU[NorderBU]=OrderTicket();NorderBU++;
                    }  // maMBlock!=1&&
                  if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL)
                    {
                     if(swCommentary)Print("BARSL SELL");
                     ClosePosBySelect();
                     if(blockBarSL>0)
                       {
                        YesBarSLSell=0;if(swCommentary)Print("BARSL SELL");
                        //ClosePositions("NULL",OP_SELL,Magic);
                        ClosePosBySelect();
                       }
                    }//BARSL       
                 }
              }

 
-Aleks- :

İki yıl boyunca çalışıyor ve sonra bam ve bir hata - Bu noktada çok fazla sipariş olduğunu düşünüyorum. İşte kod, burada yanlış olan şey (kalın harflerle vurgulanmıştır) - söyle bana - lütfen

OrderBU dizisinin kapsamı dışındasınız.

Eklendi: Stil kullan - bu, kodun okunabilir olmasına yardımcı olur.

 
-Aleks- :

İki yıl boyunca çalışıyor ve sonra bam ve bir hata - Bu noktada çok fazla sipariş olduğunu düşünüyorum. İşte kod, burada yanlış olan şey (kalın harflerle vurgulanmıştır) - söyle bana - lütfen


            if(!CloseOk)
              {
               if(OrderType()==OP_BUY)
                 {
                  //Print("BUY=",OrderTicket());      
                  nBuy++;
                  if(lastTimeBuy<1 || lastTimeBuy<OrderOpenTime())lastTimeBuy=OrderOpenTime();
                  //if (TP_Error<stplvl/Point)TP_Error=stplvl/Point;
                  //if (OrderOpenPrice()+stplvl>MAT)NewTP=Ask+TP_Error*Point;else NewTP=MAT;
                  //if (TP_Error==0)NewTP=MAT;
                  NewTP=NormalizeDouble(MAT,Digits);
                  if(MathAbs(NewTP-OrderTakeProfit())>1*Point)
                    {//модифицируем ТП
                     if(swCommentary)
                        Print("Модификация Тейк-Профита BUY "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice());
                     ModifyStopTake(0,stpls,NewTP);takepr=NewTP;
                    }
                  if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()+BU*Point) && //безубыток
                     Bid>BUbuy && Ask>(OrderOpenPrice()+BU*Point+stplvl) &&
                     (Levl_Zerro==0 || (maMirrorOBuy<(OrderOpenPrice()-Levl_Zerro*Point))))
                    {
                     if(swCommentary)Print("Безубыток BUY "+DoubleToStr(OrderOpenPrice()+BU*Point,Digits));
                     if(maMBlock!=1){Print("BUY 2");ModifyStopTake(0,OrderOpenPrice()+BU*Point,takepr);stpls=OrderOpenPrice()+BU*Point;}
                     OrderBU[NorderBU]=OrderTicket();NorderBU++;

                    }//maMBlock!=1&&
                  if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL)
                    {
                     if(swCommentary)Print("BARSL BUY");ClosePosBySelect();
                     if(blockBarSL>0)
                       {
                        YesBarSLBuy=0;if(swCommentary)Print("blockBARSL BUY");
                        //ClosePositions("NULL",OP_BUY,Magic);
                        ClosePosBySelect();
                       }
                    }//BARSL
                 }
               if(OrderType()==OP_SELL)
                 {
                  //Print("SELL=",OrderTicket());
                  nSell++;
                  if(lastTimeSell<1 || lastTimeSell<OrderOpenTime())lastTimeSell=OrderOpenTime();
                  //if (TP_Error<stplvl/Point)TP_Error=stplvl/Point;
                  //if (OrderOpenPrice()-stplvl<MAT)NewTP=Bid-TP_Error*Point;else NewTP=MAT;
                  //if (TP_Error==0)NewTP=MAT;
                  NewTP=NormalizeDouble(MAT,Digits);
                  if(MathAbs(NewTP-OrderTakeProfit())>1*Point)
                    {//модифицируем ТП
                     if(swCommentary)
                        Print("Модификация Тейк-Профита SELL "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice()+
                              " STOP="+OrderStopLoss());
                     ModifyStopTake(0,stpls,NewTP);takepr=NewTP;
                    }
                  if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()-BU*Point) && Bid<BUsell && //безубыток
                     Bid<(OrderOpenPrice()-BU*Point-stplvl) &&
                     (Levl_Zerro==0 || ((OrderOpenPrice()+Levl_Zerro*Point)<maMirrorOSell)))
                    {
                     if(swCommentary)Print("Безубыток SELL "+DoubleToStr(OrderOpenPrice()-BU*Point,Digits));
                     if(maMBlock!=1){Print("SELL 2");ModifyStopTake(0,OrderOpenPrice()-BU*Point,takepr);stpls=OrderOpenPrice()-BU*Point;}
                     OrderBU[NorderBU]=OrderTicket();NorderBU++;
                    }  // maMBlock!=1&&
                  if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL)
                    {
                     if(swCommentary)Print("BARSL SELL");
                     ClosePosBySelect();
                     if(blockBarSL>0)
                       {
                        YesBarSLSell=0;if(swCommentary)Print("BARSL SELL");
                        //ClosePositions("NULL",OP_SELL,Magic);
                        ClosePosBySelect();
                       }
                    }//BARSL       
                 }
              }

EA'nın dizinin başlatıldığından veya dizinin işlenmekte olduğundan daha büyük bir değer talep ettiği anlamına gelen "Dizi sınırları dışında" hatanız var,

Örneğin, dizi 6 parametreyi işliyorsa, başlatma 6 içermelidir (0'dan 5'e, ne işliyoruz), geri sayım sıfırdan başlar ve başlatma 1'den başlar.

 
Karputov Vladimir :

OrderBU dizisinin kapsamı dışındasınız.

Eklendi: Stil kullan - bu, kodun okunabilir olmasına yardımcı olur.

Bahşiş için teşekkürler, dizi penceresi düzgün ArrayResize(OrderBU,1000); nasıl çıkıyor...

İnsanlara para ödüyorsunuz - yazıyorlar ve sonra oturup beyninizi rafa kaldırıyorsunuz.

 
2 ve 4 ondalık basamaklı brokerler için metaller kaç ondalık basamakla gelir?
 
-Aleks- :

Bahşiş için teşekkürler, dizi penceresi düzgün ArrayResize(OrderBU,1000); nasıl çıkıyor...

Burada insanlara para ödüyorsun - yazıyorlar ve sonra oturup beynini rafa kaldırıyorsun.

"İki yıl çalıştığından", kodun eski mql4 altında yazıldığı anlamına gelir, orada dizinin ötesine "taradı", şimdi çalışmıyor, şimdi bir hata. Ve haklı olarak.
 
Artyom Trishkin :
"İki yıl çalıştığından", kodun eski mql4 altında yazıldığı anlamına gelir, orada dizinin ötesine "süründü", şimdi çalışmıyor, şimdi bir hata. Ve haklı olarak.
İki yıl - test cihazında :) Eh, bir yıl demo üzerinde çalışıyor ... harici sınıflar nedeniyle katı kurallar eklemek zorunda kaldığım birçok kural var ... ve işte yapmadığım bir kural. Artık nasıl düzenleneceğini bilmiyorum - Şimdiye kadar sıralamadaki dizinin boyutunu artıracağım. Grafik arabelleğine gelince neden otomatik boyutlandırma yok veya var mı?