Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 180

 
Igor Makanu:

да, и я того же мнения, но не только истории и кол-ва индикаторных буферов - т.е. я опять на выделение памяти, если память МТ4 всю сожрал, то потом начинает подтупливать - видимо начинает освобождать участки памяти

Однозначно ответить смогут разработчики, но речь про MetaTrader 4, и тут ...

 
Alexander Fedosov:

А для чего какие-то вычисление в коде делать? 

не вычисления делайте - там топик не толковый был, а мне было интересно проверить что оптимизатор делает вот и набросал код

у себя так в коде добавьте:

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle=FileOpen("tst.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   FileSeek(handle,0,SEEK_END);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileWriteString(handle,DoubleToString(Value1),DoubleToString(Value2)+"\n");
      FileClose(handle);
     }
  }
//+------------------------------------------------------------------+
void OnTick()
  {
  }

т.е. пишите просто параметры оптимизации в файл, если зависнет, то в файле сумеете прочитать последний проход какие были параметры и время файла будет время "последнего вздоха" тестера

 
Artyom Trishkin:

Однозначно ответить смогут разработчики, но речь про MetaTrader 4, и тут ...

И тут.. ничего не изменится. Пользуемся тем, что есть.

 

Добрый день! Подскажите, торговая система открывает позицию только при открытии нового часового бара при определенных условиях. Необходимо сделать так, чтобы при закрытии позиции по стоп лоссу на текущем баре сделка вновь не открылась. Реализовал это я так :

if (OrdersTotal()==0 && ticket!=-1) // Открытых лотов нет но тикет существует

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob=iTime(NULL,PERIOD_H1,0); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}


В тестере стратегий повторные позиции перестали открываться, а при торговле в живую открылась позиция. Подскажите что не так?))

 
kmerlin:

Добрый день! Подскажите, торговая система открывает позицию только при открытии нового часового бара при определенных условиях. Необходимо сделать так, чтобы при закрытии позиции по стоп лоссу на текущем баре сделка вновь не открылась. Реализовал это я так :

if (OrdersTotal()==0 && ticket!=-1) // Открытых лотов нет но тикет существует

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob=iTime(NULL,PERIOD_H1,0); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}


В тестере стратегий повторные позиции перестали открываться, а при торговле в живую открылась позиция. Подскажите что не так?))

Оно?

 
Alexander Fedosov:

Оно?


не совсем. А что не так в моем варианте? основное условие это не возможность повторного входа на текущей часовой свече! Ведь довольно простое условие, что в нем не так и почему оно не работает ?

 
kmerlin:

не совсем. А что не так в моем варианте? основное условие это не возможность повторного входа на текущей свече! Ведь довольно простое условие, что в нем не так и почему оно не работает ?

if (OrdersTotal()==0 && ticket!=-1) // Открытых лотов нет но тикет существует

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob=iTime(NULL,PERIOD_H1,0); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}

А тикет какой выбрали в OrderSelect?

 
Alexander Fedosov:

А тикет какой выбрали в OrderSelect?

Тикет передается последний... При открытом ордере, открытие новых ордеров невозможно по системе и отложенных ордеров тоже не может быть. Так что последний тикет это последний ордер по стопу или профиту.
 
kmerlin:
Тикет передается последний... При открытом ордере, открытие новых ордеров невозможно по системе и отложенных ордеров тоже не может быть. Так что последний тикет это последний ордер по стопу или профиту.

Как вы передаете тикет последнего ордера?  

И OrdersTotal() передает обще количество открытых и отложенных ордеров.

Вот новый бар текущего таймфрейма.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
   static datetime prevtime=0;
   if(prevtime==Time[0])
      return(false);
   else
     {
      prevtime=Time[0];
      return(true);
     }
  }
 
Alexander Fedosov:

Как вы передаете тикет последнего ордера?  

И OrdersTotal() передает обще количество открытых и отложенных ордеров.

Вот новый бар текущего таймфрейма.

Тикет обьявлен глобальной переменной. При покупке или продаже передается тикет. В моей системе не может быть открыто несколько ордеров, только один и отложенных тоже не может быть. или открыта позиция или нет. Поэтому последний тикет это я так понимаю ордер закрытый или по профиту или по стопу.

ок, голову гудит.. завтра обдумаю еще раз и ваш совет

Причина обращения: