Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 833

 
Vladimir Karputov:

Кажется пропустили условие для открытии позиции : в каких пределах должен быть индикатор (или уровень выше или ниже которого должен быть индикатор) ...

если можно давайте пока опустим уровень в целях простоты)  , т.е. для открытия уровень стохастика не важен

 
gastinets:

если можно давайте пока опуситим уровень в целях простоты)  , т.е. для открытия уровень стохастика не важен

Может перенесём в отдельную тему - , что-то вроде "Советник по стохастику, позиции с отступом"?

 

давайте перенесем

мне сделать новую тему или вы сделаете?

 
gastinets:

давайте перенесем

мне сделать новую тему или вы сделаете?

Создайте пожалуйста тему сами в разделе: Автоматические торговые системы

 
Комментарии, не относящиеся к этой теме, были перенесены в "Вопросы от начинающих MQL4 MT4 MetaTrader 4".
 
Vladimir Karputov:

Я думаю можно всё сделать намного проще - в советнике порог на ЗАКРЫТИЕ ставите равным 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);
  }
//+------------------------------------------------------------------+
 
Pavel Nikiforov:

В общем сам разобрался, выбирать нужно через PositionGetSymbol:

Плохо разобрался. Выбирать на hadge счёте надо функцией PositionGetTicket(i) и затем проверять символ и магик.

Документация по MQL5: Торговые функции / PositionGetTicket
Документация по MQL5: Торговые функции / PositionGetTicket
  • www.mql5.com
Торговые функции / PositionGetTicket - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5