Вот только на неттинге считать открытые позиции бессмысленно - на неттинге всегда может существовать по символу только одна позиция.
к сожалению Ваш код только для хеджа,
а нужно одна функция и на хедж и не неттинг
на 2 счета одна функция, как например можно сделать одну функцию на закрытие(неважно какой счет - функция одна)
а вот например если нужно :
открыть максимально 5 сделок
на хеджевом вообще без вопросов - и Ваша функция помогает - я ее опубликовал в 2 и 1 посту как единственное решение - 5 сделок = 5 позиций . гуд, все как в мт4
а вот на неттинговом счете - позиция 1 а сделок в ней может быть сколько угодно, так вот если в задаче сказано максимум 5 сделок должно быть открыто - тогда только перебором этих сделок в истории счета.
в общем в втором посте сделал функцию по явному признаку, в зависимости от того, какой тип счета: такая функция и работает.
Но все же. мне непонятно, почему при хеджевом типе счета функция:
int CurrentPositionTotalDeals(string comment="",string symb="")
{
if(symb=="")symb=_Symbol;
int total =0; // Всего сделок в списке выбранной историиint count =0; // Счетчик сделок по символу позицииstring deal_symbol =""; // символ сделки//--- Если история позиции полученаPositionSelect(symb);
long ID=PositionGetInteger(POSITION_IDENTIFIER);
if(HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))
{
//--- Получим количество сделок в полученном списке
total=HistoryDealsTotal();
//--- Пройдем по всем сделкам в полученном спискеfor(int i=0; i<total; i++)
{
//--- Получим символ сделки
deal_symbol=HistoryDealGetString(HistoryDealGetTicket(i),DEAL_SYMBOL);
//--- Если символ сделки и текущий символ совпадают, увеличим счетчикif(deal_symbol==symb && (StringFind(HistoryDealGetString(HistoryDealGetTicket(i),DEAL_COMMENT),comment)!=-1 || comment==""))
{
count++;
}
}
}
//---return(count);
}
работает!!! но подглючивает, т.е. не всегда считает количество сделок правильно. вот в чем вопрос, и этот вопрос скорее к администрации, почему так?
ведь в справке написано:
При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций. В этом случае, PositionSelect выберет позицию с наименьшим тикетом.
но по факту не так. , эта функция считает количество позиций неправильно, и я вот не могу понять то ли я в коде что-то упустил, то ли что-то здесь не так.
Вы определитесь, что Вы хотите делать: считать позиции по символу или считать сделки по символу? Так как непонятно: название темы "Количество ОТКРЫТЫХ ПОЗИЦИЙ..."
Вы определитесь, что Вы хотите делать: считать позиции по символу или считать сделки по символу? Так как непонятно: название темы "Количество ОТКРЫТЫХ ПОЗИЦИЙ..."
в данном случае речь идет о типе счета:
на неттинговом счете это количество сделок, потому что на неттинговом счете 1 позиция = Х сделок
на хеджевом счете это количество позиций, потому, что 1 позиция = 1 позиция.
вот смотрите код:
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---Comment(CurrentPositionTotalDeals("",Symbol()));
}
//+------------------------------------------------------------------+int CurrentPositionTotalDeals(string comment="",string symb="")
{
if(symb=="")symb=_Symbol;
int total =0; // Всего сделок в списке выбранной историиint count =0; // Счетчик сделок по символу позицииstring deal_symbol =""; // символ сделки//--- Если история позиции полученаPositionSelect(symb);
long ID=PositionGetInteger(POSITION_IDENTIFIER);
if(HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))
{
//--- Получим количество сделок в полученном списке
total=HistoryDealsTotal();
//--- Пройдем по всем сделкам в полученном спискеfor(int i=0; i<total; i++)
{
//--- Получим символ сделки
deal_symbol=HistoryDealGetString(HistoryDealGetTicket(i),DEAL_SYMBOL);
//--- Если символ сделки и текущий символ совпадают, увеличим счетчикif(deal_symbol==symb && (StringFind(HistoryDealGetString(HistoryDealGetTicket(i),DEAL_COMMENT),comment)!=-1 || comment==""))
{
count++;
}
}
}
//---return(count);
}
по идее должно выдавать количество позиций по символу
запускаем на графике, открываем 1 - все ок, 2 - все ок, 3 позицию открываем и видим:
открыто позиций 3 , а комментарий на графике показывает = 2
открываем 7 позиций, а функция считает что их только 4
при этом на НЕТТИНГОВОМ СЧЕТЕ, эта функция работает нормально: было открыто 7 сделок, 7 и отображает
мы сейчас говорим о пользе мт5 и мт4? или все таки о том как использовтаь 1 функцию на неттинговом и хеджевом счете в мт5?
Жирным выделил, о чем говорим. Вы только так и не написали, что хотите узнать? На сабж-вопрос ответил.
Я хотел узнать как вы вычисляет количество позиций открытых на счёте по текущему символу на 2 счетах.
Я хотел узнать как вы вычисляет количество позиций открытых на счёте по текущему символу на 2 счетах.
Вот только на неттинге считать открытые позиции бессмысленно - на неттинге всегда может существовать по символу только одна позиция.
ТакНигде не делается проверка на тип счета.
на мт4 меня не интересует, я говорил про МТ5
если в вопросе есть понятие хедж и неттинг - значит вопрос про мт5
Вот только на неттинге считать открытые позиции бессмысленно - на неттинге всегда может существовать по символу только одна позиция.
к сожалению Ваш код только для хеджа,
а нужно одна функция и на хедж и не неттинг
на 2 счета одна функция, как например можно сделать одну функцию на закрытие(неважно какой счет - функция одна)
а вот например если нужно :
открыть максимально 5 сделок
на хеджевом вообще без вопросов - и Ваша функция помогает - я ее опубликовал в 2 и 1 посту как единственное решение - 5 сделок = 5 позиций . гуд, все как в мт4
а вот на неттинговом счете - позиция 1 а сделок в ней может быть сколько угодно, так вот если в задаче сказано максимум 5 сделок должно быть открыто - тогда только перебором этих сделок в истории счета.
в общем в втором посте сделал функцию по явному признаку, в зависимости от того, какой тип счета: такая функция и работает.
Но все же. мне непонятно, почему при хеджевом типе счета функция:
работает!!! но подглючивает, т.е. не всегда считает количество сделок правильно. вот в чем вопрос, и этот вопрос скорее к администрации, почему так?
ведь в справке написано:
При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций. В этом случае, PositionSelect выберет позицию с наименьшим тикетом.
но по факту не так. , эта функция считает количество позиций неправильно, и я вот не могу понять то ли я в коде что-то упустил, то ли что-то здесь не так.
Вы определитесь, что Вы хотите делать: считать позиции по символу или считать сделки по символу? Так как непонятно: название темы "Количество ОТКРЫТЫХ ПОЗИЦИЙ..."
Вы определитесь, что Вы хотите делать: считать позиции по символу или считать сделки по символу? Так как непонятно: название темы "Количество ОТКРЫТЫХ ПОЗИЦИЙ..."
в данном случае речь идет о типе счета:
на неттинговом счете это количество сделок, потому что на неттинговом счете 1 позиция = Х сделок
на хеджевом счете это количество позиций, потому, что 1 позиция = 1 позиция.
вот смотрите код:
по идее должно выдавать количество позиций по символу
запускаем на графике, открываем 1 - все ок, 2 - все ок, 3 позицию открываем и видим:
открыто позиций 3 , а комментарий на графике показывает = 2
открываем 7 позиций, а функция считает что их только 4
при этом на НЕТТИНГОВОМ СЧЕТЕ, эта функция работает нормально: было открыто 7 сделок, 7 и отображает