Скачать MetaTrader 5

Кнопка включения советника

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ищешь единомышленников? На форуме их много!
Forex Trader
114255
Forex Trader 2006.08.04 11:49 
Уважаемые разработчики, сегодня столкнулся с интересной ситуацией.

Кнопка вкючения советника была отжата(с красненьким кружочком), а эксперт прикрепленный к графику открыл позицию! Я открыл справку, раздел панели инструментов, стандартная панель, там написано:

[ ] - разрешить использование советников. Если эта опция отключена, ни один прикрепленный к графикам эксперт выполняться не будет. Детальное описание работы с экспертами находится в разделе "Автотрейдинг".
Опция "Включить Советников" в настройках терминала выполняет то же действие;


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

Привожу эксперт который делает тоже самое.

//+------------------------------------------------------------------+
//|                                              ERRORMISTAKEBUG.mq4 |
//|                                         Copyright © 2006, Jhonny |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Jhonny"
#property link      "http://www.metaquotes.net"

int init()
  {
   start();
   return(0);
  }




int start()
  {

   if(OrdersTotal()<1) OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-30*Point,Bid+30*Point,"",1000,0,Blue);

   return(0);
  }





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

Forex Trader
114255
Forex Trader 2006.08.04 11:54  
bool IsExpertEnabled( )
Возвращает TRUE, если в клиентском терминале разрешен запуск экспертов, иначе возвращает FALSE.
Пример:
while(!IsStopped())
{
...
if(!IsExpertEnabled()) break;
}

Forex Trader
114255
Forex Trader 2006.08.04 12:15  
Да, конечно можно обезопасится и так, но есть стандартная кнопка сделанная для этих целей. Я понимаю еслиб ее небыло, тогда надо напрягаться придумывать оптимальный путь защиты от случайного запуска, ну а раз есть то почему ее бы не использовать явно, я думаю этоже не просто флаг который предусмотрен разработчиками для любых целей программиста, а они чего-то в кодах писали чтоб эта кнопка чего-то, кроме как у функции bool IsExpertEnabled( ) менять значение, делала.

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

PS Вообще-то если признаться я как любой русский читаю справку после того как уже чегонибудь сделаю, так вот я думал что эта кнопка запрещает торговые функции, а все остальное можно, вот я и жил не тужил експерт рисовал и строил при отжатой кнопке, а сегодня бац и открылся, благо на демо.
MetaQuotes Software Corp.
Модератор
181109
MetaQuotes Software Corp. 2006.08.04 12:30  
Проверьте ситуацию детально еще раз, пожалуйста.
Точно нигде не ошиблись?

Удостоверьтесь, что кнопка отжата (должна иметь красный значек) и запустите эксперта.
Forex Trader
114255
Forex Trader 2006.08.04 12:40  
Даже машину перезагрузил.
Возникает вот когда... Терминал загрузился данные обновились и тишина, я бросаю эксперта на график или меняю таймфрейм(если он уже на графике) и открывается позиция, кнопка отжата.
Forex Trader
114255
Forex Trader 2006.08.04 12:43  
Интересный код
int init()
  {
   start();
   return(0);
  }


Функция init запускается всегда, независимо от состояния кнопки экспертов

Forex Trader
114255
Forex Trader 2006.08.04 13:11  
Кнопка "Эксперты" отвечает за запуск функции start() эксперта при приходе новых тиков...
При отжатой кнопке она выполнятся не будет
Функция init() выполняется один раз при старте и НЕЗАВИСИМО от того нажата ли кнопка "Эксперты"
Forex Trader
114255
Forex Trader 2006.08.04 13:15  
Интересный код

Да я про это и говорю, я этого могу избежать, но тогда в справке по поводу кнопки не верная информация. Советник мало того что может работать, да и еще и торговать.
Я то ладно не собираюсь покупать МТС, а представьте кто-то купил(*.ex4) а там вот такое дело, он отжал кнопочку а советник всеравно торгует. Т.е. логичнее ставить запрет на торговые функции.

Кнопка "Эксперты" отвечает за запуск функции start() эксперта при приходе новых тиков...
При отжатой кнопке она выполнятся не будет
Функция init() выполняется один раз при старте и НЕЗАВИСИМО от того нажата ли кнопка "Эксперты"

Я это понял и в первом посте уже написал. Я говорю, прецедент был, расхождения с документацией, а остальное решать разработчикам править коды или справку это их дело или ничего не менять, я на это уже не попадусь, а вот другие могут.
Forex Trader
114255
Forex Trader 2006.08.04 13:49  
Правильнее всего было бы добавить в код который отвечает за запуск и выполнение init() ту же проверку что и при запуске start()
Тогда при отжатой кнопке эксперт вообще выполняться не будет
Forex Trader
114255
Forex Trader 2006.08.04 14:00  
Правильнее всего было бы добавить в код который отвечает за запуск и выполнение init() ту же проверку что и при запуске start()
Тогда при отжатой кнопке эксперт вообще выполняться не будет


Может конечно оно и правильней, но я уже как-то привык к тому что при компиляции он выводит принтом и коментом (отладчика то нету) мне кое-какую информацию, а вот торговать ему в это момент не обязательно.
Forex Trader
114255
Forex Trader 2006.08.04 14:14  
Может конечно оно и правильней, но я уже как-то привык к тому что при компиляции он выводит принтом и коментом (отладчика то нету) мне кое-какую информацию, а вот торговать ему в это момент не обязательно.

А какой смысл выполнять функцию init(), если не выполняется start() ? Это вопрос к разработчикам.

Вас, Jhonny, я понял. Вы обошли этот момент поставив start() в init().

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

Оптимальный вариан был бы, как уже писал Jhonny, блокирование торговых функций. В этом случае можно было бы без проблем останавливать торговлю (но не работу) эксперта на любой срок и простым отжатием кнопки продолжать ее снова.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий