Неграль! - страница 57

 
paukas:
Чтоб слив не от торговли произошёл, а не от дурного ММ.

Не осилил.

А от чего?

 

тенденция счета такова

красная линия - просадка счета

черная линия - разбос профита

зеленая линия - вероятно тормоз убытков


 

Слегка усложнил расчеты.

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

Статистика - другая, я ошибся. Встречаются последовательности до десятков тысяч трейдов длиной (при последнем запуске скрипта было больше 17 тысяч трейдов максимум). Все выводится в большой файл порядка 2 мегов. Если трейдов до 1000 (при текущих настройках), то все трейды можно увидеть. Если больше - обрезаются. Увеличение этого параметра почти не увеличивает файл, т.к. таких успешных серий мало.

Средняя длина серии до слива - где-то 48 трейдов. Но 99% серий укладываются в длину примерно до 700.

Проверку на залог введу чуть позднее. Но это вряд ли что-то сильно изменит.

Максимальное депо тоже вычисляется.

 
Да что ж это такое получается, даже слить депо нормально не получается )
 

Почему к ст спред не прибавляш.

По моему так, при стоплоссе убыток больше на сперед, при профите прибыль меньше на спред.

 

Потому что тут по-разному можно считать. У меня - до тейка нужно пройти больше, чем до стопа, чтобы получить равные цифры.

А разница между ними - один спред, а не два.

Только что увеличил макс. серию (второе измерение массива) до 10000. Нормально, работает меньше 10 секунд.

 

я чуть залез у меня уже 2 минуту крутит )

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

Долго что-то...

 
он повис ))
 

изменил вот так, тоже задумывается

      double dealResultPips( )
      {
         double ratio = ( _tp - _spread ) / _sl ;
         if( MathRand( ) < 32768. * ratio / 2  )         return( - _sl-2 );     /// fail
         else                                            return(   _tp-2 );     /// success   
      }//+------------------------------------------------------------------+
Причина обращения: