Стоп аут - медленно работает на MT5? - страница 72

 
Aleksey Nikolayev #:

VaR - это один из ретурнов. Ретурн - это доля изменения стоимости актива. В риск-менеджменте считаем эту долю потерянной (поэтому говорится что всегда ретурны берутся по модулю).

Для VaR берём долю, которую точно не потеряем в большинстве случаев (за исключением 1% случаев).

Проводимые вычисления имеют смысл только в рамках указанной мною модели. Это единственное в чём уверен на 100%.

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

 
Aleksey Vyazmikin #:

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

Почти так. Но повторение точно тех же ретурнов в другом порядке не утверждается. Предполагается что набор ретурнов в будущем будет выборкой с тем же распределением и стало быть будет выборкой с близкими характеристиками (например с близким значением VaR квантиля). 
 
Aleksey Vyazmikin #:
Если разобрались, то прошу Вас помочь мне сделать универсальный и не противоречивый алгоритм для определения ТО для любой валютной пары, когда депозит выражен в рублях, или иной отличной от USD валюте. Мне нужно описание словами - код напишу сам.

Имхо, стоит начать с простой версии, усложняя её по мере необходимости.

Дневные ретурны проще всего считать по дневным Open и Close одного и того же дня: Return = Close/Open - 1 (что конечно не совсем хорошо при наличии гепов между днями). Временной промежуток для котировок должен быть от года до двух, не понял какой конкретно.

Для выборки ретурнов вычисляются 1% и 99% квантили Q1 и Q99, для чего можно использовать MathQuantile()

Вычисляется VaR = max(abs(Q1),abs(Q99)). Затем вычисляется плечо Leverage = floor(1/VaR).

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

 
Aleksey Nikolayev #:
помочь мне сделать универсальный и не противоречивый алгоритм для определения ТО для любой валютной пары

ржали всем колхозом..даже ранее молчаливые куры :-)

оценка рисков это настолько специфично и индивидуально, что у каждого разная..

брокеры/дилеры/фонды/трейдеры/прочие   друг от друга отличаются именно этими оценками, это их конкурентные "фишки". 

 
Maxim Kuznetsov #:
ржали всем колхозом

всем своим дц-шным колхозом над своими же дц-шными методичками?

самоирония это хорошо

 
Aleksey Nikolayev #:
Вычисляется VaR = max(abs(Q1),abs(Q99))

Запяматовал что в дц-шной методичке по ретурнам считается однодневная VaR1, которая переводится в двухдневную VaR2, а уже из неё считается плечо.

VaR1 = max(abs(Q1),abs(Q99))

VaR2 = sqrt(2) * VaR1

Leverage = floor(1/VaR2)

 

Алексей примите уже чудесных таблеток :-)

 
Maxim Kuznetsov #:

Алексей примите уже чудесных таблеток :-)

Снова палитесь) Баскаков Старковский тоже постоянно таблетки предлагал, пока сам в санаторий не отправился)
 
Aleksey Nikolayev #:
Почти так. Но повторение точно тех же ретурнов в другом порядке не утверждается. Предполагается что набор ретурнов в будущем будет выборкой с тем же распределением и стало быть будет выборкой с близкими характеристиками (например с близким значением VaR квантиля). 

Ну, хорошо, пусть будет так, на сколько это соответствует действительности  - можно, конечно и проверить, но тут к форекс-дилеру претензий не предъявить, максимум предложить СРО более правдоподобный алгоритм можно.

Думаю, ещё можно сравнить их метод получения двухдневных VaR и фактические двухмерные VaR - велика ли разница. Может, потом проверю.

Aleksey Nikolayev #:

Имхо, стоит начать с простой версии, усложняя её по мере необходимости.

Спасибо, в целом у меня давно написана функция для подсчета VaR для одной валютной пары.

void T_Obespechenie_f(double &arr_inp_Data[],double &arr_out_Data[])
{
//int Period_Nabludeniy=365;//Период наблюдений
   double T_Obespechenie=0;//Требуемое обеспечение?
   double Var_D1_01p=0.0;//Однодневный VaR (99%) (после исключения 1% максимальных значений)
   double Var_D1_99p=0.0;//Однодневный VaR (1%) (после исключения 1% минимальных значений)
   double Var_D2_01p=0.0;//Двухдневный VaR (99%)
   double Var_D2_99p=0.0;//Двухдневный VaR (1%)
   double K_D2=MathSqrt(2);//повышающий коэффициент, равный квадратному корню из двух

   int Size_arr=0;//Размер массива

   double Max_Var=0.0;//Максимальное значение из двух Var

   double arr_Delta_P[];
   double P_n=0.0;//Сколько процентов от всех ячеек в 1 ячейке массива
   int n_01=0;//Номер элемента массива следующий после 1%
   int n_99=0;//Номер элемента массива следующий до 99%
   double P_Calc=0.0;//Подсчёт процетов по нарастающей
   Size_arr=ArraySize(arr_inp_Data);
   Size_arr=ArrayResize(arr_Delta_P,Size_arr-1);
   ArrayInitialize(arr_Delta_P,0);
   P_n=100.0/double(Size_arr);
   bool Calc_P01=true;
   bool Calc_P99=true;
   for(int i=0;i<Size_arr;i++)
   {
      arr_Delta_P[i]=arr_inp_Data[i+1]/arr_inp_Data[i]-1;
      P_Calc+=P_n;
      //Print(i," P_Calc=",P_Calc);
      if(Calc_P01==true && P_Calc>1.0)
      {
         Calc_P01=false;
         n_01=i;
      }
      if(Calc_P99==true && P_Calc>99.0)
      {
         Calc_P99=false;
         n_99=i-1;
      }
   }

   ArraySort(arr_Delta_P);
   Var_D1_01p=arr_Delta_P[n_01];
   Var_D1_99p=arr_Delta_P[n_99];

   Var_D2_01p=Var_D1_01p*K_D2;
   Var_D2_99p=Var_D1_99p*K_D2;

   Var_D2_01p=MathAbs(Var_D2_01p);
   Var_D2_99p=MathAbs(Var_D2_99p);

   Max_Var=MathMax(Var_D2_01p,Var_D2_99p);
   T_Obespechenie=1.0/Max_Var;

   ArrayResize(arr_out_Data,5);
   arr_out_Data[0]=Var_D1_01p;
   arr_out_Data[1]=Var_D1_99p;
   arr_out_Data[2]=Var_D2_01p;
   arr_out_Data[3]=Var_D2_99p;
   arr_out_Data[4]=T_Obespechenie;
//Print("Период наблюдений 365 vs ", Period_Nabludeniy);
   Print("Однодневный VaR (99%) (после исключения 1% максимальных значений) 0,0226 vs ",Var_D1_99p);
   Print("Однодневный VaR (1%) (после исключения 1% минимальных значений) -0,0212 vs ",Var_D1_01p);
   Print("Двухдневный VaR (99%) (максимальное значение от которого производится дальнейший расчет) 0,0320  vs ",Var_D2_99p);
   Print("Двухдневный VaR (1%) (по модулю) 0,0300 vs ",Var_D2_01p);
   Print("Размер требуемого обеспечения (1/0,0320) 1 к 31 vs 1 к ",T_Obespechenie);

}
Aleksey Nikolayev #:

Дневные ретурны проще всего считать по дневным Open и Close одного и того же дня: Return = Close/Open - 1 (что конечно не совсем хорошо при наличии гепов между днями). Временной промежуток для котировок должен быть от года до двух, не понял какой конкретно.

Я так понял, что форекс-дилер сам устанавливает время в которое он берёт цену за конкретный день, поэтому в зависимости от времени это будет или цена открытия или цена закрытия минуты.

Aleksey Nikolayev #:

Для выборки ретурнов вычисляются 1% и 99% квантили Q1 и Q99, для чего можно использовать MathQuantile()

Вы мне всё же скажите, метод форекс-дилера приемлем, когда он находит скольким наблюдениям равен 1% и "режет" на это значение выборку с двух сторон, беря в конкретном примере на одно значение больше для исключения?

Aleksey Nikolayev #:
Затем вычисляется плечо Leverage = floor(1/VaR).

Плечо - это хорошо, но нужен же показатель по ФЗ в денежном выражении! Я так понимаю, что надо брать валюту маржи, конвертировать её в рубли, и получившееся значение уже делить на плечо. Как думаете?

 
Maxim Kuznetsov #:

оценка рисков это настолько специфично и индивидуально, что у каждого разная..

Если бы Вы не прогуливали и читали все сообщения, то знали бы, что речь идёт о методике обязательной для применения всеми форекс-дилерами, имеющими лицензию от ЦБ РФ.