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

 
artem artem #:

MakarFX, спасибо! Теперь нет этого первого ордера лишнего безсигнального, но теперь почему то на первом сигнальном ордере (нормальном) вход осуществляется на 2 свечи раньше))) А затем всё ок, на остальных ордерах входит в нужный момент) Прикрепил скрин с тестера  к сообщению, но даже несмотря на этот первый ордер - самое главное сделано, ещё раз спасибо большое) С магиками понял, я тогда сделаю внешнюю переменную, и когда буду прикреплять эсксперта к конкретному графику валютной пары, буду менять число для кажлой пары индивидуально.

На счет открытия я посмотрю.

Магик менять не обязательно, если контролируется символ.

 
Nerd Trader #:

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

так ведь всё равно нужно проверять условия на каждом новом тике, если не сработало на предыдущем тике - изменится на новом.

ну и обработку ошибок нужно делать.

 
Nerd Trader #:

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

//+------------------------------------------------------------------+
if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderTakeProfit(), 0))
   ObjectCreate(0,OrderTicket(),OBJ_ARROW_UP,0,Time[0],Bid);
//+------------------------------------------------------------------+
int NameObject()
  {
   int ticket=-1;
   for(int i=0;i<ObjectsTotal();i++)
     {
      ticket=StringToInteger(ObjectName(0,i,0));
     }
   return(ticket);
  }
//+----------------------------------------------------------------------------+
void GetTicketOrder()
  {
   int result=-1;
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) 
     {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) 
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
              {
               if(OrderTicket() == NameObject())
                  {
                     делай все что хочешь
                  }
              }
           }
        }
     }
  }
 
EVGENII SHELIPOV #:

Доброго времени суток!

Имеются две функции: функция калькуляции всей сетки ордеров и функция закрытия ордеров 

 Ещё есть условия для закрытия ордеров 

Profit - в настройках в валюте депо

Смысл всего этого: После того как калькуляция сетки ордеров будет равна нулю плюс Profit  в валюте депозита закрывается вся сетка ордеров 

Помогите изменить код так что бы вместо   Profit были пункты. Спасибо.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в пунктах         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetProfitOpenPosInPoint(string sy="", int op=-1, int mn=-1) {
  double p;
  int    i, k=OrdersTotal(), pr=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          if (p==0) if (StringFind(OrderSymbol(), "JPY")<0) p=0.0001; else p=0.01;
          if (OrderType()==OP_BUY) {
            pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p;
          }
          if (OrderType()==OP_SELL) {
            pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p;
          }
        }
      }
    }
  }
  return(pr);
}
 
artem artem #:

MakarFX, спасибо! Теперь нет этого первого ордера лишнего безсигнального, но теперь почему то на первом сигнальном ордере (нормальном) вход осуществляется на 2 свечи раньше))) А затем всё ок, на остальных ордерах входит в нужный момент) Прикрепил скрин с тестера  к сообщению, но даже несмотря на этот первый ордер - самое главное сделано, ещё раз спасибо большое) С магиками понял, я тогда сделаю внешнюю переменную, и когда буду прикреплять эсксперта к конкретному графику валютной пары, буду менять число для кажлой пары индивидуально.

Какой период тестировал и какое кол-во подтверждений?
 
MakarFX #:

Макар насколько я понял это надо попробовать вместо функции CalculiteProfit()

 
EVGENII SHELIPOV #:

Макар насколько я понял это надо попробовать вместо функции CalculiteProfit()

да

и меняешь это

int op = GetProfitOpenPosInPoint("", -1, Magic ); 
 
MakarFX #:
Какой период тестировал и какое кол-во подтверждений?

MakarFX, на том скрине , корторый я прикрепил, тестировал на  EUR\USD - M 30 - все тики - 01.08.21 по 03.09.21.  - 26 ордеров было ( НОя поменял константу с 4 на 8, решил посмотреть на большем кол-ве свеч)

Если константу вернуть к 4 свечам, тогда за тот же период - тогда 35 ордеров, но там также на первом ордере на 2 раньше заходит

 
MakarFX #:

да

и меняешь это

Макар подскажи а если только мин и макс ордер этим можно воспользоваться?

 
EVGENII SHELIPOV #:

Макар подскажи а если только мин и макс ордер этим можно воспользоваться?

Ты имеешь ввиду "мин и макс" по тикетам или цене?
Причина обращения: