+321 123 4567
info@test.com
My Account
Forex Lab
  • Главная
  • Софт
  • Стратегии
  • Брокер
  • Блог
  • Item A
    • Sub item A1
    • Sub item A2
  • Item B
    • Sub item B1
    • Sub item B2
  • Item C
    • Sub item C1
    • Sub item C2

Советник «Болтун»

Советник «Болтун»

Сначала немного теории.
В MQL4 есть три способа вывода текстовой информации:

Функция Comment() выводит сообщение в левом верхнем углу графика.
Функция Print() записывает информацию на вкладке терминала «эксперты».
Функция Alert() выводит сообщение в диалоговом окне.
Можете использовать любую которая больше подходит к конкретной ситуации.

Примеры составления строки:
int a = 2;
string text = «открыто «+ a +» ордера. «;
в результате получим строку – открыто 2 ордера.
Можно записать и так:
StringConcatenate(«открыто «,а,» ордера.»);
Результат будет тот же но StringConcatenate делает это быстрее.

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

switch(выражение)
{
case константа: операторы break
case константа : операторы break
…
default : операторы
}

switch(x)
 {
  case 4: Print("Открыт Buy ордер"); break
  case 7 : Print("Закрыт Buy ордер"); break
  default : Print("Ничего не знаю");
 }

Если выражение — х = 4, выполняются операторы связанные с меткой case константа 4.
Если выражение — х = 7, выполняются операторы связанные с меткой case константа 7.
Если выражение — х не 4 и не 7, выполняются операторы связанные с меткой default.
Метка default может отсутствовать, тогда если — х не 4 и не 7 и отсутствует метка default, не выполняется никаких действий.
Оператор break выход из оператора switch.
Пользовательская функция.
В советнике мы уже использовали пользовательские функции (Orders и Expiration), они работали только с глобальными переменными. Теперь рассмотрим способ как передавать данные в функцию для обработки и получении с функции результата этой обработки.

int A, B, C; // объявляем переменные
A = 2; // присвоим переменной А значение 2
B = 3; // присвоим переменной В значение 3
C= X(A, B); // вызываем функцию Х и передаем ей параметры А и В для обработки. В переменную С записывается значение которое вернула функция Х после обработки

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

int X(int E, int F)
{
int H;
H = E + F;
return(H);
}

После обработки в функции X переданных ей данных оператор возврата return вернет результат, и переменой C будет присвоено число 5.
С теорией покончили, перейдем к применению.
Научим советник общаться.
Добавим в советник функцию inf(). С помощью этой функции он будет сообщать нам о своих действиях.

int inf(int Mess_Number, int Number=0, double Value=0.0)
 {
  string Graf_Text;                   // Строка сообщения
  switch(Mess_Number)                 // Переход на сообщение
   {
    case 1:  Graf_Text = StringConcatenate("Попытка открыть ",Text," ордер. Ожидание ответа..");  break;
    case 2:  Graf_Text = StringConcatenate("Открыт ",Text," ордер: № ",Number);           break;
    case 3:  Graf_Text = StringConcatenate("Попытка модифицировать ",Text," ордер: № ",Number,". Ожидание ответа.."); break;
    case 4:  Graf_Text = StringConcatenate("Ордер ",Text,"  модифицирован: № ",Number);   break;
    case 5:  Graf_Text = StringConcatenate("Попытка закрыть ",Text," ордер № ",Number,". Ожидание ответа..");  break;
    case 6:  Graf_Text = StringConcatenate("Закрыт ",Text," ордер: № ",Number);           break;
    case 7:  Graf_Text = StringConcatenate("Удалён отложенный ",Text," ордер № ",Number); break;
    case 8:  Graf_Text = StringConcatenate("Ордер ",Number," преобразовался в рыночный"); break;
    case 9:  Graf_Text = StringConcatenate("Переоткрыт ордер ",Number);                   break;
    case 10: Graf_Text = StringConcatenate("Частично закрыт ордер ",Number);              break;
    case 11: Graf_Text = StringConcatenate("Новая минимальная дистанция: ",Number);       break;
    case 12: Graf_Text = StringConcatenate("Не хватает денег на ",DoubleToStr(Value,2)," лотов"); break;
    case 15: switch(Number)                 // Переход на номер ошибки
              {
               case 2: Graf_Text = "Общая ошибка.";                 break;
               case 4: Graf_Text = "Торговый сервер занят.";        break;
               case 129: Graf_Text = "Неправильная цена. ";         break;
               case 135: Graf_Text = "Цена изменилась.";            break;
               case 136: Graf_Text = "Нет цен. Ждём новый тик..";   break;
               case 137: Graf_Text = "Брокер занят.";               break;
               case 146: Graf_Text = "Подсистема торговли занята."; break;
               case 5 :  Graf_Text = "Старая версия терминала.";    break;
               case 64:  Graf_Text = "Счет заблокирован.";          break;
               case 133: Graf_Text = "Торговля запрещена";          break;
               case 134: Alert("Недостаточно денег для совершения операции.");
                         return(0);                             // Выход из функции
               default:  Graf_Text = StringConcatenate("Возникла ошибка ",Number);
              }
    default: Graf_Text = StringConcatenate("default ",Mess_Number);
   }
  Alert(Graf_Text);
 }

Вот его джентльменский набор фраз с помощью которых он будет с нами общаться. Его можно увеличить или уменьшить исходя из надобности. Блок обработки ошибок это на будущее.
Эту функцию мы будем вызывать перед вызовом торговой функции OrderSend, сообщим о попытке открыть ордер. И после OrderSend, если нет ошибок сообщим что ордер выставлен. Также вызываем функцию inf() перед OrderDelete, сообщаем о попытке удалить ордер и после успешно удаления функцией OrderDelete сообщаем об этом.
Не забудьте объявить новые переменные (Ticket, Text, answer). Переменная answer типа bool она может иметь только два значения 1 или 0, или true и false соответственно.

Исходник: TradeOnNews-0.2

Волшебство в MQL4 — https://forexlab.ru/mql4-magic/

Предыдущая запись
Волшебство в MQL4
Следующая запись
Обработка ошибок

Свежие записи

  • Как работают биржи: классификация, виды, особенности
  • Moving Average: описание, настройка, стратегии
  • Что такое Non farm payrolls
  • HQBroker: мошенники или честный брокер
  • Торговля на бирже для начинающих: полный гайд

Рубрики

  • CFD (2)
  • FOREX (14)
  • Meta Trader 5 (6)
  • MetaTrader 4 (13)
  • Price Action (9)
  • QUIK (2)
  • Акции (9)
  • Бинарные опционы (11)
  • Биржи (1)
  • Брокеры (5)
  • Волновой анализ (7)
  • Графический анализ (28)
  • Индикаторный анализ (36)
  • Криптовалюты (2)
  • Методы управления капиталом (11)
  • Новости проекта Forex Lab (2)
  • Объемы (10)
  • Основы торговли (7)
  • Подкаст (7)
  • Полезное (3)
  • Программирование (20)
  • Психология трейдинга (25)
  • Свечной анализ (2)
  • Скальпинг (1)
  • Технический анализ (19)
  • Торговые платформы (26)
  • Торговые стратегии и системы (73)
  • Фибо (11)
  • Фондовый рынок (27)
  • Фракталы (4)
  • Фундаментальный анализ (19)
  • Фьючерсы (20)

Представленная информация не является индивидуальной инвестиционной рекомендацией, ни при каких условиях, в том числе при внешнем совпадении ее содержания с требованиями нормативно-правовых актов, предъявляемых к индивидуальной инвестиционной рекомендации. Любое сходство представленной информации с индивидуальной инвестиционной рекомендацией является случайным.
Какие либо из указанных финансовых инструментов или операций могут не соответствовать Вашему инвестиционному профилю.
Упомянутые в представленном сообщении операции и (или) финансовые инструменты ни при каких обстоятельствах не гарантируют доход, на который Вы возможно рассчитываете при условии использования предоставленной информации для принятия инвестиционных решений.
Информационный портал ForexLab не несет ответственности за возможные убытки инвестора в случае совершения операций, либо инвестирования в финансовые инструменты, упомянутые в представленной информации.
Во всех случаях определение соответствия финансового инструмента либо операции инвестиционным целям, инвестиционному горизонту и толерантности к риску является задачей инвестора.
Не является образовательной деятельностью. Не сопровождается выдачей документов об образовании и (или) квалификации. При полном или частичном использовании материалов сайта ссылка на https://forexlab.ru/ обязательна.

© 2008-2020 Forex Lab

  • Главная
  • Политика
  • Авторские права
  • Согласие
  • Риски
  • Оферта