Библиотеки: Input_Struct - страница 8

 
hini #:

I added a feature that uses the fourth parameter of the macro as a variable name. Initially, I intended to add it as a comment at the end of the input line, but since it's a comment, it didn't work as expected. So I replaced it with the variable name instead. Could you consider improving this feature?

Здесь вижу некий самообман. 


Если в Тестере сделать следующее.


То в буфере обмена будет такая запись.

This_is_comment=true||false||0||true||N


Однако, следующий код выдаст иной результат и в названии и в значении.

Print(inInputs[]); // IsShowComment=false


Необходима совместимость с шаблонами (*.tpl), сетами (*.set) и Тестером (CTRL+C/V).

К сожалению, предложенный вариант простой замены названия input-переменной (псевдо-комментария) не обладает названной совместимостью.


Я бы очень хотел иметь возможность создавать комментарии к input-переменным. Но, к сожалению, это невозможно.

 

I missed modifying one part of the code earlier, but it should be fixed now.

fxsaber #:

Необходима совместимость с шаблонами (*.tpl), сетами (*.set) и Тестером (CTRL+C/V).

К сожалению, предложенный вариант простой замены названия input-переменной (псевдо-комментария) не обладает названной совместимостью.

It's just a variable name replacement, with no other changes. I believe, in theory, everything should remain consistent, and there shouldn't be any difference from the original code.

Perhaps a new macro could be added: CInput (Comment Input), and Input should not be modified.


Файлы:
 
hini #:

Perhaps a new macro could be added: CInput (Comment Input), and Input should not be modified.

Однозначно, если добавляется новый функционал, то не нарушается старый.

 

Кажется, нельзя ссылаться на библиотеку Input_Struct несколько раз в одном EA? Даже если скопировать два файла Input_Struct, возникнет конфликт имен переменных.

include "folder1/Input_Struct.mqh"
include "folder2/Input_Struct.mqh"
 
hini #:

Кажется, нельзя ссылаться на библиотеку Input_Struct несколько раз в одном EA?

В библиотеке есть такой комментарий.

// Copy-Paste update from here:

Это значит, что каждый mqh со своими input отличается только строками, что до этого комментария.

Именно так используется мною библиотека: для каждого набора input свой mqh, в котором копируется 90% кода одинакового.

Даже если скопировать два файла Input_Struct, возникнет конфликт имен переменных.

В оригинальной версии библиотеки этой ошибки не возникает.

#include <fxsaber\Input_Struct\Input_Struct.mqh>
#include <fxsaber\Input_Struct\Input_Struct.mqh>
// 0 errors, 0 warnings, 275 msec elapsed, cpu='X64 Regular'
 
fxsaber #:

В библиотеки есть такой комментарий.

Это значит, что каждый mqh со своими input отличается только строками, что до этого комментария.

Именно так используется мною библиотека: для каждого набора input свой mqh, в котором копируется 90% кода одинакового.

В оригинальной версии библиотеки этой ошибки не возникает.

Чтобы убедиться в наличии ошибок, я использую оригинальную версию. Изменен только TYPENAME_INPUT.

#property strict


#define INPUT_STRUCT_ADDON_WITHOUT_FILENAME
#include "Input_Struct.mqh"
#include "Input_Struct2.mqh"


int OnInit() {
 
  
  return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason) {

}
void OnTick() {

}
 

У меня есть два класса стратегий в советнике. Каждый класс стратегии имеет файл input.mqh. Некоторые имена переменных одинаковы, например InitialLot.

 
hini #:

Чтобы убедиться в наличии ошибок, я использую оригинальную версию. Изменен только TYPENAME_INPUT.

Набор входных параметров не изменен же. Ниже пример из моего боевого советника двух mqh.

// https://www.mql5.com/ru/code/47932
// Use this string to find all Inputs mqh.
// #include <fxsaber\Input_Struct\Input_Struct.mqh> // Original

#define TYPENAME_INPUT SYSTEMCHANNEL_INPUT

#define MACROS_MULTI                \
  INPUT(SL, int, 0)                 \
  INPUT(OffsetOpen, int, 0)         \
  INPUT(OffsetClose, int, 0)        \
  INPUT(AttenuationPerHour, int, 0)

// Copy-Paste update from here:
// https://www.mql5.com/ru/code/47932
// Use this string to find all Inputs mqh.
// #include <fxsaber\Input_Struct\Input_Struct.mqh> // Original

#define TYPENAME_INPUT CHANNEL_INPUT

#define MACROS_MULTI         \
  INPUT(MultSize, double, 1) \
  INPUT(AddSizeHigh, int, 0) \
  INPUT(AddSizeLow, int, 0)  \
  INPUT(Markup, int, 0)      \
  INPUT(MinWidth, int, 10)                               

// Copy-Paste update from here:

Выделил цветом отличающиеся строки. Конфликта при компиляции нет.

 
fxsaber #:

Набор входных параметров не изменен же. Ниже пример из моего боевого советника двух mqh.


Выделил цветом отличающиеся строки. Конфликта при компиляции нет.

Можно использовать только разные имена переменных? Например, начальный лот. Я хочу, чтобы название параметра для всех стратегий было одинаковым — InitialLot, чтобы не нужно было придумывать разные имена для каждой стратегии, да и это не обязательно.

 

https://www.mql5.com/en/docs/basis/namespace

После моих поисков кажется, что пространства имен решают проблему идентичных имен переменных.

Documentation on MQL5: Language Basics / Namespaces
Documentation on MQL5: Language Basics / Namespaces
  • www.mql5.com
A namespace is a specially declared area, within which various IDs are defined: variables, functions, classes, etc. It is set using the namespace...