Помогите оптимизировать код советника, а то в файл инфу не пишет. - страница 4

 

Даже 300 - маловато. Бери минимум 600, а еще лучше 1000. А "10% в месяц" никакого отношения к этой цифре не имеют. И просадки будут, скорее всего, определяться твоим ММ, а не "удачностью входов", которой ты все равно управлять не сможешь.

 
Mathemat писал (а) >>

Даже 300 - маловато. Бери минимум 600, а еще лучше 1000. А "10% в месяц" никакого отношения к этой цифре не имеют. И просадки будут, скорее всего, определяться твоим ММ, а не "удачностью входов", которой ты все равно управлять не сможешь.

Хорошо, буду иметь ввиду.

 

Исследование_Часть_Первая. Вот это по настоясчему толстые хвосты...

Файлы:
gbpusdv240.zip  258 kb
 

а вот код, мож кому пригодиться...

Файлы:
 

StatBars, спасибо! Буду разбираться в результатах.

 
Часть вторая... В некоторых случаях уже есть небольшое приемущество...
Файлы:
 
код
Файлы:
 
Vinin && Mathemat оцените рез-ы, может чё подскажите...
 

Нашел наконец-таки принцип кодирования свечей в индюкаторе: http://grs.narod.ru/litera/japan/indjapan.htm . Откровенно говоря, не вижу в таком кодировании обычных свечей особого смысла и скромно присоединяюсь к Виктору.

StatBars, ты силен. Но статистика все же маловата (ей не хватает значимости). Грубо говоря, чем меньше выборка, тем больше в ней вероятность больших отклонений, в том числе и таких вот "дрейфов удачи". Что можно сделать?

В кодировке по Лиховидову 128 возможных состояний, формирующихся довольно произвольно. Попробуй извратить мысль так, чтобы снизить количество состояний. Каково количество возможных комбинаций из 4 свечек? 128^4 = 2^28 ~ 268 миллионов! И как мы будем анализировать такой океан?!

Затравка: теоретически можно свести классификацию подавляющего числа баров к предельно лаконичной, т.е. 0 и 1 (точнее, +-1, т.е. "вверх-вниз"). Ну а если все же учитывать размер какой-то части бара по классификации Лиховидова, то каждому бару будут соответствовать 8 состояний, а не 128. А 8^4 ~ 4000. Комбинационный взрыв все равно будет, но он не будет таким жутким.

P.S. по поводу классификации "+-1": информация, жизненно важная для ТС, при этом практически не будет теряться, так как направление тела бара будет практически единственным его параметром, характеризующим его почти полностью.

 

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

Исследовал период с 2001 года.

Символ: GBPUSD Период: 240
После 1 бычьих свечей:
идет медвежья свеча в 2817 случаях, вероятность 50 %
идет бычья свеча в 2721 случаях, вероятность 49 %
После 1 медвежьих свечей:
идет бычья свеча в 2802 случаях, вероятность 53 %
идет медвежья свеча в 2423 случаях, вероятность 46 %

Символ: GBPUSD Период: 240
После 2 бычьих свечей:
идет медвежья свеча в 1358 случаях, вероятность 51 %
идет бычья свеча в 1292 случаях, вероятность 48 %
После 2 медвежьих свечей:
идет бычья свеча в 1304 случаях, вероятность 55 %
идет медвежья свеча в 1057 случаях, вероятность 44 %

Символ: GBPUSD Период: 240
После 3 бычьих свечей:
идет медвежья свеча в 667 случаях, вероятность 53 %
идет бычья свеча в 587 случаях, вероятность 46 %
После 3 медвежьих свечей:
идет бычья свеча в 594 случаях, вероятность 57 %
идет медвежья свеча в 436 случаях, вероятность 42 %

Символ: GBPUSD Период: 240
После 4 бычьих свечей:
идет медвежья свеча в 296 случаях, вероятность 52 %
идет бычья свеча в 270 случаях, вероятность 47 %
После 4 медвежьих свечей:
идет бычья свеча в 245 случаях, вероятность 58 %
идет медвежья свеча в 176 случаях, вероятность 41 %

Символ: GBPUSD Период: 240
После 5 бычьих свечей:
идет медвежья свеча в 143 случаях, вероятность 54 %
идет бычья свеча в 118 случаях, вероятность 45 %
После 5 медвежьих свечей:
идет бычья свеча в 94 случаях, вероятность 55 %
идет медвежья свеча в 74 случаях, вероятность 44 %

Как вывод могу сказать, что последовательности из одинаковых свечей не дают статистического преимущества в прогнозировании последующей свечи.

Вот код советника с помощью которого я собирал статистику:

//+------------------------------------------------------------------+
//|                                       Stat_CandleStick_3_all.mq4 |
//+------------------------------------------------------------------+
static datetime PrevTime=0;
extern int CandleStick=10;

int Razvorot_Vos=0;
int Prodolshenie_Vos=0;
int Razvorot_Pad=0;
int Prodolshenie_Pad=0;
int Summ_Vos=0;
int Razvorot_Vos_Proc=0;
int Prodolshenie_Vos_Proc=0;
int Summ_Pad=0;
int Razvorot_Pad_Proc=0;
int Prodolshenie_Pad_Proc=0;
int i;
//----------------------------------------------------------------+
int deinit(){
// если оптимизация то файл репорта не создаём
if(IsOptimization()==false) fail_pis(); return(0);}
//----------------------------------------------------------------+
int start()
{
if (PrevTime!=Time[0]) 
{
  int R_Vos=0;
  int P_Vos=0;
  int R_Pad=0;
  int P_Pad=0;

  PrevTime=Time[0];
  for (i=0; i<CandleStick; i++)
  {
    if (iOpen(NULL,0,1)>iClose(NULL,0,1) && iOpen(NULL,0,i+2)<iClose(NULL,0,i+2)) R_Vos++;
    continue;
  }
  if (R_Vos==CandleStick) {Razvorot_Vos++;}

  for (i=0; i<CandleStick; i++)
  {
    if (iOpen(NULL,0,1)<iClose(NULL,0,1) && iOpen(NULL,0,i+2)<iClose(NULL,0,i+2)) P_Vos++;
    continue;
  }
  if (P_Vos==CandleStick) {Prodolshenie_Vos++;}

  int Summ_Vos=Razvorot_Vos+Prodolshenie_Vos;
  if (Summ_Vos!=0) {Razvorot_Vos_Proc=Razvorot_Vos*100/Summ_Vos; Prodolshenie_Vos_Proc=Prodolshenie_Vos*100/Summ_Vos;}

  for (i=0; i<CandleStick; i++)
  {
    if (iOpen(NULL,0,1)<iClose(NULL,0,1) && iOpen(NULL,0,i+2)>iClose(NULL,0,i+2)) R_Pad++;
    continue;
  }
  if (R_Pad==CandleStick) {Razvorot_Pad++;}

  for (i=0; i<CandleStick; i++)
  {
    if (iOpen(NULL,0,1)>iClose(NULL,0,1) && iOpen(NULL,0,i+2)>iClose(NULL,0,i+2)) P_Pad++;
    continue;
  }
  if (P_Pad==CandleStick) {Prodolshenie_Pad++;}

int Summ_Pad=Razvorot_Pad+Prodolshenie_Pad;
if (Summ_Pad!=0)
{Razvorot_Pad_Proc=Razvorot_Pad*100/Summ_Pad; Prodolshenie_Pad_Proc=Prodolshenie_Pad*100/Summ_Pad;}

Comment 
(" После ",  CandleStick, " бычьих свечей: ","\n",
"идет медвежья свеча в ", Razvorot_Vos, " случаях, ", "вероятность ", Razvorot_Vos_Proc, "%", "\n",
"идет бычья свеча в ", Prodolshenie_Vos, " случаях, ", "вероятность ", Prodolshenie_Vos_Proc, "%", "\n",
" После ", CandleStick, " медвежьих свечей: ","\n",
"идет бычья свеча в ", Razvorot_Pad, " случаях, ", "вероятность ", Razvorot_Pad_Proc, "%", "\n",
"идет медвежья свеча в ", Prodolshenie_Pad, " случаях, ", "вероятность ", Prodolshenie_Pad_Proc, "%");
}
return(0);
}
//+------------------------------------------------------------------+

void fail_pis (){
int handle=FileOpen("report.txt",FILE_READ|FILE_WRITE,' ');
if(handle<1) return;
FileSeek(handle,FileSize(handle),SEEK_SET);
FileWrite(handle, "Символ: ", Symbol(), " Период: ", Period(), "\n",
" После ",  CandleStick, " бычьих свечей: ","\n",
"идет медвежья свеча в ", Razvorot_Vos, " случаях, ", "вероятность ", Razvorot_Vos_Proc, "%", "\n",
"идет бычья свеча в ", Prodolshenie_Vos, " случаях, ", "вероятность ", Prodolshenie_Vos_Proc, "%", "\n",
" После ", CandleStick, " медвежьих свечей: ","\n",
"идет бычья свеча в ", Razvorot_Pad, " случаях, ", "вероятность ", Razvorot_Pad_Proc, "%", "\n",
"идет медвежья свеча в ", Prodolshenie_Pad, " случаях, ", "вероятность ", Prodolshenie_Pad_Proc, "%");
FileClose(handle);}
Причина обращения: