[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 289
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это я написал что происходит если скрипт просто переложить в папку с экспертами. Он работает но не так как нужно. Скрипт создаёт 8 отложенных ордеров а если его просто сохранить в папке с экспертами то он создаёт 8 отложенных ордеров после каждого тика. А мне нужно что бы он откладывал новые 8 ордеров только после закрытия старых.
А вы в своём скрипте написали только "откладывалку" ? Тады он и будет только и откладывать: сколь тиков придёт - столь он и нало... ой... отложит.
Вам туда нужно впихнуть ещё проверялку-запрещалку ...
Это я написал что происходит если скрипт просто переложить в папку с экспертами. Он работает но не так как нужно. Скрипт создаёт 8 отложенных ордеров а если его просто сохранить в папке с экспертами то он создаёт 8 отложенных ордеров после каждого тика. А мне нужно что бы он откладывал новые 8 ордеров только после закрытия старых.
Нашел ошибку. В библиотеке для данной функции в строке
надо удалить по нулю в 13, 14 и 15 числе.Теперь правильно
Привет библиотечным функциям.
Нашел ошибку. В библиотеке для данной функции в строке
надо удалить по нулю в 13, 14 и 15 числе.
Теперь правильно
Привет библиотечным функциям.
А вы в своём скрипте написали только "откладывалку" ? Тады он и будет только и откладывать: сколь тиков придёт - столь он и нало... ой... отложит.
Вам туда нужно впихнуть ещё проверялку-запрещалку ...
))))) Не удержался)))))
Так, ладно, теперь по делу. Работаю над оптимизацией кода секундного ТФ, задался целью перевести double в int[2], чтобы записывать структуру RateInfo одним блоком. Подумал-подумал, решил расписать все возможные в т.ч. нереализуемые способы, чтобы кого-то возможно предостеречь от ошибок.
1. WinAPI (msdn). Вообщем-то, там по функциям конвертации кот наплакал. Это связано с тем, что при конвертации широко используется си-тип перевода, это что-то типа
в предпоследней строчке int i1 конвертируется в char, а в последней char s2 конвертируется в int. В итоге всё это хозяйство дружно используется в т.н. "функциях конвертации", которых фактически нет ни в одной dll WinAPI, а они только объявляются в заголовочных .h файлах макросами типа
которые препроцессором при компиляции разворачиваются в строку по типу первого кода. А заголовочные .h файлы - это не dll и используются только в среде разработки (Студия, Борланд, gcc и т.д.). Отчего для MQL4 ни холодно, ни жарко. Впрочем, можно всегда перепроверить, действительно объявлена ли функция только в заголовочном .h-файле или есть где-нибудь в скрываемых от лишних глаз экспортируемых функциях в какой-нибудь dll в System32, сейчас распишу как.
2. WinAPI (dll CRT). Эти dll с именами msvcp*, msvcr*, msvcrt*, msvci*, msvcirt. Тут выбор более широк: _atodbl, _atoi64, _atoldbl, _ftol, _i64toa, _itoa, _ltoa, _strtoi64, _strtoui64 _ui64toa, _ultoa, atof, atoi, atol, strtod, strtol, strtoul. Символы в названии имеют следующее значение:
Но ожидаемой _dtoi64/_dtoui64 как не было, так и нет. Использовать же определённые в msvcrt*, msvci*, msvcirt.dll
можно, даже если извернуться, только как файловые операции (они консольные).
Искать, окромя msdn, можно на этом сайте, вот строка поиска по сайту. Аналогичная "удобная" строка поиска по msdn вот. Чем они отличаются? На msdn хорошее описание функций, но некоторых нет вообще (например, NativeAPI). На альтернативном же есть любая таблица экспорта системных dll, но нет описания. В принципе, набор таблиц экспорта на сайте это проще, чем выдёргивать таблицы экспорта из dll самому (IDA, PE Explorer, и т.д.).
3. Ассемблерные вставки (точнее, вставки в машинном коде). Сейчас объясню, т.к. оф.документация в этом отношении очень туманна. На MQL4 C++-шные
нереализуемы, т.к. asm/_asm - не функция, а директива препроцессора, и в system32/*.dll нигде не определена (см. поиск по тому сайту). Другими словами, нет такой
В чистом же машинном коде на MQL4 писать можно, но только в одном случае: когда по определению WinAPI-функции в msdn в неё должен передаваться указатель на функцию/процедуру типа lpTimerFunc (законченный пример здесь на форуме), в msdn она объявляется как:
UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc//<- );
или lpfnWndProc (незаконченный пример здесь на форуме, msdn-объявление и попытка mql4-объявления структуры). Иначе - никак: MQL4 - интерпретатор, адреса у функции не существует, передавать нечего, только если писать в машинных кодах. Их потом упаковывать в интовый массив, а массив по ссылке передавать уже в функцию.
Так что компилированные ассемблерные вставки (то есть машинный код) для данной задачи неприменимы - у них совершенно другая область применения. Максимум, что из этого можно выжать - это запустить такой интовый массив через debug в cmd через shell32.dll. Командную строку там передавать кажется нельзя, но можно писать виртуальными клавишами через keybd_event.
4. Написание своей функции конвертации double в int[2] на чистом MQL4 без вставок. Но я так прикинул объём кода и скорость его быстродействия, просто отказался. Сам модуль даже не писал, но алгоритм так понимаю там следующий:
что очень долго будет выполняться. Так пришёл-таки к самому очевидному и самому простому решению
5. Использование самонаписанной dll на C++. Код вышел следующий:
В скрипте
В int upper[0] обратно меняется потому, что мы его передаём по ссылке. Получаем:
...заработало, строки в дампе идиентичны. Прикрепляю папочку, в ней в libraries находится double.dll, в samples - исходники dll, в scripts - скрипт.
Вечером: перезалил архив и немного подделал код скрипта и dll.
Не пойму, что я сделал не так. Почему-то закрытие позиции происходит не так, как я планировал?
Вот критерий на открытие позиции
Вот критерий на закрытие позиции
а вот, что получаем:
Нет! Нельзя трогать функции из стандартной библиотеки! Дима запретил :-))
Ну что ты здесь клоунаду устраиваешь? Если ошибка, то или в сервисдеск надо сообщать, или делать свою копию файла.
Не пойму, что я сделал не так. Почему-то закрытие позиции происходит не так, как я планировал?
Вот критерий на открытие позиции
Вот критерий на закрытие позиции
а вот, что получаем:
И как часто проверяется критерий закрытия? Не по барам случайно?
И как часто проверяется критерий закрытия? Не по барам случайно?
Не совсем понял суть вопроса. Модель тестирования по ценам открытия (быстрый метод на сформировавшихся барах)