Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 118

 
drems:
Подскажите пожалуйста, как нибудь можно коментарии к ордену установить по умолчанию???

Что за "орден"? За какие заслуги? Куда и зачем ему комментарий?
 
hoz:

У меня тут что-то на простом моменте, головняк. Есть функция, для поиска ордеров.

t - счётчик всех ордеров.

p - счётчик отложенных ордеров.

Вызываю из старта:

По факту, при распринтовке, даже когда нет ордеров вот что видим(даже когда ордеров нет, печатает типа они есть...):

Это как же так?


Ну вот так...
if (OrderType() > 1)
      {
          p++;
      }
      t++;
Что у нас тут? Если тип ордера больше OP_SELL, то увеличиваем p

А не подумали, что тип ордера может быть ещё и больше пяти? Конкретно - 6. Это неторговое изменение депозита

 
artmedia70:
Ну вот так...

А не подумали, что тип ордера может быть ещё и больше пяти? Конкретно - 6. Это неторговое изменение депозита



Нет. Первый раз слышу. Где об этом говорится?
 
FAQ:
депозит = тип 6

Хм. Тип ордера = депозит!? Это что такое?
 
artmedia70:
Ну вот так...

А не подумали, что тип ордера может быть ещё и больше пяти? Конкретно - 6. Это неторговое изменение депозита



А почему именно 6,ведь размер или количество ордеров можно прописать самостоятельно в советник.
 
hoz:

Хм. Тип ордера = депозит!? Это что такое?

все снятия и заливка денех на счет проходят под этим номером
 
Profitov:

А почему именно 6,ведь размер или количество ордеров можно прописать самостоятельно в советник.

О чём речь понимаете? Речь не о количестве ордеров, а об их типе. Так вот: ордер, имеющий тип 6 - это неторговое изменение депозита.
 
hoz:

Нет. Первый раз слышу. Где об этом говорится?

Это недокументированные данные.
 
FAQ:

все снятия и заливка денех на счет проходят под этим номером


Хм. И каким же образом данные номер может повлиять на сбор статистики об ордерах?

artmedia70:

Это недокументированные данные.

Замечательно! Самое интересное, что кто-то об этом знает как ни странно. Как можно было об этом догадаться?

artmedia70:

О чём речь понимаете? Речь не о количестве ордеров, а об их типе. Так вот: ордер, имеющий тип 6 - это неторговое изменение депозита.

Если тестируется сова в демо, то как может учесться данный ордер? Т.е. тот баланс, который изначально даётся на демо - это и будет то самое.. искомое ОНО? А в реале - уже, то что вывел и положил на депо, верно?

 
Sepulca:

Вот так должно работать, сам не проверял, т.к. терминал пока занят оптимизацией другого советника

Добрый день!

Попробовал вставить Ваш код, в шаблон из учебника. Необходимо, чтобы открывалась только одна сделка, данный шаблон настроен только на одну позицию.

Переменную ticket назвал по другому tickett, так как в шаблоне уже есть такая и сделал ее статической, чтобы критерий для выхода получал от нее данные, если позиция остается на следующий день.

Все хорошо, но только возникла проблема зацикливания. Например, в тестере советник выходит из сделки по тейк профиту или close sell, а критерий для входа все еще актуален и получается, что советник постоянно открывает и тут же закрывает позицию.

Данную проблему раньше решал добавление переменной static datetime t, но стоит сделать так как

 if(Maximum>0 && Flag) {
   signal = Maximum - Bid;    
   if (signal > 0.005 ) { // к примеру если ниже максимума на 12 пунктов, в этом случае откроем SELL 
      Opn_S = true;
      tickett= Opn_S; 
      t=Time[0];  
      if(tickett>=0) Flag=false;// Ордер открылся, сегодня больше не открываем.       
   }  
}
 
if(tickett>=0) 
    {
double stop = iHigh(Symbol(),Period(),0) - iHigh(Symbol(),Period(),1);
if (stop > 0.0012)
     {
       if (Time[0]>t)
            {
             Cls_S=true;   
             tickett=-1;          
            }
      }
     }

перестает срабатывать close sell.

Так работает, но зацикливается:

#define magic 123456789
StartHour=14;
StartMinute=1;// Время 08:01
StopHour=16;
StopMinute=30; // Время 23:58
StartTime=StartHour*60+StartMinute;
StopTime=StopHour*60+StopMinute;
static int tickett=-1;
static double Maximum=-1;
static datetime t;
if(StopTime<=StartTime) {Print("ERROR: Неправильные времена"); return(0);}
 CurrentMinutesFromDayStart=Hour()*60+Minute();// Текущее время в минутах от начала дня
 datetime td=iTime(Symbol(),PERIOD_D1,0);// Время открытия дневного бара в секундах от 01.01.1970
 if(CurrentMinutesFromDayStart<StartTime) {Maximum=-1;Flag=true;}// Если StartTime еще не настало, то после StopTime нужно пересчитать Maximum и можно открывать ордер
if(CurrentMinutesFromDayStart>StopTime && Maximum<0) {// если максимум ещё не посчитан
  datetime ts=td+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
  start= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
  ts=td+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
  count= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
  count=start-count;// Сколко баров длится временной интервал
  Maximum=iHigh(Symbol(),PERIOD_M1,iHighest(Symbol(),PERIOD_M1,MODE_HIGH,count,start));//Находим максимум на заданном временном интервале
 }
 if(Maximum>0 && Flag) {
   signal = Maximum - Bid;    
   if (signal > 0.005 ) { // к примеру если ниже максимума на 12 пунктов, в этом случае откроем SELL 
      Opn_S = true;
      tickett= Opn_S;   
      if(tickett>=0) Flag=false;// Ордер открылся, сегодня больше не открываем.       
   }  
}
 
if(tickett>=0) 
    {
double stop = iHigh(Symbol(),Period(),0) - iHigh(Symbol(),Period(),1);
if (stop > 0.0012)
            {
             Cls_S=true;   
             tickett=-1;          
            }
      }

В чем может быть проблема? Третий день голову ломаю, перепробовал все, что пришло на ум, но в mql не особо силен.

Советник прикрепляю, не удается весь текст, разместить.

Файлы:
svhrvrsa.mq4  14 kb
Причина обращения: