Пользовательские символы. Ошибки, баги, вопросы, предложения. - страница 51

 
Edgar Akhmadeev #:

Не могу придумать, как добавить комиссии при "торговле" в тестере на кастомном символе. В голову приходит только сложный путь - пересчёт постфактум всех операций в OnTester. Но хотелось бы проще. Кто-нибудь добился этого? Хотелось бы, чтобы это работало и с режимом "расчёт в пипсах".

Комиссия [на бирже] рассчитывается от объёма операции в валюте прибыли (vol*price). В крайнем случае подойдёт даже фиксированное значение.

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

Самое простое - добавить нужное число пунктов в спред. Наверное себе буду так делать, но еще не думал, как лучше.
Может тут появится идея получше и поточнее.
 
Rorschach #:

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

Тут пишут, что
Странно, но у меня работает только Ежедневно в деньгах... В принципе все равно, разницы нет, но "Немедленно" не работает. 

Тут нашел, инструкции появляются при наведении мышки:
 

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

Но я уже реализовал пересчётом эквити в OnTester().

 
Столкнулся с глюком тестера. Глюк выражается в том, что на custom символе тестер выдает эксперту неверные цены в свечах.
Символ создается из баров M1 стороннего брокера. Создаю custom символ, ставлю все параметры, доступные из mql, затем 
CustomTicksDelete, CustomRatesReplace. Тиков в базе нет, только бары.

В окне "Cимволы" все отображается правильно, все параметры, которые ставил - на месте.
График строится по LastPrice, тип расчета Exchange Stocks, маржа, свопы, спреды - все по нулям.

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

Удаляю базы тестера, запускаю тестер. Синхронизация котировок проходит без вопросов, в логе чисто.
Запускаю тестового эксперта на всю историю, OHLC на М1 или цены открытия.
Он в OnDeinit() читает все свечи и сравнивает их с mql-файлом. Результат примерно такой:

2025.07.11 18:44:57.141 Свеч на графике тестера 3892968
2025.07.11 18:44:57.161 Начальный индекс 0
2025.07.11 18:44:57.161 Конечный индекс 3892966
2025.07.11 18:44:57.161 Начало проверки 2018.02.09 10:00
2025.07.11 18:44:57.161 Конец проверки 2025.07.09 23:58
2025.07.11 18:44:57.161 Первая ошибка open 2018.02.19 05:29 проверено свечей 14080
2025.07.11 18:44:57.161 Ошибка open, 2018.02.19 05:29 файл: 10.81650 тестер: 10.80300
2025.07.11 18:44:57.161 Первая ошибка high 2018.02.19 05:29 проверено свечей 14080
2025.07.11 18:44:57.161 Ошибка high, 2018.02.19 05:29 файл: 10.81650 тестер: 10.80300
2025.07.11 18:44:57.163 Ошибка open, 2018.04.27 23:27 файл: 14.30000 тестер: 14.32040
2025.07.11 18:44:57.163 Первая ошибка low 2018.04.27 23:27 проверено свечей 111638
2025.07.11 18:44:57.229 Ошибок даты 0
2025.07.11 18:44:57.229 Ошибок open 198
2025.07.11 18:44:57.229 Ошибок close 0
2025.07.11 18:44:57.229 Ошибок high 112

2025.07.11 18:44:57.229 Ошибок low 101

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

вместо open ставит их же close, и свеча схлопывается  в ноль.

На "родных" символах тест работает, ошибок нет.

Кто-то с подобным сталкивался, что-то можете подсказать?

 
Forester #:
Тут пишут, что
Тут нашел, инструкции появляются при наведении мышки:

Сделал способ расчетов инструмента: Форекс - и получилось сделать комиссию в %.
Попробовал несколько других способов расчетов - с ними не работает.
Нужно учесть, что валюта прибыли устанавливается автоматически в USD, даже если вы запишете "ABCD" - это может быть проблемой.

Символ выглядит так:



Настройки комиссии:

Результат - ровно 0.1% от OpenPrice:

 

Игорь Евдокимов #:

Кто-то с подобным сталкивался, что-то можете подсказать?

Для МТ4 практиковал: файлы с реала "в ручную" переносить в тестер.

Для МТ5 точно не скажу, не пробовал.

 
Forester #:

Результат - ровно 0.1% от OpenPrice:

На всякий случай - комиссия берётся от price*volume. В вашем случае - price*1.

Кстати, на биржах минимальный лот чаще всего $5.

Forester #:
Нужно учесть, что валюта прибыли устанавливается автоматически в USD

И ещё, как я уже написал в другой ветке, символы с именами не по 3 буквы будут парситься неправильно. DOGEUSDT разделится на DOG и EUS. И устанавливать с помощью

CustomSymbolSetString(sym, SYMBOL_CURRENCY_BASE, "DOGE");

CustomSymbolSetString(sym, SYMBOL_CURRENCY_PROFIT, "USDT");

CustomSymbolSetString(sym, SYMBOL_CURRENCY_MARGIN, "USDT");

не помогает.
 
Edgar Akhmadeev #:

На всякий случай - комиссия берётся от price*volume. В вашем случае - price*1.

Кстати, на биржах минимальный лот чаще всего $5.

И ещё, как я уже написал в другой ветке, символы с именами не по 3 буквы будут парситься неправильно. DOGEUSDT разделится на DOG и EUS. И устанавливать с помощью

CustomSymbolSetString(sym, SYMBOL_CURRENCY_BASE, "DOGE");

CustomSymbolSetString(sym, SYMBOL_CURRENCY_PROFIT, "USDT");

CustomSymbolSetString(sym, SYMBOL_CURRENCY_MARGIN, "USDT");

не помогает.
Не сплитую само имя символа. Все есть в спецификации от байбита:
"baseCoin":"BTC",
"quoteCoin":"USDT",
"settleCoin":"USDT",
=
      CustomSymbolSetString(S, SYMBOL_CURRENCY_BASE, j["baseCoin"].ToStr());
      CustomSymbolSetString(S, SYMBOL_CURRENCY_PROFIT, j["quoteCoin"].ToStr());
      CustomSymbolSetString(S, SYMBOL_CURRENCY_MARGIN, j["settleCoin"].ToStr());
 
Edgar Akhmadeev #:

На всякий случай - комиссия берётся от price*volume. В вашем случае - price*1.

Кстати, на биржах минимальный лот чаще всего $5.

И ещё, как я уже написал в другой ветке, символы с именами не по 3 буквы будут парситься неправильно. DOGEUSDT разделится на DOG и EUS. И устанавливать с помощью

CustomSymbolSetString(sym, SYMBOL_CURRENCY_BASE, "DOGE");

CustomSymbolSetString(sym, SYMBOL_CURRENCY_PROFIT, "USDT");

CustomSymbolSetString(sym, SYMBOL_CURRENCY_MARGIN, "USDT");

не помогает.

способ расчета "forex" поменять на "futures"

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

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

 
Forester #:
Не сплитую само имя символа. Все есть в спецификации от байбита:
"baseCoin":"BTC",
"quoteCoin":"USDT",
"settleCoin":"USDT",
=

Я о том, что программная установка этих значений в режиме "Forex" не работает (игнорируется). В спецификацию всё равно устанавливается насильно по 3 буквы. У вас не так? Вы привели пример с частным случаем, BTC.