KimIV'ten faydalı özellikler - sayfa 31

 
ShestkoFF писал (а) >>
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.

:-) Demek uzun arayla ilgili kendi sorunuzu yanıtladınız. Pozisyon açmak veya emir vermek için sinyalin zamanını beklemek için yapılır.

Vasily, beni başarıyla yoldan çıkardığın için bir kez daha teşekkür ederim. Neredeyse kodları düzeltmek için acele ediyordum... Ve yoluma geri dönmemi sağladığınız için tekrar teşekkür ederim :-)

 
KimIV писал (а) >>

:-) Demek uzun arayla ilgili kendi sorunuzu yanıtladınız. Pozisyon açmak veya emir vermek için sinyal süresinin dolmasını beklemek için yapılır .

Vasily, beni başarıyla yoldan çıkardığın için bir kez daha teşekkür ederim. Neredeyse kodları düzeltmek için acele ediyordum... Ve yoluma geri dönmemi sağladığınız için tekrar teşekkür ederim :-)

Dürüst olmak gerekirse, mantığı anlamadım.
Örneğin, 0.000001 lot için bir sipariş verdik. Elimizde bunun için sunucu essesseno.
Ve partiyi değiştirmek yerine (fonksiyonun dışında) duraklıyoruz.
Bu duraklamanın bir sonucu olarak, sipariş verme sinyali gerçekten kaybolabilir, ancak partiyi değiştirmeli ve beklememeliyiz.
Yani burada duraklama konusunda katılmıyorum. Sadece bu fonksiyondan çıkmanız ve hata kodunu üst kata geçirmeniz ve orada işlemeniz yeterlidir.
Benim yolumu takip ederseniz, belki karlı bir ticareti kaçırmayız!!! Biz de geyik yakalayabiliriz :)

Not: Seni yoldan çıkaracağım :)

 
ama bana öyle geldi ki , lot hesaplama işlevini hemen çağırmanız (ve en üste gitmemeniz), yalnızca hata sayacı taşmalarından sonra en üste çıkmanız gerekiyor
 
Prival писал (а) >>
ama bana öyle geldi ki, lot hesaplama işlevini hemen çağırmanız (ve en üste gitmemeniz), yalnızca hata sayacı taşmalarından sonra en üste çıkmanız gerekiyor

Evet, elbette, bu işlevi hemen çağırmanız gerekir, ancak yine de bir hata oluşursa !!!
SetOrder işlevinden çıkmanız gerektiğinde en tepeye çıkış durumu diyorum.
Ben bunu şöyle görüyorum:


int bilet = SetOrder(.....);

if (bilet > 0) {

// her şey yolunda

} başka {

// mantık hatasını düzelt

}


int SetOrder(....) // ya bir bilet ya da sadece negatif işaretli bir hata numarası döndürür.
{

int bilet = OrderSend(....)

if (bilet < 0) {

// set sırası hatalarını düzelt

}

}


Yani sipariş verirken mantık hatalarını hatalardan ayırmak gerektiğini düşünüyorum. Umarım bugün örnek bir uygulama vereceğim.
 
ShestkoFF писал (а) >>
Dürüst olmak gerekirse, mantığı anlamadım.

Parti büyüklüğü hesaplama fonksiyonunu sadece yeterli para olmadığında yanlış parti (sıfır) verecek şekilde oluşturuyorum. Diğer durumlarda, parti normalleştirilir ve minimum ve maksimum boyutlar arasında kutulanır. Yeterli para yoksa, bazı pozisyonlar kapanana kadar beklemeniz gerekir.

ShestkoFF yazdı >>
Örneğin, 0.000001 lot için bir sipariş verdik. Elimizde bunun için sunucu essesseno.

Neden yaptık? Neden kasıtlı olarak yanlış parti büyüklüğünü gönderdik? Böyle bir davranışı nasıl haklı çıkarabiliriz?

ShestkoFF yazdı >>

Sadece bu fonksiyondan çıkmanız ve hata kodunu üst kata geçirmeniz ve orada işlemeniz yeterlidir.

Bize ne verecek? Farklı bir lot büyüklüğü alacak mıyız? Neden doğru parti büyüklüğünü hemen alamadınız? Nedenleri adlandırın. analiz edelim...
 

Sadece işlevinizin bir kütüphane işlevi olduğunu, yani evrensel olduğunu düşünüyorum ve bu nedenle tüm hataları 2 kategoriye ayırmanız gerekiyor:

  • SetOrder işlevi içinde işlenmesi gereken hatalar (bağlantı hataları, alıntılar...)
  • SetOrder fonksiyonu dışında ele alınması gereken hatalar (yanlış parti büyüklüğü, yanlış duraklar ...)

Функцию расчёта размера лота я строю таким образом, что неверный лот (ноль) она выдаст только в случае не хватки денег. В остальных случаях лот нормализуется и загоняется в рамки между минимальным и максимальным размерами. Если денег не хватает, то надо ждать, когда закроется какая-нибудь позиция.

Bu sizin uzmanlarınızın mantığıdır, belki başka insanların farklı bir mantığı olacaktır. Bu nedenle, harici bir sistemde yanlış lotlarla bir hata alırdım.

hata kontrol bloğu.

İşte benim bu konudaki vizyonum :) Yukarıda yazdığım gibi bugün bir uygulama örneği vereceğim inşallah.

 

Mod seçeneğim:



 int ModeInt ( int array [])
{
   int size = ArraySize ( array ) ;
   
   if ( size == 0 ) 
   {
       Print ( " Invalid parameter in function ModeInt(int array[]). It should be at least one element. " ) ;
       return ( 0 ) ;
   }
   
   int buffer [] ;
   ArrayCopy ( buffer , array ) ; 
   ArraySort ( buffer ) ;
   
   int max = 0 ;
   int maxValue = 0 ;
   
   int startIndex = 0 ;
   int startValue = buffer [ 0 ] ;
   
   for ( int i = 1 ; i < size ; i ++ )
   {
       if ( buffer [ i ] > startValue )
       {
         if ( max < i - startIndex )
         {
             max = i - startIndex ;
             maxValue = buffer [ startIndex ] ;
         }
         
         startIndex = i ;
         startValue = buffer [ i ] ;
       }
   }
   
   if ( max < size - startIndex )
   {
       max = size - startIndex ;
       maxValue = buffer [ startIndex ] ;
   }
   
   return ( maxValue ) ;
}
 
double ModeDouble ( double array [] , double interval )
{
   int size = ArraySize ( array ) ;
   
   if ( size == 0 ) 
   {
       Print ( " Invalid first parameter in function ModeDouble(double array[], double interval). It should be at least one element. " ) ;
       return ( 0 ) ;
   }
   
   if ( interval <= 0 ) 
   {
       Print ( " Invalid second parameter in function ModeDouble(double array[], double interval). It should be > 0 . " ) ;
       return ( 0 ) ;
   }
   
   double buffer [] ;
   ArrayCopy ( buffer , array ) ; 
   ArraySort ( buffer ) ;
   
   int max = 0 ;
   double maxValue = 0 ;
   
   int startIndex = 0 ;
   double startValue = buffer [ 0 ] ;
   
   double sum = startValue ;
   
   for ( int i = 1 ; i < size ; i ++ )
   {
       if ( buffer [ i ] >= startValue + interval )
       {
         if ( max < i - startIndex )
         {
             max = i - startIndex ;
             maxValue = ( sum ) / max ;
         }
         
         startIndex = i ;
         startValue = buffer [ i ] ;
         sum = 0 ;
       }
       sum += buffer [ i ] ;
   }
   
   if ( max < size - startIndex )
   {
       max = size - startIndex ;
       maxValue = ( sum ) / max ;
   }
 
   return ( maxValue ) ;
}
 
TheXpert писал (а) >>

Mod versiyonum:


Sevgili TheXpert , Kodunuz çok kompakt görünüyor. Hangi, elbette, şişman bir artı! Teşekkür ederim.

 
Söz verdiğim gibi, işlevin sürümünü yayınlıyorum.
Ekli dosyada fonksiyonun kullanıldığı uzman bilgisi yer almaktadır. Bir yapay zeka uzmanını temel aldım.
Fonksiyonun çalışmasını zamanında kontrol etmek için zamanım olmadı. Yani, örneğin 8 dakikalık sürenin bitiminden sonra sinyali tekrar kontrol etmeniz gerektiğine inanıyorum.
İşlevin çalışmasını ayrıntılı olarak incelemenize ve hataları belirlemenize olanak tanıyan ticaret sunucusu hataları oluşturma eklendi.
 int errTest [] = { 0 , 128 , 0 , 142 , 0 , 143 , 0 , 4 , 132 } ;
errTest - hataların oluşturulduğu sıra, 0 hata yok. Buldozerden bir dizi fırlattım, içlerinde av aramaya gerek yok.


Eleştiriye açığız :)

Dosyalar:
 
ShestkoFF писал (а) >>
Söz verdiğim gibi, işlevin sürümünü yayınlıyorum.
Ekli dosyada fonksiyonun kullanıldığı uzman bilgisi yer almaktadır. Bir yapay zeka uzmanını temel aldım.
Fonksiyonun çalışmasını zamanında kontrol etmek için zamanım olmadı. Yani, örneğin 8 dakikalık sürenin bitiminden sonra sinyali tekrar kontrol etmeniz gerektiğine inanıyorum.
İşlevin çalışmasını ayrıntılı olarak incelemenize ve hataları belirlemenize olanak tanıyan ticaret sunucusu hataları oluşturma eklendi.
errTest - hataların oluşturulduğu sıra, 0 hata yok. Buldozerden bir dizi fırlattım, içlerinde av aramaya gerek yok.


Eleştiriye açığız :)

Prensip olarak, benim tarafımda bir şey söylenebilir :), orijinal olmayacağım ve her zamanki gibi söyleyeceğim :) - çok aşırı yüklenmiş.

Sonuç olarak, 5 KB temiz ve anlaşılır koddan Uzman Danışman, 32 kilobaytlık bir banduraya dönüştü, örneğin, uğraşmak için en ufak bir arzum yok.


Kodla ilgili sorular var.

1. Uzmanın çalışmasını devre dışı bırakırsanız, yeniden başlatılana kadar artık çalışmayacaktır. Neden nispeten büyük bir süre beklemiyorsunuz?

2. Sinir ağı - ilk olarak, asla düz bir sinyal vermez. İkincisi - eşiği yoksa bir şeyi optimize etmesini nasıl umarsınız ??? bir eşiğin olmamasıyla, zaten düşük olan verimliliğini (sonuçta doğrusal) yüzde 80 oranında öldürürsünüz.



ZYZH: Kusura bakmayın mehtap bu konuda bir eleştirmen olarak buradayım :) .

Neden: