[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 374
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите, пожалуйста, как решить проблему: одинаковый советник висит на нескольких графиках, одновременно появляется сигнал на открытие ордера, например, на двух графиках. Однако нужно, чтоб второй ордер не открывался. В советнике есть проверка на открытый ордер, но это не помогает, т. к. видимо, пока первый советник открывает ордер, второй тоже посылает запрос на открытие. Есть какие-нибудь варианты решения?
К слову сказать, все советники работают в одном терминале не параллельно, а последовательно. - Пока 1-ый не закончил работу, 2-ой не будет обрабатывать данные. Поэтому, если советник правильно написан, т.е. делает проверку на выставленный ордер, то второй уже учтет этот ордер. - Это раз. Но это произойдет лишь в том случае, если советники настроены на согласованную работу. Скажем - имеют одинаковый Магик и учет Мани-Менеджмента. Иначе, только отключением "лишних" советников. - Тогда зачем их ставить?...
Не совсем понятно для каких целей используется несколько одинаковых советников на нескольких графиках.
Советник анализирует только ту пару, на которой висит. На какой паре раньше появился сигнал - там и открывается ордер. Но бывает, что на двух парах одновременно появляется сигнал. И открывается, как ни странно, 2 ордера, хотя в советнике проверка вообще на любой открытый ордер есть, и открывать второй он не должен. А нужно это для того, что денег мало на депозите.
Да, но когда 1-ый закончил работу и открыл ордер, то 2-ой, приступив к работе, какое-то непродолжительное время НЕ ВИДИТ, что ордер уже есть. Либо он приступает к работе раньше, чем ордер откроется.
--
И еще: когда 1-ый советник Sleep(1000) второй ждет или начинает работу?
Всем добрый день!
Закодировал следующую идею
Условие N1 ..Если High[1] превышает некий максимум X
и при этом
Условие N2 .разница между High[1] и Low первой из ближайших 150 свечей >= 150 п.
------------------------------------------------------------------
Действие N1 . Удалить предыдущий ордер
Действие N2 ..Выставить отложенник
Действие N3. Присвоить переменным значения.
ПРОБЛЕМА. Не смотря на то,что отложенник должен выставляться только если ордеров в рынке нет,или последний ордер выставлен не на текущем баре. if (ot==0 || last_order_bar>0)
При выполнении Условие N1 и Условие N2 выставляется одновременно НЕСКОЛЬКО отложенных ордеров.
Мне нужно,чтобы выставлялся только ОДИН отложенный ордер.
-----------------------------------------------
Значения ot и last_order_bar расчитываются выше вот в этом коде
Советник анализирует только ту пару, на которой висит. На какой паре раньше появился сигнал - там и открывается ордер. Но бывает, что на двух парах одновременно появляется сигнал. И открывается, как ни странно, 2 ордера, хотя в советнике проверка вообще на любой открытый ордер есть, и открывать второй он не должен. А нужно это для того, что денег мало на депозите.
Да, но когда 1-ый закончил работу и открыл ордер, то 2-ой, приступив к работе, какое-то непродолжительное время НЕ ВИДИТ, что ордер уже есть. Либо он приступает к работе раньше, чем ордер откроется.
--
И еще: когда 1-ый советник Sleep(1000) второй ждет или начинает работу?
По первому вопросу: я оговаривался, что, если правильно советники написаны... Разумеется, может получиться и так, как Вы описали, если нету проверки в советнике на выставленный (открытый) ордер, да еще и на учет этих ордеров, расчет Мани-Менеджмента - это уже от уровня (и лени) программиста зависит - продумал он эти дела и прописал в советнике или нет. Если все правильно реализовано, то ничего из Ваших опасений не произойдет. - Сигнал - да, может появиться на 2-х парах одновременно, но (читайте предыдущий пост), советники работают последовательно. Поэтому, пока первый советник не обработал котировки, следующий к работе не приступит. - Думаю, что именно по этой причине, чтобы избежать задвоений, сохранен принцип последовательности (даже, если бы и была возможность параллельной обработки - тут отдельная тема для дискуссий).
Также зависит от уровня советника. Т.к. все то, о чем Вы спросили, довольно муторно прописывать - очень не маленькая работа, требующая знания финансов. Поэтому советники, как правило, "простые", и ориентированы на то, что им отдается весь счет по текущей валюте. Обычно торгуется одна валюта. Потому что, чтобы торговать, к примеру, несколькими валютами, нужно депозит иметь совсем другого порядка и там уже такие простые системы не актуальны. Исключение из этого, пожалуй, будут лишь операции (забыл точный термин, выражусь иначе) хеджирования, когда открывается по одной цене на одной паре и тут же переоткрываются по другой (или даже нескольким) - разница себе. Но это другой тип советника и там будет все учтено (все в одном). - И вообще, на мой взгляд, если денег не больше ликвидности на паре, то торговать сразу по всем парам - это плохой тон. (но это мое частное мнение) Портфели и т.п. - это все нужно не для спекулятивной торговли. Почему-то люди этого совсем не учитывают. - Если Вы не производящая или не торгующая на международном рынке фирма, то Вам множество валют вообще не нужно. - Это я к тому - почему, как правило, не реализуют подобные блоки для учета по разным валютам в советниках - за неактуальностью.
А по второму вопросу: честно говоря, у меня у самого этот вопрос открытый - я пока сам не до конца уверен как реагирует терминал при функции Sleep(1000). - Тоже обращаюсь к знающим - подсказать ответ. По идее, терминал в этот момент будет обрабатывать лишь поточные цены - т.е. принимать котировки, рисовать графики и индикаторы. Но пока этот советник "ждет", то никому другому он свою очередь не передаст. - Но это мое предположение, в чем я как раз и не уверен. Возможно, исключением из этой "очереди" являются еще скрипты, которые в момент ожидания советника, могут быть запущены на исполнение. - Тоже вопрос и у меня.
Но - из этого незнания я выхожу тем, что строю работу своих советников исходя из корректности написания по-первому пункту.
Всем добрый день!
Закодировал следующую идею
Условие N1 ..Если High[1] превышает некий максимум X
и при этом
Условие N2 .разница между High[1] и Low первой из ближайших 150 свечей >= 150 п.
------------------------------------------------------------------
Действие N1 . Удалить предыдущий ордер
Действие N2 ..Выставить отложенник
Действие N3. Присвоить переменным значения.
ПРОБЛЕМА. Не смотря на то,что отложенник должен выставляться только если ордеров в рынке нет,или последний ордер выставлен не на текущем баре. if (ot==0 || last_order_bar>0)
При выполнении Условие N1 и Условие N2 выставляется одновременно НЕСКОЛЬКО отложенных ордеров.
Мне нужно,чтобы выставлялся только ОДИН отложенный ордер.
: )) Андрей, Вы задаете те вопросы, которые в учебнике просто разжеваны. Посмотрите в учебнике пример "Терминал" - в нем детально описаны принципы и логика того, как нужно вести учет ордеров. - Тогда большинство вопросов у Вас отпадут сами собой. И вообще, учебник построен на том, что полностью в виде примера представляется структура ЛЮБОГО грамотного советника. - В этом его и прелесть. + даются базовые теоретические понятия по программированию. Но в нем есть один ребус - он рассчитан на не ленивого читателя - это следует из структуры написанного. Т.е. чтобы снять вопросы по частным моментам, нужно прочесть весь учебник. А пересказывать его (учебник) мало кто согласиться.
Вы строите нагромождения по учету ордеров. - Нужно проще подходить. Ордер либо есть, либо нету - и все равно на каком баре (при Ваших условиях) он открыт. - Из этих сложностей у Вас получается путаница с учетом ордеров и условий. - Отсюда алгоритмические ошибки, которые искать - задача любого программиста. Поменяйте логику написания программы - уйдут (сами собой) алгоритмические ошибки.
Советник анализирует только ту пару, на которой висит. На какой паре раньше появился сигнал - там и открывается ордер. Но бывает, что на двух парах одновременно появляется сигнал. И открывается, как ни странно, 2 ордера, хотя в советнике проверка вообще на любой открытый ордер есть, и открывать второй он не должен. А нужно это для того, что денег мало на депозите.
А по второму вопросу: честно говоря, у меня у самого этот вопрос открытый - я пока сам не до конца уверен как реагирует терминал при функции Sleep(1000). - Тоже обращаюсь к знающим - подсказать ответ. По идее, терминал в этот момент будет обрабатывать лишь поточные цены - т.е. принимать котировки, рисовать графики и индикаторы. Но пока этот советник "ждет", то никому другому он свою очередь не передаст. - Но это мое предположение, в чем я как раз и не уверен. Возможно, исключением из этой "очереди" являются еще скрипты, которые в момент ожидания советника, могут быть запущены на исполнение. - Тоже вопрос и у меня.
Но - из этого незнания я выхожу тем, что строю работу своих советников исходя из корректности написания по-первому пункту.
По ходу на сколько я понимаю, при отработки Sleep() эксперт просто засыпает т.е. его работа приостанавливается, и в данный момент эксперт ни получает котировки, ни реагирует вообще ни на что. И соответственно этот терминал передаст "очередь" другому..
Если кто несогласен, просьба поправить меня!
По ходу на сколько я понимаю, при отработки Sleep() эксперт просто засыпает т.е. его работа приостанавливается, и в данный момент эксперт ни получает котировки, ни реагирует вообще ни на что. И соответственно этот терминал передаст "очередь" другому..
Если кто несогласен, просьба поправить меня!
Я не готов согласиться. - Потому что из такого положения теряется логика сохранения корректности работы и расчета советниками и денег и позиций. - Это раз. Второе. - Если у меня советник спит, к примеру, 100 миллисекунд, и в это время начинает работать другой, то, что же получится, что, как только пройдут эти 100 миллисекунд, то другой должен будет остановить свою работу... и передать на середине своей обратно этому и так бесконечно... С другой стороны. Я встречал (не редко) в советниках когда они на каждом блоке выполнения операций отправляют "спать" на минуты и по множеству раз. - Тогда, если в это время все остальные совы не работают, - тоже как-то неправильно. - Поэтому вопрос достаточно актуальный. Хотелось бы понимать логику работы в этот момент. Но в официальных документах детального разъяснения я не встретил.
Но из двух зол я выбрал бы последнее. В этом случае я бы просто оставлял ту сову, в которой уверен. Если этого не делать, то все равно: хотя бы сохраняется корректность пересчетов, хотя и тормозиться их работа.
Проблема не настолько тривиальна, как кажется. - Дело в том, как показали мои опыты, что, когда снимается галочка "Разрешить советнику торговать", то работа советника не останавливается - так же проходят все расчеты на каждом тике. Просто сделки советника не выводятся к серверу. Но, если в этих расчетах напиханы эти "слипы" (не совсем корректно), то если таких советников стоит 5-10, то они конкретно могут тормозить исполнение актуального советника, который сейчас торгует.
Да, некоторые программисты ставят контроль разрешения торговать и на этом основании пропускают работу совы. Но чаще этого не делается. И если код закрытый, то мы вообще не можем понять - тормозит или нет работу (и какая сова конкретно). - Сейчас полажу на эту тему по форуму поиском. Что-то тормознул.
Спасибо Arles за вопрос, что напомнил и актуализировал. Раньше у меня опыта не хватало понять что писали на эту тему. Сейчас заново полажу.
Советник анализирует только ту пару, на которой висит. На какой паре раньше появился сигнал - там и открывается ордер. Но бывает, что на двух парах одновременно появляется сигнал. И открывается, как ни странно, 2 ордера, хотя в советнике проверка вообще на любой открытый ордер есть, и открывать второй он не должен. А нужно это для того, что денег мало на депозите.
Да, но когда 1-ый закончил работу и открыл ордер, то 2-ой, приступив к работе, какое-то непродолжительное время НЕ ВИДИТ, что ордер уже есть. Либо он приступает к работе раньше, чем ордер откроется.
--
И еще: когда 1-ый советник Sleep(1000) второй ждет или начинает работу?
С малым депозитом по нескольким парам не торгуют (житейский совет).
Технически, чтобы разные советники учитывали общее количество ордеров, можно попробовать такую схему:
Не знаю, на сколько чётко она будет отрабатывать (м\у 2-мя должно работать). Надёжнее сделать через глобальные переменные терминала, организовав "Семафор" последовательную работу. Тогда "по-барабану" сколько советников будет работать параллельно.