Вы немножко не поняли - речь идет об обычном мартине - т.е. ордера сетки, открытые в рынке. Закрытие по общему ТП корзины. Просто пытаюсь реализовать разные варианты стоплосса сетки. Как один из вариантов, описанный выше - одинаковый сл (размер стоп-лосса, а не цена) для каждого ордера, при растягивании длинной сетки младшие (первые открытые) начинают закрываться по СЛ.
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
Нужен совет специалистов. Такой вопрос:
Допустим, строим мы сетку ордеров. Максимальное разрешенное количество - 10. Каждый ордер имеет индивидуальный одинаковый стоплосс (а не общий для корзины). Возникает такая ситуация - открылись 10 ордеров, к примеру, цена идет дальше и 2 ордера закрываются по стоплоссу. Обычная функция счетчика рыночных ордеров будет возвращать 8 и советник будет дальше открывать ордера, хотя максимально разрешеннное для сетки (10) мы прошли.
Собственно вопрос: что надежней для отслеживания количества ордеров сетки: считать виртуальным счетчиком и записывать в глобальные переменные или пытаться высчитать закрытые по стоплоссу ордера сетки в истории (MODE_HISTORY) и плюсовать к текущим?
Может еще есть другие варианты?
Может завести ещё одну переменную ну,например static int A = 0;.
Дальше считаем открытые ордера.Если открытых ордеров 10, то А = 1; иначе А = 0
В условии на открытие добавляем если А = 0 то открываем ордер ,если А = 1 выходим.
Или что-то в этом роде.
Но при перезагрузке терминала будет заново строится - надо пересчитывать (геморрой) или сделать ручное подтверждение...
Вы немножко не поняли - речь идет об обычном мартине - т.е. ордера сетки, открытые в рынке. Закрытие по общему ТП корзины. Просто пытаюсь реализовать разные варианты стоплосса сетки. Как один из вариантов, описанный выше - одинаковый сл (размер стоп-лосса, а не цена) для каждого ордера, при растягивании длинной сетки младшие (первые открытые) начинают закрываться по СЛ.
если я правильно понял, то у сетки ордеров у каждого свой сл и смысл, чтобы они закрывались от самого нижнего к самому верхнему для бай? И задача в том, чтобы при закрытии по сл, нижнего(для бай) новый не открывался. Так?
В глобальную пишем bool a=true;
Считаем кол-во ореров с нашим магиком на бай(например)
{
int b=кол-во;
if(bif(b=10)a=false;
}
В условие открытия-if(a){открываемся...}
...
хотя..не подойдет, будет держать всегда 10)
Изменено 11 августа, 2015 пользователем mark4431
А кто решил задачу про обновление тэйкпрофита в уроке про построение сетки? Вот как выглядит условие задачи:"Представьте, что в процессе работы эксперта Вы вдруг решили изменить Take Profit у этого советника, но просто изменение этого параметра сейчас ничего не даст. Доработайте эксперт таким образом, чтобы любое Ваше изменение параметра Take Profit привело к автоматическому изменению TakeProfit рыночных ордеров." Ничего не смог придумать. Скажите хотя бы в общих чертах как эту функцию реализовать..
Может завести ещё одну переменную ну,например static int A = 0;.
Дальше считаем открытые ордера.Если открытых ордеров 10, то А = 1; иначе А = 0
В условии на открытие добавляем если А = 0 то открываем ордер ,если А = 1 выходим.
Или что-то в этом роде.
А если ордеров еще не 10 открыто, а допустим 8, потом бац - один по стоплоссу закрылся - в рынке остается 7, а нужно, чтобы счетчик выдавал 8 (общее количество закрытых и открытых ордеров сетки). Поэтому с глобальными переменными нужно просто отслеживать открываемые ордера и записывать их в виртуальный счетчик, ИМХО.
JR можно сделать флаг продолжения торговли bool flag = true. При 10 ордерах сбрасывать в фалс.
Но при перезагрузке терминала будет заново строится - надо пересчитывать (геморрой) или сделать ручное подтверждение...
В том-то и дело, что при рестарте терминала, при реините текущие переменные будут сбрасываться и как я вижу, нужно или получать данные из текущей рыночной ситуации (открытые ордера + как-то отследить закрытые по сл текущей сетки в истории) или сохранять счетчики в глобальные переменные.
Последний способ я как-раз реализовал, это не сложно, просто почему спрашиваю спецов - из собственного опыта, какой способ будет надежней (от обрывов связи, рестартов, кривых рук юзера и прочих форс-мажоров) - счетчики на глобальных переменных или пытаться вычислить текущую ситуацию?
Добавлено: 11-08-2015 14:41:36
если я правильно понял, то у сетки ордеров у каждого свой сл и смысл, чтобы они закрывались от самого нижнего к самому верхнему для бай? И задача в том, чтобы при закрытии по сл, нижнего(для бай) новый не открывался. Так?
Смысл чтобы сначала закрывались по сл первые ордера (с младшим лотом), я же написал. В случае бай это будут сначала самый верхний с лотом 0.01 и.т.д. Такая модель есть, если я не ошибаюсь в ForexWarrior.
А кто решил задачу про обновление тэйкпрофита в уроке про построение сетки? Вот как выглядит условие задачи:"Представьте, что в процессе работы эксперта Вы вдруг решили изменить Take Profit у этого советника, но просто изменение этого параметра сейчас ничего не даст. Доработайте эксперт таким образом, чтобы любое Ваше изменение параметра Take Profit привело к автоматическому изменению TakeProfit рыночных ордеров." Ничего не смог придумать. Скажите хотя бы в общих чертах как эту функцию реализовать..
Ну во-первых, если вы изменяете ТП в настройках, то правильно написанный сеточник пересчитает ТП корзины на следующем открытом ордере.
Плюс в своем сеточнике я сделал контроль ТП-СЛ сетки, который происходит примерно раз в минуту (или другой временной интервал) и если текущие параметры не соответствуют вычисляемым (в соответствии с текущими настройками) - то модифицируем ордера сетки. Но реализовать такое - не совсем просто, хотя интересно:)
Изменено 11 августа, 2015 пользователем JR
Я думаю,что на глобальных переменных понадежней будет.А вообще(в целях повышения образованности :)) ) какой у Вас стоп-лосс
будет(пунктов МИЛЛИОН), чтобы в него уместились ещё 9 ордеров со своими стопами?
Ну во-первых, если вы изменяете ТП в настройках, то правильно написанный сеточник пересчитает ТП корзины на следующем открытом ордере.
Плюс в своем сеточнике я сделал контроль ТП-СЛ сетки, который происходит примерно раз в минуту (или другой временной интервал) и если текущие параметры не соответствуют вычисляемым (в соответствии с текущими настройками) - то модифицируем ордера сетки. Но реализовать такое - не совсем просто, хотя интересно:)
В том то и дело, что пересчет ТП открытых ордеров должен осуществляться не на следующем открытии ордера, а сразу как только я поменял этот параметр в настройках. Вот про контроль, который вы сделали, расскажите пожалуйста по подробнее..
Я думаю,что на глобальных переменных понадежней будет.А вообще(в целях повышения образованности :)) ) какой у Вас стоп-лосс
будет(пунктов МИЛЛИОН), чтобы в него уместились ещё 9 ордеров со своими стопами?
Да какая разница, какой стоплосс будет - какой пользователь захочет выставить, такой и будет. Бот должен максимально четко отрабатывать ситуацию, правильно?
Может вы не поняли модель описанную стоплоссов? Вот вам вполне конкретные настройки (реальные для рынка, указываю в 4-х знаке) шаг сетки 35пп, пусть максимум 12 ордеров - сетка тянется больше 300пп, стоплосс - 200пп, первые ордера начнет выбивать по стопу еще до открытия максимума ордеров сетки.
Дело в том, что я хочу реализовать три режима стоплосса сетки - без СЛ (хардкор), общий СЛ корзины (пересчитывается от последнего открытого ордера сетки) и индивидуальный СЛ для каждого ордера сетки, который собственно и обсуждаю. И каждую ситуацию бот должен корректно обрабатывать.
Добавлено: 11-08-2015 16:01:02
В том то и дело, что пересчет ТП открытых ордеров должен осуществляться не на следующем открытии ордера, а сразу как только я поменял этот параметр в настройках. Вот про контроль, который вы сделали, расскажите пожалуйста по подробнее..
В общих чертах это выглядит так:
Есть функция, вычисляющая нужный ТП сетки в зависимости от настроек и рыночной ситуации (количество открытых ордеров), назовем ее GetTP().
Есть модуль модификации ордеров сетки, алгоритм которого выглядит так:
TP = GetTP;
for (стандартный цикл перебора ордеров нашей сетки, нужного типа)
if (OrderSelect(и так далее)) - выбрали ордер
if (OrderTakeProfit() != TP) если ТП ордера не соответствует нужному
OrderModify(TP) - модифицируем его
конец цикла.
Я очень упрощенно написал, схема, думаю понятна.
Такой модуль модификации ордеров сетки я вызываю после открытия нового ордера и раз в n-минут(секунд), для контроля.
Изменено 11 августа, 2015 пользователем JR
Oll, похоже, что без твоего совете не обойтись... :| Подскажите, пожалуйста...
Почему отложенный ордер (бай-стоп) исполняется не по той цене на которой он был установлен, а выше заданного уровня??? Это происходит из-за резкого изменения цен или причина другая? Какие есть варианты устраниение этой ситуации? Хотелось бы, чтоб отложенный ордер (или любой другой) исполнялся по заданной цене...
Спасибо!
JR пересчёт в ините надёжнее. имхо. только там есть тонкие вопросы, например порядок сортировки ордеров в истории - по времени открытия, по времени закрытия или тикету? если прошёл гэпчик и зацепило 3 стопа - какой первый закроется? (это всё к тому, как в истории найти 1 ордер последней сетки) Может в коммент 1 ордера что-нибудь писать - для простого поиска...
Всем добрый вечер , такой вопрос допустим советник прикреплён к графику GBPUSD , а сделку нужно совершить по EURUSD , что нужно прописать вместо Symbol()
OrderSend(Symbol(),OP_BUY, lot,NormalizeDouble(Ask,Digits),2,SL,TP,"простой советник",Magic,3)
Всем добрый вечер , такой вопрос допустим советник прикреплён к графику GBPUSD , а сделку нужно совершить по EURUSD , что нужно прописать вместо Symbol()
OrderSend(Symbol(),OP_BUY, lot,NormalizeDouble(Ask,Digits),2,SL,TP,"простой советник",Magic,3)
" EURUSD "
За видео спасибо. потратили кучу времени впустую... У меня вопрос, скажите пожалуйста сколько человек ни когда не изучающих программирование посмотрев видео начали писать советников? Дело в том что у меня проблема с изучением MQL (вернее проблема в учителях - их нет), "учебник" по MQL прочитал несколько раз, видео посмотрел а толку ни какого, что дальше как учиться?
За видео спасибо. потратили кучу времени впустую... У меня вопрос, скажите пожалуйста сколько человек ни когда не изучающих программирование посмотрев видео начали писать советников? Дело в том что у меня проблема с изучением MQL (вернее проблема в учителях - их нет), "учебник" по MQL прочитал несколько раз, видео посмотрел а толку ни какого, что дальше как учиться?
Возможно, программирование - это не ваше?
У меня лично никаких проблем не возникло с написанием советников по видеоурокам, хотя ранбше mql4 не занимался. Прекрасные видео, для новичков - самое то. Плюс официальный учебник MQL4 разжевывает все по полочкам.
З.Ы. Справедливости ради замечу, что лично у меня был до этого любительский опыт программирования на разных языках, возможно это помогло. Начните вообще с азов программирования, поищите уроки в инете.
Когда поймешь, что получается и комп делает всё, что от него требуется - появится уверенность, вот тогда и приступай к простому торговому эксперту.
А насчёт видео и его пользы - Вы зря иронизируете, цель видео не в обучении, а в том, чтоб показать лёгкость и доступность процесса. Человек посмотрит и скажет - "вроде просто, надо попробовать" и пробует. Конечно у кого-то не получается, но по моим наблюдениям много народа пробовали и у половины точно получилось...
Удачи.
За видео спасибо. потратили кучу времени впустую... У меня вопрос, скажите пожалуйста сколько человек ни когда не изучающих программирование посмотрев видео начали писать советников? Дело в том что у меня проблема с изучением MQL (вернее проблема в учителях - их нет), "учебник" по MQL прочитал несколько раз, видео посмотрел а толку ни какого, что дальше как учиться?
Зря вы так по поводу видео! Заслуживает внимания, однозначно! Я учусь по данным урокам, если честно помогают!(напАру со справкой и учебником). Уже написал, первого советника!(не "передрал" у кого-то, а придумал и написал самостоятельно), хотя далек от программирования и никогда этим не занимался, чего и Вам желаю(научиться ;))! А первое впечатление от написания кода было примерно таким же, как у Вас..)) "ни чего не помогает, дурацкий сов. и т.д..." А основная проблема в том, чтобы четко сформулировать что вы хотите от советника, основную цель для себя! Например, попробуйте написать простенького вспомогательного сов-а, который будет подхватывать ваши положительные сделки и переводить их в Б/У.., дальше добавьте к вашемо сову, еще что-нибудь, и т.д. Не успеете оглянуться как у Вас уже готовый сов, написанный Вами!))
P.S. +Здесь ребята отзывчивые, если есть проблемы помогают! :d
Изменено 15 августа, 2015 пользователем mark4431
За видео спасибо. потратили кучу времени впустую... У меня вопрос, скажите пожалуйста сколько человек ни когда не изучающих программирование посмотрев видео начали писать советников? Дело в том что у меня проблема с изучением MQL (вернее проблема в учителях - их нет), "учебник" по MQL прочитал несколько раз, видео посмотрел а толку ни какого, что дальше как учиться?
Зря Вы так про видео!!!Лично я сам учился на видео уроках.Во многих из них достаточно подробно всё рассказывается!До этого
программированием вообще никогда не занимался.А при переходе со старого билда на новый просмотрел ещё и видео уроки
по С++ ,что-бы хоть маленько понять новый MQL4 (от старого сильно отличается).Учебник какой читали?Почитайте на форуме
хотя-бы Альпари хотя и у остальных такой курс есть " Курс MQL4 " .Там правда для старого билда,но суть поймёте.
Может баян и уже обсуждали: компилирую сову 765-м билдом - экзешник 25кб, а если 840-м - получается 50 кб! Есть еще подозрение (пока не проверил), что последним билдом скомпилированная сова еще и памяти жрет в 2 раза больше в терминале. Чего они там пихают??
А можно ли в mql написать торговую панель с кнопками, что-то типа стандартной "Торговли в 1 клик"? Или такое на C++ программируется?
Можно, но только для одного окна (для каждого инструмента запускаете свою панель). А на СИ одна панель для любого активного окна.А можно ли в mql написать торговую панель с кнопками, что-то типа стандартной "Торговли в 1 клик"? Или такое на C++ программируется?
Тут была панель с открытым кодом.
Можно, но только для одного окна (для каждого инструмента запускаете свою панель). А на СИ одна панель для любого активного окна.А можно ли в mql написать торговую панель с кнопками, что-то типа стандартной "Торговли в 1 клик"? Или такое на C++ программируется?
Тут была панель с открытым кодом.
То, что надо! спасибо! Только еще вопрос, можно ведь будет в панели реализовать трал по эквити? Он ведь будет брать данные со всего торгового счета...
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем