Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2532

 

Здравствуйте! Могли бы подсказать, как реализовать следующую задачу: Цена пересекает 5-три перечную SMA. High и low бара,  который пересек должны быть выше МА. И если у следующего бара после пересечения high будет меньше и при этом он выше МА, то ставится значок. И значки продолжают ставиться до тех пор пока бар не пробьет хай предыдущего бара или произойдет повторное пересечение МА. Задача вроде бы простая, но у меня возникла проблема в следующим: Как после пересечения МА ставить значки на всех барах у которых хай меньше предыдущего и при этом бары выше МА? 

 

Здравствуйте!
Подскажите пожалуйста эстетичное решение, чтобы во внешнем коде высчитывать среднее значение ATR100 за 50 свечей и потом данное значение использовать в основном коде.

Примерно понимаю, что внешний код должен выглядеть как-то так:

double         iATRBuffer[];
int    handle;

double avgATR;

double sumATR=0;


handle=iATR(Symbol(),Period(),100);

CopyBuffer(handle ,0,0,60, iATRBuffer);

for i=1; i<=51; i++{

sumATR+= iATRBuffer[i];

}

avgATR =  sumATR/50;

return avgATR;
 
Всем привет. Подскажите команды для работы с пуктами. Допустим, если цена поднялась на 100 пунктов -- делаем то, а если поднялась на 200 -- другое действие
 
Dojkged #:
Всем привет. Подскажите команды для работы с пуктами. Допустим, если цена поднялась на 100 пунктов -- делаем то, а если поднялась на 200 -- другое действие

Нет никаких специальных команд для работы с пунктами. Есть операторы присваивания и сравнения. Создаешь глобальную или статическую переменную (такую которая не будет инициализироваться на каждом тике), присваиваешь ей значение цены. 
Далее на каждом тике сравниваешь текущее значение с сохраненным. Если разность превысила 100 или 200 пунктов, то делаешь то что задумал.

 
Dojkged #:
как сделать, чтобы позиция открывалась лишь 1 раз. У меня просто такая проблема: есть условие, оно выполняется и на следующую свечу, когда нужно заходить по маркету, каждый новый тик открывается позиция по маркету. Подскажите, как исправить?
   if(newbar<iTime(_Symbol,_Period,0))
     {
      newbar=iTime(_Symbol,_Period,0);
      
      ... Ваш код открытия
      
     }
 
Sergei Gurov #:

Здравствуйте! Могли бы подсказать, как реализовать следующую задачу: Цена пересекает 5-три перечную SMA. High и low бара,  который пересек должны быть выше МА. И если у следующего бара после пересечения high будет меньше и при этом он выше МА, то ставится значок. И значки продолжают ставиться до тех пор пока бар не пробьет хай предыдущего бара или произойдет повторное пересечение МА. Задача вроде бы простая, но у меня возникла проблема в следующим: Как после пересечения МА ставить значки на всех барах у которых хай меньше предыдущего и при этом бары выше МА? 

Покажите код своего индикатора. Ведь Вы пишете индикатор?

 
Tretyakov Rostyslav #:

При таком условии и наличии сигнала ордер будет открываться на каждой свече. Если парню нужно открытие всего одного ордера по сигналу (а он это не уточнил), то лучше перед открытием ордера пересчитать ордера. Например, если счётчик бай-ордеров == 0 и при этом есть сигнал Бай, то открываем Бай-ордер. На следующей свече советник обнаружит, что Бай-сигнал ещё жив и Бай ордер ещё жив и не будет ни чего открывать. Словом, он откроет одну сделку по одному сигналу. В противном случае он будет на каждой свече доливать и доливать по ордеру, пока сигнал жив. Это повышенный риск уйти в минус по депозиту.

 
Здарова народ. Не нашёл через поиск. Что надо прописать в коде индикатора, чтобы его окно было выше графика или такое невозможно в мт5?
 
  if(OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true) 
    { 
     datetime ctm=OrderOpenTime(); 
     int      ticket=OrderTicket(); 
     if(ctm>0) Print("Время открытия ордера  ",ticket," ",ctm); 
     ctm=OrderCloseTime(); 
     if(ctm>0) Print("Время закрытия ордера  ",ticket," ",ctm); 
    } 

Подскажите : Что нужно прибавмть к 

времяни закрытия, что-б через некоторое время открыть ордер?
 
yura #:

Подскажите : Что нужно прибавмть к 

времяни закрытия, что-б через некоторое время открыть ордер?

очевидно что таймер :-)



datetime timeToOpen=0; // глоб.переменная - время для открытия ордера

....
// где-то в вашем коде
timeToOpen=OrderCloseTime()+10; // открытьновый через 10 сек.

....

// в таймере

void OnTimer() {
   now = TimeCurrent();
  if (timeToOpen!=0 && timeToOpen >= now) {
    // настало время открывать
    // bool OpenOrder() - ваша функция для открытия
    if (OpenOrder()) {
       timeToOpen=0;   // отлично, открылись
    } else {
       timeToOpen+=5; // след.попытка через 5 сек
    }
  }

}