Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если сможем, то добавим функцию, которая сможет выдавать код клавиши, нажатой во время операции drag'n'drop.
Да, панель быстрого вызова будет. Как созреем до реализации - сразу сделаем. Но пока закончим тестер.
входящий поток данных и функция start() индикатора/эксперта.
Котировки приходят по запросу или как-то иначе ?
Если по запросу, то в какой момент он выполняется ?
Очередная котировка приходит независимо от работы
индикатора/эксперта или только после отработки его start() ?
При инициализации эксперта/индикатора вызывается функция init(), а снятии deinit().
Индикатор вызывается на перерасчет когда:
- история сильно изменилась (в первом отображении тоже)
- по приходу ценового тика по этому инструменту
- если бы изменен MQL4 код (например, в редакторе)
Котировки приходят и накапливаются в базах независимо от всего остального, то есть, прием котировок идет в отдельном потоке. После приема котировки посылается уведомление на перерасчет индикаторов. Соответственно, если индикаторы считаются долго (функция start()), то они будут пропускать некоторые уведомления о пересчете. Индикаторы надо всегда стараться писать по экономному с учетом ранее просчитанных баров.
А эксперт может запускать функцию start() только после прихода нового тика. Если эксперт еще не завершил работу, то уведомление пропускается. Эксперт теперь может тратить неограниченное количество времени на себя и использовать функцию Sleep(). Чтобы избежать работы со старыми историческими данными при длительных задержках в эксперте, мы рекомендуем использовать (например не чаще чем раз в секунду) функцию RefreshRates( ).
имхо, лучше бы не во время drag'n'drop, а просто при работе скрипта. Тогда в start() можно было бы поймать нажатую клавишу.
эту же возможность еще лучше было бы использовать при работе экспертов. Например, работает советник, жмем определенную клавишу и советник нам выдает результаты какого нибудь расчета, жмем другую - еще что-нибудь делает.
Хорошо было бы при этом ловить координаты мыши.
Так, "Остапа понесло" (с) :)
Так, "Остапа понесло"
Точно понесло...
1. Некорректно работает ArrayCopy для двумерных массивов. Код копирующий первые (total-1) элементов двумерного масива в конец этого же масива
генерирует вывод
хотя после ArrayCopy должно быть:
Если вместо ArrayCopy копировать руками:
все будет правильно. Также непонятно как проинициализировать двумерный массив при объявлении
компилятором не понимается.
к этой функции нельзя обратиться как orderStr(), а только как orderStr(state). Если функция юудет объявлена в эксперте - обращайся как хочешь.
3. Highest и Lowest возвращают 1.0 или 2.0, а не реальные цены:
к этой функции нельзя обратиться как orderStr(), а только как orderStr(state). Если функция юудет объявлена в эксперте - обращайся как хочешь.
об этом говорили - типа так должно быть =)
Я что-то сомневаюсь, что такое копирование массива самого в себя разрешено...
Слава в понедельник точнее скажет.
Это правильно - так и задумано.
Эти функции возвращают индексы, а не сами значения. К сожалению, в описании ошибка.
Спасибо что указали на нее.
Но после открытия ордера:
получаем следующее описание в логе:
2005.03.25 17:19:59 Order sent: #0 SELL 8.14 (0.00000000) , open=1.2955, sl=1.2955, tp=1.2955, comm=, exp=1970.01.01 00:00, openTime=1970.01.01 00:00
Как видим ticket не инициализирован, время открытия тоже, с OrderLots() - вообще цирк.
После закрытии ордера таже картина:
2005.03.25 18:15:27 Order closed Profit=1.2954 (0 points) #0 BUY 10.55 (0.00000000) , open=1.2954, sl=1.2954, tp=1.2954, comm=, exp=1970.01.01 00:00, openTime=1970.01.01 00:00, closeTime=1970.01.01 00:00, close=1.2954, swap=1.2954
Почему некоторые поля не инициализированы, swap вообще совпадает с close, а OrderLots() - рандомизирован?
для скорости я рекомендую (по возможности) включать код библиотеки в саму программу через #include, а не через импорт #import. Импорт библиотек через #import - это серьезные накладные расходы, сопоставимые с COM. С помощью #include исходный код библиотеки встраивается непосредственно в основной код, тем самым получается экономия на вызовах функций.