zenci! - sayfa 57

 
paukas :
Boşaltma ticaretten değil, kötü MM'den değil .

başaramadı.

Ve neyden?

 

sayma eğilimi

kırmızı çizgi - hesap düşüşü

siyah çizgi - kar marjı

yeşil hat - muhtemelen bir kayıp freni


 

Hesaplamaları biraz karmaşıklaştırdı.

 //+------------------------------------------------------------------+
//|                                                  sanyooooook.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © Mthmt, April 2012"

extern double   _deposit = 100.0 ;
extern double   _spread = 2 .;
extern double   _tp = 30 .;
extern double   _sl = 30 .;
extern double   _startLot = 0.1 ;
extern double   _multiplier = 2 .;
extern int      _howMany = 10000 ;

int _deathArr[ ][ 1000 ];


int start( )
{
   ArrayResize ( _deathArr, _howMany );
   MathSrand ( GetTickCount ( ) );
   
   double depo = _deposit;
   double lot = _startLot;
   double resPips;
   int count = 0 ;
   
   for ( int i = 0 ; i < _howMany; i ++ )
   {
      count = 0 ;
      lot = _startLot;
      depo = _deposit;
       double depoMax = depo;
       while ( depo > 0 )
      {
         resPips = dealResultPips( );
         depo += resPips * lot * 10 ;
         _deathArr[ i ][ 2 + count ] = depo;
         
         if ( depo > depoMax )          depoMax = depo;
         
         count ++;
         if ( resPips < 0 )      lot *= _multiplier;
         else                    lot = _startLot; 
      }
      _deathArr[ i ][ 0 ] = count;
      _deathArr[ i ][ 1 ] = depoMax;
   } 
   
   toFile( );   
   return ( 0 );
} //+------------------------------------------------------------------+

   
       double dealResultPips( )
      {
         double ratio = ( _tp + _spread ) / _sl ;
         if ( MathRand ( ) < 32768 . * ratio / 2   )         return ( - _sl );     /// fail
         else                                              return (   _tp );     /// success   
      } //+------------------------------------------------------------------+
      
      
       void toFile( )   
      {
         int h = FileOpen ( "death.txt" , FILE_CSV | FILE_WRITE , "," );
         FileWrite ( h, "##" , "Deals total" , "Max deposit" );
         string sOut = "" ;
         for ( int i = 0 ; i < _howMany; i ++ )
         {
             int countTot = _deathArr[ i ][ 0 ] + 2 ;
             for ( int cnt = 0 ; cnt < countTot; cnt ++ )      
               sOut = sOut + _deathArr[ i ][ cnt ] + "," ;
             FileWrite ( h, i, sOut );
            sOut = "" ;
         }   
         FileClose ( h );
         return ;
      } //+------------------------------------------------------------------+      

İstatistikler farklı, yanılmışım. On binlerce işlem uzunluğuna kadar diziler vardır (senaryo en son çalıştırıldığında, en fazla 17 binden fazla işlem vardı). Her şey yaklaşık 2 megabaytlık büyük bir dosyaya çıkarılır. 1000'e kadar işlem varsa (mevcut ayarlarla), tüm işlemler görülebilir. Daha fazlaysa, kesilirler. Bu parametreyi artırmak dosyayı fazla büyütmez, çünkü bunun gibi çok az başarı hikayesi var.

Bir dizinin boşalmadan önceki ortalama uzunluğu yaklaşık 48 işlemdir. Ancak serinin %99'u yaklaşık 700'e kadar uzunluktadır.

Biraz sonra bir kefalet çeki ekleyeceğim. Ancak bunun çok fazla değişmesi olası değildir.

Maksimum depo da hesaplanır.

 
Evet, ne oluyor, depoyu boşaltmak bile normalde işe yaramıyor)
 

Neden formayı st'ye eklemiyorsunuz?

Benim düşünceme göre, zararı durdur ile kayıp ön tarafta daha fazladır, kâr ile kar yayılmada daha azdır.

 

Çünkü burası farklı. Benim için, eşit sayılar elde etmek için duraktan daha fazla almaya gitmeniz gerekiyor.

Ve aralarındaki fark, iki değil, bir yayılmadır.

Sadece maks. seri (dizinin ikinci boyutu) 10000'e kadar. Normalde 10 saniyeden az çalışır.

 

Biraz tırmandım, 2 dakikadır dönüyorum zaten)

       double dealResultPips( )
      {
         double ratio = ( _tp - 2 *_spread ) / _sl ;
         if ( MathRand( ) < 32768 . * ratio / 2   )         return ( - _sl- 2 );     /// fail
         else                                              return (   _tp- 2 );     /// success   
 

Uzun bir şey...

 
o astı))
 

böyle değişti, düşünmek de

       double dealResultPips( )
      {
         double ratio = ( _tp - _spread ) / _sl ;
         if ( MathRand( ) < 32768 . * ratio / 2   )         return ( - _sl- 2 );     /// fail
         else                                              return (   _tp- 2 );     /// success   
      } //+------------------------------------------------------------------+