Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А что это меняет? Конструкторы всех переменных выполняются строго в порядке объявления этих переменных (по крайней мере в C++ так), независимо от их типа. И если конструктор string не запускался, то что в нём может содержаться?
Согласен насчет порядка инициализации и объявления, а вот насчет не запуска конструктора string и что в нем может содержаться тут ответа нет - все что угодно, т.к. мы не знаем как устроена досконально работа по созданию объектов в MQL, мы видим лишь внешние проявления ))) К примеру в С++ вы объявляете объект не на глобальном уровне и в нем может содержаться - мусор из памяти т.к. мы не инициализировали созданный объект значением. Мы же не знаем механизм создания структур в MQL ))
Да и не нужно нам знать внутреннее устройство MQL, чтобы понимать фундаментальную вещь: если конструктор ещё не запускался, значит объект ещё не создан, поэтому доступаться к нему нельзя, это нонсенс! Пусть С++ допускает такие вещи, поскольку он работает с памятью, а не с объектами. Там главное что память выделена, а всё остальное уже мелочи. Но здесь всё иначе.
если конструктор ещё не запускался, значит объект ещё не создан, поэтому доступаться к нему нельзя
абсолютно согласен
Пусть С++ допускает такие вещи, поскольку он работает с памятью, а не с объектами. Там главное что память выделена, а всё остальное уже мелочи. Но здесь всё иначе.
MQL работает с пулом памяти и в нем так же как и в с++ при создании объектов память распределяется. Единственный момент когда память не распределяется, это создание указателя. При его создании память под объект не распределена до тех пор, пока явно этого не сделаем. А т.к. для структур в MQL выставлен запрет на использование их через указатели, то скорее всего этот указатель просто от нас скрыт в целях соблюдения стратегии безопасности принятой в MQ. Просто отнеситесь к типу string как к структуре и попробуйте по правилам инициализации объекта структуры инициализировать string в классе.
Ну инициализация - это присвоение переменной некого начального значения, происходящая в её конструкторе. Если мы говорим о конструкторе по умолчанию, то для простых типов там инициализация не производится. Т.е. этот конструктор - просто пустышка. А вот string и указатели инициализируется NULL. И также все статические переменные и переменные глобальной видимости всегда инициализируются нулём, насколько я знаю.
Ну и как выше было уже сказано, конструкторы всех членов класса выполняются в порядке объявления этих членов. А вот от порядка перечисления этих конструкторов в конструкторе самого класса это не зависит. Т.е. например:
A() : a(0), b(0) { }
равносильно
A() : b(0), a(0) { }
void OpenPosition( const ENUM_ORDER_TYPE_FILLING Filling )
{
const double Price = SymbolInfoDouble(_Symbol, SYMBOL_ASK); // можно указать и ноль
MqlTradeRequest Request = {0};
Request.action = TRADE_ACTION_DEAL;
Request.symbol = _Symbol;
Request.volume = 1;
Request.price = Price;
Request.type = ORDER_TYPE_BUY;
Request.type_filling = Filling;
Request.comment = DoubleToString(Price, _Digits) + " " + EnumToString(Filling);
MqlTradeResult Result;
if (OrderSend(Request, Result))
{
Sleep(100); // ждем обновления истории
if (HistoryOrderSelect(Result.order))
{
Print(TOSTRING(Result.order));
Print(TOSTRING(EnumToString((ENUM_ORDER_TYPE_FILLING)HistoryOrderGetInteger(Result.order, ORDER_TYPE_FILLING))));
Print(TOSTRING(HistoryOrderGetDouble(Result.order, ORDER_PRICE_OPEN)));
}
}
}
void OnStart()
{
Print(TOSTRING(AccountInfoString(ACCOUNT_SERVER)));
Print(TOSTRING(_Symbol));
Print(TOSTRING(EnumToString((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE))));
Print(TOSTRING(SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE)) + "\n");
OpenPosition(ORDER_FILLING_FOK);
OpenPosition(ORDER_FILLING_IOC);
OpenPosition(ORDER_FILLING_RETURN);
}
Вкладка история
Вывод в журнал
_Symbol = EURUSD
EnumToString((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol,SYMBOL_TRADE_EXEMODE)) = SYMBOL_TRADE_EXECUTION_EXCHANGE
SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE) = 3
Result.order = 13961469
EnumToString((ENUM_ORDER_TYPE_FILLING)HistoryOrderGetInteger(Result.order,ORDER_TYPE_FILLING)) = ORDER_FILLING_FOK
HistoryOrderGetDouble(Result.order,ORDER_PRICE_OPEN) = 0.0
Result.order = 13961470
EnumToString((ENUM_ORDER_TYPE_FILLING)HistoryOrderGetInteger(Result.order,ORDER_TYPE_FILLING)) = ORDER_FILLING_IOC
HistoryOrderGetDouble(Result.order,ORDER_PRICE_OPEN) = 0.0
Result.order = 13961471
EnumToString((ENUM_ORDER_TYPE_FILLING)HistoryOrderGetInteger(Result.order,ORDER_TYPE_FILLING)) = ORDER_FILLING_RETURN
HistoryOrderGetDouble(Result.order,ORDER_PRICE_OPEN) = 0.0
По какой причине для ORDER_FILLING_FOK и ORDER_FILLING_IOC не требуется указание цены? Зачем во вкладке истории написано market (и так понятно, т.к. buy) и не указана цена (см. комментарий к ордеру)?
Просьба обратить внимание на торговые сервера своих клиентов.
Просьба обратить внимание на торговые сервера своих клиентов.
_Symbol = RTS-12.16
EnumToString((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol,SYMBOL_TRADE_EXEMODE)) = SYMBOL_TRADE_EXECUTION_EXCHANGE
SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE) = 3
Result.order = 111132415
EnumToString((ENUM_ORDER_TYPE_FILLING)HistoryOrderGetInteger(Result.order,ORDER_TYPE_FILLING)) = ORDER_FILLING_FOK
HistoryOrderGetDouble(Result.order,ORDER_PRICE_OPEN) = 0.0
Result.order = 111132419
EnumToString((ENUM_ORDER_TYPE_FILLING)HistoryOrderGetInteger(Result.order,ORDER_TYPE_FILLING)) = ORDER_FILLING_IOC
HistoryOrderGetDouble(Result.order,ORDER_PRICE_OPEN) = 0.0
Result.order = 111132422
EnumToString((ENUM_ORDER_TYPE_FILLING)HistoryOrderGetInteger(Result.order,ORDER_TYPE_FILLING)) = ORDER_FILLING_RETURN
HistoryOrderGetDouble(Result.order,ORDER_PRICE_OPEN) = 0.0
Мало того, что FOK и IOC-маркеты скользят (на скрине хорошо видно)! Так еще и каким-то неведомым образом терминал умудряется достать цену маркет-ордера во всплывающей подсказке (выделил красным). Откуда он берет эту инфу, если MQL5 четко выдает, что ORDER_PRICE_OPEN == 0?!
В СервисДеске убрали возможность добавлять картинки.
Не "добавлять", а вставлять в текст. И раньше нельзя было. К заявке картинки всегда прикреплялись.
Зачем это терминологическое занудство? Нельзя в СД прикреплять картинки!
Можно прикрепить картинку, очень даже можно:
и шаг два: