Особенности языка mql5, тонкости и приёмы работы - страница 289

 
Maxim Kuznetsov #:

печально это.. :-(

значит пока не появится и не будет указателя на член-функцию (слово то какое ойё) про человечий ОО в MQL говорить преждевременно

Пока интерфейсы не появятся.
 
fxsaber #:

Насильный перевод терминала в portable-режим.

  1. В терминале нажать CTRL+SHIFT+D. Если в открывшемся окне отсутствует terminal64.exe, то терминал запущен не в portable-режиме.
  2. Закрыть терминал. И перенести все файлы из папки п.1. в папку, откуда запускаете terminal64.exe.
  3. Запустить terminal64.exe с ключом /portable.
ЗЫ Смог установить терминал не в portable-режиме только на VPS. На рабочей машине всегда сам устанавливается в portable.

У меня наоборот, всегда устанавливается не в portable-режиме, приходится переносить exe-шники, удалять остатки с чисткой всех папок и в ручную уже делать portable.
Вообще странно, что разработчики не добавили выбор режима в окне установщика, при первичной установке терминала.
Если разработчики прочитают, было бы удобней если добавили бы чекбокс portable в окне установщика.

 
Roman #:

У меня наоборот, всегда устанавливается не в portable-режиме

Пробовали установщик запустить по ПКМ с правами Администратора?


 
fxsaber #:

Пробовали установщик запустить по ПКМ с правами Администратора?


Нет, ранее не пробовал из под админа запускать.
Сейчас попробовал установить из под админа, в созданном ярлыке отсутствует ключ  /portable
Не знаю правильно это или нет.
Я когда перемещаю exe-шники в ручную, создавая ярлык указываю этот ключ. 

сн

 
Roman #:

Сейчас попробовал установить из под админа, в созданном ярлыке отсутствует ключ  /portable
Не знаю правильно это или нет.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2025.02.11 14:06

  1. В терминале нажать CTRL+SHIFT+D. Если в открывшемся окне отсутствует terminal64.exe, то терминал запущен не в portable-режиме.
Ярлыки по-умолчанию всегда без /portable. Попробуйте запустить без ключа и проверить, как выделил выше.
 
fxsaber #:
Ярлыки по-умолчанию всегда без /portable. Попробуйте запустить без ключа и проверить, как выделил выше.

Win11 не сборка с сайтов. 
Запускал приложение из под юзера и из под админа, показывает, что не портабл.

asd

В журнале терминала тоже пишет 

2025.02.12 14:25:58.044 Terminal        C:\*****\*****\AppData\Roaming\MetaQuotes\Terminal\6DD395BF1C96D08D4EA71A4912400D7A

У меня не срабатывает получается.
Только в ручную перетаскивать exe-шники, и сносить остатки.

 
Roman #:

Win11 не сборка с сайтов. 
Запускал приложение из под юзера и из под админа, показывает, что не портабл.


В журнале терминала тоже пишет 

У меня не срабатывает получается.
Только в ручную перетаскивать exe-шники, и сносить остатки.

Для установки МТ5 такой способ тоже работает

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 4 build 1090

Alexey Viktorov, 2017.07.17 08:51

Отправь ему два файла от своего мт4

1. terminal.exe

2. metaeditor.exe

Дальнейшие действия

1. Создаём каталог в желаемом месте желаемого диска.

2. Помещаем туда эти 2 файла.

3. Создаём ярлык на файл terminal.exe При желании с ключом  /portable

4. Запускаем терминал по созданному ярлыку и в дамках. Все необходимые файлы и папки создаются и загружаются все советники, индикаторы и скрипты.

5. Подключаемся к счёту или регистрируем новый демо счёт.

ВСЁ...


 

fxsaber #:

В терминале нажать CTRL+SHIFT+D. Если в открывшемся окне отсутствует terminal64.exe, то терминал запущен не в portable-режиме.

Можно и скриптом.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132

void OnStart()
{
  MessageBox((MTTESTER::IsPortable() ? NULL : "NOT ") + "portable.");
}


 
Alexey Viktorov #:

Для установки МТ5 такой способ тоже работает


Я так и делаю всегда, и указываю ключ.
Но как предложил fxsaber просто установить из под админа, не сработало.

 

Иногда нужно посмотреть все свойства символа, чарта, позиции, ордера, исторической сделки/ордера и т.д.

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


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

// https://www.mql5.com/ru/forum/170952/page236#comment_50527599
template <typename T>
bool IsCorrect( const int Index )
{
  ResetLastError();
  
  return((EnumToString((T)Index) != NULL) && !_LastError);
}

#define PROPERTIES(A)                                                      \
  for (int i = 0; i < 1000; i++)                                           \
    if (IsCorrect<A>(i))                                                   \
      Str += EnumToString((A)i) + " = " + (string)(PROPERTY((A)i)) + "\n";


Применение.

Так получаем все значения символа.

// Все свойства символа в строку.
string SymbolToString( const string Symb = NULL )
{
  string Str = NULL;

#define PROPERTY(A) SymbolInfoString(Symb, A)
  PROPERTIES(ENUM_SYMBOL_INFO_STRING)
#undef PROPERTY

#define PROPERTY(A) SymbolInfoInteger(Symb, A)
  PROPERTIES(ENUM_SYMBOL_INFO_INTEGER)
#undef PROPERTY
  
#define PROPERTY(A) SymbolInfoDouble(Symb, A)
  PROPERTIES(ENUM_SYMBOL_INFO_DOUBLE)
#undef PROPERTY

  return(Str);
}


Так - сделки.

// Все свойства сделки в строку.
string DealToString( const long Ticket )
{
  string Str = NULL;

#define PROPERTY(A) HistoryDealGetString(Ticket, A)
  PROPERTIES(ENUM_DEAL_PROPERTY_STRING)
#undef PROPERTY

#define PROPERTY(A) HistoryDealGetInteger(Ticket, A)
  PROPERTIES(ENUM_DEAL_PROPERTY_INTEGER)
#undef PROPERTY
  
#define PROPERTY(A) HistoryDealGetDouble(Ticket, A)
  PROPERTIES(ENUM_DEAL_PROPERTY_DOUBLE)
#undef PROPERTY

  return(Str);
}


В общем, принцип должен быть понятен.


Результат.

Так будет с символом.

void OnStart()
{
  Print(SymbolToString());
}


SYMBOL_BANK = 
SYMBOL_DESCRIPTION = Euro vs US Dollar
SYMBOL_PATH = Forex\EURUSD
SYMBOL_CURRENCY_BASE = EUR
SYMBOL_CURRENCY_PROFIT = USD
SYMBOL_CURRENCY_MARGIN = EUR
SYMBOL_ISIN = 
SYMBOL_BASIS = 
SYMBOL_PAGE = 
SYMBOL_FORMULA = 
SYMBOL_CATEGORY = 
SYMBOL_EXCHANGE = 
SYMBOL_COUNTRY = 
SYMBOL_SECTOR_NAME = Currency
SYMBOL_INDUSTRY_NAME = Undefined
SYMBOL_SELECT = 1
SYMBOL_VOLUME = 0
SYMBOL_VOLUMEHIGH = 0
SYMBOL_VOLUMELOW = 0
SYMBOL_TIME = 1739406769
SYMBOL_DIGITS = 5
SYMBOL_SPREAD = 43
SYMBOL_TICKS_BOOKDEPTH = 10
SYMBOL_TRADE_CALC_MODE = 0
SYMBOL_TRADE_MODE = 4
SYMBOL_TRADE_STOPS_LEVEL = 0
SYMBOL_TRADE_FREEZE_LEVEL = 0
SYMBOL_TRADE_EXEMODE = 2
SYMBOL_SWAP_MODE = 1
SYMBOL_SWAP_ROLLOVER3DAYS = 3
SYMBOL_SPREAD_FLOAT = 1
SYMBOL_EXPIRATION_MODE = 15
SYMBOL_FILLING_MODE = 3
SYMBOL_START_TIME = 0
SYMBOL_EXPIRATION_TIME = 0
SYMBOL_SESSION_DEALS = 0
SYMBOL_SESSION_BUY_ORDERS = 0
SYMBOL_SESSION_SELL_ORDERS = 0
SYMBOL_ORDER_MODE = 127
SYMBOL_OPTION_RIGHT = 0
SYMBOL_OPTION_MODE = 0
SYMBOL_VISIBLE = 1
SYMBOL_CUSTOM = 0
SYMBOL_BACKGROUND_COLOR = 12058551
SYMBOL_CHART_MODE = 0
SYMBOL_ORDER_GTC_MODE = 0
SYMBOL_MARGIN_HEDGED_USE_LEG = 0
SYMBOL_EXIST = 1
SYMBOL_TIME_MSC = 1739406769168
SYMBOL_SECTOR = 12
SYMBOL_INDUSTRY = 0
SYMBOL_SUBSCRIPTION_DELAY = 0
SYMBOL_BID = 1.0384
SYMBOL_BIDHIGH = 1.03857
SYMBOL_BIDLOW = 1.03784
SYMBOL_ASK = 1.03883
SYMBOL_ASKHIGH = 1.03917
SYMBOL_ASKLOW = 1.03862
SYMBOL_LAST = 0.0
SYMBOL_LASTHIGH = 0.0
SYMBOL_LASTLOW = 0.0
SYMBOL_VOLUME_REAL = 0.0
SYMBOL_VOLUMEHIGH_REAL = 0.0
SYMBOL_VOLUMELOW_REAL = 0.0
SYMBOL_POINT = 0.00001
SYMBOL_TRADE_TICK_VALUE = 1.5918243899333024
SYMBOL_TRADE_TICK_SIZE = 0.00001
SYMBOL_TRADE_CONTRACT_SIZE = 100000.0
SYMBOL_VOLUME_MIN = 0.01
SYMBOL_VOLUME_MAX = 100.0
SYMBOL_VOLUME_STEP = 0.01
SYMBOL_SWAP_LONG = -7.71
SYMBOL_SWAP_SHORT = 1.85
SYMBOL_MARGIN_INITIAL = 100000.0
SYMBOL_MARGIN_MAINTENANCE = 0.0
SYMBOL_MARGIN_LONG = 0.0
SYMBOL_MARGIN_SHORT = 0.0
SYMBOL_MARGIN_LIMIT = 0.0
SYMBOL_MARGIN_STOP = 0.0
SYMBOL_MARGIN_STOPLIMIT = 0.0
SYMBOL_TRADE_TICK_VALUE_PROFIT = 1.5918243899333024
SYMBOL_TRADE_TICK_VALUE_LOSS = 1.5927624872579003
SYMBOL_VOLUME_LIMIT = 0.0
SYMBOL_SESSION_VOLUME = 0.0
SYMBOL_SESSION_TURNOVER = 0.0
SYMBOL_SESSION_INTEREST = 0.0
SYMBOL_SESSION_BUY_ORDERS_VOLUME = 0.0
SYMBOL_SESSION_SELL_ORDERS_VOLUME = 0.0
SYMBOL_SESSION_OPEN = 1.03798
SYMBOL_SESSION_CLOSE = 1.0383
SYMBOL_SESSION_AW = 0.0
SYMBOL_SESSION_PRICE_SETTLEMENT = 0.0
SYMBOL_SESSION_PRICE_LIMIT_MIN = 0.0
SYMBOL_SESSION_PRICE_LIMIT_MAX = 0.0
SYMBOL_OPTION_STRIKE = 0.0
SYMBOL_MARGIN_HEDGED = 0.0
SYMBOL_TRADE_LIQUIDITY_RATE = 0.0
SYMBOL_TRADE_FACE_VALUE = 0.0
SYMBOL_TRADE_ACCRUED_INTEREST = 0.0
SYMBOL_PRICE_CHANGE = 0.0096
SYMBOL_PRICE_VOLATILITY = 0.0
SYMBOL_PRICE_THEORETICAL = 0.0
SYMBOL_PRICE_DELTA = 0.0
SYMBOL_PRICE_THETA = 0.0
SYMBOL_PRICE_GAMMA = 0.0
SYMBOL_PRICE_VEGA = 0.0
SYMBOL_PRICE_RHO = 0.0
SYMBOL_PRICE_OMEGA = 0.0
SYMBOL_PRICE_SENSITIVITY = 0.0
SYMBOL_SWAP_SUNDAY = 0.0
SYMBOL_SWAP_MONDAY = 1.0
SYMBOL_SWAP_TUESDAY = 1.0
SYMBOL_SWAP_WEDNESDAY = 3.0
SYMBOL_SWAP_THURSDAY = 1.0
SYMBOL_SWAP_FRIDAY = 1.0
SYMBOL_SWAP_SATURDAY = 0.0


Если, вдруг, MQ решат в торговой платформе (в этом году 18 лет с начала разработки) все же дать доступ к комиссиям, то скрипт это сразу покажет...

Клиентский терминал MetaTrader 5 - В терминале MetaTrader 5 появились кардинальные отличия между понятиями позиция, ордер и сделка.
Клиентский терминал MetaTrader 5 - В терминале MetaTrader 5 появились кардинальные отличия между понятиями позиция, ордер и сделка.
  • 2009.05.26
  • MetaQuotes
  • www.mql5.com
Летом начнется бета-тестирование нового клиентского терминала и среды разработки MQL5 IDE. и общее число типов ордеров достигло 5 в MetaTrader 4 было 4 типов ордеров. Пример различия торговых позиций в MetaTrader 4 и MetaTrader 5