Прошлым летом стало известно, что помощник президента Андрей Белоусов предлагает изъять у 14 компаний более 500 млрд рублей. Утечка, по словам самого Белоусова, имела «эффект гранаты, брошенной в курятник». Почти год спустя помощник Путина утверждает: он точно знает, кто из бизнесменов ответственен за передачу его письма журналистам Как пишет Forbes, новости о том, что Белоусов придумал новый способ финансировать исполнение майских указов Владимира Путина, появились вечером 9 августа прошлого года. Сначала Telegram-канал «Незыгарь», а потом и РБК с «Ведомостями» сообщили, что чиновник в письме президенту предложил изъять у металлургических, химических и нефтехимических компаний более 500 млрд рублей из тех «сверхдоходов», что они получили из-за изменения «внешней рыночной конъюнктуры». К письму, как писали газеты, Белоусов приложил перечень из 14 компаний. После публикации списка попавшие в него девять публичных предприятий потеряли в стоимости около 400 млрд рублей — то есть чуть меньше, чем у них предлагалось изъять.
Глава ТПП РФ назвал наиболее привлекательные российские отрасли для иностранцев С.-ПЕТЕРБУРГ, 5 июн /ПРАЙМ/. Наиболее популярными отраслями для иностранных инвесторов для локализации в России являются электроэнергетика, фармацевтическая промышленность и агропромышленный комплекс, заявил в интервью РИА Новости глава Торгово-промышленно палаты России Сергей Катырин в кулуарах российского форума МСП
/* Функция решения уравнения HJB-QVI методом обратной индукции * plt - структура, в которой определены основные переменные и политики * plt.T - число временных точек расчета, plt.S - число значений спреда (=3) * plt.F- число точек расчета дисбаланса объема, plt.Y - количество значений открытой позиции * plt.dF - шаг величины дисбаланса объемов, plt.Fmax - модуль максимального значения дисбаланса * plt.ticksize - минимальный шаг цены, plt.comiss - биржевая комиссия * plt.w - массив значения численной функции владения * plt.polmk - булевый массив, определяющий, какая политика будет использована при текущих значениях [t,y,f,s] * если true - лимитные ордера, false - маркет ордера * plt.thtkq - массив объемов маркет ордеров при действии политики маркет ордеров * plt.thmka, plt.thmkb - массив значений 0 (выставление на лучшую цену) или 1 (выставление на шаг лучше лучшей цены) * при действии политики лимитных ордеров * maxlot - абсолютное максимальное значение открытой позиции */ public static void BackwardInduction(politics plt, int maxlot) { double[][] L = new double[plt.Y][]; for (int y = 0; y < plt.Y; y++)L[y] = new double[plt.F]; //Двигаемся вниз по временной сетке for (int t = plt.T; t >= 0; t--) { //Двигаемся по сетке значения спреда for (int s = 0; s < plt.S; s++) { // Определяем массив векторов оператора L (массив- по всем значениям открытой позиции, //вектор оператора - по всем значениям дисбаланса)
//Двигаемся по сетке открытых значений for (int y = 0; y < plt.Y; y++) { //Вычисляем реальное значение открытой позиции из индекса int yr = (int)(y - (plt.Y - 1) / 2); //Двигаемся по сетке дисбаланса объемов for (int f = 0; f < plt.F; f++) { //Реальное значение дисбаланса из индекса double fr = plt.dF * f - plt.Fmax; //Первый шаг - вычисление функции владения w в конечный момент времени T if (t == plt.T) plt.w[t, y, f, s] = -Math.Abs(yr) * ((s + 1) * plt.ticksize / 2 + plt.commis); else { //В остальные моменты времени находим значения векторов L (пока без умножения на // дифференциальные матрицы в первой части выражения для L) L[y][f] = LV(y, yr, fr, f, s, t, plt); } } if (t < plt.T) { //Перемножение матричной части и векторов L, полученных выше, в результате получаем // полностью рассчитанные вектора L. plt.rmatrix - матричная часть matrixmlt(plt.rmatrix, ref L[y]); } } //Вычисление выражения M*L для определения политики маркет ордеров if (t < plt.T) { //Двигаемся по сетке открытой позиции for (int y = 0; y < plt.Y; y++) { //Двигаемся по сетке дисбаланса объемов for (int f = 0; f < plt.F; f++) { //Максимальное значение контрактов, допустимое в маркет ордере на данном шаге int dzmax = Math.Min(plt.Y - 1 - y, maxlot); double ML = -1000000; //Двигаемся по сетке объема маркет ордера for (int dz = Math.Max(-y, -maxlot); dz <= dzmax; dz++) { //Вычисление оператора M*L для каждого значения объема маркет ордера if (L[y + dz][f] - Math.Abs(dz) * ((s + 1) * plt.ticksize / 2 + plt.commis) > ML) { ML = L[y + dz][f] - Math.Abs(dz) * ((s + 1) * plt.ticksize / 2 + plt.commis); //Занесение в политику маркет ордеров значения объема plt.thtkq[t, y, f, s] = dz; } } //Если оператор M*L больше оператора L при всех исходных параметрах, выбирается политика //маркет ордеров if (ML > L[y][f]) { //Значению функции владения w присваивается значение оператора M*L plt.w[t, y, f, s] = ML; plt.polmk[t, y, f, s] = false; } // Иначе - политика лимитных ордеров else { //Значению функции владения присваивается значение оператора L plt.w[t, y, f, s] = L[y][f]; plt.polmk[t, y, f, s] = true; } } } } } } delete[][] L; }
//Функция вычисления значения оператора L, без перемножения на матричную часть public static double LV(int y, int yr, double ft, int f, int s, int t, politics plt) { //Вычисление значений функции вероятности скачков цены на полшага и шаг psi1,2, с коэффициентами beta1,2 double psi1res = 0; ClassMain.psifunc(plt.beta1, new double[] { ft }, ref psi1res, null); double psi2res = 0; ClassMain.psifunc(plt.beta2, new double[] { ft }, ref psi2res, null); //Вычисление матожидания изменения средней цены, plt.lj1,plt.lj2 - интенсивности скачков цены double Edp = plt.lj1 * (plt.ticksize / 2) * (2 * psi1res - 1) + plt.lj2 * plt.ticksize * (2 * psi2res - 1); //Вычисление оператора воздействия спреда на функцию владения, plt.ro - матрица переходов состояний спреда double Ls = 0; for (int j = 0; j < plt.ro.GetLength(1); j++) { Ls += (plt.w[t+1, y, f, j] - plt.w[t+1, y, f, s]) * plt.ro[s, j]; } //plt.ls - интенсивность скачков спреда Ls = plt.ls * Ls; //Вычисление матожидания среднеквадратичного изменения цены double Edpp = (0.25 * plt.lj1 + plt.lj2);
double gv = -10000000; int thmax = 1; if (s == 0) thmax = 0; double gvtemp = 0; //Вычисление значений вероятности взятия лимитных ордеров в очереди заявок h(f) //plt.ch - коэффициент в формуле для вероятности h(f) double hresp = 0; //вероятность аск ClassMain.htfunc(plt.ch, new double[] { ft }, ref hresp, null); double hresm = 0; //вероятность бидов ClassMain.htfunc(plt.ch, new double[] { -ft }, ref hresm, null);
//Вычисление слагаемых ga и gb в выражении для оператора L, thmax - максимальное значение, которое принимает // политика для лимитных ордеров - 1 for (int i = 0; i <= thmax; i++) { for (int k = 0; k <= thmax; k++) { gvtemp = (i * (plt.lMa) + (1 - i) * plt.lMa * hresp) * (plt.w[t+1, Math.Min(y + 1, (int)(2 * plt.Ymax)), f, s] - plt.w[t+1, y, f, s] + (s + 1) * plt.ticksize / 2 - plt.ticksize * i) + (k * (plt.lMb) + (1 - k) * plt.lMb * hresm) * (plt.w[t+1, Math.Max(y - 1, 0), f, s] - plt.w[t+1, y, f, s] + (s + 1) * plt.ticksize / 2 - plt.ticksize * k); //Занесение значения 0 или 1 в политику лимитных ордеров if (gvtemp > gv) { gv = gvtemp; plt.thmkb[t, y, f, s] = i; plt.thmka[t, y, f, s] = k; } } } //Вычисление значения оператора L (без умножения на матричную часть) //plt.dt- шаг времени, plt.gamma - мера риска double lv = plt.w[t+1, y, f, s] + plt.dt * yr * Edp + plt.dt * Ls - plt.dt * plt.gamma * yr * yr * Edpp + plt.dt * gv;
return lv; }
//
//Вычисление матричной части выражения оператора L public void MatrixSolve() { //Дифференциальные матрицы D1,2 и матрица идентичности I. int j; double[,] D1 = new double[F, F]; double[,] D2 = new double[F, F]; double[,] I = new double[F, F];
//Заполняем матрицы на сетке F x F for (int i = 0; i < F; i++) { for (int j = 0; j < F; j++){ //обязательно необходимо приводить начальные значения. D1[i][j]=0; //может получиться так, что вместо 0 в элементе массива будет число D2[i][j]=0; // =1e-312, и эту ошибку потом очень непросто обнаружить, "эффект бабочки" if(i==j)I[i][j]=1; else I[i][j]=0; }; // int k = 0; if (i <= (F - 1) / 2) k = i; else k = i - 1;
D1[i, k] = -1 / dF; D1[i, k + 1] = 1 / dF;
if (i == 0) { D2[i, i + 1] = 1 / (dF * dF); D2[i, i] = -2 / (dF * dF); } else if (i == F - 1) { D2[i, i - 1] = 1 / (dF * dF); D2[i, i] = -2 / (dF * dF); } else { D2[i, i - 1] = 1 / (dF * dF); D2[i, i + 1] = 1 / (dF * dF); D2[i, i] = -2 / (dF * dF); }
double Ft = dF * i - Fmax;
//Вычисляем значения матричной части выражения оператора L //cft[1] - значение sigmaF из уравнения Орнштейна-Уленбека для Ft, //cft[0] - значение alfaF for (j = 0; j < F; j++) { rmatrix[i, j] = I[i, j] - 0.5*dt * cft[1] * cft[1] * D2[i, j] - dt * cft[0] * Ft * D1[i, j]; } } alglib.matinvreport rep; int info; //Инвертируем матрицу, используя стороннюю библиотеку alglib alglib.rmatrixinverse(ref rmatrix, out info, out rep); delete[,] D1; delete[,] D2; delete[,] I; }
/* Функция решения уравнения HJB-QVI методом обратной индукции * plt - структура, в которой определены основные переменные и политики * plt.T - число временных точек расчета, plt.S - число значений спреда (=3) * plt.F- число точек расчета дисбаланса объема, plt.Y - количество значений открытой позиции * plt.dF - шаг величины дисбаланса объемов, plt.Fmax - модуль максимального значения дисбаланса * plt.ticksize - минимальный шаг цены, plt.comiss - биржевая комиссия * plt.w - массив значения численной функции владения * plt.polmk - булевый массив, определяющий, какая политика будет использована при текущих значениях [t,y,f,s] * если true - лимитные ордера, false - маркет ордера * plt.thtkq - массив объемов маркет ордеров при действии политики маркет ордеров * plt.thmka, plt.thmkb - массив значений 0 (выставление на лучшую цену) или 1 (выставление на шаг лучше лучшей цены) * при действии политики лимитных ордеров * maxlot - абсолютное максимальное значение открытой позиции */ public static void BackwardInduction(politics plt, int maxlot) { double[][] L = new double[plt.Y][]; for (int y = 0; y < plt.Y; y++)L[y] = new double[plt.F]; //Двигаемся вниз по временной сетке for (int t = plt.T; t >= 0; t--) { //Двигаемся по сетке значения спреда for (int s = 0; s < plt.S; s++) { // Определяем массив векторов оператора L (массив- по всем значениям открытой позиции, //вектор оператора - по всем значениям дисбаланса)
//Двигаемся по сетке открытых значений for (int y = 0; y < plt.Y; y++) { //Вычисляем реальное значение открытой позиции из индекса int yr = (int)(y - (plt.Y - 1) / 2); //Двигаемся по сетке дисбаланса объемов for (int f = 0; f < plt.F; f++) { //Реальное значение дисбаланса из индекса double fr = plt.dF * f - plt.Fmax; //Первый шаг - вычисление функции владения w в конечный момент времени T if (t == plt.T) plt.w[t, y, f, s] = -Math.Abs(yr) * ((s + 1) * plt.ticksize / 2 + plt.commis); else { //В остальные моменты времени находим значения векторов L (пока без умножения на // дифференциальные матрицы в первой части выражения для L) L[y][f] = LV(y, yr, fr, f, s, t, plt); } } if (t < plt.T) { //Перемножение матричной части и векторов L, полученных выше, в результате получаем // полностью рассчитанные вектора L. plt.rmatrix - матричная часть matrixmlt(plt.rmatrix, ref L[y]); } } //Вычисление выражения M*L для определения политики маркет ордеров if (t < plt.T) { //Двигаемся по сетке открытой позиции for (int y = 0; y < plt.Y; y++) { //Двигаемся по сетке дисбаланса объемов for (int f = 0; f < plt.F; f++) { //Максимальное значение контрактов, допустимое в маркет ордере на данном шаге int dzmax = Math.Min(plt.Y - 1 - y, maxlot); double ML = -1000000; //Двигаемся по сетке объема маркет ордера for (int dz = Math.Max(-y, -maxlot); dz <= dzmax; dz++) { //Вычисление оператора M*L для каждого значения объема маркет ордера if (L[y + dz][f] - Math.Abs(dz) * ((s + 1) * plt.ticksize / 2 + plt.commis) > ML) { ML = L[y + dz][f] - Math.Abs(dz) * ((s + 1) * plt.ticksize / 2 + plt.commis); //Занесение в политику маркет ордеров значения объема plt.thtkq[t, y, f, s] = dz; } } //Если оператор M*L больше оператора L при всех исходных параметрах, выбирается политика //маркет ордеров if (ML > L[y][f]) { //Значению функции владения w присваивается значение оператора M*L plt.w[t, y, f, s] = ML; plt.polmk[t, y, f, s] = false; } // Иначе - политика лимитных ордеров else { //Значению функции владения присваивается значение оператора L plt.w[t, y, f, s] = L[y][f]; plt.polmk[t, y, f, s] = true; } } } } } } delete[][] L; }
//Функция вычисления значения оператора L, без перемножения на матричную часть public static double LV(int y, int yr, double ft, int f, int s, int t, politics plt) { //Вычисление значений функции вероятности скачков цены на полшага и шаг psi1,2, с коэффициентами beta1,2 double psi1res = 0; ClassMain.psifunc(plt.beta1, new double[] { ft }, ref psi1res, null); double psi2res = 0; ClassMain.psifunc(plt.beta2, new double[] { ft }, ref psi2res, null); //Вычисление матожидания изменения средней цены, plt.lj1,plt.lj2 - интенсивности скачков цены double Edp = plt.lj1 * (plt.ticksize / 2) * (2 * psi1res - 1) + plt.lj2 * plt.ticksize * (2 * psi2res - 1); //Вычисление оператора воздействия спреда на функцию владения, plt.ro - матрица переходов состояний спреда double Ls = 0; for (int j = 0; j < plt.ro.GetLength(1); j++) { Ls += (plt.w[t+1, y, f, j] - plt.w[t+1, y, f, s]) * plt.ro[s, j]; } //plt.ls - интенсивность скачков спреда Ls = plt.ls * Ls; //Вычисление матожидания среднеквадратичного изменения цены double Edpp = (0.25 * plt.lj1 + plt.lj2);
double gv = -10000000; int thmax = 1; if (s == 0) thmax = 0; double gvtemp = 0; //Вычисление значений вероятности взятия лимитных ордеров в очереди заявок h(f) //plt.ch - коэффициент в формуле для вероятности h(f) double hresp = 0; //вероятность аск ClassMain.htfunc(plt.ch, new double[] { ft }, ref hresp, null); double hresm = 0; //вероятность бидов ClassMain.htfunc(plt.ch, new double[] { -ft }, ref hresm, null);
//Вычисление слагаемых ga и gb в выражении для оператора L, thmax - максимальное значение, которое принимает // политика для лимитных ордеров - 1 for (int i = 0; i <= thmax; i++) { for (int k = 0; k <= thmax; k++) { gvtemp = (i * (plt.lMa) + (1 - i) * plt.lMa * hresp) * (plt.w[t+1, Math.Min(y + 1, (int)(2 * plt.Ymax)), f, s] - plt.w[t+1, y, f, s] + (s + 1) * plt.ticksize / 2 - plt.ticksize * i) + (k * (plt.lMb) + (1 - k) * plt.lMb * hresm) * (plt.w[t+1, Math.Max(y - 1, 0), f, s] - plt.w[t+1, y, f, s] + (s + 1) * plt.ticksize / 2 - plt.ticksize * k); //Занесение значения 0 или 1 в политику лимитных ордеров if (gvtemp > gv) { gv = gvtemp; plt.thmkb[t, y, f, s] = i; plt.thmka[t, y, f, s] = k; } } } //Вычисление значения оператора L (без умножения на матричную часть) //plt.dt- шаг времени, plt.gamma - мера риска double lv = plt.w[t+1, y, f, s] + plt.dt * yr * Edp + plt.dt * Ls - plt.dt * plt.gamma * yr * yr * Edpp + plt.dt * gv;
return lv; }
//
//Вычисление матричной части выражения оператора L public void MatrixSolve() { //Дифференциальные матрицы D1,2 и матрица идентичности I. int j; double[,] D1 = new double[F, F]; double[,] D2 = new double[F, F]; double[,] I = new double[F, F];
//Заполняем матрицы на сетке F x F for (int i = 0; i < F; i++) { for (int j = 0; j < F; j++){ //обязательно необходимо приводить начальные значения. D1[i][j]=0; //может получиться так, что вместо 0 в элементе массива будет число D2[i][j]=0; // =1e-312, и эту ошибку потом очень непросто обнаружить, "эффект бабочки" if(i==j)I[i][j]=1; else I[i][j]=0; }; // int k = 0; if (i <= (F - 1) / 2) k = i; else k = i - 1;
D1[i, k] = -1 / dF; D1[i, k + 1] = 1 / dF;
if (i == 0) { D2[i, i + 1] = 1 / (dF * dF); D2[i, i] = -2 / (dF * dF); } else if (i == F - 1) { D2[i, i - 1] = 1 / (dF * dF); D2[i, i] = -2 / (dF * dF); } else { D2[i, i - 1] = 1 / (dF * dF); D2[i, i + 1] = 1 / (dF * dF); D2[i, i] = -2 / (dF * dF); }
double Ft = dF * i - Fmax;
//Вычисляем значения матричной части выражения оператора L //cft[1] - значение sigmaF из уравнения Орнштейна-Уленбека для Ft, //cft[0] - значение alfaF for (j = 0; j < F; j++) { rmatrix[i, j] = I[i, j] - 0.5*dt * cft[1] * cft[1] * D2[i, j] - dt * cft[0] * Ft * D1[i, j]; } } alglib.matinvreport rep; int info; //Инвертируем матрицу, используя стороннюю библиотеку alglib alglib.rmatrixinverse(ref rmatrix, out info, out rep); delete[,] D1; delete[,] D2; delete[,] I; }
только конг? или там везде шуршишь? в торги.. или ты или админ могут заругаться)))) нн ... да ладно... просто что то по бирже напиши)))) нн 14800 и выше вижу...
только конг? или там везде шуршишь? в торги.. или ты или админ могут заругаться)))) нн ... да ладно... просто что то по бирже напиши)))) нн 14800 и выше вижу...
только конг? или там везде шуршишь? в торги.. или ты или админ могут заругаться)))) нн ... да ладно... просто что то по бирже напиши)))) нн 14800 и выше вижу...
я уж давно улетела оттудова
а по бирже все норм лср уже 700 ломает
бакс 65)))) сломали.. но там надо 64,8 ломать конечно... лср поздравлямба))) я думал вышла уже и зашла в конг? а вышла только из гонконга.. куда зашла? на дивы,,,, что за страна? баба рая ожила с ЛОСЕФЕРМЫ)))) опросник...
в личку угадал значит..... вода 30.. завидовать тоже нечему))))) у меня вот +5 за окном и дождь.. и ветер до 20м/с.. пота нет))) пс. по бирже.. супреф лонг закрылся.... с утра открылся... хор день..
Внимание! Уважаемые посетители сайта mfd.ru, предупреждаем вас о следующем: ОАО Московская Биржа (далее – Биржа) является источником и обладателем всей или части указанной на настоящей странице Биржевой информации. Вы не имеете права без письменного согласия Биржи осуществлять дальнейшее распространение или предоставление Биржевой информации третьим лицам в любом виде и любыми средствами, её трансляцию, демонстрацию или предоставление доступа к такой информации, а также её использование в игровых, учебных и иных системах, предусматривающих предоставление и/или распространение Биржевой информации. Вы также не имеете права без письменного согласия Биржи использовать Биржевую информацию для создания Модифицированной информации предназначенной для дальнейшего предоставления третьим лицам или публичного распространения. Кроме того, вы не имеете права без письменного согласия Биржи использовать Биржевую информацию в своих Non-display системах.