(MQL5) Принудительная работа советника в одном символе

 

Уважаемые форумчане! Просьба подсказать, как заставить советник (например этот) работать принудительно на одной паре, что нужно поменять, чем можно "обернуть код":

- если в тестере выбираем любую другую пару, работает только заданная в коде 

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

N-_Candles_v3
N-_Candles_v3
  • голосов: 23
  • 2017.06.16
  • Vladimir Karputov
  • www.mql5.com
Советник ищет N одинаковых свечей подряд. На бычьих свечах идет покупка, на медвежьих — продажа.  В коде использованы торговые классы CPositionInfo, CTrade, CSymbolInfo. Новое в версии 3:  N идентичных свечей, входящих в искомый ряд ЛотТейк-профит (в пипсах) Стоп-лосс (в...
 
Вставьте эти строки в начало любого советника
#define _Symbol2 "EURUSD" // Советник будет работать только с этим символом, но OnTick будет идти от того, на котором запущен

string Symbol2() { return _Symbol2; }
#define Symbol Symbol2
#define _Symbol _Symbol2
 
issah5:

Уважаемые форумчане! Просьба подсказать, как заставить советник (например этот) работать принудительно на одной паре, что нужно поменять, чем можно "обернуть код":

- если в тестере выбираем любую другую пару, работает только заданная в коде 

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

Конкретно для указанного советника ( 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

 
Всем спасибо!
 
Vladimir Karputov:

Конкретно для указанного советника ( N-_Candles_v3 ) нужно добавить входной параметр "Trade sybmol"

и передать этот входной параметр в метод Name

Это не будет работать.

 

Запретить работу на всех символах, кроме того на котором разрешаете. StringFind вам в этом поможет.

 
issah5:
Всем спасибо!

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

То есть одного внесения входного параметра, как правило, недостаточно. 

 
Konstantin Nikitin:

Запретить работу на всех символах, кроме того на котором разрешаете. StringFind вам в этом поможет.

if (StringFind(Symbol(), "EURUSD") != -1){....} 

Спасибо! Нужно каждую функцию и тип данных обернуть?

в OnInit(), OnTick(), bool и т.д.

 
issah5:

Спасибо! Нужно каждую функцию и тип данных обернуть?

в 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;
     // Если символ позволяет работаем
}
 
Konstantin Nikitin:

Проверяете в OnInit, устанавливаете флаг разрешения/запрета работы и в том-же OnTick проверяете его значение. Разрешено то работаем, ну а на нет и работы нет.

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

 
Andrei Fandeev:

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

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

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