Semicolon expected как исправить

There is no built-in way to solve this within VS Code. The recommended way to solve this is by making use of the Stylelint extension to handle your CSS linting (& SCSS and/or Less, etc.). It’s very powerful and likely will improve your stylesheets beyond removing these errors for you.

  1. You need to add the styleint dependencies to your project. Run:
npm install --save-dev stylelint stylelint-config-standard

yarn add -D stylelint stylelint-config-standard
  1. Create a stylelint.config.js in the root of your project. (same location where your package.json is stored)

Place this snippet into it:

module.exports = {
  extends: ["stylelint-config-standard"],
  rules: {
    "at-rule-no-unknown": [
      true,
      {
        ignoreAtRules: [
          "tailwind",
          "apply",
          "variants",
          "responsive",
          "screen",
        ],
      },
    ],
    "declaration-block-trailing-semicolon": null,
    "no-descending-specificity": null,
  },
};

  1. Install these extensions to your VS Code setup:
  • Stylelint
  • Tailwind CSS IntelliSense
  1. Last but not least, adjust your local or global VS Code settings.json file to include:
"css.validate": false,
"less.validate": false,
"scss.validate": false,

This way you will have the native linting “disabled”, but are still ensuring it is linted using the Tailwind IntelliSense plugin.

CSS is a powerful tool for styling web pages, but it can be easy to make mistakes when writing code. One common error that can result in warnings is forgetting to add semi-colons at the end of each line of CSS code. This warning is known as “semi-colon expected” and can be easily fixed by following some simple steps.

In CSS, semi-colons are used to separate each rule from the next. 

Syntax:

selector {
    property: value;
}

In this example, the ‘selector’ is the HTML element or class that you want to style. The property is the CSS property that you want to set, and the value is the property value. Each rule should end with a semi-colon to indicate the end of that line of code.

There are a few different approaches that you can take to solve the “semi-colon expected” warning in CSS:

  • Check for missing semi-colons: One of the easiest ways to fix this warning is to go through your CSS code and make sure that each rule ends with a semi-colon. This can be a time-consuming process, but it’s important to catch any missing semi-colons to avoid errors in your code.
  • Use a code editor with linting: Many code editors have built-in linting tools that can help you identify errors in your code, including missing semi-colons. These tools will highlight any warnings or errors in your code, making it easy to identify and fix the problem. 
  • Use a CSS preprocessor: CSS preprocessors like Sass and Less can help you avoid missing semi-colons by automatically adding them to your code. These tools also offer other helpful features like variables and mixins that can make it easier to write and manage your CSS code.

Here are two examples of how to fix the “semi-colon expected” warning in CSS:

Example 1: 

CSS

.button {

      background-color: blue

      color: white;

      padding: 10px;

}

In this example, the warning is caused by the missing semi-colon after the ‘background-color’ property. To fix this, simply add a semi-colon after ‘blue’, and others property values.

CSS

.button {

      background-color: blue;

      color: white;

      padding: 10px;

}

Example 2: 

HTML

<!DOCTYPE html>

<html>

<head>

    <style>

        h1 {

            color: green

            background-color: lavender;

        }

    </style>

</head>

<body>

    <h1>GeeksForGeeks</h1>

</body>

</html>

In this example, the ‘h1’ element has a CSS rule that sets the ‘color‘ and ‘background-color’ properties. However, there is a missing semi-colon after the color property. This will result in a “semi-colon expected” warning.

Output:

To fix this, we simply need to add a semi-colon after the ‘color property, like this:

HTML

<!DOCTYPE html>

<html>

<head>

    <style>

        h1 {

            color: green;

            background-color: lavender;

        }

    </style>

</head>

<body>

    <h1>GeeksForGeeks</h1>

</body>

</html>

Output:

By following these simple steps, you can quickly and easily fix any “semi-colon expected” warnings in your CSS code. Remember to always double-check your code for errors and use tools like linting and preprocessors to make your coding process more efficient.

Last Updated :
13 Apr, 2023

Like Article

Save Article

Введение

При использовании новой версии компилятора языка MQL4 некоторые старые программы могут выдавать ошибки.

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

Новый компилятор позволяет обнаружить реальные или потенциальные источники ошибок и повысить качество кода.

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

  1. Ошибки компиляции
    • 1.1. Идентификатор совпадает с зарезервированным словом
    • 1.2. Специальные символы в наименованиях переменных и функций
    • 1.3. Ошибки использования оператора switch
    • 1.4. Возвращаемые значения у функций
    • 1.5. Массивы в аргументах функций
  2. Ошибки времени выполнения
    • 2.1. Выход за пределы массива (Array out of range)
    • 2.2. Деление на ноль (Zero divide)
    • 2.3. Использование 0 вместо NULL для текущего символа
    • 2.4. Строки в формате Unicodе и их использование в DLL
    • 2.5. Совместное использование файлов
    • 2.6. Особенность преобразования datetime
  3. Предупреждения компилятора
    • 3.1. Пересечения имен глобальных и локальных переменных
    • 3.2. Несоответствие типов
    • 3.3. Неиспользуемые переменные

1. Ошибки компиляции

При наличии ошибок в коде программа не может быть скомпилирована.

Для полного контроля всех ошибок рекомендуется использовать строгий режим компиляции, который устанавливается директивой:

#property strict

Этот режим значительно упрощает поиск ошибок.

1.1. Идентификатор совпадает с зарезервированным словом

Если наименование переменной или функции совпадает с одним из зарезервированных слов:

int char[];  
int char1[]; 
int char()   
{
 return(0);
}

то компилятор выводит сообщения об ошибках:

Рис.1. Ошибки "unexpected token" и "name expected"

Рис.1. Ошибки “unexpected token” и “name expected”

Для исправления данной ошибки нужно исправить имя переменной или функции.

1.2. Специальные символы в наименованиях переменных и функций

Если наименования переменных или функций содержат специальные символы ($, @, точка):

int $var1; 
int @var2; 
int var.3; 
void f@()  
{
 return;
}

то компилятор выводит сообщения об ошибках:

Рис.2. Ошибки "unknown symbol" и "semicolon expected"

Рис.2. Ошибки “unknown symbol” и “semicolon expected”

Для исправления данной ошибки нужно скорректировать имена переменных или функций.

1.3. Ошибки использования оператора switch

Старая версия компилятора позволяла использовать любые значения в выражениях и константах оператора switch:

void start()
  {
   double n=3.14;
   switch(n)
     {
      case 3.14: Print("Pi");break;
      case 2.7: Print("E");break;
     }
  }

В новом компиляторе выражения и константы оператора switch должны быть целыми числами, поэтому при использовании подобных конструкций возникают ошибки:

Рис.3. Ошибки "illegal switch expression type" и "constant expression is not integral"

Рис.3. Ошибки “illegal switch expression type” и “constant expression is not integral”

В таких случаях можно использовать явные сравнения численных значений, например:

void start()
  {
   double n=3.14;
   if(n==3.14) Print("Pi");
   else
      if(n==2.7) Print("E");
  }

1.4. Возвращаемые значений функций

Все функции, кроме void, должны возвращать значение объявленного типа. Например:

int function()
{
}

При строгом режиме компиляции (strict) возникает ошибка:

Рис.4. Ошибка "not all control paths return a value"

Рис.4. Ошибка “not all control paths return a value”

В режиме компиляции по умолчанию компилятор выводит предупреждение:

Рис.5. Предупреждение "not all control paths return a value"

Рис.5. Предупреждение “not all control paths return a value”

Если возвращаемое значение функции не соответствует объявлению:

int init()                         
  {
   return;                          
  }

то при строгом режиме компиляции возникает ошибка:

Рис.6. Ошибка "function must return a value"

Рис.6. Ошибка “function must return a value”

В режиме компиляции по умолчанию компилятор выводит предупреждение:

Рис.7. Предупреждение 'return - function must return a value"

Рис.7. Предупреждение ‘return – function must return a value”

Для исправления таких ошибок в код функции нужно добавить оператор возврата return c возвращаемым значением соответствующего типа.

1.5. Массивы в аргументах функций

Массивы в аргументах функций теперь передаются только по ссылке.

double ArrayAverage(double a[])
{
 return(0);
}

Данный код при строгом режиме компиляции (strict) приведет к ошибке:

Рис.8. Ошибка компилятора "arrays passed by reference only"

Рис.8. Ошибка компилятора “arrays passed by reference only”

В режиме компиляции по умолчанию компилятор выводит предупреждение:

Рис.9. Предупреждение компилятора "arrays passed by reference only"

Рис.9. Предупреждение компилятора “arrays passed by reference only”

Для исправления таких ошибок нужно явно указать передачу массива по ссылке, добавив префикс & перед именем массива:

double ArrayAverage(double &a[])
{
 return(0);
}

Следует отметить, что теперь константные массивы (Time[], Open[], High[], Low[], Close[], Volume[]) не могут быть переданы по ссылке. Например, вызов:

ArrayAverage(Open);

вне зависимости от режима компиляции приводит к ошибке:

Рис.10. Ошибка 'Open' - constant variable cannot be passed as reference

Рис.10. Ошибка ‘Open’ – constant variable cannot be passed as reference

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

   
   double OpenPrices[];
   
   ArrayCopy(OpenPrices,Open,0,0,WHOLE_ARRAY);
   
   ArrayAverage(OpenPrices);

2. Ошибки времени выполнения

Ошибки, возникающие в процессе исполнения кода программы принято называть ошибками времени выполнения (runtime errors). Такие ошибки обычно зависят от состояния программы и связаны с некорректными значениями переменных.

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

2.1. Выход за пределы массива (Array out of range)

Эта ошибка часто возникает в индикаторах при обращении к индикаторным буферам. Функция IndicatorCounted() возвращает количество баров, неизменившихся после последнего вызова индикатора. Значения индикаторов на уже рассчитанных ранее
барах не нуждаются в пересчете, поэтому для ускорения расчетов
достаточно обрабатывать только несколько последних баров.

Большинство индикаторов, в которых используется данный способ оптимизации вычислений, имеют вид:



int start()
  {
   
   if (Bars<100) 
     return(-1); 

   
   int counted_bars=IndicatorCounted();
   
   if(counted_bars<0) return(-1);
      
   
   int limit=Bars-counted_bars;

   
   if(counted_bars==0) 
     {
      limit--;  
      
      limit-=10;
     }
   else 
     {     
      
      limit++;
     } 
   
   for (int i=limit; i>0; i--)
   {
     Buff1[i]=0.5*(Open[i+5]+Close[i+10]) 
   }
}

Часто встречается некорректная обработка случая counted_bars==0 (начальную позицию limit нужно уменьшить на значение, равное 1 + максимальный индекс относительно переменной цикла).

Также следует помнить о том, что в момент исполнения функции start() мы можем обращаться к элементам массивов индикаторных буферов от 0 до Bars()-1. Если есть необходимость работы с массивами, которые не являются индикаторными буферами, то их размер следует увеличить при помощи функции ArrayResize() в соответствии с текущим размером индикаторных буферов. Максимальный индекс элемента для адресации также можно получить вызовом ArraySize() с одним из индикаторных буферов в качестве аргумента.

2.2. Деление на ноль (Zero divide)

Ошибка “Zero divide” возникает в случае, если при выполнении операции деления делитель оказывается равен нулю:

void OnStart()
  {

   int a=0, b=0,c;
   c=a/b;
   Print("c=",c);
  }

При выполнении данного скрипта во вкладке “Эксперты” возникает сообщение об ошибке и завершении работы программы:

Рис.11. Сообщение об ошибке "zero divide"

Рис.11. Сообщение об ошибке “zero divide”

Обычно такая ошибка возникает в случаях, когда значение делителя определяется значениями каких-либо внешних данных. Например, если анализируются параметры торговли, то величина задействованной маржи оказывается равна 0 если нет открытых ордеров. Другой пример: если анализируемые данные считываются из файла, то в случае его отсутствия нельзя гарантировать корректную работу. По этой причине желательно стараться учитывать подобные случаи и корректно их обрабатывать.

Самый простой способ – проверять делитель перед операцией деления и выводить сообщение об некорректном значении параметра:

void OnStart()
  {

   int a=0, b=0,c;
   if(b!=0) {c=a/b; Print(c);}
   else {Print("Error: b=0"); return; };
  }

В результате критической ошибки не возникает, но выводится сообщение о некорректном значении параметра и работа завершается:

Рис. 12. Сообщение о некорректном значении делителя

Рис. 12. Сообщение о некорректном значении делителя

2.3. Использование 0 вместо NULL для текущего символа

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

Например, значение технического индикатора Moving Average для текущего символа можно было запрашивать следующим образом:

AlligatorJawsBuffer[i]=iMA(0,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); 

В новом компиляторе для указания текущего символа нужно явно указывать NULL:

AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); 

Кроме того, текущий символ и период графика можно указать при помощи функций Symbol() и Period().

AlligatorJawsBuffer[i]=iMA(Symbol(),Period(),13,8,MODE_SMMA,PRICE_MEDIAN,i); 

2.4. Строки в формате Unicodе и их использование в DLL

Строки теперь представляют собой последовательность символов Unicode.

Следует учитывать этот факт и использовать соответствующие функции Windows. Например, при использовании функций библиотеки wininet.dll вместо InternetOpenA() и InternetOpenUrlA() следует вызывать InternetOpenW() и InternetOpenUrlW().

В MQL4 изменилась внутренняя структура строк (теперь она занимает 12 байт), поэтому при передаче строк в DLL следует использовать структуру MqlString:

#pragma pack(push,1)
struct MqlString
  {
   int      size;       
   LPWSTR   buffer;     
   int      reserved;   
  };
#pragma pack(pop,1)

2.5. Совместное использование файлов

В новом MQL4 при открытии файлов необходимо явно указывать флаги FILE_SHARE_WRITE и FILE_SHARE_READ для совместного использования.

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

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

   
   ExtHandle=FileOpenHistory(c_symbol+i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ);

Подробности можно найти в статье в статье “Оффлайновые графики и новый MQL4“.

2.6. Особенность преобразования datetime

Следует иметь ввиду, что преобразование типа datetime в строку теперь зависит от режима компиляции:

  datetime date=D'2014.03.05 15:46:58';
  string str="mydate="+date;

Например, попытка работы с файлами, имя которых содержит двоеточие, приведет к ошибке.

3. Предупреждения компилятора

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

Чистый код не должен содержать предупреждений.

3.1. Пересечения имен глобальных и локальных переменных

Если на глобальном и локальном уровнях присутствуют переменные с одинаковыми именами:

int i; 
void OnStart()
  {

   int i=0,j=0; 
   for (i=0; i<5; i++) {j+=i;}
   PrintFormat("i=%d, j=%d",i,j);
  }

то компилятор выводит предупреждение и укажет номер строки, на которой объявлена глобальная переменная:

Рис.13. Предупреждение "declaration of '%' hides global declaration at line %"

Рис.13. Предупреждение “declaration of ‘%’ hides global declaration at line %”

Для исправления таких предупреждений нужно скорректировать имена глобальных переменных.

3.2. Несоответствие типов

В новой версии компилятора введена операция приведения типов.

#property strict
void OnStart()
  {
   double a=7;
   float b=a;
   int c=b;
   string str=c;
   Print(c);
  }

В строгом режиме компиляции при несоответствии типов компилятор выводит предупреждения:

Рис.14. Предупреждения "possible loss of data due to type conversion" и "implicit conversion from 'number' to 'string'

Рис.14. Предупреждения “possible loss of data due to type conversion” и “implicit conversion from ‘number’ to ‘string’

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

Для исправления нужно использовать явное приведение типов:

#property strict
void OnStart()
  {
   double a=7;
   float b=(float)a;
   int c=(int)b;
   string str=(string)c;
   Print(c);
  }

3.3. Неиспользуемые переменные

Наличие переменных, которые не используются в коде программы (лишние сущности) не является хорошим тоном.

void OnStart()
  {
   int i,j=10,k,l,m,n2=1;
   for(i=0; i<5; i++) {j+=i;}
  }

Сообщения о таких переменных выводятся вне зависимости от режима компиляции:

Рис.15. Предупреждения "variable '%' not used'

Рис.15. Предупреждения “variable ‘%’ not used’

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

Выводы

В статье рассмотрены типичные проблемы, с которыми могут столкнуться программисты при компиляции старых программ, содержащих ошибки.

Во всех случаях при отладке программ рекомендуется использовать строгий режим компиляции.

Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.

  • #1

Решил вот создать тему. Как-то хотел выучить MQL4, прочел весь справочник и видеоуроки смотрел. Но времени, чтобы практикаваться как-то пожалел. Но польза всё таки была и мало-мальскими знаниями я овладел. Думаю будет полезно, за одно и сам чего-нибудь нового узнаю. Глядишь и нормально разбираться начну:)

  • #2

Ошибки со старых билдов.

Исправляем ошибку char .

1) Попался индикатор под названием @Ratio_MACD_v3.mq4
2) Кидаем его на график и видим ошибку во вкладке “Эксперты”

334755

3) В навигаторе щелкаем правой кнопкой мыши по нашему индикатору и выбираем “Изменить”,щёлкаем левой кнопкой мыши.

334756

4) После этого у нас откроется MetaEditor – это программка предназначена для написания, редактирования кода.
5) Нажимем кнопку “Компилировать”

334757

6) Внизу во вкладке “Ошибки” увидим следующую картину

334758

7) Наводим курсор на первую ошибку и два раза щелкаем левой кнопкой мыши. При этом мы переместимся на строку этой ошибки.

334759

8) Если хотим узнать, почему возникла эта ошибк, нажимаем F1. При нажатии этой клавиши открывается справочник, где в нашем случае мы увидим следующее.

334760

Из этого следует, что (так скажем) слово char выражает, показывает нам какой тип данных перед нами. Иными словами, это слово занято программой и его использовать нельзя.
Вот что по этому поводу говорят на сайте самого mql

h_ttps://www.mql5.com/ru/articles/1391 (уберите черточку после h, чтобы перейти на сайт)

334762

9) Меняем это слово на любое другое, или просто добавляем какой-нибудь символ к нему.
На картинке выше, добавили 1. Я обычно добавляю букву p.

334764

При этом слово становится черного цвета, а не синего как раньше.
В нашем примере всего 9 слов надо исправить.

10) Снова нажимаем кнопку компилировать. Внизу видим, что никаких ошибок нет.

334765

11) Закрываем метаэдитор. Заходим в терминал, кидаем индикатор на график и видим что он работает.

334767

Последнее редактирование модератором: 25.06.2019

  • #3

Нерабочий вариант индикатора.
Чтобы работал, надо исправить как описано выше.

  • @Ratio_MACD_v3.mq4

    9,5 КБ · Просмотры: 27

  • #4

Перед тем как использовать переменную нужно её объявить (захвалить как в игре 1000).
При объявлении надо указать тип и имя переменной, можно сразу присвоить значение.
Типы переменных заданы в языке и определяет свойство переменной (диапазон значений и точность), имя сочиняет программист на своё усмотрение.
Формат: тип имя; или тип имя=значение. Например: int peremennaya=0;
Здесь int тип переменной. Означает что она целочисленная и её значения от -2 147 483 648 до 2 147 483 647. Это можно посмотреть в справочнике. peremennaya это имя переменной. =0 присвоенное значение.
char то же тип целочисленной переменной и её значения от -128 до 127.
Проблема оказалась в том что нельзя в качестве имени переменной использовать тип переменной. В старом языке не было такого типа как char, по этому программист спокойно использовал это имя переменной. В ново языке такое имя использовать нельзя. Именно по этому переименование этих переменных помогло.

  • #5

В силу разных причин основная масса подходит к штанге, пробует и не поднимает
Перед купанием многие стоят в воде
Простые надобности на примерах
1. Ошибки со старых билдов
2. Толщина и цвет линии
3. Ограничение истории
4. Выставление стрелки и отступ
5. Вывод в настройки
6. Как найти буфер сигнала
7. Сообщения
8. Вывод сигнала или обьединение в другой индюк или сов
Это навскидку
Мона дополнять

  • #6

При изучении любого языка программирования, на начальном этапе, очень полезно решать простейшие задачки.
Напишите скрипт который выводит все числа от 1 до 1000, которые отвечают хотя бы одному условию.

  • Число четное
  • Число оканчивается цифрой 1 (пример 771).

  • #7

При изучении любого языка программирования, на начальном этапе, очень полезно решать простейшие задачки.
Напишите скрипт который выводит все числа от 1 до 1000, которые отвечают хотя бы одному условию.

  • Число четное
  • Число оканчивается цифрой 1 (пример 771).

Да все это хорошо и по карйней мере мне интересно. И я благодарен всем кто участвует.
Но как мне кажется, вот эти задачки надо все же перекинуть в тему вопросы по MQL4. А тут оставить конкретные примеры,ситуации, которые возникают у большинства обычных пользователей, как предложил Dersu.

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

  • #8

Да все это хорошо и по карйней мере мне интересно. И я благодарен всем кто участвует.
Но как мне кажется, вот эти задачки надо все же перекинуть в тему вопросы по MQL4. А тут оставить конкретные примеры,ситуации, которые возникают у большинства обычных пользователей, как предложил Dersu.

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

Хорошо.
Начинающих изучение языка программирования MQL4, приглашаю в специально созданную ветку для обучения.

  • #9

Ошибки со старых билодов.

Ошибка

‘.’ – semicolon expected – другими словами, недопустимый символ.

334840

1) Открываем индикатор в метаэдиторе, нажимаем “компилировать”, видим в окне ошибки. Щелкаем по первой два раза левой кнопкой мыши, попадаем на строку ошибки.
2) Выделяем точку в этой строке, нажимаем “поиск” – “заменить”.

334841

3) Откроется окошко. Где в поле “Найти” будет вписана точка, в поле “Заменить на” вписываем какой-либо символ кроме запрещенных $ @ . Нажимаем “Заменить”.

334842

Так заменяем точку в строках 40, 43-48

334843

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

4) Далее курсор перейдет на строку, где точка находится между цифрами.

334845

Там и далее пропускаем замену, нажав на кнопку “Найти далее”.
5) Далее делаем замену во всех предложенных случаях, в строках от 170 до 227.
6) Все последующие строки, где точка является частью дробного числа, пропускаем.
Просматриваем точки до конца кода, после этого курсор перейдет на начало документа.
7) Нажимаем “Компилировать”, если увидим такую картину, то все сделали правильно.
Желтый треугольник это предупреждение, и оно не является критической ошибкой, его можно пропустить.

334850

8) Если там все еще есть ошибки, то значит что-то пропустили. Исправляем.
9) Закрываем редактор и пользуемся индикатором.

334851

Нерабочий индикатор прикрепляю.

  • FXi 3 Semafor.mq4

    11,2 КБ · Просмотры: 21

Последнее редактирование модератором: 25.06.2019

  • #10

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

  • #11

В данном примере лучше использовать замену Bars.Count на Bars_Count, чтобы не попадать на точки в числах.
В поле “Найти” вставляем Bars.Count, а в поле “Заменить на” вставляем Bars_Count, это удобнее.

  • #12

В данном примере лучше использовать замену Bars.Count на Bars_Count, чтобы не попадать на точки в числах.
В поле “Найти” вставляем Bars.Count, а в поле “Заменить на” вставляем Bars_Count, это удобнее.

Там дело в том, что не только в Bars.Count надо заменить точку, там разных имен еще штук 5.

Чтоб не запутаться где надо,а где нет. Можно щелкать по каждой ошибке в окне ошибок и исправлять по отдельности. Но долго)

  • #13

Там дело в том, что не только в Bars.Count надо заменить точку, там разных имен еще штук 5.
Чтоб не запутаться где надо,а где нет. Можно щелкать по каждой ошибке в окне ошибок и исправлять по отдельности. Но долго)

В этих вещах всегда нужно искать золотую середину.

  • #14

Нельзя бездумно уничтожать точки. Так можно не исправить, а натворить ошибок. Точки могут не только разделять дробную часть числа, при использовании структур и классов то же точки. При том в структурах они похожи на неправильную переменную. Например in.dist может быть переменной из старого языка, новый компилятор будет ругаться, а может быть элементом структуры in из нового языка и компилятор не будет ругаться. По этому, надо обязательно ориентироваться на компилятор пока не знаете как отличить.

  • #15

Ограничение истории (подвал, гистограмма)

В теме “Доработка ботов” попросили добавить историю отображения.
Попробовал разобраться, именно в этом индикаторе, сделать это оказалось просто.
Но думаю, не все случаи такие простые. Так как я до этого хотел попробовать сделать это в индикаторе, который выложил Dersu и я не додумался, как это делается.

1) Открываем индикатор в метаэдиторе и находим выведенные настройки индикатора. Они начинаются со слова extern (англ. “внешний”)
2) Так как нам тоже надо вывести историю в настройки, мы пишем строку
extern (выводим во внешние настройки)
int (так как количество баров у нас целое число)
CountBars (задаем имя для выводимого параметра, оно и будет видно в настройках)

335084

3) Идем ниже, находим функцию int start ,
(эта функция осталась в индикаторах написанных раньше, на старых билдах.На новыйх функция int OnInit() )

335103

4) И меняем переменную Bars (количество баров на текущем графике) на имя, которое мы задали в строке 33. Меняем его только в выражении Bars-counted_bars. Компилируем.

335104

screenshot_2-jpg.335080

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

Последнее редактирование: 26.06.2019

  • #16

Ошибки со старых билдов.

По умолчанию не отображаются уровни.

Чтобы исправить, надо просто перекомпилировать индикатор.
Пункты 3 – 5,11.

  • Не видно уровней.jpg

    Не видно уровней.jpg

    62,8 КБ · Просмотры: 35

  • После перекомпилирования.jpg

    После перекомпилирования.jpg

    81,8 КБ · Просмотры: 34

  • #17

Errors Fixed in @Ratio_MACD_v3

  • @Ratio_MACD_v3.mq4

    9,5 КБ · Просмотры: 28

  • @Ratio_MACD_v3.ex4

    28 КБ · Просмотры: 17

  • #18

Errors Fixed in FXi Semafor Indicator

  • FXi 3 Semafor.ex4

    23,9 КБ · Просмотры: 15

  • FXi 3 Semafor.mq4

    22,3 КБ · Просмотры: 28

  • #19

If any one want to fix errors in MetaTrader 4 (mq4) indicators, i will try to fix issues for free of cost. based on my free time. I am learning mql coding, for my skills improvement only i am doing this one.

  • #20

If any one want to fix errors in MetaTrader 4 (mq4) indicators, i will try to fix issues for free of cost. based on my free time. I am learning mql coding, for my skills improvement only i am doing this one.

Я специально выкладывал не исправленные версии индикаторов, чтобы люди сами исправляли, а не скачивали готовое решение =)

  • Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту, будут также заблокированы.

  • #1

Вот при компиляции вылазит вот такая ошибка…

Прошу помочь решить проблему!! Заранее спасибо!

David.D.Rocco


  • #2

Точку с запятой пропустил “;”

  • #3

Точку с запятой пропустил “;”

Вот еще такая ошибка…

David.D.Rocco


  • #4

Распаковка прописана в скрипте через ISArcExtract, но архива нет на месте. Либо он действительно отсутствует, либо имя архива не то. Открой справку по isdone и изучи.

Добавить комментарий