Hatalar, hatalar, sorular - sayfa 823

 
MetaDriver :

Sporadik hataların %95'i başlatma hataları veya bunların eksikliği ile ilgilidir. Yani bir kod parçası yardımcı olmayacak, ama her şeyi vermeyecek çünkü paranoya. ;-)

Sebep, tezahür yerinden çok uzakta aranmalıdır ve aftarın geliştiriciler için infaz talep etmesi daha kolaydır. Bu kesinlikle yardımcı olacaktır.

// Gerçek yardım edecek mi falkov ? :)

Süper! Bu yardımcı olmalı gibi görünüyor! :)

Başlatmayı aptalca HER YERDE VE HER ZAMAN yapıyorum! Birkaç satırdan sonra bile bir değişkene bir değer atadım. Kendim için bir demir kural belirledim - bir değişken bildirirken, onu sıfır veya boş bir dize ile başlatmak aptalca :)

Paranoya konusunda kesinlikle haklısın!

Metadriver, sen bir Şamansın!

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

Süper! Bu yardımcı olmalı gibi görünüyor! :)

:)

Başlatmayı aptalca HER YERDE VE HER ZAMAN yapıyorum!

inanmıyorum! Bu sefer kesinlikle kaçırdım. :)

// Gerçekten tekrar kontrol edin, kodun tamamına bu açıdan bakın.

// Kişinin kendi esneme algısını filtreleyebilen "HER YERDE VE HER ZAMAN" inancıdır, çünkü "HER ZAMAN...!!" :))

 
MetaDriver :
:)

inanmıyorum! Bu sefer kesinlikle kaçırdım. :)

// Gerçekten tekrar kontrol edin, kodun tamamına bu açıdan bakın.

// Kişinin kendi esneme algısını filtreleyebilen "HER YERDE VE HER ZAMAN" inancıdır, çünkü "HER ZAMAN...!!" :))

Şaman diyorum! Hafta sonu boyunca tüm danışman dosyalarını kontrol ettim (birkaç bin satır). Gerçekten de, eski kütüphanelerde iki veya üç başlatılmamış değişken buldum.

Benim kuralım , işlev gövdesinin başında TÜM değişkenleri bildirmek (bu her zaman böyle olmuştur) ve bunları hemen başlatmak (muhtemelen geçen yıl)

Kendimi bir çaydanlık olarak görmüyorum - yüzden fazla farklı dizin / senaryo / danışman yazıldı :)

Sonra buzda balık gibi dövüşüyorum - yerini belirleyemiyorum! İşte, kendini vur!

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

Bu arada kod şu:

//Найти первое 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 : Bu arada kod şu:

hmm, neden sınır dışı diziyi kontrol etmiyorsunuz intShift=structSled.intShift_PastSearch;

intShift'iniz dizinin dışındaysa, while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}

hemen bir hataya neden olur, çünkü kod soldan sağa yürütülecek ve structSled.adblArray_Short[intShift] öğesine && intShift>1'den önce erişilecektir.

intShift=structSled.intShift_PastSearch'ten sonra bir kontrol koyun; ve sonra dizi sınırların dışındaysa çıktı alın, ardından Print(Yaşasın! İşe yaradı!);

bunun gibi bir şey

 
İyi akşamlar! Böyle bir şeyin var olup olmadığını söyleyebilir misiniz?
 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    ));   
      }
Bu durumda beyannamede yapıların sıfırlanması gerekli midir?
 
TEŞEKKÜR EDERİM!!!
 

Biliyor musun, adını bu formda derlemeye çalıştım, çok yemin ediyor.

' PositionGetInteger ' - sabit beklenen order.mq5 65 44 Sabit kelimesini görüyorum. Ama neye ihtiyacı var? İlk satırdaki fonksiyon üzerindedir.

Ve bunun gibi diğer tüm değişken bildirimleri için, ancak işlevi yardıma göre ilan ettim mi?

'price' - order.mq5 65 92 parametresi için varsayılan değer eksik

 
Teşekkürler, hemen derleme yapıyorum.