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

 
Vitaly Muzichenko:

Нет, но возможно мы говорим о разных вещах

Это всегда сработает

Всё-же заставил открыть терминал и проверить... Вот три запуска одного скрипта и соответственно три результата.

В скрипте всего одна строка

  Print("OrdersHistoryTotal ", OrdersHistoryTotal());
2020.01.27 18:28:51.063 Script 00 EURGBP,H4: removed
2020.01.27 18:28:51.063 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:51.063 00 EURGBP,H4: OrdersHistoryTotal 48
2020.01.27 18:28:51.063 00 EURGBP,H4: initialized
2020.01.27 18:28:51.043 Script Test\00 EURGBP,H4: loaded successfully
2020.01.27 18:28:38.203 Script 00 EURGBP,H4: removed
2020.01.27 18:28:38.193 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:38.193 00 EURGBP,H4: OrdersHistoryTotal 47
2020.01.27 18:28:38.193 00 EURGBP,H4: initialized
2020.01.27 18:28:38.183 Script Test\00 EURGBP,H4: loaded successfully
2020.01.27 18:28:16.443 Script 00 EURGBP,H4: removed
2020.01.27 18:28:16.443 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:16.443 00 EURGBP,H4: OrdersHistoryTotal 4
2020.01.27 18:28:16.443 00 EURGBP,H4: initialized
2020.01.27 18:28:16.423 Script Test\00 EURGBP,H4: loaded successfully

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

  if(HT!=__TotalHist)

поставить конкретно > вместо != ситуация не изменится. Если советник запущен в момент когда настройка поставлена "Сегодня" и переключить на "Вся история"... что получится???

 
Aleksandr Volotko:

Да трогать OrderHistoryTotal() и в мыслях не было, зачем?

На всякий случай:))))

 
Alexey Viktorov:

На всякий случай:))))

:)) мне хватит и OrdersTotal() вполне

Может сделать два таймера? один пусть хоть и раз в 100 мсек сравнивает значения OrdersTotal(), а второй для подстраховки раз в минуту (или реже) полный перебор в цикле - там уже ни одна мышь не проскочит, если одна из двух десятков сделок раз в 100500 раз закроется/откроется на минуту позже - я точно не умру, депозит полагаю тоже.

 
Aleksandr Volotko:

:)) мне хватит и OrdersTotal() вполне

Может сделать два таймера? один пусть хоть и раз в 100 мсек сравнивает значения OrdersTotal(), а второй для подстраховки раз в минуту (или реже) полный перебор в цикле - там уже ни одна мышь не проскочит, если одна из двух десятков сделок раз в 100500 раз закроется/откроется на минуту позже - я точно не умру, депозит полагаю тоже.

А сколько всего, одновременно открытых ордеров предусмотрено алгоритмом?

 
Alexey Viktorov:

Всё-же заставил открыть терминал и проверить... Вот три запуска одного скрипта и соответственно три результата.

В скрипте всего одна строка

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

поставить конкретно > вместо != ситуация не изменится. Если советник запущен в момент когда настройка поставлена "Сегодня" и переключить на "Вся история"... что получится???

В любом случае будет не равенство и код пойдёт дальше. А вот если поставить if (HT > __TotalHist) тогда возникнут проблемы

 
Alexey Viktorov:

А сколько всего, одновременно открытых ордеров предусмотрено алгоритмом?

2-3 десятка максимум

 
Vitaly Muzichenko:

В любом случае будет не равенство и код пойдёт дальше. А вот если поставить if (HT > __TotalHist) тогда возникнут проблемы

Виталий, проблемы пойдут в любом случае. Как ни крути, а если советник должен реагировать на изменение количества ордеров в истории, то он будет на него реагировать не зависимо от того каким образом это количество изменилось. По сути количество ордеров в истории может только увеличиться, потому я и предположил, что так будет менее опасно, но не решает проблемы. Даже если написан исключительно для себя, нельзя исключать возможность переключения вручную. Мало-ли какая СМСка в голову придёт)))

 
Aleksandr Volotko:

2-3 десятка максимум

Для такого количества проще создать массив тикетов или даже массив структур со свойствами ордеров и на каждом тике проверять изменение по типу и времени закрытия. Это даст возможность отследить активацию отложенного ордера или закрытие позиции. А открытие сразу после отправки OrderSend() добавить размер массива и засунуть туда всё что нужно.

 
Дык в том и дело, что перетряхивать 86400 раз в сутки ордера можно по всякому, но не хотелось же.
 
Aleksandr Volotko:
Дык в том и дело, что перетряхивать 86400 раз в сутки ордера можно по всякому, но не хотелось же.

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

Причина обращения: