incorrect channel count must be from 1 to 24 что делать

Что такое ошибка 400 Bad Request и как ее исправить

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

Раздражает, когда какой-то сайт не загружается и отзывается непонятными ошибками. Обычно они сопровождаются одним из десятков HTTP-кодов, которые как раз намекают на характер сбоя, а также его вероятные причины.

В этом материале поговорим об ошибке 400 Bad Request. Почему она появляется и как ее исправить.

Чуть подробнее об ошибке 400

Как и другие коды, начинающиеся на четверку, 400 Bad Request говорит о том, что возникла проблема на стороне пользователя. Зачастую сервер отправляет ее, когда появившаяся неисправность не подходит больше ни под одну категорию ошибок.

Стоит запомнить — код 400 напрямую связан с клиентом (браузером, к примеру) и намекает на то, что отправленный запрос со стороны пользователя приводит к сбою еще до того, как его обработает сервер (вернее, так считает сам сервер).

Из-за чего всплывает Bad Request?

Есть 4 повода для возникновения ошибки сервера 400 Bad Request при попытке зайти на сайт:

Читайте также

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

Исправляем ошибку 400 Bad Request на стороне клиента

Так как ошибка 400 в 99 случаев из 100 возникает на стороне клиента, начнем с соответствующих методов. Проверим все элементы, участвующие в передаче запроса со стороны клиента (браузера).

Проверяем адрес сайта

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

А еще стоит поискать запрашиваемую страницу через поисковик, встроенный в сайт. Есть вероятность, что конкретная страница куда-то переехала, но сервер не может показать подходящий HTTP-код в духе 404 Not Found. Если, конечно, сам сайт работает.

Сбрасываем параметры браузера

Этот метод срабатывает, если сервер отказывается принимать запросы из-за «битых» куки или других данных. Дело в том, что сайт использует куки-файлы, чтобы хранить информацию о пользователе у него же в браузере. При входе конкретного человека на ресурс, он пытается распознать куки и сравнить информацию с той, что уже есть на сервере.

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

В зависимости от браузера процесс удаления куки-файлов может немного отличаться. В Chrome это работает так:

Загружаем файл подходящего размера

Если ошибка 400 Bad Request появляется при попытке загрузить на сайт какой-нибудь файл, то стоит попробовать загрузить файл поменьше. Иногда вебмастера ленятся грамотно настроить ресурс, и вместо понятного объяснения вроде «Загружаемые файлы не должны быть размером больше 2 мегабайт» люди получают Bad Request. Остается только гадать, какой там у них лимит.

Устраняем проблемы, связанные с Windows и сторонним софтом

Помимо браузера, на работу сети могут влиять другие программные продукты (экраны, защищающие от «непонятных подключений»). И вирусы. Да и сама Windows может стать проблемой. Почти любой ее компонент. Поэтому надо бы проделать следующее:

Ищем проблему на стороне сервера

Если что-то происходит на стороне ресурса, то это редко заканчивается ошибкой 400. Но все-таки есть несколько сценариев, при которых клиента обвиняют в сбое зря, а настоящая вина лежит на сервере.

Проверяем требования к HTTP-заголовкам

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

Удаляем свежие обновления и плагины

Иногда ошибка 400 Bad Request появляется после обновления CMS или установки новых плагинов. Если у вас она появилась из-за этого, то наиболее логичное решение — откатиться до более ранней версии CMS и удалить все новые плагины.

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

Проверяем состояние базы данных

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

Исправляем ошибки в коде и скриптах

Ничего из вышеперечисленного не помогло? Тогда осталось проверить свой код и работающие скрипты. Лучше провести дебаггинг вручную и не надеяться на помощь компьютера. Сделать копию приложения или сайта, потом пошагово проверить каждый отрезок кода в поисках ошибок.

В крайнем случае придется кричать «полундра» и звать на помощь техподдержку хостинга. Возможно, возникли сложности на их стороне. Тогда вообще ничего не надо будет делать. Просто ждать, пока все исправят за вас.

На этом все. Основные причины появления 400 Bad Request разобрали. Как ее лечить — тоже. Теперь дело за вами. Пользуйтесь полученной информацией, чтобы больше не пришлось мучиться в попытках зайти на нужный ресурс.

Источник

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

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

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

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

На аппаратном уровне к ошибкам в определении видеокарт или к постоянному их вылету при работе приводят некоторые часто встречающиеся проблемы. К ним относятся:

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

ОСНОВНЫМИ ПРИЧИНАМИ НЕИСПРАВНОСТЕЙ В ЛЮБЫХ ЭЛЕКТРИЧЕСКИХ УСТРОЙСТВАХ ЯВЛЯЮТСЯ НАЛИЧИЕ ЛИШНИХ ИЛИ ОТСУТСТВИЕ НУЖНЫХ КОНТАКТОВ.

Программные ошибки, связанные с видеокартами, приводящие к сбоям майнеров

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

Ошибки, вызванные неправильной установкой драйверов

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

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

После такого обновления может появиться ошибка 43, а также значительно упасть хешрейт видеокарт. Для видеокарт AMD после установки драйверов нужно применить AMD-Compute-Switcher, а для видеокарт Нвидиа включить P0 state согласно методике, описанной в статье «Оптимизация потребления видеокарт Nvidia при майнинге».

Если после применения патчера и мода (для Windows 7) и перезагрузки системы ошибка не исчезает, то возможно на видеокарте прошит неверный BIOS, произошел сбой при его записи, либо вышла из строя микросхема BIOS на видеокарте. Для устранения такой ошибки нужно:

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

Ошибки в конфигурации майнера при указании видеокарт

Этот вид ошибок возникает в случае отсутствия или неправильного указания в пакетном файле для запуска майнинга видеокарт, которые должны осуществлять майнинг (как АМД, так и Nvidia).

Например, в программе claymore dual miner и других программах от этого программиста, иногда возникает ошибка NO AMD OPENCL found. Она появляется при запуске программы для майнинга и обозначает, что не найдено устройств, поддерживающих технологию OPENCL. В разных программах она может иметь различное написание, но ее суть сводится к невозможности найти подходящее для майнинга устройство. При отсутствии аппаратных ошибок и проблем, связанных с неверной установкой драйверов, неисправность нужно искать в конфигурации майнера.

Эта ошибка может возникать и в других программах, использующихся для майнинга. Например, в программе sgminer подобная ошибка называется clDevicesNum returned error, no GPUs usable. При запуске майнера появляется подобное сообщение:

[02:56:02] Started sgminer v0.1.1

[02:56:02] * using Jansson 2.11

[02:56:09] Specified platform that does not exist

[02:56:09] clDevicesNum returned error, no GPUs usable

[02:56:09] Command line options set a device that doesn’t exist

Еще раз повторимся, что если в диспетчере устройств нужные видеокарты отображены корректно и не имеют восклицательных знаков с кодами ошибки, то неправильно сконфигурирован BAT-файл. Это случается в системах с различными типами карт, установленными в системе (например, интегрированная видеокарта плюс видеокарты AMD или одновременное использование GPU от AMD и Nvidia и все три типа устройств вместе). Как правило, для устранения этой ошибки нужно либо правильно указать номера использующихся в майнере видеокарт, либо указать какую платформу (AMD или Nvidia) нужно использовать.

В sgminer (его различных версиях и подобных программах, например, cgminer) в смешанных системах может понадобиться указывать в командной строке параметр —gpu-platform 1 или 2.

Обычно, при отсутствии включенной внутренней видеокарты этот майнер работает без указания этого парметра, но в этом случае иногда может потребоваться использование команды —gpu-platform 0.

Другие ошибки, приводящие к сбоям в работе майнеров

Рассмотрим другие ошибки, которые иногда возникают при работе программ для майнинга:

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

ошибка WATCHDOG: GPU hangs in OpenCL call появляется при переразгоне видеокарт, некачественных райзерах, плохих (очень длинных) соединительных USB-кабелях. Не нужно выжимать из видеокарт все соки, увеличивая частоту памяти и видеоядра, так как простои, вызванные переразгоном, сведут на нет весь доход от такого майнинга. Понять то, где выставлены очень большие значения частоты поможет программа hwinfo, которая показывает ошибки по памяти для видеокарт AMD:

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

Как правило, при переразгоне по памяти вылетает одна из видеокарт, а при чрезмерном разгоне по ядру (или очень сильном даунвольтинге) компьютер полностью зависает;

Заключение

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

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

Понимание закона Ома поможет избежать проблем, связанных с использованием переходников с разъема питания SATA на райзера, которое гарантированно приведет к прогоранию контактов и связанным с этим проблемам.

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

Источник

Incorrect channel count must be from 1 to 24 что делать

For Auto Repair Shops and Parts Store’s, Pro Pro Repair is quality Auto Shop Management Software at an Affordable Price!Print Work Orders/Repair Orders/Invoices, Track Sales, Track Inventory, Reminders

Рейтинг Alexa: #21,569,627 Google PageRank: 2 из 10 Яндекс ТИЦ: 10

Сайт посвящённый программам Discovery Channel о Вселенной, Науке, Человеке, Природе, Выживанию, Автомобилях, Сооружениях

Google PageRank: 0 из 10 Яндекс ТИЦ: 0

Google PageRank: 0 из 10

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

Google PageRank: 0 из 10 Яндекс ТИЦ: 0

The O.C. Appliance Repair Orange County, CA. Servicing all home appliances, refrigerator repair Orange County. 888-878-7227 Only Authorized OEM. Call Now!

Рейтинг Alexa: #17,882,450 Google PageRank: 3 из 10

Zombie Techs is the leader for iPad and iPhone repair in Schaumburg. Call or stop by today 847-348-0264

Рейтинг Alexa: #8,870,616 Google PageRank: 0 из 10

Google PageRank: 0 из 10 Яндекс ТИЦ: 0

Delivery of small parties. Qualified consulting. The best possible quality at affordable prices. Click here to buy Herbal SPERM ENHANCEMENT remedy online!

Reimage is an online computer repair tool that will automatically fix Windows by replacing corrupt files, leaving your data intact. Scan your PC for free.

Рейтинг Alexa: #237 Google PageRank: 0 из 10 Яндекс ТИЦ: 20

Pioneering & Revolutionizing An Entire Industry of Eyeglass Repair

Google PageRank: 0 из 10 Яндекс ТИЦ: 0

Belzona provides products and services to solve the maintenance issues that arise from the equipment and structures in these industries.

Google PageRank: 3 из 10

dog channel tv сайт о собаках и о тех, кто их любит, видео о породах собах, всемирные европейские международные выставки, советы опытных заводчиков, дискуссии, споры о наболевшем, форум любителей собак, репортаж с выставки

Рейтинг Alexa: #4,724,039 Google PageRank: 3 из 10

We Repair Curb Rashed, Scratched, Scraped, Bent, and Cracked Wheels and Rims. We refinish, restore, and paint aluminum rims in Sacramento and all surrounding areas.

Рейтинг Alexa: #8,537,718 Google PageRank: 1 из 10

Pudendal Nerve Terminal prototype in count select options Osteosynthese mit ei- ner Belgium prototype count options in select, om pin trading, health cover options australia

Google PageRank: 0 из 10 Яндекс ТИЦ: 0

Google Тренды это диаграмма для отслеживания сезонности ключевых слов. Этот график позволяет лучше понять сезонное изменение полулярности запросов по определенной тематике.

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

Источник

Исправление ошибок DBCC CHECKDB (1С, SQL) вручную

Все началось с того, что после проблем с жестким диском на сервере и «не совсем удачным» восстановлением рабочей базы данных 1С начала сообщать «could not continue scan with nolock» при проведении документов и закрываться с непоправимой ошибкой. Бэкап был, но не самый свежий, а данные терять не хотелось. Что же лучше делать?

Такое сообщение говорит, как правило, о том, что данные базы разрушены.

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

Далее запускаем в SQL Management Studio и выполняем DBCC CHECKDB. Выполняем ее так, чтобы данные не терялись, параметр REPAIR_ALLOW_DATA_LOSS оставим на случай совсем безнадежный.

Например, наша база называется Office

Выполняем следующие запросы:

ALTER DATABASE Office
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

DBCC CHECKDB (N’Office’, REPAIR_REBUILD) WITH NO_INFOMSGS
GO

Смотрим что сообщила проверка и видим множество сообщений примерно такого содержания:

CHECKDB found 0 allocation errors and 8 consistency errors in table ‘DT3311’ (object ID 1970106059).
CHECKDB found 0 allocation errors and 43 consistency errors in database ‘Office’.
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (Office, repair_rebuild).

После проверки выполняем запрос для дальнейших операций с базой данных:

ALTER DATABASE Office
SET MULTI_USER;

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

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

SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xacafd5b7; actual: 0x21c9cf6a). It occurred during a read of page (1:8473) in database ID 8 at offset 0x00000004232000 in file ‘E:\SQL_Data\Office.mdf’. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

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

Смотрим резервную базу, поле IDDOC в таблице начиная со строки 1916, это документ с ID ‘ 1SP ‘

В рабочей базе мы ничего с документом не можем сделать: ни открыть его в 1С, ни прочитать его табличную часть, ни удалить его. Что делать?

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

Insert into Test.dbo.DT3311
Select * From DT3311 Where IDDOC <> ‘ 1SP ‘

Запрос выполнился без ошибок. Это говорит о том, что других данных с «мусором» в этой таблице нет.

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

Insert into Test.dbo.DT3311
Select * From DT3311 Where IDDOC = ‘ 1SP ‘

Теперь в тестовой базе есть полные данные. Удаляем таблицу в рабочей базе, создаем заново и выполняем запрос:

Insert into DT3311
Select * From Test.dbo.DT3311

Пробуем прочитать полностью другие таблицы, ведь мы помним, что не проводились документы. Выясняется, что не могут прочитаться некоторые таблицы итогов регистров (RGXXX). В данном случае можно просто удалить эти таблицы, данные в них восстановит сама 1С. Заходим монопольно в 1С: Предприятие, сдвигаем ТА на самый первый документ, затем на самый последний проведенный документ. В результате итоги по регистрам пересчитаются.

Производим повторную проверку ошибок и убеждаемся в их отсутствии.

Беремся за другую базу, Acc.

Выполняем следующие запросы:

ALTER DATABASE Acc
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

DBCC CHECKDB (N’Acc’, REPAIR_REBUILD) WITH NO_INFOMSGS
GO

Для нее мы получили такой перечень ошибок:

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

Не забываем вернуть доступ к базе данных:

ALTER DATABASE Acc
SET MULTI_USER;

Для начала запишем скрипты на создание индексов (поочередно):

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

Затем удаляем индексы:

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

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

Все исправили, производим повторную проверку и убеждаемся в отсутствии ошибок.

Источник

MQL4: Исправляем ошибки и предупреждения при компиляции в MetaEditor

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьРазработка торговых экспертов на языке MQL4 является не такой уж простой задачей. Во-первых – алгоритмизация любой сложной торговой системы уже представляет собой проблему, так как нужно учесть очень много деталей, начиная с особенностей ТС и заканчивая спецификой среды MetaTrader 4. Во-вторых, даже наличие детальнейшего алгоритма не избавляет от сложностей, возникающих при переносе разработанного алгоритма на язык программирования MQL4.

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

Самые распространенные ошибки компиляции

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

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

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

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

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

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьДля исправления данной ошибки нужно исправить имя переменной или функции. Я рекомендую придерживаться следующей системы для именования:

Все функции должны обозначать действие. То есть это должен быть глагол. Например, OpenLongPosition() или ModifyStopLoss(). Ведь функции всегда именно что-то делают, верно?

Кроме того, функции желательно называть в так называемом CamelCase стиле. А переменные в cebab_case стиле. Это общепринятая практика.

Кстати, об именах переменных. Переменные – это существительные. Например, my_stop_loss, day_of_week, current_month. Не так страшно назвать переменную длинным именем, гораздо страшнее назвать ее непонятно. Что такое dow, индекс Dow Jones? Нет, это, оказывается, день недели. Конечно, сегодня вам и так понятно, что это за переменная. Но когда вы откроете код советника месяц спустя, все будет уже не так явно. А это время, упущенное на расшифровку посланий из прошлого – оно вам надо?

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

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

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьДля исправления данной ошибки снова нужно скорректировать имена переменных или функций, ну или сразу называть их по-человечески. В идеале код нужно писать так, чтобы даже человек, не знающий программирование, просто его прочел и понял, что там вообще происходит.

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

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

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьПоэтому, когда вы разбираете код классики, такой, как WallStreet, Ilan и прочей нетленки (что очень полезно для саморазвития), можно натолкнуться на эту ошибку. Лечится она очень просто, например, при использовании такой вот строки:

Вот так можно запросто решить проблему:

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

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

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьВ режиме компиляции по умолчанию компилятор выводит предупреждение:

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьЕсли возвращаемое значение функции не соответствует объявлению:

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьВ режиме компиляции по умолчанию компилятор выводит предупреждение:

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьДля исправления таких ошибок в код функции всего-навсего нужно добавить оператор возврата return c возвращаемым значением соответствующего типа.

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

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

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьВ режиме компиляции по умолчанию компилятор выводит предупреждение:

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьДля исправления таких ошибок нужно явно указать передачу массива по ссылке, добавив префикс & перед именем массива:

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

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьДля устранения подобных ошибок нужно скопировать необходимые данные из константного массива:

Одна из самых распространенных ошибок – потеря советником индикатора. В таких случаях обычно пользователи эксперта на форумах гневно пишут: «Советник не работает!» или «Ставлю советник на график и ничего не происходит!». Решение этого вопроса на самом деле очень простое. Как всегда, достаточно просто заглянуть на вкладку «Журнал» терминала и обнаружить там запись вроде:

Говорит это нам о том, что индикатор в папку положить забыли, или же он назван по-другому. Если индикатор отсутствует, нужно добавить его в папку с индикаторами. Если он есть, стоит проверить его название в коде советника – скорее всего там он называется по-другому.

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

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

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

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

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьДля исправления таких предупреждений нужно скорректировать имена глобальных переменных.

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

В следующем примере:

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьВ данном примере компилятор предупреждает о возможной потере точности при присвоении различных типов данных и неявном преобразовании типа int в string.

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

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

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

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьДля исправления нужно просто убрать неиспользуемые переменные из кода программы.

Диагностика ошибок при компиляции

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

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

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

Написать достаточно большой код без единой ошибки – очень приятно. Но, к сожалению, так получается не часто. Я не рассматриваю здесь ошибки, которые приводят к неверному исполнению кода. Здесь пойдёт речь об ошибках, из-за которых становится невозможной компиляция.

Весьма распространённые ошибки – вставка лишней скобки в сложном условии, нехватка скобки, не выставление двоеточия, запятой при объявлении переменных, опечатка в названии переменной и так далее. Часто при компиляции можно сразу увидеть, в какой строке допущена подобная ошибка. Но бывают и случаи, когда найти такую ошибку не так просто. Ни компилятор, ни зоркий глаз нам не могут помочь сразу найти ошибку. В таких случаях, как правило, начинающие программисты начинают “обходить” весь код, пытаясь визуально определить ошибку. И снова, и снова, пока выдерживают нервы.

Однако MQL, как и другие языки программирования, предлагает отличный инструмент – комментирование. Используя его, можно отключать какие-то участки кода. Обычно комментирование используют именно для вставки каких-то комментариев, или же отключения неиспользуемых участков кода. Комментирование можно также успешно применять и при поиске ошибок.

Поиск ошибок обычно сводится к определению участка кода, где допущена ошибка, а затем, в этом участке, визуально находится ошибка. Думаю, вряд ли кто-то будет сомневаться в том, что исследовать “на глаз” 5-10 строчек кода проще и быстрей, чем 100-500, а то и несколько тысяч.

При использовании комментирования задача предельно проста. Сначала нужно закомментировать различные участки кода (иногда чуть ли не весь код), тем самым “отключив” его. Затем, по очереди, комментирование снимается с этих участков кода. После очередного снятия комментирования совершается попытка компиляции. Если компиляция прошла успешно – ошибка не в этом участке кода. Затем открывается следующий участок кода и так далее. Когда находится проблемный участок кода, визуально ищется ошибка, затем устраняется. Опять происходит попытка компиляции. Если всё прошло успешно, ошибка устранена.

Важно правильно определять участки кода, которые необходимо комментировать. Если это условие (или иная логическая конструкция), то оно должно комментироваться полностью. Если комментируется участок кода, где объявляются переменные, важно, чтобы не был открыт участок, где происходит обращение к этим переменным. Иначе говоря – комментирование должно применяться по логике программирования. Несоблюдения такого подхода приводит к возникновению новых, вводящих в заблуждение, ошибок при компиляции.

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьВот отличный пример ошибки, когда неясно, где ее искать и нас может выручить комментирование кода.

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

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

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

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

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

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

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

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

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

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

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьОбычно такая ошибка возникает в случаях, когда значение делителя определяется значениями каких-либо внешних данных. Например, если анализируются параметры торговли, то величина задействованной маржи оказывается равна 0, если нет открытых ордеров. Другой пример: если анализируемые данные считываются из файла, то в случае его отсутствия нельзя гарантировать корректную работу. По этой причине желательно стараться учитывать подобные случаи и корректно их обрабатывать.

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

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

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьИспользование 0 вместо NULL для текущего символа

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

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

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

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

Еще лучше, если вы будете использовать предопределенные переменные _Symbol и _Period – они обрабатываются быстрее:

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

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

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

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

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

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

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

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

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

Обработка ошибок времени выполнения

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

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

В наборе “из коробки” доступны некоторые библиотеки для упрощения написания советников, в том числе и для работы с ошибками. Хранятся они в папке MQL4/Include:

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делатьНам понадобятся две библиотеки:

Поэтому подключим в наш проект обе эти библиотеки:

Сами описания ошибок находятся в файле MQL4/Library/stdlib.mql4 и они на английском языке. Поэтому, если вы против иностранных языков, всегда можно переписать описания на свой родной.

Еще одна встроенная необходимая нам функция – GetLastError(). Именно она возвращает коды ошибок в виде целого числа (int), который мы потом будем обрабатывать. Сами коды ошибок и их описания на русском можно посмотреть в руководстве по mql4 от MetaQuotes. Оттуда же можно взять информацию для перевода файла stdlib.mql4 на русский.

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

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

Рассмотрим для примера две типичные для экспертов на MQL4 ошибки:

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

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

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

Использовать ее мы будем следующим образом:

Конечно, это упрощенный пример. Для написания более грамотных функций открытия, закрытия и модификации ордеров смотрите этот урок.

Первым параметром в функцию logError() передается имя функции, в которой была обнаружена ошибка, в нашем примере – в функции openLongTrade(). Если наш эксперт вызывает функцию OrderSend() в нескольких местах, это позволит нам точно установить, в каком из них произошла ошибка. Вторым параметром передается описание ошибки, чтобы можно было понять, где именно внутри функции openLongTrade() была обнаружена ошибка. Это может быть как краткое описание ошибки, так и более развернутое, с перечислением значений всех параметров, переданных во встроенную функцию.

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

То есть сразу будет видно:

Теперь рассмотрим третий, необязательный, параметр функции logError(). Он необходим в тех случаях, когда мы хотим обработать конкретный вид ошибки, а об остальных будем отчитываться в протоколе работы эксперта, как и прежде:

Здесь в функции updateStopLoss() вызывается встроенная функция OrderModify(). Эта функция несколько отличается в плане обработки ошибок от OrderSend(). Если ни один из параметров изменяемого ордера не отличается от его текущих параметров, то функция вернет ошибку ERR_NO_RESULT. Если в нашем эксперте такая ситуация допустима, то мы должны игнорировать конкретно эту ошибку. Для этого мы анализируем значение, возвращаемое GetLastError(). Если произошла ошибка с кодом ERR_NO_RESULT, то мы ничего не выводим в протокол.

Однако если произошла другая ошибка, то необходимо полностью отрапортовать о ней, как мы делали это раньше. Именно для этого мы сохраняем результат функции GetLastError() в промежуточной переменной и передаем его третьим параметром в функцию logError(). Дело в том, что встроенная функция GetLastError() автоматически обнуляет код последней ошибки после своего вызова. Если бы мы не передали код ошибки явно в logError(), то в протоколе была бы отражена ошибка с кодом 0 и описанием “no error”.

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

Диагностика логических ошибок

incorrect channel count must be from 1 to 24 что делать. Смотреть фото incorrect channel count must be from 1 to 24 что делать. Смотреть картинку incorrect channel count must be from 1 to 24 что делать. Картинка про incorrect channel count must be from 1 to 24 что делать. Фото incorrect channel count must be from 1 to 24 что делать

Логические ошибки в коде эксперта могут доставить много проблем. Отсутствие возможности пошаговой отладки экспертов делают борьбу с такими ошибками не очень приятным занятием. Основным средством для диагностики этого на данный момент является встроенная функция Print(). С ее помощью можно выполнять распечатку текущих значений важных переменных, а также протоколировать ход работы эксперта прямо в терминале во время тестирования. При отладке эксперта во время тестирования с визуализацией также может помочь встроенная функция Comment(), которая выводит сообщения на график. Как правило, убедившись, что эксперт работает не так, как было задумано, приходится добавлять временные вызовы функции Print() и протоколировать внутреннее состояние эксперта в предполагаемых местах возникновения ошибки.

Однако, для обнаружения сложных ошибочных ситуаций порой приходится добавлять десятки таких вызовов функции Print(), а после обнаружения и устранения проблемы их приходится удалять или комментировать, чтобы не загромождался код эксперта и не замедлялось его тестирование. Ситуация ухудшается, если в коде эксперта функция Print() уже используется для периодического протоколирования различных состояний. Тогда удаление временных вызовов Print() не удается выполнить путем простого поиска фразы ‘Print’ в коде эксперта. Приходится задумываться, чтобы не удалить еще и полезные вызовы этой функции.

Например, при протоколировании ошибок функций OrderSend(), OrderModify() и OrderClose() полезным бывает печатать в протокол текущее значение переменных Bid и Ask. Это несколько облегчает распознавание причин таких ошибок, как ERR_INVALID_STOPS и ERR_OFF_QUOTES.

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

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

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

В данном случае, так как мы открываем длинную позицию, совершенно очевидно, что при нормальной работе эксперта значение параметра stopLoss никогда не будет больше или равно текущей цене Bid. То есть, при вызове функции openLongTrade() всегда выполняется условие stopLoss

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *