Хотелось бы разобраться, какое количество контрактов можно себе позволить на определенную сумму денег.
К примеру, такая ситуация:
Базовое гарантийное обеспечение — 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 должно быть только при покупке по верхнему лимиту или продаже по нижнему.
Вообщем я запутался) или что-то не учел или пропустил очередные изменения в расчетах, но выходит, что ГО должно варьироваться в зависимости от положения текущей цены относительно расчетной, а по сути является всегда максимальным и никакой скидки нет.
Может кто-то объяснить/просветлить?)
ПосмотрИте здесь. Человек разложил все подробно
http://iwtkl.livejournal.com/21873.html
//+------------------------------------------------------------------+
//| YouBalanceProfitAndSetNewStopProfit.mq4 |
//| VadimVP |
//| poluyan@fxmail.ru |
/*
Покажет (при наличии открытых ордеров) Ваш Баланс и Профит на
указанном Вами ценовом уровне (при достижении ценой этого уровня),
и (по желанию) автоматически переместит StopLoss/TakeProfit
открытых ордеров на этот указанный Вами уровень (создаст общий для
все ордеров уровень фиксации прибыли или убытка).
Данный скрипт поможет узнать Вам, какой будет размер Вашего
баланса и профита (прибыли) при достижении ценой указанного
Вами уровня (т.е. посмотреть что ожидает Ваш баланс в будущем,
какова будет Ваша прибыль (или убыток), и сколько это процентов
от размера депозита).
Соответственно у Вас должны иметься открытые ордера на текущем
инструменте, иначе скрипт сообщит что открытых ордеров нет.
После запуска скипта появится мигающая линия и текстовое сообшение
на экране с сообщением «Баланс: **** Профит ***** ( **% от Depo)»
Двигая мигающую линию, установите ее на то ценовой уровень, где
вам интересено узнать размер баланса и профита при достижении ценой
этого уровня. Текстовое окно обновит информацию по данному уровню.
Эта же информация дублируется в левом верхнем углу графика. Если вам
текстовое окно мешает, можете его удалить или перетащить в другое
место. Либо измените его шрифт и цвет в тексте советника.
Чтобы прекратить работу скрипта, удалите мигающую линию.
После этого скрипт спросит, хотите ли вы установить новые уровни
Stop и Profit у открытых ордеров текущего инструмента.
Если выберете «Да» — скрипт изменить уровни закрытия у ордеров
таким образом, чтобы при достижении уровня цены мигающей линии
все ордера закрылись и Вы получили ту самую прибыль (убыток), что
показал Вам скрипт (на уровне цены мигающей линии).
То есть скрипт установит общий для всех открытых ордеров уровень
фиксации прибыли или убытка. Чтобы установить общим и уровень
прибыли, и уровень убытка, скрипт придется запускать дважды.
Сначала установите один уровень, потом второй (над текущей ценой
и под текущей ценой).
Скипт сообщит об успешности (неуспешности) изменений в Alert-окне.
Имейте ввиду, что новые установки Stop и Profit у открытых ордеров
соответствуют той прибыли (убытку) что показал вам скрипт, только
в случае если вы не добавляете и не удаляете ордера. Если ордера
после работы скрипта добавлялись/удалялись, то запустите скипт
вновь, чтобы актуализировать информацию и уровни.
Скрипт работает только с открытыми ордерами текущего инструмента.
Так как скрипту для работы необходимо наличие подключения
терминала к серверу — работать он будет только при наличии
подключения — иначе выдаст сообщение об отсутствии.
*/
//+------------------------------------------------------------------+
#property copyright «VadimVP»
#property link «poluyan@fxmail.ru»
#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);
}
2.) а это
всегда считал, что число д.б. целым (=reference) и независимым от принятых лимитов текущего Si
3.) если юзаешь квик, что отражается в форме подачи заявки?
сорри, лимиты указаны корректно
как вариант в брокерском риск-менеджменте специфические настройки по твоему счету, глянь внимательно регламент и все приложения, относящиеся к договору с броком
Использую терминал Альфа-директ от Альфа-банка, а пытался разобраться, как раз на основе данного материала http://iwtkl.livejournal.com/21873.html
Еще такая мысль, размер ГО теоретически может зависеть от типа заявки(по рынку или лимитированная) или это бред?
Кто торгует фьючерсом на индекс РТС, а у вас какое ГО?
В таблице «Клиентский портфель» добавлен расчет риск параметров для клиентских 1. счетов срочного рынка, не использующих Модуль единой денежной позиции. Для них в качестве кода фирмы указывается фирма срочного рынка, а параметр «Тип клиента» имеет значение «С». Фильтрация данных счетов доступна с помощью встроенного фильтра по признаку «Клиенты срочного рынка без ЕДП», либо с помощью табличного фильтра по колонке «Тип клиента». Цветовые настройки таких счетов возможны как на глобальном уровне (для всех таблиц), так и на уровне отдельной таблицы.
Для работы со срочным рынком в таблицу «Клиентский портфель» добавлены следующие параметры (специфичные для рынков фьючерсов и опционов):
Описание параметров приведено в п. 3.12 Раздела 3 Руководства пользователя QUIK.
Трансляция параметров «ГО поз», «ГО заяв» и «Вариационная маржа» расширена на счета срочного рынка
arqatech.com/ru/support/files/quik-workstation/