[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 72
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
http://www.soft-sib.ru/articles/programs/10/
Еще одним преимуществом использования СУБД и архитектуры клиент-сервер по сравнению с файл-серверным подходом явилась возможность использовать транзакционный механизм манипулирования данными. Этот сервис, предоставляемый сервером данных, позволяет объединять несколько действий по изменению данных в одну неделимую операцию (транзакцию). Использование транзакций обеспечивает надежную защиту информации от программно-аппаратных сбоев как на клиентской, так и на серверной части ИС.
В справочнике и учебнике указывается на необходимость обязательного подключения к серверу (для работы советника, скриптов, индикаторов).
Возможен ли вызов специальных функций без подключения к серверу (в принципе)?
Вполне. Собственно сервер нужен для получения тика, который запускает функцию старт()
start() - основная функция. У экспертов вызывается после прихода очередного тика. У пользовательских индикаторов вызывается при пересчете после прикрепления индикатора к графику, при открытии клиентского терминала (если индикатор прикреплен к графику), а также после прихода очередного тика. У скриптов выполняется сразу после прикрепления к графику и выполнения инициализации. В случае отсутствия в модуле функции start() этот модуль (эксперт, скрипт или пользовательский индикатор) не может быть запущен.
Скрипт может работать в бесконечном цикле, и поэтому тики ему не нужны, тики нужны для индикаторов и советников (в стандартной конфигурации ( так как советник тоже может работать в бесконечном цикле)).
Но тики можно вызвать и искусственно - при помощи ВИНАПИ. Кроме того, есть такая стандартная фича как тестер стратегий (который тоже умеет генерировать тики).
Просто надо включить мозги и ПОИСК ПО САЙТУ (ФОРУМУ).
А не приплетать сюда преимущество или недостатки файл-серверных технологий.
Здравствуйте, есть такой код, проверка на наличие ордеров, если имеется открытый ордер то проводить проверку повторно и так до тех пор пока ордеров не станет 0. Но эксперт явно игнорирует этот код и открывает бесконечное количество ордеров, подскажите в чем ошибка?
int FunctionBUYnext()
{
int b=OrdersTotal();
if (b>0)
{FunctionBUYnext();}
else {FunctionSELL();}
}
Возникла необходимость нарисовать линию в Торговом Советнике используя функцию iCustom.
В качестве теста использовал ЗигЗаг:
Поскольку цель iCustom в моем случае заключается лишь в том чтобы нарисовать линию(данные индикатора в Советнике не используются), то решил поместить код в deinit(). Но там он не работает и ничего не рисует.
В start()-е все нормально.
1. Почему он не работает в deinit()?
2. Необходимо избежать бессмысленной работы вышеупомянутого кода в процессе тестирования и оптимизации
(не расходовать CPU впустую) и чтобы он запускался лишь на последнем баре тестируемой истории.
- Как этого достичь?
Спасибо!
код - абсурд.
ПОЧЕМУ?? ВСЕ КАК УЧИЛИ
ПОЧЕМУ?? ВСЕ КАК УЧИЛИ
Оч странно вас учили...
Где функции, вызываемые из тела вами приведённого "кода" ?
Сам "код" тоже довольно весёлый...
Используем вызов самой себя... Почему бы не делать просто выход из FunctionBUYnext() при отсутствии ордеров ?
Далее - нет проверки типа ордеров, нет проверки символа и магика...
Я б вашего "учителя" на дыбу отправил бы...
Столкнулся с проблемой...
В таком виде скрипт отрабатывает с функцией MessageBox()
А вот с использованием недокументированной функции MessageBoxTimeoutA(), работать отказывается напрочь:
Даже окно сообщения с кнопками Yes/No не выводит на экран.
Кто сталкивался - подскажите где тут собака зарыта?
Оч странно вас учили...
Где функции, вызываемые из тела вами приведённого "кода" ?
Сам "код" тоже довольно весёлый...
Используем вызов самой себя... Почему бы не делать просто выход из FunctionBUYnext() при отсутствии ордеров ?
Далее - нет проверки типа ордеров, нет проверки символа и магика...
Я б вашего "учителя" на дыбу отправил бы...
ОБЪЯСНЯЮ СМЫСЛ, ВЫЗЫВАЕТ САМА СЕБЯ ПОТОМУ ЧТО НУЖНА ПРОВЕРКА ИМЕННО В ЭТОЙ ЧАСТИ, ЕСЛИ СДЕЛАТЬ ВЫХОД ОНА ВЕРНЕТСЯ ОПЯТЬ НА ИСПОЛНЕНИЕ START, МНЕ ЭТО НЕ НУЖНО, СИМВОЛ И МАГИК НЕ УЧИТЫВАЕТСЯ, МОЙ УЧИТЕЛЬ ИНТЕРНЕТ))) ЕСЛИ НЕ СЛОЖНО СКИНЬТЕ ЧТО НИБУДЬ ПОДОБНОЕ НО РАБОЧЕЕ, ОСНАВНАЯ ЗАДУМКА - НЕ ПУСКАТЬ ДАЛЬШЕ ЕСЛИ ЕСТЬ ОРДЕРА, ЕСЛИ НЕТ ТО ПРОПУСКАТЬ В ОПРЕДЕЛЕННУЮ ФУНКЦИЮ.
ОБЪЯСНЯЮ СМЫСЛ, ВЫЗЫВАЕТ САМА СЕБЯ ПОТОМУ ЧТО НУЖНА ПРОВЕРКА ИМЕННО В ЭТОЙ ЧАСТИ, ЕСЛИ СДЕЛАТЬ ВЫХОД ОНА ВЕРНЕТСЯ ОПЯТЬ НА ИСПОЛНЕНИЕ START, МНЕ ЭТО НЕ НУЖНО, СИМВОЛ И МАГИК НЕ УЧИТЫВАЕТСЯ, МОЙ УЧИТЕЛЬ ИНТЕРНЕТ))) ЕСЛИ НЕ СЛОЖНО СКИНЬТЕ ЧТО НИБУДЬ ПОДОБНОЕ НО РАБОЧЕЕ, ОСНАВНАЯ ЗАДУМКА - НЕ ПУСКАТЬ ДАЛЬШЕ ЕСЛИ ЕСТЬ ОРДЕРА, ЕСЛИ НЕТ ТО ПРОПУСКАТЬ В ОПРЕДЕЛЕННУЮ ФУНКЦИЮ.
Ой, да не кричите вы так... Кажется у вас CapsLock залипла... Размер шрифта ещё бы увеличить в два раза, да жирным сделать бы...
Это так... отступление...
Теперь позвольте тоже вам объяснить:
Объясняю смысл. Делая рекурсивный вызов, вы добиваетесь того, чтобы ваш советник зациклился именно в этой части... т.е. если есть любые ордера или рыночные позиции, советник должен повиснуть и не делать ничего (попросту - висеть) до тех пор, пока вы руками не удалите все ордера и не закроете позиции? Тогда какой смысл в такой автоматической торговле, если без вашего вмешательства советник будет наглухо висеть?
Пересмотрите ваш подход к логике советника