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

 
Владимир Казаков #:

Разложил выражения на действия... и о чудо теперь результаты одинаковые выдает!!?

значит все таки с приведением типов что то не так работает, как мне бы хотелось

из знатоков и понимающих может кто то пояснить в чем все же была проблема?!
ну чтоб не повторять ошибок))

ПС: вот в таком формате выражение то же стало работать одинаково

методом исключения получилось ерундило приведение инт к дублю

надеюсь я верно все понял

double a = (double) ((d*pow(10,_Digits-2))*(180/M_PI)*(double) coefAngle);
double a = (double) ((d*pow(10,_Digits-2))*(180.0/M_PI)*(double) coefAngle);
 

Приветствую, подскажите, пожалста, робот, мт5.

Нужно чтоб в массиве, индексы совпадали со значением сдвигa относительно текущего бара, как в индикаторных буферах.

Как такое "принято" делать?

 
Andrey Sokolov #:

Приветствую, подскажите, пожалста, робот, мт5.

Нужно чтоб в массиве, индексы совпадали со значением сдвигa относительно текущего бара, как в индикаторных буферах.

Как такое "принято" делать?

ArraySetAsSeries

 
Vitaly Muzichenko #:

ArraySetAsSeries

Спасиб. те это не только в индикаторах, но и в роботах работает?

 
Andrey Sokolov #:

Спасиб. те это не только в индикаторах, но и в роботах работает?

Не знаю вашу задачу, но массив переворачивает

 
Vitaly Muzichenko #:

Не знаю вашу задачу, но массив переворачивает

Нужно чтоб в массиве, индексы совпадали со значением сдвигa относительно текущего бара, как в индикаторных буферах.

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

 
Andrey Sokolov #:

Нужно чтоб в массиве, индексы совпадали со значением сдвигa относительно текущего бара, как в индикаторных буферах.

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

Попробуйте, должно работать

 
Vitaly Muzichenko #:

Попробуйте, должно работать

вот так не работает. При ините записываю 300 в индекс 0, с появлением новой свечи должно быть 300 в индексе 1, но нет.

#property strict

int bars;
double arr[];

int OnInit()//////////////***OnInit()****///*************OnInit()*******/////////***/////////////////////OnInit()
{
   Comment("");
   
   bars = Bars(NULL, 0);
   bool series = ArraySetAsSeries(arr, true);
   int size = ArraySize(arr);
   int res = ArrayResize(arr, bars);
   arr[0] = 300;

   return(INIT_SUCCEEDED);
}//+------------------------------------------------------------------+
void OnDeinit(const int reason)//////////////**////////*OnDeinit()****////////////////////*************OnDeinit()
{       
        Comment("");  
}//+------------------------------------------------------------------+
void OnTick()//////////////***OnTick()****///*************OnTick()**********/////////////////////////////OnTick()
{
   if(bars!=Bars(NULL, 0))
   {
        bars=Bars(NULL, 0);
        int res = ArrayResize(arr, bars);
   }
   
   Comment(TimeCurrent(), "  ", bars, "  ", arr[0], "  ", arr[1], "  ", arr[2], "  " , arr[3]);
}//+------------------------------------------------------------------+

Могу сам написать "смещение " всего массива в цикле при новых свечах, но в языке для работы с графиками, возможно, есть что-то штатное.

 
Andrey Sokolov #:

вот так не работает. При ините записываю 300 в индекс 0, с появлением новой свечи должно быть 300 в индексе 1, но нет.

Могу сам написать "смещение " всего массива в цикле при новых свечах, но в языке для работы с графиками, возможно, есть что-то штатное.

Переворачивает, но нет в этом смысла

#property strict

int bars;
double arr[]={};

int OnInit()//////////////***OnInit()****///*************OnInit()*******/////////***/////////////////////OnInit()
{
   Comment("");
   
   bars = Bars(NULL, 0);
   int size = ArraySize(arr);
   int res = ArrayResize(arr, bars);
   arr[res-1] = 300;
   ArraySetAsSeries(arr, true);
   return(INIT_SUCCEEDED);
}//+------------------------------------------------------------------+
void OnDeinit(const int reason)//////////////**////////*OnDeinit()****////////////////////*************OnDeinit()
{       
        Comment("");  
}//+------------------------------------------------------------------+
void OnTick()//////////////***OnTick()****///*************OnTick()**********/////////////////////////////OnTick()
{
static int res;
   if(bars!=Bars(NULL, 0))
   {
        bars=Bars(NULL, 0);
        res = ArrayResize(arr, bars);
   }
   
   Print(res, "  ", arr[0], "  ", arr[1], "  ", arr[2]);
}//+------------------------------------------------------------------+

Заполнять нужно другим образом

 
Andrey Sokolov #:

вот так не работает. При ините записываю 300 в индекс 0, с появлением новой свечи должно быть 300 в индексе 1, но нет.

Могу сам написать "смещение " всего массива в цикле при новых свечах, но в языке для работы с графиками, возможно, есть что-то штатное.

Да, штатное есть… Добавить в массив и удалить из массива. Массив должен быть динамическим. Точней ищите в документации, я не помню как они пишутся…

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