Теория случайных потоков и FOREX - страница 59

 
 
Ну вот надо же было обязательно найти не что-нибудь хорошее и полезное, а раскопать такую ...

Предлагаю тебе почитать Малахов. Там для тебя очень много всякого интересного, иди дарагой...

 

timbo писал(а) >>

Прибыльная стратегия на стационарном случайном процессе создаётся на счёт раз.

Вы говорите, что на раз.
Пожалуйста, не поленитесь, напишите скрипт на mql, который бы моделировал выигрышную стратегию на процессе с нормальным распределением.
Сколько я с этим работал - всегда сталкивался с тем, что это задача совсем не тривиальная. Как правило, при попытке получить выигрыш на стационарном процессе, получаем один из двух результатов: либо мат. ожидание сделки = 0, либо прибыль настолько мизерная, что лучше свои средства хранить в банке. Думаю задачу можно решить так, чтобы выигрыш был хоть сколько-нибудь ощутимым, но это не просто.

Заодно обращаюсь к народу: нет ли у кого функции, которая возвращает величину с нормальным распределением в диапазоне (0,1)? Вчера весь день убил, но так и не придумал как это реализовать на mql.

 
benik писал(а) >>

Заодно обращаюсь к народу: нет ли у кого функции, которая возвращает величину с нормальным распределением в диапазоне (0,1)? Вчера весь день убил, но так и не придумал как это реализовать на mql.

Это довольно просто реализуется самостоятельно с помощью MQL-вской функции MahtRand(). Она, как известно, возвращает псевдослучайное целое число с равномерным распределением в диапазоне от 0 до 32767. А P.D.F. нормального распределения отображает числовую ось [0, inf.] ни интервал [0, 1]. Значит, чтобы получить нормально распределнную величину, вам достаточно взять обратное отображение интервала [0, 1] на ось Ох. Вопрос только в том, чтобы аргумент выбирался случайным образом. Для этого и используется MahtRand().

То есть, для начала заряжаете в прогу таблицу значений P.D.F. нормального распределения в численном виде [x, F(x)].

Дальше, задаетесь функцией, которая равномерно отображает [1, 32767] на (0, 1), f(x) = x/32768. Как видите, значения 0 и 1 исключены из интервала. Поэтому и значение х=0 тоже должно пропускаться. Эти краевые эффекты можно учитывать по разному, но большого значения они не имеют.

Теперь генерите с помощью MahtRand() псевдослучайный ряд, каждое из полученных значений отображаете на единичный интервал, используя эту точку как значение P.D.F. нормального распределения F(x), находите соотвествующий ему аргумент х. Все. Это и есть нормально распределенная величина.

 

Yurixx писал(а) >>


Да, это вариант. Но хотелось бы все-таки сделать автономную функцию в mql. Без загрузок случайных значений из вне.
Насколько мне известно, нормальное распределение легко получить из равномерного путем взятия обратной функции Лапласа от равномерной величины в интервале (0,1).
Хотите смейтесь, но у меня возникла проблема с взятием обратной ф-ции Лапласа от MathRand()/32768.

Поэтому вот выкладываю скрипт, который по задумке должен был выводить в файл "RandN(0-1).csv" ту самую нормальную величину в итервале (0,1).

int start()
  {
//----
      string FileName = "RandN(0-1).csv";
      int handle = FileOpen (FileName, FILE_CSV|FILE_WRITE);
      MathSrand(GetTickCount());
      for (int i=1;i<=32768;i++)
      {
         double val = RandN(0,1);
         FileWrite(handle, val);
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+

   double RandN(int a, int sigma)
   {
      double pi = 3.14159265;
      double exp = 2.71828183;
      double x = MathRand()/32768.0;
      double pow = -(MathPow(x-a,2.0)/(2*MathPow(sigma,2.0)));
      double f = (1/(sigma*MathSqrt(2*pi)))*MathPow(exp,pow);
      return (f);
   }
Конечно он выводит какую-то чушь, но у меня уже сил нет его дорабатывать. Если у кого-то будет время и желание, можете доработать. Ошибка тут в том, что вместо функции Лапласа, функция RandN() вычисляет плотность распределения. Если кому-то не составит труда вычислить интеграл от этой функции, будьте добры, поделитесь с общественностью. Для меня это сейчас сложная задача - думать как в mql вычислять интеграл.
 

benik, вот тут кое-что есть. Сам разберешься?

 
Спасибо, посмотрю. Только сегодня уже точно не разберусь :) Голова уже "забита". Завтра попробую.
 
А, тут есть уже готовая функция для нормального распределения. Да, вот за это спасибо.
 
benik писал(а) >>


Но хотелось бы все-таки сделать автономную функцию в mql. Без загрузок случайных значений из вне.
...

Хотите смейтесь, но у меня возникла проблема с взятием обратной ф-ции Лапласа от MathRand()/32768.

Ну вообще-то MathRand() MQL-вская функция. Почему вы считаете, что это извне ?

Тут алгоритм, который я обрисовал, работает со скоростью света. Там практически нет вычислений. А если массив значений PDF отсортировать (что вполне естественно, поскольку она монотонна), то поиск в этом массиве происходит тоже мгновенно.

А вот в вашем коде есть много вычислений, которые занимают кучу времени. Возведение в степень MathPow() работает очень долго и встречается в трех местах. Думаю, что этот алгоритм будет как минимум в 1000 раз медленнее. При работе со статичтикой по-видимому придется иметь дело сбольшими объемами данных. Скорость оказывается очень критичным параметром.

PDF нормального распределения действительно можно взять и у Статора. Однако, поскольку у вас не произвольные значения параметров, а всего лишь дискретный набор из 32768 штук, то лучше всего не вычислять PDF каждый раз, а один раз предварительно вычислить ее с помощью той же функции Статора и загнать в сортированный массив. С точки зрения быстродействия это оптимальное решение.

 
timbo >>:

В математике стационарный процес это процес у которого mean и covariance не зависят от времени. Т.е. два основных параметра костанты.

Простейший пример: процесс с нормальным распределение N(0,1). Для такого процесса если значение х(t)=2, то с вероятностью 97.5% x(t+1) будет меньше чем 2. Т.е. процес пойдёт вниз. Это не гарантированно, то в 97 случаях из 100 это будет так.

Более сложный пример: AR(1) процесс x(t)=x(t-1)*a + s(t), где а<1 и s(t) стационарный процесс, шум с какими-то конечными параметрами. Данный процесс тоже будет стационарным и его параметры можно рассчитать исходя из параметров s(t) и а. Соответственно, если этот процесс отклонился от mean, то всегда можно посчитать когда он туда вернётся с заданной вероятностью.

А вот если параметр а=1, то мы получаем случайное блуждание, т.е. нестационарный процесс, и куда его занесёт невозможно предсказать.

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


Какой процент прибыльных сделок в реале и отношение средней прибыли к среднему убытку?