Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 566

 

Всем Привет!

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

Работают 2 или 3 или более индикаторов. Каждый имеет строку: Comment(" Работает индикатор 1."); следующий Comment(" Работает индикатор 2."); и тд. соответственно.

Как, возможно с помощью "хитрого" перевода каретки, получить вид верхнего левого угла экрана(последующая надпись не затирает предидущую в течении хотя бы 1 тика) :

Работает индикатор 1.

Работает индикатор 2.

Работает индикатор 3.

и т.д.

 

Как объявить свой критерий оптимизации в 610 билде, на старом советнике?

Советник работает на 610 билде.

К примеру на MQL5 код следующий:

double OnTester()
{
double prof=0.0;
prof=TesterStatistics(STAT_PROFIT);

  return(prof);
}

Если ставлю его на советнике перед стартом, колонка Custom не появляется.

И второй вопрос: на старых советниках выходят сообщения желтым при компиляции:function must return a value.

Строка для примера.

if(Work==false){Alert("Критическая ошибка. Эксперт не работает.");return;}
 
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

//--- параметры для записи данных в файл
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
string             InpFileName="";
int t=0;
int file_handle=-2;
double mass[];
int OnInit()
  {
   Comment("Start");
   InpFileName=StringConcatenate(WindowExpertName(),".csv");      // Имя файла  
 
   ResetLastError();
   file_handle=FileOpen(WindowExpertName()+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);   
   return(INIT_SUCCEEDED);
  }
void OnTick()
  {
   Comment(t);
   if(file_handle!=INVALID_HANDLE)
     {
      t++;
      ArrayResize(mass,t+1,10000);
      mass[t]=Ask;
      //--- запишем время сигналов и их значения в файл
      for(int i=0; i<ArraySize(mass); i++)
       FileWrite(file_handle,mass[t]);
      //--- закрываем файл
      FileClose(file_handle);
     }
   else
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
  }
//+------------------------------------------------------------------+

Не могу понять, как писать в следующюю строку...

Пытаюсь записывать котировки каждую в новую строку и никак не получается ....

 

Тестирую советника с пользовательским индикатором. Иногда сделки открываются в соответствии с условиями, а иной раз не понятно по какому принципу. Запускаю визуализацию, индикатор рисуется, как надо, но сделки не всегда совпадают с индикатором. Пробовал проблемные участки проверить алертом, также нули на показаниях индикатора в советнике выходят. Не понятно в чем проблема, если индикатор при тестировании рисуется правильно, то где теряются значения индикатора передаваемые в советник?

Код в советнике:
double line=iCustom(NULL,0,"Ttest3",Period_MA_1,p2,p3,p4,1,1);

if (line >0){Opn_B=true;}
if (line <=0){Cls_B=true;}
 
VOLDEMAR:

Не могу понять, как писать в следующюю строку...

Пытаюсь записывать котировки каждую в новую строку и никак не получается ....


FileSeek
 
Forexman77:

Тестирую советника с пользовательским индикатором. Иногда сделки открываются в соответствии с условиями, а иной раз не понятно по какому принципу. Запускаю визуализацию, индикатор рисуется, как надо, но сделки не всегда совпадают с индикатором. Пробовал проблемные участки проверить алертом, также нули на показаниях индикатора в советнике выходят. Не понятно в чем проблема, если индикатор при тестировании рисуется правильно, то где теряются значения индикатора передаваемые в советник?

Код в советнике:

может проблема в советнике?
 
Vladon:

может проблема в советнике?
Честно говоря сам не знаю. Запускаю одиночный визуальный тест индикатор выше ноля, в процентах семидясети сделка открывается, в остальных нет.
 

 Появилась непонятная для меня ошибка:

'li_cnt' - undeclared identifier

в строке:

    return (li_cnt);

эта строка находится в функции:

// 1.9 Инициализация рабочего массива. ====================================================================================================
int fInit_ArrayINT (int& fia_INT[],                                              // Инициализируемый массив
                    string fs_List,                                              // Инициализируемые значения в строке
                    int fi_Range,                                                // Размер массива
                    double fd_Factor = 1.0,                                      // множитель
                    string fs_NameArray = "",                                    // имя возвращаемого массива
                    string fs_Delimiter = ",")                                   // Разделитель значений в строке
{
//----
    //---- Ищем в строке разделитель - признак наличия в строке > 1 параметра
    if (StringFind (fs_List, fs_Delimiter) == -1) return (1);
    else
    {
        string lsa_TMP[];
        int li_cnt = fGet_StrArrayFromLine (fs_List, lsa_TMP, ",");
  
        if (fi_Range > 0)
        {
            if (li_cnt != fi_Range)
            {
                Print (fs_NameArray, ": не соотвествие в размерности массива !!!");
                li_cnt = fi_Range;
            }
        }
        fCreat_StrToInt (lsa_TMP, fia_INT, li_cnt, fd_Factor, fs_NameArray);
    }
//----
    return (li_cnt);
}
Переменная li_cnt объявлена как видно. Компилятор ругается, что типа она не объявлена. Это как понимать?
 
hoz:

Появилась непонятная для меня ошибка:

в строке:

эта строка находится в функции:

Переменная li_cnt объявлена как видно. Компилятор ругается, что типа она не объявлена. Это как понимать?


Потому, что объявлена твоя переменная внутри if else
 
hoz:

Появилась непонятная для меня ошибка:

в строке:

эта строка находится в функции:

Переменная li_cnt объявлена как видно. Компилятор ругается, что типа она не объявлена. Это как понимать?

// 1.9 Инициализация рабочего массива. ====================================================================================================
int fInit_ArrayINT (int& fia_INT[],                                              // Инициализируемый массив
                    string fs_List,                                              // Инициализируемые значения в строке
                    int fi_Range,                                                // Размер массива
                    double fd_Factor = 1.0,                                      // множитель
                    string fs_NameArray = "",                                    // имя возвращаемого массива
                    string fs_Delimiter = ",")                                   // Разделитель значений в строке
{
//----
int li_cnt=0;
    //---- Ищем в строке разделитель - признак наличия в строке > 1 параметра
    if (StringFind (fs_List, fs_Delimiter) == -1) return (1);
    else
    {
        string lsa_TMP[];
        li_cnt = fGet_StrArrayFromLine (fs_List, lsa_TMP, ",");
  
        if (fi_Range > 0)
        {
            if (li_cnt != fi_Range)
            {
                Print (fs_NameArray, ": не соотвествие в размерности массива !!!");
                li_cnt = fi_Range;
            }
        }
        fCreat_StrToInt (lsa_TMP, fia_INT, li_cnt, fd_Factor, fs_NameArray);
    }
//----
    return (li_cnt);
}

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