#define _Symbol2 "EURUSD" // Советник будет работать только с этим символом, но OnTick будет идти от того, на котором запущен string Symbol2() { return _Symbol2; } #define Symbol Symbol2 #define _Symbol _Symbol2
Уважаемые форумчане! Просьба подсказать, как заставить советник (например этот) работать принудительно на одной паре, что нужно поменять, чем можно "обернуть код":
- если в тестере выбираем любую другую пару, работает только заданная в коде
- если кидаем на график любой другой пары, работает только заданная в коде
Конкретно для указанного советника ( N-_Candles_v3 ) нужно добавить входной параметр "Trade sybmol"
//--- input parameter input string InpSymbol = "AUDUSD"; // Trade sybmol //... //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- m_symbol.Name(InpSymbol); // sets symbol name
и передать этот входной параметр в метод Name
Конкретно для указанного советника ( N-_Candles_v3 ) нужно добавить входной параметр "Trade sybmol"
и передать этот входной параметр в метод Name
Это не будет работать.
Запретить работу на всех символах, кроме того на котором разрешаете. StringFind вам в этом поможет.
Всем спасибо!
Обратите внимание, что пример приведённый выше это только общая рекомендация - ввести входной параметр. Кроме этого нужно смотреть на остальной код, понимать алгоритм работы и при необходимости явно прописывать обращение к заданному символу из входных параметров.
То есть одного внесения входного параметра, как правило, недостаточно.
Запретить работу на всех символах, кроме того на котором разрешаете. StringFind вам в этом поможет.
if (StringFind(Symbol(), "EURUSD") != -1){....}
Спасибо! Нужно каждую функцию и тип данных обернуть?
в OnInit(), OnTick(), bool и т.д.
Спасибо! Нужно каждую функцию и тип данных обернуть?
в OnInit(), OnTick(), bool и т.д.
Проверяете в OnInit, устанавливаете флаг разрешения/запрета работы и в том-же OnTick проверяете его значение. Разрешено то работаем, ну а на нет и работы нет.
#property strict bool work = true; void OnInit() { if(StringFind(Symbol(), "EURUSD", 0) < 0) { work = false; Comment( "На данном символе советник не работает." ); Print("На данном символе советник не работает."); return; } // Если символ позволяет работаем } void OnTick() { if( !work ) return; // Если символ позволяет работаем }
Проверяете в OnInit, устанавливаете флаг разрешения/запрета работы и в том-же OnTick проверяете его значение. Разрешено то работаем, ну а на нет и работы нет.
Ваш код позволит работать с другим символом, если у брокера есть символ допустим с префиксом, EURUSD_с
Нужно проверять полное соответствие.
Ваш код позволит работать с другим символом, если у брокера есть символ допустим с префиксом, EURUSD_с
Нужно проверять полное соответствие.
Вот именно что позволяет. Бывают ситуации особенно на центовиках когда нужно ограничить по валютной паре, а в наборе все символы с префиксами. Поэтому жесткая привязка к одному символу не совсем корректна будет.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые форумчане! Просьба подсказать, как заставить советник (например этот) работать принудительно на одной паре, что нужно поменять, чем можно "обернуть код":
- если в тестере выбираем любую другую пару, работает только заданная в коде
- если кидаем на график любой другой пары, работает только заданная в коде