Блог им. korsar421

Как правильно рассчитать гарантийное обеспечение на фьючерс РТС?

Хотелось бы разобраться, какое количество контрактов можно себе позволить на определенную сумму денег.
К примеру, такая ситуация: 
Базовое гарантийное обеспечение — 13 171,60р.;
Расчетная цена последнего клиринга — 103 020;
Лимит — 5160;
Цена заявки — 102 700;
Стоимость шага цены — 11,39530;
Радиус валютного курса — 12,00385.

Если я правильно понял, исходя из изменений в расчете ГО от 07.09.15, когда покупка совершается ниже расчетной цены, то формула подсчета ГО будет:
2L — (РЦ — Ц).

Если же совершается продажа ниже расчетной цены, то:
(РЦ — Ц) + 2L.

Исходя из этого, ГО в лонг и ГО в шорт должно быть:
1) (2L-(РЦ-Ц))*MinStepPrice/MinStep*(1+R/100) = 12 763,17 руб.(скидка при работе против тренда)
2) ((РЦ — Ц)+2L)*MinStepPrice/MinStep*(1+R/100) = 13 580 руб.(штраф при работе по тренду)

Имея на счету 15 620 руб. открыть позицию в 1 контракт, ни в лонг, ни в шорт, не представляется возможным (нехватка по лимитам). И только при наличии 20 000 руб. получается купить или продать 1 контракт, т.е. реальное ГО выходит 19757,4 руб.(3L). Опять же исходя из изменений от 07.09, ГО размером 3L должно быть только при покупке по верхнему лимиту или продаже по нижнему. 

Вообщем я запутался) или что-то не учел или пропустил очередные изменения в расчетах, но выходит, что ГО должно варьироваться в зависимости от положения текущей цены относительно расчетной, а по сути является всегда максимальным и никакой скидки нет.
Может кто-то объяснить/просветлить?)
    ★16
    14 комментариев
    блин — в первый момент прочитал «Замироточенко»;)

    ПосмотрИте здесь. Человек разложил все подробно
    http://iwtkl.livejournal.com/21873.html

    плечи тебя доканают в купе с этим фьючем.
    avatar
    Надо в квике сделать скрипт, чтоб в таблицу выводил реальное Го, а не транслируемое. Это не так сложно
    avatar
    Мурен(а), на мт4

    //+------------------------------------------------------------------+
    //| YouBalanceProfitAndSetNewStopProfit.mq4 |
    //| VadimVP |
    //| [email protected] |
    /*
    Покажет (при наличии открытых ордеров) Ваш Баланс и Профит на
    указанном Вами ценовом уровне (при достижении ценой этого уровня),
    и (по желанию) автоматически переместит StopLoss/TakeProfit
    открытых ордеров на этот указанный Вами уровень (создаст общий для
    все ордеров уровень фиксации прибыли или убытка).

    Данный скрипт поможет узнать Вам, какой будет размер Вашего
    баланса и профита (прибыли) при достижении ценой указанного
    Вами уровня (т.е. посмотреть что ожидает Ваш баланс в будущем,
    какова будет Ваша прибыль (или убыток), и сколько это процентов
    от размера депозита).

    Соответственно у Вас должны иметься открытые ордера на текущем
    инструменте, иначе скрипт сообщит что открытых ордеров нет.

    После запуска скипта появится мигающая линия и текстовое сообшение
    на экране с сообщением «Баланс: **** Профит ***** ( **% от Depo)»
    Двигая мигающую линию, установите ее на то ценовой уровень, где
    вам интересено узнать размер баланса и профита при достижении ценой
    этого уровня. Текстовое окно обновит информацию по данному уровню.
    Эта же информация дублируется в левом верхнем углу графика. Если вам
    текстовое окно мешает, можете его удалить или перетащить в другое
    место. Либо измените его шрифт и цвет в тексте советника.

    Чтобы прекратить работу скрипта, удалите мигающую линию.

    После этого скрипт спросит, хотите ли вы установить новые уровни
    Stop и Profit у открытых ордеров текущего инструмента.
    Если выберете «Да» — скрипт изменить уровни закрытия у ордеров
    таким образом, чтобы при достижении уровня цены мигающей линии
    все ордера закрылись и Вы получили ту самую прибыль (убыток), что
    показал Вам скрипт (на уровне цены мигающей линии).

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

    Скипт сообщит об успешности (неуспешности) изменений в Alert-окне.

    Имейте ввиду, что новые установки Stop и Profit у открытых ордеров
    соответствуют той прибыли (убытку) что показал вам скрипт, только
    в случае если вы не добавляете и не удаляете ордера. Если ордера
    после работы скрипта добавлялись/удалялись, то запустите скипт
    вновь, чтобы актуализировать информацию и уровни.

    Скрипт работает только с открытыми ордерами текущего инструмента.

    Так как скрипту для работы необходимо наличие подключения
    терминала к серверу — работать он будет только при наличии
    подключения — иначе выдаст сообщение об отсутствии.

    */
    //+------------------------------------------------------------------+
    #property copyright «VadimVP»
    #property link «[email protected]»
    #include <WinUser32.mqh>
    //***********************************************************

    extern color clr = Red; // Цвет сообщения на экране (Баланс и Профит)

    extern int font = 12; // Размер шрифта сообщения на экране (Баланс и Профит)

    double STL = 0;
    int iii = 0;
    double lots = 0;
    string res, res1, res2;
    int i=0;

    //+------------------------------------------------------------------+
    //| script program start function |
    //+------------------------------------------------------------------+
    int init() {linebye();return(0);}
    int deinit(){Comment (" ");ObjectDelete («10»);ObjectDelete («Label»);return(0);}

    int start() {
    if (IsConnected()) {
    if (ObjectFind(«Label») == (-1)) {linebye();}
    if (ObjectFind(«10») == (-1)) {ObjectCreate («10»,OBJ_TEXT,0,Time[WindowBarsPerChart( )/3], WindowPriceMax(0) );
    ObjectSetText(«10», DoubleToStr (Close[4],4), font, «Arial», clr);}

    while (ObjectFind(«Label»)!=(-1) ) {
    STL = ObjectGet(«Label», 1); text();
    Comment("\n"+«Значение линии: » +DoubleToStr(STL,Digits)+"\n"
    + «Суммарный лот: » + DoubleToStr(lots(),2)+ "\n"+ «Прибыль/убыток на уровне линии: » + res1
    + " и размер баланса: " + res +"\n"
    + «Для прекращения работы скрипта удалите мерцающую линию „);

    if (iii == 5) {Sleep (30); ObjectSet( “Label», 6, Blue); WindowRedraw( );} else Sleep (30);
    if (iii == 10) {Sleep (30); ObjectSet( «Label», 6, White); WindowRedraw( );} else Sleep (30);
    if (iii == 10) iii = 0; iii = iii+1;
    }
    if (lots() != 0) {
    if (MessageBox (" Установить уровень закрытия ордеров по цене мигающей линии??? ",«Скрипт интересуется:»,1)==1) startset();
    }
    }
    else MessageBox («Нет соединения с сервером!!!»," Скрипт сообщает:",0x00000000);
    return(0);
    }
    //+------------------------------------------------------------------+
    int linebye() {// Рисуем линию (которая мигает)
    ObjectDelete( «Label»);
    ObjectCreate( «Label», OBJ_HLINE, 0, 0, (Bid-Point*(MarketInfo(Symbol(), MODE_STOPLEVEL))) );
    ObjectSet( «Label», 6, White); ObjectSet( «Label», 8, 2); WindowRedraw( ) ;
    return(0); }
    //+------------------------------------------------------------------+


    string text() {

    if (funkprice() != 0)
    {res = DoubleToStr ((AccountBalance( ) — (((STL — funkprice())/Point)*MarketInfo(Symbol(), MODE_TICKVALUE)*lots()*(-1))),0);
    res1 = DoubleToStr (( (((STL — funkprice())/Point)*MarketInfo(Symbol(), MODE_TICKVALUE)*lots())),1);
    res2 = DoubleToStr ( (100*(((STL — funkprice())/Point)*MarketInfo(Symbol(), MODE_TICKVALUE)*lots()))/AccountBalance(),2);}
    else {res = " Суммарный лот = 0! "; res1 = ""; res2 = "";}

    if (((((STL — funkprice())/Point)*MarketInfo(Symbol(), MODE_TICKVALUE)*lots()))>0) clr = Blue; else clr = Red;


    ObjectSetText(«10»," Баланс: "+res+" "+AccountCurrency( )+", Профит: "+res1+" "+AccountCurrency( )+" ( "+res2+"% от Depo ) ", font, «Arial», clr);
    WindowRedraw( ) ;
    return(0); }
    //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    double funkprice() {

    double price=0;
    if (lots()!=0)
    {
    if (lots()>0) price = MarketInfo(Symbol(),MODE_BID) — ((symbolprofit()/(MarketInfo(Symbol(), MODE_TICKVALUE)*lots()))*Point);
    if (lots()<0) price = MarketInfo(Symbol(),MODE_ASK) — ((symbolprofit()/(MarketInfo(Symbol(), MODE_TICKVALUE)*lots()))*Point);
    }
    return (price); }

    //*******************************************
    int startset() { int kol=0; int kolOK=0; int i=0; double ilots=0;
    for (i=0; i<OrdersTotal(); i++)
    {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
    if (OrderSymbol()!=Symbol()) continue;
    if (OrderType()==OP_BUY)
    {
    ilots=ilots+OrderLots();
    kol=kol+1;
    }
    if (OrderType()==OP_SELL)
    {
    ilots=ilots-OrderLots();
    kol=kol+1;
    }
    }
    //-----
    Alert ("!!! Пожалуйста дождитель окончания работы скрипта!");
    int resi = 0;
    for (i=0; i<OrdersTotal(); i++)
    {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
    if (OrderSymbol()!=Symbol()) continue;

    if (STL>Ask)
    { if (OrderType()==OP_BUY) {if (STL == OrderTakeProfit()) resi=resi+1; else { if (OrderModify(OrderTicket(),0,OrderStopLoss(),STL,0,CLR_NONE)) resi = resi+1;} }
    if (OrderType()==OP_SELL){if (STL == OrderStopLoss()) resi=resi+1; else { if ( OrderModify(OrderTicket(),0,STL,OrderTakeProfit(),0,CLR_NONE)) resi = resi+1;} } }
    if (STL<Bid)
    { if (OrderType()==OP_BUY) {if (STL == OrderStopLoss()) resi=resi+1; else { if ( OrderModify(OrderTicket(),0,STL,OrderTakeProfit(),0,CLR_NONE)) resi = resi+1;} }
    if (OrderType()==OP_SELL){if (STL == OrderTakeProfit()) resi=resi+1; else { if (OrderModify(OrderTicket(),0,OrderStopLoss(),STL,0,CLR_NONE)) resi = resi+1;} } }

    }
    Alert ("***************************************************");
    if (kol==resi) Alert («Все ордера успешно изменены! ОК!»); else Alert ("!!! Внимание!!! Не удалось изменить — " +(kol-resi)+ " ордера из "+kol+" имеющихся");
    Alert ("************ информация от скрипта ************");

    return(0); }

    double lots()
    {
    double sumlots = 0;
    for (i=0; i<OrdersTotal(); i++)
    {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
    if (OrderSymbol()!=Symbol()) continue;
    if (OrderType()==OP_BUY)
    {
    sumlots=sumlots+OrderLots();
    }
    if (OrderType()==OP_SELL)
    {
    sumlots=sumlots-OrderLots();
    }
    }
    return(sumlots);
    }

    //**************************
    double symbolprofit() // profit по ордерам текущего инструмента (без свопов и комиссий)
    {
    double sprofit = 0;
    for (i=0; i<OrdersTotal(); i++)
    {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
    if (OrderSymbol()!=Symbol()) continue;
    sprofit = sprofit + OrderProfit( );
    }
    return(sprofit);
    }

    avatar
    vv mm,  через мт4 нельзя торговать на фортс, не так ли?
    avatar
    Афтар,  1.) откуда это  
    ? (2L-(РЦ-Ц))*MinStepPrice/MinStep*(1+R/100)
    //по дефолту скидка в Сценарии Лонга ниже РЦ ГО curr=минБГО)

    2.) а это
    Радиус валютного курса — 12,00385.

    всегда считал, что число д.б. целым (=reference) и независимым от принятых лимитов текущего Si

    3.) если юзаешь квик, что отражается в форме подачи заявки?

    сорри, лимиты указаны корректно 
    avatar
    грубо, расчет на сценарий «по тренду» верный - 
    как вариант в брокерском риск-менеджменте специфические настройки по твоему счету, глянь внимательно регламент и все приложения, относящиеся к договору с броком
    avatar
    Спасибо, документы связанные с брокером внимательно проверю.
    Использую терминал Альфа-директ от Альфа-банка, а пытался разобраться, как раз на основе данного материала http://iwtkl.livejournal.com/21873.html

    Еще такая мысль, размер ГО теоретически может зависеть от типа заявки(по рынку или лимитированная) или это бред?
    Кто торгует фьючерсом на индекс РТС, а у вас какое ГО?
    Алексей Змитроченко, не бред, по рынку как раз три лимита. совсем упустил этот момент. пруфов сходу нет возможности кинуть, но чувство как раз это и указывалось в файлике с пояснениями нововведений от 7.9.15
    avatar
    forum.quik.ru/forum1/topic908/?PAGEN_1=2 тут тоже это обсуждали.
    avatar
    В версии 7.2 добавили функционал. 
    В таблице «Клиентский портфель» добавлен расчет риск параметров для клиентских 1. счетов срочного рынка, не использующих Модуль единой денежной позиции. Для них в качестве кода фирмы указывается фирма срочного рынка, а параметр «Тип клиента» имеет значение «С». Фильтрация данных счетов доступна с помощью встроенного фильтра по признаку «Клиенты срочного рынка без ЕДП», либо с помощью табличного фильтра по колонке «Тип клиента». Цветовые настройки таких счетов возможны как на глобальном уровне (для всех таблиц), так и на уровне отдельной таблицы. 
    Для работы со срочным рынком в таблицу «Клиентский портфель» добавлены следующие параметры (специфичные для рынков фьючерсов и опционов): 

    Полное наименование столбца / Сокращенное наименование столбца
    Лимит открытых позиций на начало дня / ЛимОткрПозНачДня 
    Лимит открытых позиций / ЛимОткрПоз 
    Планируемые чистые позиции / ПланЧистПоз 
    Текущие чистые позиции / ТекЧистПоз 
    Накопленная вариационная маржа / НакопВарМаржа 
    Вариационная маржа по итогам промклиринга / ВарМаржаПромклир. 
    Ликвидационная стоимость опционов / ЛиквСтоимОпционов 
    Сумма активов на срочном рынке / СумАктивовНаСрчРынке 
    Полная стоимость портфеля / ПолнСтоимПортфеля 
    Текущая задолженность на срочном рынке / ТекЗадолжНаСрчРынке 
    Достаточность средств / Дост. Средств 
    Достаточность средств (под открытые позиции) / Дост. Средств (ОткрПоз) 
    Коэффициент ликвидности ГО / КоэффЛикв ГО 
    Ожидаемый коэффициент ликвидности ГО / Ожид. КоэффЛикв ГО 
    Cash Leverage / Cash Leverage 
    Накопленный доход / НакопДоход 
    Тип позиции на срочном рынке / ТипПозНаСрчРынке 

    Описание параметров приведено в п. 3.12 Раздела 3 Руководства пользователя QUIK.
    Трансляция параметров «ГО поз», «ГО заяв» и «Вариационная маржа» расширена на счета срочного рынка


    arqatech.com/ru/support/files/quik-workstation/
    avatar
    Всем спасибо за помощь, теперь всё стало на свои места. Если открывать позиции по рынку, то ГО будет максимальным, а те формулы, что даёт биржа действительны только для лимитников)
    Я не сталкивался с проблемой, т.к. тестирую систему. но благодаря тебе решил подготовиться. В квике можно увидеть, сколько ГО нужно при выставлении заявки: Но работает только в «quik7 7.11.1.5. в ранних версиях не работает
    avatar

    UPDONW
    Новый дизайн