Ваши вопросы по языку MQL4

star603

Новичок форума
void OnTick()
{
if(f_IsNewBar()==true)
{
for(int i= 1; i<400; i++)
{
if(candle.Dodgi(i)==1)
Print("i_1=",i," ","data=",Time," ",Close," ","body=",candle.Candle_body(i));
Comment(candle.Candle_body(i));
}
}
}

Почему выводяться на печать свечи больше 10 телом
 

Вложения

  • S3.mq4
    S3.mq4
    19,1 КБ · Просмотры: 6

star603

Новичок форума
void OnTick()
{
if(f_IsNewBar()==true)
{
for(int i= 1; i<10; i++)
if(candle.Candle_body(i)<10)
Print("i=",i," ",candle.Dodgi(i)," ",candle.Candle_body(i)," ",Time);
}
}
Сейчас работает как надо только вот на каждом тике. Не знаю почему так.
 
Последнее редактирование модератором:

ИванМН

Местный знаток
Не надо ничего искать, всё найдено до нас. Объявляете статическую datetime-переменную и на каждом тике сравниваете её с Time[0]. Обновилась - встречайте новый бар. Присваиваете ей новое значение Time[0].
 

star603

Новичок форума
Не надо ничего искать, всё найдено до нас. Объявляете статическую datetime-переменную и на каждом тике сравниваете её с Time[0]. Обновилась - встречайте новый бар. Присваиваете ей новое значение Time[0].

Как я ей присвою если она не динамическая а статическая.

PHP:
Expand Collapse Copy
Локальные переменные, объявленные с ключевым словом static, сохраняют свои значения в течение всего времени существования функции. При каждом следующем вызове функции такие локальные переменные содержат те значения, которые они имели при предыдущем вызове.

Таким образом если я правильно понимаю один раз присвоив ей значения потом не изменить ее. (При каждом следующем вызове функции такие локальные переменные содержат те значения, которые они имели при предыдущем вызове.)
 

AlexeyVik

Программист mql4 mql5
Как я ей присвою если она не динамическая а статическая.

PHP:
Expand Collapse Copy
Локальные переменные, объявленные с ключевым словом static, сохраняют свои значения в течение всего времени существования функции. При каждом следующем вызове функции такие локальные переменные содержат те значения, которые они имели при предыдущем вызове.

Таким образом если я правильно понимаю один раз присвоив ей значения потом не изменить ее. (При каждом следующем вызове функции такие локальные переменные содержат те значения, которые они имели при предыдущем вызове.)
Не верь глазам своим. Верь моей совести.
Статичная переменная отличается от обычной тем, что обычная переменная инициализируется при каждом вызове функции, а статичная только один раз. Изменение значения переменной не отличается ничем.
Не путайте статичные переменные с константными.
 

star603

Новичок форума
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(New_bar()==true)
{
for(int i=1; i<12; i++)
{
Print(i);
}
}
}
//+------------------------------------------------------------------+
//| Новый бар |
//+------------------------------------------------------------------+
bool New_bar()
{
bool n_bar=false;
static datetime Data = D'01.01.2004';
if(Data != Time[0])
n_bar=true;
else
n_bar=false;
return(n_bar);
}
//+------------------------------------------------------------------+
 

ИванМН

Местный знаток
C-подобный:
Expand Collapse Copy
bool New_bar()
{
   static datetime Data;
   if (Data < Time[0])
   {
      Data = Time[0];
      return true;
   }
   return false;
}
 
Последнее редактирование:

star603

Новичок форума
Почему выдается свечи больше телом чем 10?

PHP:
Expand Collapse Copy
   if(New_bar()==true)
     {
      for(int i=1; i<250; i++)
        {
         if(candle.Candle_body(i)<10)
            Print("i=",i," ","Data=",Time[i+1],"   ","Body=",candle.Candle_body(i));
        }
     }
[PHP/]

А так работает.
 

Вложения

  • S3.mq4
    S3.mq4
    18,9 КБ · Просмотры: 11
Последнее редактирование:

star603

Новичок форума
PHP:
Expand Collapse Copy
   double ma31_1 = iMA(_Symbol,PERIOD_CURRENT,31,0,MODE_EMA,PRICE_CLOSE,1);
   double OC = Open[1]-Close[1];
   Comment(ma31_1);
   if(OrdersTotal()==0)
     {
      if(Open[1]<ma31_1 && Close[1]>ma31_1 && OC<0)
         int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,30,0.0,0.0,"My order",magik,0,clrGreen);
      if(Open[1]>ma31_1 && Close[1]>ma31_1 && OC>0)
         int ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,30,0.0,0.0,"My order",magik,0,clrYellow);
     }
[php\]

Почему используется простая вместо экспотенциальной?
 

star603

Новичок форума
Почему 6-ой тип лота не рассчитывается?
 

Вложения

  • L1.mq4
    L1.mq4
    10,5 КБ · Просмотры: 16
Верх