Кажется пропустили условие для открытии позиции : в каких пределах должен быть индикатор (или уровень выше или ниже которого должен быть индикатор) ...
если можно давайте пока опустим уровень в целях простоты) , т.е. для открытия уровень стохастика не важен
Я думаю можно всё сделать намного проще - в советнике порог на ЗАКРЫТИЕ ставите равным 100, а вес сигналу даёте 0.5 - таким образом сигнал с весом 0.5 НИКОГДА не преодолеет порог 100
Объясните пожалуйста в чем косяк. По задумке функция должна перебирать открытые позиции и подсчитывать количество с заданным магиком. Но по факту из всего списка выбирает только одну, открытую другим советником с одним и тем же тикетом и магиком, соответственно count всегда =0.
int OpenPositions()//проверка открытых позиций
{
int count=0;
for(int z=PositionsTotal()-1; z>=0; z --)
{
if(!PositionSelect(_Symbol))
{
Print(__FUNCSIG__" позиция не выбрана ",GetLastError()); continue;
}
long ticket = PositionGetInteger(POSITION_TICKET);
Print(__FUNCSIG__" ТИКЕТ ", IntegerToString(ticket));
ulong myMN=PositionGetInteger(POSITION_MAGIC);
Print(__FUNCSIG__" МАГИК ", IntegerToString(myMN));
if(myMN==Magic)
count++;
}
return(count);
}
Pavel Nikiforov: Объясните пожалуйста в чем косяк. По задумке функция должна перебирать открытые позиции и подсчитывать количество с заданным магиком. Но по факту из всего списка выбирает только одну, открытую другим советником с одним и тем же тикетом и магиком, соответственно count всегда =0.
В общем сам разобрался, выбирать нужно через PositionGetSymbol:
//+------------------------------------------------------------------+int OpenPositions()//проверка открытых позиций по Magic number
{
int count=0;
for(int z=PositionsTotal()-1; z>=0; z --) // Перебор всех позиций
{
if(PositionGetSymbol(z)!=_Symbol) // Найдена позиция с заданным символом
{
Print(__FUNCSIG__" позиция не выбрана ",GetLastError()); continue;
}
long ticket = PositionGetInteger(POSITION_TICKET);
Print(__FUNCSIG__" ТИКЕТ ", IntegerToString(ticket));
ulong myMN=PositionGetInteger(POSITION_MAGIC);
Print(__FUNCSIG__" МАГИК ", IntegerToString(myMN));
if(myMN==Magic)
count++;
}
return(count);
}
//+------------------------------------------------------------------+
Кажется пропустили условие для открытии позиции : в каких пределах должен быть индикатор (или уровень выше или ниже которого должен быть индикатор) ...
если можно давайте пока опустим уровень в целях простоты) , т.е. для открытия уровень стохастика не важен
если можно давайте пока опуситим уровень в целях простоты) , т.е. для открытия уровень стохастика не важен
Может перенесём в отдельную тему - , что-то вроде "Советник по стохастику, позиции с отступом"?
давайте перенесем
мне сделать новую тему или вы сделаете?
давайте перенесем
мне сделать новую тему или вы сделаете?
Создайте пожалуйста тему сами в разделе: Автоматические торговые системы
Я думаю можно всё сделать намного проще - в советнике порог на ЗАКРЫТИЕ ставите равным 100, а вес сигналу даёте 0.5 - таким образом сигнал с весом 0.5 НИКОГДА не преодолеет порог 100
Спасибо! Вроде бы заработало!
Объясните пожалуйста в чем косяк. По задумке функция должна перебирать открытые позиции и подсчитывать количество с заданным магиком. Но по факту из всего списка выбирает только одну, открытую другим советником с одним и тем же тикетом и магиком, соответственно count всегда =0.
В общем сам разобрался, выбирать нужно через PositionGetSymbol:
В общем сам разобрался, выбирать нужно через PositionGetSymbol:
Плохо разобрался. Выбирать на hadge счёте надо функцией PositionGetTicket(i) и затем проверять символ и магик.