Чем в mql4 заменить OnTradeTransaction()? - страница 7

 
Alexey Viktorov:

В таком случае без библиотеки Артёма тяжело будет жить.

А библиотека будет телепатически узнавать нужную информацию? Она точно так же будет 86400 раз перетряхивать ордера.

 
Igor Makanu:

что делать с "не добавить в массив" - я про удаление данных об отсутствующих рыночных ордеров?

по сабжу, не просто мониторить сколько ордеров было на прошлом тике, но чтобы не нагружать лишними вычислениями код, нужно сделать хотя бы флаг события OnTradeTransaction который нужно взводить при выставлении или принудительном закрытии ордера - Вы же знаете какую операцию хотите произвести? - почему не сообщить об этом машине напрямую? а не пытаться заставить машину гонять все данные каждый тик/ или каждые 10 мс


ЗЫ: очередной топик с запросом на решение проблемы при отсутствии хоть какой базы знания, ничего личного, но это уже становится регулярным явлением - как ни крути, но изучать дополнительный материал нужно, просто обсуждение проблемы с единомышленниками это просто обсуждение проблемы с единомышленниками на таком же уровне знаний ((((

С "не добавить в массив"... Хоть и отсутствует в mql4 функция ArrayRemove() но её принцип построен на копировании массива самого в себя с дальнейшим сокращением размера на количество удаляемых индексов. А вместо OnTradeTRansaction() я неоднократно в этой теме сказал что альтернативы библиотеке Артёма нет и не предвидится.
 
Igor Makanu:

 нужно сделать хотя бы флаг события OnTradeTransaction который нужно взводить при выставлении или принудительном закрытии ордера

да думал я и об этом, но разные советники занимаются разными функциями и совмещать их никто не будет, можно писать файл-флаг в саммон, быть может даже и так сделаю, отчего не поискать альтернативу?

 
Aleksandr Volotko:

А библиотека будет телепатически узнавать нужную информацию? Она точно так же будет 86400 раз перетряхивать ордера.

Это можно узнать в теме обсуждения статьи. И не я буду отвечать. Я только попробовал её использовать... А начните с перечитывания сообщений Артёма. Обратите внимание на это сообщение.

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

Чем в mql4 заменить OnTradeTransaction()?

Artyom Trishkin, 2020.01.27 15:55

Хэш-сумма свойств ордеров и позиций. Символ кодируется в сумму кодов символов, составляющих его наименование. Но тогда только полный цикл. При изменении хэш-суммы - смотрим что произошло.

 
Aleksandr Volotko:

да думал я и об этом, но разные советники занимаются разными функциями и совмещать их никто не будет, можно писать файл-флаг в саммон, быть может даже и так сделаю, отчего не поискать альтернативу?

альтернатива вот https://www.mql5.com/ru/docs/standardlibrary/datastructures

или используйте материалы из статей модератора Артема, что в прочем все равно будет полагаться на СБ "Коллекции данных"


как ни крути, но новый материал придется изучить для хотя бы для понимания возможностей языка MQL , а просто сидеть в 10-тилетней давности на массивах и на уменьшении времени анализа OrderTotal() .... все равно не решит как текущую проблему, так и новые задачи в дальнейшем


если речь идет о нескольких экспертах и об обмене данными - флаг выставления ордера и пр., то тут универсального решения нет - много вариаций на эту тему, в общем больное место у меня, сам много, что использовал из готового, но ничего не устроило, скорее приду к серверу БД и обмену через него, это точно будет надежно и практично, к сожалению разработчики МТ эту проблему игнорируют много лет исходя из своего видения надобности функционала юзеру

 
Alexey Viktorov:

Это можно узнать в теме обсуждения статьи. И не я буду отвечать. Я только попробовал её использовать... А начните с перечитывания сообщений Артёма. Обратите внимание на это сообщение.

Всё это ведёт к перебору ордеров, а этого делать 100500 раз на дню не хочется. И не важно - я буду в цикле считать совокупный объем позиции, или библиотека хеш-сумму свойств ордеров.

 
Igor Makanu:

альтернатива вот https://www.mql5.com/ru/docs/standardlibrary/datastructures

или используйте материалы из статей модератора Артема, что в прочем все равно будет полагаться на СБ "Коллекции данных"


как ни крути, но новый материал придется изучить для хотя бы для понимания возможностей языка MQL , а просто сидеть в 10-тилетней давности на массивах и на уменьшении времени анализа OrderTotal() .... все равно не решит как текущую проблему, так и новые задачи в дальнейшем

не думайте что я совсем уж тупой, просто порой приходится работать только с тем, что есть, что доступно для использования, а доступно для использования очень мало

 
Vitaly Muzichenko:

Это как?

StringToShortArray()
ShortArrayToString()
 
Artyom Trishkin:
StringToShortArray()
ShortArrayToString()

Видать слаб умом)

Как это применить?

static __Total = -1;
int OT=OrdersTotal();
  if(OT!=__Total)
   {
     SetMarket(); // здесь дёргаем текущую ситуацию на счёте и заполняем структуры
     __Total=OrdersTotal(); // запомним количество
   }

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

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

Чем в mql4 заменить OnTradeTransaction()?

Vitaly Muzichenko, 2020.01.27 15:32

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

По итогу OrdersTotal() как был 8, таким и остался. Логика эксперта сбилась - не пересчитал новые данные


 

Всё, решение простое: вводим ещё одну проверку на изменение истории, таким образом ничего не пропадёт и отработает на 100%

static __OTotal = -1;
static __HTotal = -1;
int OT=OrdersTotal();
int HT=OrdersHistoryTotal();
  if(OT!=__OTotal || HT!=__HTotal) // если изменилось - выполняем
   {
     SetMarket(); // здесь дёргаем текущую ситуацию на счёте и заполняем структуры
     __OTotal=OrdersTotal(); // запомним текущее количество
     __HTotal=OrdersHistoryTotal(); // запомним количество в истории
   }
Причина обращения: