Пожелания к MQL5 - страница 39

 
ds2:
// Эти свойства задались уже при создании переменной.
// Менять их в программе, в принципе, особого смысла нет.
// Так что можно их (некоторые из них) сделать read-only
AvgType.DataType = int; 
AvgType.Value    = 0;
AvgType.Comment  = "Тип скользящей средней";

А может имеет смысл сделать так?

class ExternParam
{
    <template typename T>
    property T Value ...;
    property String Comment ...;
}
 
SK. писал (а):
ds2:
SK. писал (а):

Ещё хотелось бы break из if().

Такого я что-то не встречал в популярных языках программирования...

О. Вот, в самую в точку.

Позитивное утверждение в этом высказывании состоит в том, что если этого нет в других языках, значит это плохо, значит это что-то инородное и ненужное.

На мой взгляд это совсем не так.

Согласен. Но нужно же смотреть на ситуацию еще и с более высоких уровней целесообразности. Приоритет MQ, и наш с вами тоже(!) - совершенствование MQL как языка автоматического трейдинга, развитие его торговых и аналитических возможностей. И у MQ в этом направлении еще очень-очень много нерешенных задач...


А реализация нестандартных программистских конструкций, не имеющих к трейдингу отношения, - это не то, для чего создавался MQL. Если бы разработчики хотели как-то извратиться и выделиться среди других языков - они бы взяли в качестве прототипа не Си++, а, к примеру, Пролог. :) (Хотя, лично мне, как поклоннику Пролога, было бы интересно на это посмотреть. :) )


Я думаю, как бы тут программисты ни просили breakif, MQ вряд ли станет тратить на это время. И, я считаю, правильно сделают. И предлагаю всем не беспокоить MQ просьбами, которые отвлекают ее от решения более насущных задач совершенствования MQL как языка автоматического трейдинга.

SK. писал (а):

сложные конструкции образуются не только на основе циклов и списков. Они образуются также и на основе if-ов. Поэтому управляемый переход на внешнюю закрывающую скобку был бы полезен.

Я за goto. :)


Логика работы такой программы будет более прозрачной. Ведь breakif - это досрочный выход из if-конструкции. Как всякий досрочный выход, он должен производиться по некоему условию - т.е. внутри еще одного if. Т.о., речь у нас идет о breakif как операторе выхода не за один, а за два(!) if'а - что усложняет понимание логики работы программы и к тому же выбивается из общей концепции break'ов (breakfor, breakwhile и т.п.) как операторов, которые выходят только за одну конструкцию. Может быть, именно поэтому разработчики других языков до сих пор не ввели в них такой сомнительный оператор?..

 
ds2 писал (а):
И предлагаю всем не беспокоить MQ просьбами, которые отвлекают ее от решения более насущных задач совершенствования MQL как языка автоматического трейдинга.


Я за goto. :) Логика работы такой программы будет более прозрачной.

Уважаемые разработчики! Не отвлекайтесь, пожалуйста, "от решения более насущных задач совершенствования MQL как языка автоматического трейдинга".

Мы больше не будем вас беспокоить.

Единственное, что вам всё же необходимо сделать, это принять во внимание мнение ds2.

 

Навеяно статьей Скептик Филозов – а, ввести в отчет о тестировании среднюю прибыль и убыток в пунктах и мах и мин сделку тоже.

 

Просьбы read only


Ввести функции или разрещить текущим функциям доступ ко всем подпапкам терминала

где есть материал для обработки: например логи

исключительно в режиме "только чтение"


Запланировать в папке \experts ещё одну \experts\services

Где централизовано бы писалась разного рода информация из ДЦ.

Например автообновляемый форматированый файл календаря, новостей "в цифрах" и т.д...


Если требуется пояснить о чём просьба, то без проблем. ;)

 

В графике хотелось бы иметь
1. волосяную линию, так как линии толщины 1 выглядят грубо.

2. Хорошо бы иметь линии отображаемые с округлением Digits+2.

Сейчас линии округляются до Digits инструмента, что приводит к ступеньке.

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

 
В связи с тем, что советник может обслуживать графику клиента, очень сильно понадобились "технологическеи тики"
например в виде
int servis() 
{
return(0);
}

Которая также как и Start получает/стартует, но не от сервера, а от локального таймера терминала.
Требуемый Период технологических тиков не повредит никому : от 1 до 3 сек.
Это изменение можно ввести прямо в MQL-4, не ожидая 5-й версии. Так сказать для обкатки и для пользы дела.
 
Korey:

ОШИБКА в METALANG

extern double  Lot=0.2;
int start()
{ double   Lot; }

Двойная инициация переменной проходит компиляцию без ошибки и без предупреждения.


extern double  Lot=0.2;
double   Lot;   //а так ошибку - дает
int start()
{ }

Локальная переменная маскирует глобальную. Ошибки нет.

 

Korey, нуль именно потому, что внешняя переменная маскируется:

double Lot;

- это неинициализированное объявление локальной переменной внутри функции start(). По умолчанию она инициализируется нулем. Все функции, которые вызываются в start() и имеют входной параметр Lot, получают значение локальной переменной, а не внешней. Исключение - только для функций внутри init(), выполняемой до start(). Там параметр Lot (если он не маскируется аналогично) должен получать значение внешней переменной, т.е. 0.2.


Ты привел не тот или не весь код, который пользуешь. Откуда вызываешь my_funck()?

 
Korey:

Если бы она маскировала, то почему тогда далее в программе другие функции получают 0 а не 0.2. как прописано в экстерн?


Необходимо самостоятельно проверять утверждения. Вот простой скрипт:

//+------------------------------------------------------------------+
//|                                                CheckVariable.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
extern double Var = 0.0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
   {
   Print("Функция init():Внешняя переменная на глобальном уровне Var=",Var);
   }
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void MyFunc()
   {
   Var = -100;
   Print("Функция MyFunc(): Переменная Var=",Var);
   }
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
   {
   Print("Функция deinit():Внешняя переменная на глобальном уровне Var=",Var);
   }
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   double Var = 15;
   Print("Локальная переменная на локальном уровне функции start() Var=",Var);
   MyFunc();
   Print("Локальная переменная на локальном уровне после выполнения функции MyFunc() Var=",Var);
 
   Print("Функция start() завершена");
 
//----
   return(0);
  }
//+------------------------------------------------------------------+


и результаты работы скрипта.

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