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

 
Ivan Butko #:
PositionGetInteger

long  PositionGetInteger(
   ENUM_POSITION_PROPERTY_INTEGER  property_id      // идентификатор свойства
   );

 
Aleksey Vyazmikin #:

long  PositionGetInteger(
   ENUM_POSITION_PROPERTY_INTEGER  property_id      // идентификатор свойства
   );

там long и выдает ошибку, а гораздо мелкий int - нет

 
lynxntech #:

там long и выдает ошибку, а гораздо мелкий int - нет

Тогда это уже в ветку про ошибки.

Хотя нет, так решается

   datetime a;
   long b=1111;
   a=(datetime)b;
 
Aleksey Vyazmikin #:

Хотя нет, так решается

Благодарю Вас

 

Подскажите, пожалуйста, почему при тестировании в тестере модифицированный РСИ самосоздаётся на графике, накидывая на него свои клоны


Он с динамическими уровнями, больше ничего.
Что за эффект такой

 
Ivan Butko #:

Подскажите, пожалуйста, почему при тестировании в тестере модифицированный РСИ самосоздаётся на графике, накидывая на него свои клоны


Он с динамическими уровнями, больше ничего.
Что за эффект такой

Хэндлы создаëте на каждом тике? 
 
Artyom Trishkin #:
Хэндлы создаëте на каждом тике? 

Извините, я не уточнил - это МТ4

вот индикаторы, на каждом тике, все работают нормально, кроме этого РСИ

// Вызываем индикатор PR
    if (PR_use) pr_buy  = iCustom(Symbol(), PERIOD_CURRENT, "PR", 21, Len, History_bars, TF_1, TF_2, Mode_HL, 0, Shift+1);
    if (PR_use) pr_sell = iCustom(Symbol(), PERIOD_CURRENT, "PR", 21, Len, History_bars, TF_1, TF_2, Mode_HL, 1, Shift+1);
    
    
    // Вызываем индикатор HaosVisual_mod
    if (Haos_use) haos = iCustom(Symbol(), PERIOD_CURRENT, "HaosVisual_mod", "*** WPR1 ***", t3_period, b, WPR_1_period, P_sell, P_buy, "*** WPR2 ***", t3_period_2,b_2,WPR_2_period,P_sell_2,P_buy_2, 0, Shift);

    // Вызываем индикатор SMI
    if (SMI_use) smi = iCustom(Symbol(), PERIOD_CURRENT, "SMI", Period_Q, Period_R, Period_S, Signal, Level, 0, Shift);

    // Вызываем индикатор Sniper
    if (Sniper_use) sniper_buy  = iCustom(Symbol(), PERIOD_CURRENT, "sniper", wkperiod, smooth, cb, ATRkperiod, Multiplier, arrots, 2, Shift);
    if (Sniper_use) sniper_sell = iCustom(Symbol(), PERIOD_CURRENT, "sniper", wkperiod, smooth, cb, ATRkperiod, Multiplier, arrots, 3, Shift);
    
    // Вызываем индикатор RSI_gm
    if (RSI_use) RSI       = iCustom(Symbol(), PERIOD_CURRENT, "RSI_gm%Lvl", false, InpRSIPeriod, PercLevelValueHH, PercLevelValueLL, 0, PercLevel_ON, Precision, 0, 0);
    if (RSI_use) RSI_gm_up = iCustom(Symbol(), PERIOD_CURRENT, "RSI_gm%Lvl", false, InpRSIPeriod, PercLevelValueHH, PercLevelValueLL, 0, PercLevel_ON, Precision, 3, 0);
    if (RSI_use) RSI_gm_dn = iCustom(Symbol(), PERIOD_CURRENT, "RSI_gm%Lvl", false, InpRSIPeriod, PercLevelValueHH, PercLevelValueLL, 0, PercLevel_ON, Precision, 4, 0);

 

Добрый день!

Неделю не могу решить проблему: как реализовать остановку (паузу) в работе советника при наступлении события до закрытия свечи? 

Пример: как только  сделка закрылась по профиту - до конца свечи (в моем случае дневной) советник на на паузе ...

Ранее похожий момент удавалось реализовать на определённое количество свечей (секунд) после события :  

 if(TimeCurrent()<timepause)return;

.........

timepause = TimeCurrent()+60*30*T;

Но как сделать так, чтобы торговля прервалась при наличии профитной сделки в истории до закрытия бара ....

Функция поиска профитного бара есть:

int NumberOfProfitPosToday(string sy="", int op=-1, int mn=-1) 
{
  datetime t;
  int      i, k=OrdersHistoryTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) 
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
     {
      if (OrderSymbol()==sy || sy=="")
       {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL)
         {
          if (op<0 || OrderType()==op) 
          {
            if (mn<0 || OrderMagicNumber()==mn)
             {
              t=OrderCloseTime();
              if (Year()==TimeYear(t) && DayOfYear()==TimeDayOfYear(t)) 
              {
                if (OrderProfit()>0) kp++;
              }
            }
          }
        }
      }
    }
  }
  return(kp);
}

Совместить не могу: найдена профитная сделка - сова на паузе до закрытия свечи...

Заранее - большое спасибо за помощь!

 
Alex8888888888 #:

Добрый день!

Неделю не могу решить проблему: как реализовать остановку (паузу) в работе советника при наступлении события до закрытия свечи? 

Пример: как только  сделка закрылась по профиту - до конца свечи (в моем случае дневной) советник на на паузе ...

Ранее похожий момент удавалось реализовать на определённое количество свечей (секунд) после события :  

Но как сделать так, чтобы торговля прервалась при наличии профитной сделки в истории до закрытия бара ....

Функция поиска профитного бара есть:

Совместить не могу: найдена профитная сделка - сова на паузе до закрытия свечи...

Заранее - большое спасибо за помощь!

Общий принцип: по профитной сделке ставите флаг (булеву переменную), по началу следующей свечи - сбрасываете. Советник проверяет, если флаг стоит, то не торгует.

 
JRandomTrader #:

Общий принцип: по профитной сделке ставите флаг (булеву переменную), по началу следующей свечи - сбрасываете. Советник проверяет, если флаг стоит, то не торгует.

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

Если несложно, сориентируйте, пожалуйста.

По вашему совету - булевая функция профитной сделки: 

bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=5; else dg=3;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}

Каким образом делать сброс флага именного в конце дневной свечи? В участке выложенного когда, сброс  флага происходит на каждом проходе (на каждом тике), а как задать сброс именно по закрытию текущей дневной свечи...

Еще раз  - спасибо!