KimIV'ten faydalı özellikler - sayfa 30

 

İlgilenenler için moda hakkında yaptıklarıma bir göz atın. Ve şimdilik bahçeye gidiyorum, patatesleri püskürtüyorum ... Akşam olacağım ...

not. Sayı dizisinde meydana gelen değeri maksimum kez çıkardım.

Dosyalar:
 
KimIV писал (а) >>

İlgilenenler için moda hakkında yaptıklarıma bir göz atın. Ve şimdilik bahçeye gidiyorum, patatesleri püskürtüyorum ... Akşam olacağım ...

not. Sayı dizisinde meydana gelen değeri maksimum kez çıkardım.

Kesinlikle ilginç, teşekkürler! test edeceğiz.

 
KimIV писал (а) >>

İlgilenenler için moda hakkında yaptıklarıma bir göz atın. Ve şimdilik bahçeye gidiyorum, patatesleri püskürtüyorum ... Akşam olacağım ...

not. Sayı dizisinde meydana gelen değeri maksimum kez çıkardım.

Ayrıca ayarlanabilen ve böylece örnekleme doğruluğunu ayarlayabilen gerçek sayıların modunu hesaplamak için bir hata (veya başka bir deyişle bir isabet aralığı) gibi bir şey eklemenizi öneririm.

2 Idalgo:

İstatistiksel analizle ilgileniyorsanız (şu anda ilgilendiğim şey bu), uygulaması hakkındaki düşüncelerinizi paylaşmak ister misiniz? Ayrı bir şube oluşturabilirsiniz. Konuyu desteklerseniz sevinirim.


 
sergeev писал (а) >>
Ayrıca ayarlanabilen ve böylece örnekleme doğruluğunu ayarlayabilen gerçek sayıların modunu hesaplamak için bir hata (veya başka bir deyişle bir isabet aralığı) gibi bir şey eklemenizi öneririm.

Sizden formüller, çizimler, nasıl ve ne yapılacağına dair açıklamalar ... :-) Umarım önerdiğiniz şeyi yapmak için birkaç seçenek olduğunu anlamışsınızdır. Seçiminizi tanımlayın.

Ve ilk kez bir d parametresi var - sayı serisinin değerlerinin doğruluğu, ondalık basamak sayısı.

 

Evet, d değerlerinin doğruluğu bir seçenektir, ancak bu durumda, 10^(-d) aralığında sayıyı kontrol ettik.


 // переменная exact определяет процент отклонения 
// элемента массива от требуемого числа e
// например для 40% exact=1.40; для 0% exact=1.0
int ArraySearchDouble ( double & m [][] , double e , double exact ) 
{
    for ( int i = 0 ; i < ArrayRange ( m , 0 ) ; i ++ ) 
        if ( m [ i ][ 1 ] <= e * exact && m [ i ][ 1 ] >= e / exact ) return ( i ) ;
    return ( - 1 ) ;
}
 
sergeev писал (а) >>

Evet, d değerlerinin doğruluğu bir seçenektir, ancak bu durumda, 10^(-d) aralığında sayıyı kontrol ettik.


Kayan sayılar için, sabit kodlanmış bir çalıştırma değeri kullanmak daha iyidir.

f1 + df > f2 > f1 - df ==> f1 == f2. Veya normalleştirmeyi kullanın.

Kodunuzda kesinlikle sıfıra yakın sayılarla ve TÜM negatif sayılarla ilgili sorunlar var.

Kodu gözden geçirin.

 

Evet, olumsuz olanı unuttum, acelem vardı.

 // переменная exact определяет процент отклонения 
// элемента массива от требуемого числа e
// например для 40% exact=1.40; для 0% exact=1.0
int ArraySearchDouble ( double & m [][] , double e , double exact ) 
{
    for ( int i = 0 ; i < ArrayRange ( m , 0 ) ; i ++ ) 
        if ( MathAbs ( m [ i ][ 1 ]) <= MathAbs ( e ) * exact && MathAbs ( m [ i ][ 1 ]) >= MathAbs ( e ) / exact ) return ( i ) ;
    return ( - 1 ) ;
}

Veya



 // переменная dExact определяет величину отклонения
// значения элемента массива от требуемого числа e
// например dExact=0.055
int ArraySearchDouble2 ( double & m [][] , double e , double dExact ) 
{
    for ( int i = 0 ; i < ArrayRange ( m , 0 ) ; i ++ ) 
        if ( MathAbs ( m [ i ][ 1 ]) <= MathAbs ( e ) + dExact && MathAbs ( m [ i ][ 1 ]) >= MathAbs ( e ) - dExact ) return ( i ) ;
    return ( - 1 ) ;
}
 
Merhaba Igor. Şubenin gelişimini takip etmekten mutluluk duyuyorum. Sipariş ayarlama işlevinizi ayrıntılı olarak, daha doğrusu bloğuyla ele almaya karar verdim.
Hata yönetimi:
......
      err = GetLastError () ;
       if ( err == 128 || err == 142 || err == 143 ) {
         Sleep ( 1000 * 66 ) ;
         if ( ExistOrders ( sy , op , mn , ot )) {
           if ( UseSound ) PlaySound ( NameFileSound ) ; break ;
         }
         Print ( " Error( " , err , " ) set order: " , ErrorDescription ( err ) , " , try " , it ) ;
         continue ;
       }
       mp = MarketInfo ( sy , MODE_POINT ) ;
       pa = MarketInfo ( sy , MODE_ASK ) ;
       pb = MarketInfo ( sy , MODE_BID ) ;
       // Неправильные стопы
       if ( err == 130 ) {
         switch ( op ) {
           case OP_BUYLIMIT :
             if ( pp > pa - msl * mp ) pp = pa - msl * mp ;
             if ( sl > pp - ( msl + 1 ) * mp ) sl = pp - ( msl + 1 ) * mp ;
             if ( tp > 0 && tp < pp + ( msl + 1 ) * mp ) tp = pp + ( msl + 1 ) * mp ;
             break ;
           case OP_BUYSTOP :
             if ( pp < pa + ( msl + 1 ) * mp ) pp = pa + ( msl + 1 ) * mp ;
             if ( sl > pp - ( msl + 1 ) * mp ) sl = pp - ( msl + 1 ) * mp ;
             if ( tp > 0 && tp < pp + ( msl + 1 ) * mp ) tp = pp + ( msl + 1 ) * mp ;
             break ;
           case OP_SELLLIMIT :
             if ( pp < pb + msl * mp ) pp = pb + msl * mp ;
             if ( sl > 0 && sl < pp + ( msl + 1 ) * mp ) sl = pp + ( msl + 1 ) * mp ;
             if ( tp > pp - ( msl + 1 ) * mp ) tp = pp - ( msl + 1 ) * mp ;
             break ;
           case OP_SELLSTOP :
             if ( pp > pb - msl * mp ) pp = pb - msl * mp ;
             if ( sl > 0 && sl < pp + ( msl + 1 ) * mp ) sl = pp + ( msl + 1 ) * mp ;
             if ( tp > pp - ( msl + 1 ) * mp ) tp = pp - ( msl + 1 ) * mp ;
             break ;
         }
         Print ( " SetOrder(): Скорректированы ценовые уровни " ) ;
       }
       Print ( " Error( " , err , " ) set order: " , ErrorDescription ( err ) , " , try " , it ) ;
       Print ( " Ask= " , pa , "   Bid= " , pb , "   sy= " , sy , "   ll= " , ll , "   op= " , GetNameOP ( op ) ,
             "   pp= " , pp , "   sl= " , sl , "   tp= " , tp , "   mn= " , mn ) ;
       if ( pa == 0 && pb == 0 ) Message ( " SetOrder(): Проверьте в обзоре рынка наличие символа " + sy ) ;
       // Блокировка работы советника
       if ( err == 2 || err == 64 || err == 65 || err == 133 ) {
         gbDisabled = True ; break ;
       }
       // Длительная пауза
       if ( err == 4 || err == 131 || err == 132 ) {
         Sleep ( 1000 * 300 ) ; break ;
       }
       // Слишком частые запросы (8) или слишком много запросов (141)
       if ( err == 8 || err == 141 ) Sleep ( 1000 * 100 ) ;
       if ( err == 139 || err == 140 || err == 148 ) break ;
       // Ожидание освобождения подсистемы торговли
       if ( err == 146 ) while ( IsTradeContextBusy ()) Sleep ( 1000 * 11 ) ;
       // Обнуление даты истечения
       if ( err == 147 ) {
         ex = 0 ; continue ;
       }
       if ( err != 135 && err != 138 ) Sleep ( 1000 * 7.7 ) ;
     }
   }
}

Bir sorum var.

Neden uzun bir duraklama ile 131 (ERR_INVALID_TRADE_VOLUME: Yanlış hacim ) hatasını işliyorsunuz.

Bu bir hata mı yoksa ben mi bir şey anlamadım.

 
ShestkoFF писал (а) >>
Merhaba Igor. Şubenin gelişimini takip etmekten mutluluk duyuyorum. Sipariş ayarlama işlevinizi ayrıntılı olarak, daha doğrusu bloğuyla ele almaya karar verdim.
Hata yönetimi:

Bir sorum var.

Neden uzun bir duraklama ile 131 (ERR_INVALID_TRADE_VOLUME: Geçersiz hacim) hatasını işliyorsunuz.

Bu bir hata mı yoksa ben mi bir şey anlamadım.

Merhaba Vasili! Kesinlikle haklısın! Bu benim dikkat dağıtmadaki hatam. Bana gösterdiğin için teşekkürler. Hata 131, hatalar 2, 64, 65 ve 133 ile aynı şekilde ele alınmalıdır, yani. EA'nın çalışmasını engelle.

 
Neyse engellemezdim. Bu hatayı yukarı iletir ve onunla ne yapacağıma zaten orada karar verirdim.

Şu anda danışmanın işi engellenirse, bu danışman tarafından açık pozisyonlar olabilir ve bu bir felaket olacaktır.