초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 418

 

안녕하세요, 전략 테스터 로그에서 다음 오류가 발생했습니다.

2015.08.26 14:09:47.704 2001.08.29 16:15 'Kamikadze_MA_V_04_42_Fibo_03.mq4'의 범위를 벗어난 배열(929,29)

(929,29)는 문자열과 문자열에 있는 문자의 서수입니다.

 
-Aleks- :

안녕하세요, 전략 테스터 로그에서 다음 오류가 발생했습니다.

2015.08.26 14:09:47.704 2001.08.29 16:15 'Kamikadze_MA_V_04_42_Fibo_03.mq4'의 범위를 벗어난 배열(929,29)

(929,29)는 문자열과 문자열에 있는 문자의 서수입니다.

네.
 
-Aleks- :

안녕하세요, 전략 테스터 로그에서 다음 오류가 발생했습니다.

2015.08.26 14:09:47.704 2001.08.29 16:15 'Kamikadze_MA_V_04_42_Fibo_03.mq4'의 범위를 벗어난 배열(929,29)

(929,29)는 문자열과 문자열에 있는 문자의 서수입니다.

종종 컴파일러는 오류를 직접 가리키지 않지만 근처 어딘가에 있습니다)
 
Karputov Vladimir :
네.

2년 하고 나니 엉엉 오류가 나는군요. - 그 시점에서 주문이 많이 들어온 것 같아요. 여기에 코드가 있습니다. 여기에 무엇이 잘못되었는지(굵게 강조 표시됨) - 알려주세요.


            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- :

2년 하고 나니 엉엉 오류가 나는군요. - 그 시점에서 주문이 많이 들어온 것 같아요. 여기에 코드가 있습니다. 여기에 무엇이 잘못되었는지(굵게 강조 표시됨) - 알려주세요.

OrderBU 배열 범위를 벗어났습니다.

추가됨: 스타일 사용 - 코드를 읽을 수 있도록 도와줍니다.

 
-Aleks- :

2년 하고 나니 엉엉 오류가 나는군요. - 그 시점에서 주문이 많이 들어온 것 같아요. 여기에 코드가 있습니다. 여기에 무엇이 잘못되었는지(굵게 강조 표시됨) - 알려주세요.


            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       
                 }
              }

"Out of array limits" 오류가 있습니다. 이는 EA가 어레이가 초기화 되거나 어레이가 처리 중인 것보다 큰 값을 요청하고 있음을 의미합니다.

예를 들어, 배열이 6개의 매개변수를 처리하는 경우 초기화에는 6(0에서 5까지 처리)이 포함되어야 하고 카운트다운은 0부터 시작하고 초기화는 1부터 시작해야 합니다.

 
Karputov Vladimir :

OrderBU 배열의 범위를 벗어났습니다.

추가됨: 스타일 사용 - 코드를 읽을 수 있도록 도와줍니다.

팁 감사합니다. 배열 창은 괜찮은 ArrayResize(OrderBU,1000); 어떻게 나오나요...

여기에서 당신은 사람들에게 돈을 지불합니다. 그들은 글을 쓰고, 당신은 앉아서 두뇌를 쌓습니다.

 
소수 자릿수가 2 및 4인 브로커의 경우 금속에는 소수 자릿수가 몇 개 있습니까?
 
-Aleks- :

팁 감사합니다. 배열 창은 괜찮은 ArrayResize(OrderBU,1000); 어떻게 나오나요...

여기에서 당신은 사람들에게 돈을 지불합니다. 그들은 글을 쓰고, 당신은 앉아서 두뇌를 쌓습니다.

"2년 동안 작동"하기 때문에 코드가 이전 mql4에서 작성되었으며 배열 너머로 "크롤링"되었음을 의미합니다. 이제는 그렇지 않습니다. 이제는 실수입니다. 그리고 당연히 그렇습니다.
 
Artyom Trishkin :
"2년 동안 작동"하기 때문에 코드가 이전 mql4에서 작성되었으며 배열 너머로 "크롤링"되었지만 이제는 그렇지 않습니다. 이제는 실수입니다. 그리고 당연히 그렇습니다.
2년 - 테스터에서 :) 음, 1년 동안 데모 작업을 했습니다... 외부 클래스 때문에 strict를 포함해야 했을 때 많은 규칙이 있었습니다... 그리고 여기 제가 하지 않는 문제가 있습니다. 더 이상 편집하는 방법을 모릅니다 - 지금까지 순위 에서 배열의 크기를 늘릴 것입니다. 그래픽 버퍼의 경우 자동 크기 조정이 없거나 있는 이유는 무엇입니까?
사유: