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

 
lynxntech #:

множество открытий это беда не робота, это беда можно сказать разработчиков, роботом то конечно можно нагородить

можно найти в поиске "мой" способ, он наверное самый правильный будет, 

не смог найти... не могли бы описать вкратце 

спасибо!

 
Alex8888888888 #:

Добрый день!

Помогите, пожалуйста, разобраться с таким моментом - имеется написанный советник, ядром которого является открытие ордеров на пробой фрактала:

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

Заранее благодарю за советы по решению этой проблемы!

У бара фрактала есть время открытия. Если, начиная с этого времени, позиции ещё не открывались - можно открывать. Иначе - нет.
 
Artyom Trishkin #:
У бара фрактала есть время открытия. Если, начиная с этого времени, позиции ещё не открывались - можно открывать. Иначе - нет.

понял.

Большое спасибо!

 
Alex8888888888 #:

не смог найти... не могли бы описать вкратце 

спасибо!

проверка секунд таймера windows (не запуск своего), при сигнале, потом уже обычная проверка количества открытых позиций

 
вот только эти способы, как из соседней ветки, разработчики молча улучшат работы, а у вас будет гигантский код висеть
 

Доброго времечка: по смыслу: задумал сделать индюк на MQL5, будет использовать все таймфреймы выбранного инструмента на основе ATR (к примеру 150 баров):

1) на сколько сильно положит комп?.. так понимаю для каждого фрейма надо делать свой handle? (и т.п.)

2) если сделать тоже самое но на 7 валютных парах и по всем тайм фреймам? (комп  древний! подозреваю совсем раком будет?)

ЗЫ: намекните, как правильно? лучше? легче? направьте страждущего:)))

 

можно добавлять, нагрузка будет когда обращаться к хендлу будет

маленькая обычно, около 1%

 
Vladislav Boyko #:

Трендовые линии всегда себя так вели в МТ4? Как узнать, где линия находится на самом деле?

Спарведливости ради, отмечу, что точки этой трендовой линии находятся примерно на 4000 баров левее


Уравнение прямой укажет цену, на которой линия должна быть:

//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect(const int left_bar, const double left_price, const int right_bar, const double right_price, const int bar_to_search)
  {
   return(right_bar==left_bar ? left_price : (right_price - left_price) / (right_bar - left_bar) * (bar_to_search - left_bar) + left_price);
  }
//+------------------------------------------------------------------+

Указываете данные двух баров, на которых построена трендовая линия, и номер искомого бара. Функция вернёт цену на искомом бара.

 
Artyom Trishkin #:

Уравнение прямой укажет цену, на которой линия должна быть:

Указываете данные двух баров, на которых построена трендовая линия, и номер искомого бара. Функция вернёт цену на искомом бара.

Я подумал, что вряд ли кто ответит на тот пост, поэтому удалил (до того, как увидел ваш ответ).

Программно то можно вычислить, вопросы возникают именно касаемо корректности отображения объекта графика.

Спасибо за код, себе я обычно леплю что-то типа этого (та-же формула, на сколько я понимаю):

class CLineByIdxAndPrc
  {
public:
   double       valueOn(int barIdx) const { return(coeffK * barIdx + coeffB); }
//---
public:
   const double prcLeft;
   const double prcRight;
   const int    idxLeft;
   const int    idxRight;
protected:
   const double coeffK;
   const double coeffB;
public:
                CLineByIdxAndPrc(double a_prcLeft, double a_prcRight, int a_idxLeft, int a_idxRight)
                   : prcLeft(a_prcLeft),
                     prcRight(a_prcRight),
                     idxLeft(a_idxLeft),
                     idxRight(a_idxRight),
                     coeffK((prcRight - prcLeft) / (idxRight - idxLeft)),
                     coeffB(prcLeft - coeffK * idxLeft) {}
  };
 
Artyom Trishkin #:
У бара фрактала есть время открытия. Если, начиная с этого времени, позиции ещё не открывались - можно открывать. Иначе - нет.

Добрый день!

Для реализации вашего совета есть функция, определяющая дату открытия последней позиции (позиций в тренд может быть несколько, открываются на каждом фрактале, далее сопровождаются по трейлингу):

datetime TimeOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(t);
}
Поиск бара:
//timeframe 
//idx - индекс фрактала: 0-последний, 1-предпоследний,
//direction - направление: 1-вверх, 2-вниз
int FractalBar(int timeframe, int idx, int direction) {
  int foundIdx=-1; 
  for (int i=0; i<iBars(NULL, timeframe); i++) {
    if (iFractals(NULL, timeframe, direction, i) != 0.0) foundIdx++;
    if (foundIdx == idx) return(i);
  }
  return(-1); //фрактал с таким индексом не найден
}

Определение времени:
int FracDir = 1; //фрактал вверх
int FracIdx = 1; //предпоследний фрактал в этом направлении
int FracBar = FractalBar(0, FracIdx, FracDir);
datetime FracTime = iTime(NULL, 0, FracBar);

Если TimeOpenLastPos меньше времени открытия бара фрактала FracTime, то торговля разрешена, если больше - нет. 

Подскажите, пожалуйста, все ли верно?

Соблюдается ли логика?