Nègre ! - page 57

 
paukas:
Pour que le drain pas du commerce se produire, mais . Pas à cause du mauvais MM..

Je ne l'ai pas fait.

Et de quoi ?

 

évolution du compte

ligne rouge - retrait du compte

ligne noire - répartition des bénéfices

ligne verte - probablement un frein à perte


 

Ça a légèrement compliqué les calculs.

//+------------------------------------------------------------------+
//|                                                  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;
      }//+------------------------------------------------------------------+      

Les statistiques sont différentes, j'avais tort. Il y a des séquences qui peuvent compter jusqu'à des dizaines de milliers de transactions (la dernière exécution du script comptait plus de 17 000 transactions au maximum). Tout est imprimé dans un grand fichier de 2 mégas. Si les transactions atteignent 1000 (avec les paramètres actuels), alors toutes les transactions peuvent être vues. S'ils sont plus nombreux, ils sont coupés. L'augmentation de ce paramètre n'augmente pas le fichier, car il y a très peu de séries réussies.

La durée moyenne de la série avant la perte est d'environ 48 transactions. Mais 99% des séries peuvent compter jusqu'à 700 métiers.

Je présenterai le chèque de renflouement un peu plus tard. Mais cela ne changera pas grand-chose.

La dépo maximale est également calculée.

 
C'est quoi ton problème, tu ne peux même pas vider le dépôt correctement ?)
 

Pourquoi n'ajoutez-vous pas l'écart à st.

À mon avis, avec un stop loss la perte est plus importante sur le spread, avec un profit le profit est moins important sur le spread.

 

Parce qu'il y a différentes façons de compter ici. Pour moi, il faut plus de temps pour aller à la prise que pour aller à l'arrêt pour obtenir des chiffres égaux.

Et la différence entre eux est d'un écart, pas de deux.

J'ai juste augmenté la série max (deuxième dimension du tableau) à 10000. C'est bon, ça marche pendant moins de 10 secondes.

 

Je viens d'arriver, ça tourne depuis deux minutes.)

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

Ça prend beaucoup de temps...

 
il s'accroche ;)
 

l'a modifié comme ceci, en pensant aussi

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