Negro! - pagina 57

 
paukas:
In modo che lo scarico non dal commercio accadere, ma . Non da un cattivo MM..

Non ce l'ho fatta.

E da cosa?

 

tendenza del conto

linea rossa - drawdown del conto

linea nera - diffusione dei profitti

linea verde - probabilmente un freno in perdita


 

Complica leggermente i calcoli.

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

Le statistiche sono diverse, mi sono sbagliato. Ci sono sequenze lunghe fino a decine di migliaia di scambi (l'ultima esecuzione dello script aveva più di 17 mila scambi al massimo). Tutto viene stampato in un grande file da 2 meg. Se i trade fino a 1000 (con le impostazioni attuali), allora tutti i trade possono essere visti. Se più - sono tagliati. L'aumento di questo parametro non aumenta il file, perché ci sono pochissime serie di successo.

La lunghezza media della serie prima della perdita è di circa 48 scambi. Ma il 99% delle serie può essere lungo fino a 700 scambi.

Introdurrò l'assegno di salvataggio un po' più tardi. Ma difficilmente cambierà molto.

Si calcola anche il depo massimo.

 
Che ti succede, non riesci nemmeno a svuotare bene il deposito)?
 

Perché non aggiungete lo spread a st.

Secondo me, con uno stop loss la perdita è più sullo spread, con un profitto il profitto è meno sullo spread.

 

Perché qui ci sono diversi modi di contare. Per me - ci vuole più per arrivare alla presa che alla fermata per ottenere numeri uguali.

E la differenza tra loro è uno spread, non due.

Ho appena aumentato la serie massima (seconda dimensione dell'array) a 10000. Va bene, funziona per meno di 10 secondi.

 

Sono appena entrato e sta girando da due minuti).

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

Ci vuole molto tempo...

 
si blocca ))
 

l'ha cambiato così, pensando anche

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