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

 
Добрый вечер .
 if(count==0)comment+="No symbols for trading!";
      Comment(comment);
      MqlTick tick;
      tick.ask=SymbolInfoDouble(structPairs.name,SYMBOL_ASK);
      tick.bid=SymbolInfoDouble(structPairs.name,SYMBOL_BID);
      tick.time=TimeCurrent();
      Trade(false,structPairs, tick, Orders, inputs);
Что говорит это кусок кода? В каких случаях он появляется? Все пары в списке есть и все история загружена .
 
Darirunu:
Добрый вечер .Что говорит это кусок кода? В каких случаях он появляется? Все пары в списке есть и все история загружена .

Пароль инвестора?

 
Darirunu:
Добрый вечер .Что говорит это кусок кода? В каких случаях он появляется? Все пары в списке есть и все история загружена .
если некий счётчик равен 0 (вангую что к по результату прежнего захода), то к коменту добавляется строчка
No symbols for trading!

дальше всё как обычно..

 
Taras Slobodyanik:

Спасибо

Проверяю что на втором баре нет объекта

         for(int jj=i;jj<obj_total;jj++)
           {
            nameARs=ObjectName(jj);
            if(ObjectType(nameARs)!=OBJ_RECTANGLE) continue;
            if(StringFind(nameARs,"QUADRO",0)!=-1)
              {

               time_ars=ObjectGetInteger(0,nameARs,OBJPROP_TIME);//break;

              }
           }
         //===---===
         if(time_ars!=Time[i+2])
           {
           //....
           }
как проверить что на десяти барах нет объектов?
 

Индикатор.

Для каждого бара необходимо рассчитать сумму размеров бычьих баров и сумму размеров медвежьих за Period

В буфер записать разницу полученных сумм.

Что здесь не так?

int counted_bars=IndicatorCounted(),
       limit;
 
   if(counted_bars>0)
      counted_bars--;
   
   limit=Bars-counted_bars;
   
   double up_sum=0, down_sum=0;
   for(int i=0;i<limit;i++)
   {
      for(int f = 0; f < Period; f++){
         if(close[f] - open[f] > 0) up_sum += close[f] - open[f];
         if(close[f] - open[f] < 0) down_sum += MathAbs(close[f] - open[f]);
      }
      PVTBuffer[i]=up_sum-down_sum;
   }
 
Roman Sharanov:

Индикатор.

Для каждого бара необходимо рассчитать сумму размеров бычьих баров и сумму размеров медвежьих за Period

В буфер записать разницу полученных сумм.

Что здесь не так?

Перенесите

double up_sum=0, down_sum=0;

внутрь первого цикла - перед объявлением второго.

 
Roman Sharanov:

Индикатор.

Для каждого бара необходимо рассчитать сумму размеров бычьих баров и сумму размеров медвежьих за Period

В буфер записать разницу полученных сумм.

Что здесь не так?

Попробуйте сбрасывать значения переменных   up_sum=0, down_sum=0;

перед вторым, внутреннем циклом.

int counted_bars=IndicatorCounted(),
       limit;
 
   if(counted_bars>0)
      counted_bars--;
   
   limit=Bars-counted_bars;
   
   double up_sum, down_sum;
   for(int i=0;i<limit;i++)
   {
    up_sum=0; 
    down_sum=0;
      for(int f = 0; f < Period; f++){
         if(close[f] - open[f] > 0) up_sum += close[f] - open[f];
         if(close[f] - open[f] < 0) down_sum += MathAbs(close[f] - open[f]);
      }
      PVTBuffer[i]=up_sum-down_sum;
   }

 Как то так

 
Alekseu Fedotov:

Попробуйте сбрасывать значения переменных   up_sum=0, down_sum=0;

перед вторым, внутреннем циклом.

 Как то так

так и сделал, и да, это логично, но теперь вообще перестал отображаться

 
Ghabo:

Спасибо

Проверяю что на втором баре нет объекта

как проверить что на десяти барах нет объектов?

Если вы знаете как создать точное имя объекта, то нет смысла перебирать все объекты на графике.
Достаточно перебрать эти (предполагаемые) имена.

for(int i=0;i<10;i++)
   {
   if (ObjectFind(0,"QUADRO"+Time[i])<0)
      Print("Нет объекта на баре № ",IntegerToString(i));
   else
      Print("Найден oбъект на баре № ",IntegerToString(i));
   }
 
Roman Sharanov:

так и сделал, и да, это логично, но теперь вообще перестал отображаться

Да, еще так, исправьте.

Во внутреннем цикле

for(int f = 0+i; f < Period+i; f++)

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