오류, 버그, 질문 - 페이지 823

 
MetaDriver :

산발적인 오류의 95%는 초기화 오류 또는 그 부족과 관련이 있습니다. 따라서 코드 스니펫 은 도움이 되지 않으며 편집증 때문에 전체가 작동하지 않습니다. ;-)

그 이유는 발현된 곳에서 아주 멀리 떨어져서 찾아야 하고, 개발자들에게 실행을 요구하는 것은 후행이 더 쉽다. 그것은 확실히 도움이 될 것입니다.

// 진실이 도움이 될까요, falkov? :)

감독자! 도움이 될 것 같습니다! :)

나는 엉뚱한 곳에서 항상 초기화를 수행합니다! 몇 줄 후에 변수에 값을 할당하더라도. 나는 스스로 철칙을 세웠다 -변수를 선언 할 때 0이나 빈 문자열로 초기화하는 것은 어리석은 일이다. :)

편집증에 대해 절대적으로 옳습니다!

메타드라이버, 당신은 주술사입니다!

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
falkov :

감독자! 도움이 될 것 같습니다! :)

:)

나는 엉뚱한 곳에서 항상 초기화를 수행합니다!

난 믿지 않아! 이번에는 확실히 놓쳤습니다. :)

// 다시 한 번 확인해 보세요. 전체 코드를 이 각도에서 보세요.

// 자신의 하품에 대한 인식을 걸러낼 수 있는 것은 "나는 항상...!!"이기 때문입니다. :))

 
MetaDriver :
:)

난 믿지 않아! 이번에는 확실히 놓쳤습니다. :)

// 다시 한 번 확인해 보세요. 전체 코드를 이 각도에서 보세요.

// 자신의 하품에 대한 인식을 걸러낼 수 있는 것은 "나는 항상...!!"이기 때문입니다. :))

샤먼이라고 해요! 주말 동안 모든 어드바이저 파일(수천 줄)을 확인했습니다. 실제로 오래된 라이브러리에서 초기화되지 않은 변수를 2~3개 찾았습니다.

내 규칙은 함수 본문 의 시작 부분에 모든 변수를 선언하고(이는 항상 그랬음) 즉시 초기화하는 것입니다(작년에는 아마도)

나는 나 자신을 찻주전자라고 생각하지 않습니다 - 백 개 이상의 다른 색인/스크립트/고문들이 작성되었습니다 :)

그런 다음 나는 얼음 위의 물고기처럼 싸웁니다. 현지화할 수 없습니다! 자, 총을 쏴라!

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 

그건 그렇고, 코드는 다음과 같습니다.

//Найти первое adblArray_Short х adblArray_Long  ПОСЛЕ (позже) intShift_PastSearch (поиск от intShift_PastSearch до нулевого бара)
void FindCrossArrays_PastThisShift(structS & structSled) {
    datetime adtmDTM[];
    int intShift=0;
   
    if(structSled.intShift_PastSearch>_cintBarsAmountForCalc) {return;}
    else if(structSled.intShift_PastSearch<=0) {return;}
   
    ArrayResize(adtmDTM,structSled.intBarsAmountForCalc);
    ArrayInitialize(adtmDTM,0);
    ArraySetAsSeries(adtmDTM,true);
   
    CopyTime(structSled.strSymbol,structSled.enumTF,0,structSled.intShift_PastSearch+1,adtmDTM);

    intShift=structSled.intShift_PastSearch;
   

                                    ▼ - вот здесь ошибка - array out of range in '_indMyAO_from_SetPeriod.mq5' (390,37)
    while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}


    if(structSled.adblArray_Short[intShift]>structSled.adblArray_Long[intShift]) {
        while(structSled.adblArray_Short[intShift]>structSled.adblArray_Long[intShift] && intShift>0) {intShift--;}
       
        if(intShift>0) {
            structSled.intRet_FindingDirection=-1;
            structSled.intRet_FindingShift=intShift;
        }
        else {
            structSled.intRet_FindingDirection=0;
            structSled.intRet_FindingShift=intShift;
        }
    }   
    else if(structSled.adblArray_Short[intShift]<structSled.adblArray_Long[intShift]) {
        while(structSled.adblArray_Short[intShift]<structSled.adblArray_Long[intShift] && intShift>0) {intShift--;}
       
        if(intShift>0) {
            structSled.intRet_FindingDirection=1;
            structSled.intRet_FindingShift=intShift;
        }
        else {
            structSled.intRet_FindingDirection=0;
            structSled.intRet_FindingShift=intShift;
        }
    }   
    structSled.dtmRet_FindingDTM=adtmDTM[structSled.intRet_FindingShift];
    return;
}
//-------------------------------------------------------------------------------------------------

 
falkov : 그런데 코드는 다음과 같습니다.

음, 범위를 벗어난 배열 을 확인하지 않겠습니까? intShift=structSled.intShift_PastSearch;

intShift가 배열 외부에 있으면 while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}

즉시 오류가 발생하기 때문에 코드는 왼쪽에서 오른쪽으로 실행되고 structSled.adblArray_Short[intShift]는 && intShift>1 전에 액세스됩니다.

intShift=structSled.intShift_PastSearch 다음에 확인하십시오; 배열이 범위를 벗어난 경우 출력한 다음 Print(만세! 작동했습니다!);

이 같은

 
좋은 저녁이에요! 이와 같은 것이 존재할 수 있는지 말해 줄 수 있습니까?
 void   PositionModify( int PositionTicket= PositionGetInteger ( POSITION_IDENTIFIER ), double price, double stoploss, double takeprofit, datetime expiration, color arrow_color= CLR_NONE )
      {   MqlTradeRequest request;
         MqlTradeResult result;
        request.action= TRADE_ACTION_SLTP ; 
        request.order= PositionTicket; 
        request.price= price;
        request.symbol= Symbol ();
        request.sl= stoploss;
        request.tp= takeprofit;
         return ( OrderSend ( request,   result    ));   
      }
이 경우 선언에서 구조를 0으로 만들 필요가 있습니까?
 
감사합니다!!!
 

알다시피, 나는이 형식으로 이름을 편집하려고 시도했지만 끔찍합니다.

' PositionGetInteger ' - 상수 예상 order.mq5 65 44 상수라는 단어가 보입니다. 그러나 그는 무엇을 필요로합니까? 첫 번째 줄의 함수에 있습니다.

그리고 다른 모든 변수 선언에 대해 이와 같이 하지만 도움말에 따라 함수를 선언했습니까?

'가격' - 매개변수 order.mq5 65 92에 대한 기본값 누락

 
감사합니다, 지금 컴파일 중입니다.