Обновление платформы MetaTrader 4 билд 625: Журналы в MetaTrader Market и новый MetaViewer - страница 20

 
GSB:

Уважаемые Трейдеры, использующие активные стратегии торговли, вопрос функционала кнопки "Автоторговля" обсуждался мною с представителем MetaQuotes здесь

Убедительна просьба высказать ваше мнение.

Обходных путей запрещать работу экспертов самостоятельно (без этой кнопки) много, но вопрос стоит в функциональности терминала



Мне, как и Вам, тоже не понятна позиция MQ.

Скрипт запускается разово для выполнения некоторых действий "в текущий момент". Т.о. не понятен смысл влияния на скрипты кнопки отключения автоторговли.

 

У MT был косяк: зацикленный советник не отключался кнопкой отключения советников и нельзя было открыть его параметры. Сейчас параметры открываются, отключается ли автоторговля, я не проверял, но подозреваю, что "да".

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

 
Contender:

У MT был косяк: зацикленный советник не отключался кнопкой отключения советников и нельзя было открыть его параметры. Сейчас параметры открываются, отключается ли автоторговля, я не проверял, но подозреваю, что "да".

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


Нет, это просто Политика. Странно, что такой важный вопрос как блокировка скриптов при откл Автоторговле не нашел отклика у трейдеров.

Ну что же, значит забудем про эту никчемную кнопку

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

 

подскажите где ошибка

improper enumerator cannot be used

код перед стартом:

enum Pricef
  {
   PRICECLOSE=0,
   PRICEOPEN=1,
   PRICEHIGH=2,
   PRICELOW=3,
   PRICEMEDIAN=4,
   PRICETYPICAL=5,
   PRICEWEIGHTED=6,
  };
  
  enum Method
  {
   MODESMA=0,
   MODEEMA=1,
   MODESMMA=2,
   MODELWMA=3,
  };
input Method          method1=0;            // метод усреднения
input   Pricef          price_field1=0;       // тип цены

вот пишет такую ошибку: improper enumerator cannot be used

double FastEma=iMA(Symbol(),0,MA_Period,0,method1,price_field1,0);
double FastEma2=iMA(Symbol(),0,MA_Period,0,method1,price_field1,1);
 
в последнем элементе каждого enum надо убрать запятую
 

спасибо. та же самая ошибка,

тем более в справке все норм, такая же схема:

enum intervals  // перечисление именованных констант
   {
    month=1,     // интервал в один месяц
    two_months,  // два месяца
    quarter,     // три месяца - квартал
    halfyear=6,  // полугодие
    year=12,     // год - 12 месяцев
   };
 
странно в другом индикаторе тот же самый код и все нормально, а в советнике такая вот беда :-)
 

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

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

input bool i_bCloseAll = false;

bool g_bCloseAll;

int OnInit()
{
    g_bCloseAll = i_bCloseAll;
    return(INIT_SUCCEEDED);
}

void OnTick()
{
    if(g_bCloseAll)
    {
        // закрываем все позиции
        
        g_bCloseAll = false;
    }
}

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

int OnInit(const int reason)
{
    if(reason == 0)   // пользователь вызывал окно параметров
        g_bCloseAll = i_bCloseAll;
    else
        g_bCloseAll = false;

    return(INIT_SUCCEEDED);
}
 
Vladon:

подскажите где ошибка

improper enumerator cannot be used

код перед стартом:

вот пишет такую ошибку: improper enumerator cannot be used


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

#property strict
#property show_inputs

input ENUM_MA_METHOD      method1 = 0;        // метод усреднения
input ENUM_APPLIED_PRICE  price_field1 = 0;   // тип цены

int MA_Period = 5;

void OnStart()
{
        double FastEma  = iMA(Symbol(), 0, MA_Period, 0, method1, price_field1, 0);
        double FastEma2 = iMA(Symbol(), 0, MA_Period, 0, method1, price_field1, 1);
}

Ну, или так:

#property strict
#property show_inputs

enum Pricef
{
        PRICECLOSE=0,
        PRICEOPEN=1,
        PRICEHIGH=2,
        PRICELOW=3,
        PRICEMEDIAN=4,
        PRICETYPICAL=5,
        PRICEWEIGHTED=6
};
  
enum Method
{
        MODESMA=0,
        MODEEMA=1,
        MODESMMA=2,
        MODELWMA=3
};

input Method  method1 = 0;        // метод усреднения
input Pricef  price_field1 = 0;   // тип цены

int MA_Period = 5;

void OnStart()
{
        double FastEma  = iMA(Symbol(), 0, MA_Period, 0,(ENUM_MA_METHOD) method1, (ENUM_APPLIED_PRICE) price_field1, 0);
        double FastEma2 = iMA(Symbol(), 0, MA_Period, 0,(ENUM_MA_METHOD) method1, (ENUM_APPLIED_PRICE) price_field1, 1);
}

PS. А про последнюю запятую вам правильно сказали, она там просто не нужна.

 
Vladon:

подскажите где ошибка

improper enumerator cannot be used

код перед стартом:

вот пишет такую ошибку: improper enumerator cannot be used

А зачем писать что-то своё когда есть готовое?

https://docs.mql4.com/ru/basis/variables/inputvariables

docs.mql4.com/ru/constants/indicatorconstants/prices

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