Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Беглый осмотр показывает, что это должно работать. Но эффективность можно повысить.
Подумайте о том, сколько различных объектов вы нарисовали на своем графике. Если вы щелкните *любой* из этих объектов, вы будете перебирать все ордера и пытаться найти соответствие. Многие объекты, вероятно, не имеют никакого отношения к ордерам. Это неэффективно.
Именно поэтому я предложил проверять первый символ sparam на "#". Это автоматически идентифицирует объект как имеющий отношение к заказу.
Кроме того, нет необходимости перебирать заказы. Имя объекта и/или текст объекта уже содержат номер билета. Поэтому извлеките оттуда номер билета и закройте заказ.
Пример:
Вы открываете заказ. Ему присвоен номер билета 12345
Создайте OBJ_BUTTON с именем"#12345".
Код в OnChartEvent() будет выглядеть примерно так (некомпилированный, непроверенный, поздно ночью...):
{
int ticket=(int)StringSubstr(sparam,1); // extract the ticket number
if(OrderSelect(ticket,SELECT_BY_TICKET)) // select the order
{
if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,CLR_NONE)) // close the order
{
Print("# Error ",GetLastError());
}
}
}
Ого! Я не знал об этом.
Итак, вы упомянули дважды, а я как раз об этом не догадался.
Теперь я проверю это на себе и перенесу в свой основной файл советника.
Большое спасибо.
Я использую OrderTicket() для других объектов, теперь я вижу, когда я нажимаю на этот объект - заказ закрывается.
Мне понравился ваш метод, но похоже он влияет на другие объекты.
Другие объекты называются подобным образом, вот один из них.
Заранее спасибо.
Я использую OrderTicket() для других объектов, теперь я вижу, что когда я нажимаю на этот объект - заказ закрывается.
Мне понравился ваш метод, но похоже, что он влияет на другие объекты.
Другие объекты называются подобным образом, вот один из них.
Заранее спасибо.
Более элегантное решение - изменить систему именования.
Тем не менее, вы все равно можете убрать номер заказа. Это просто зависит от точного формата именования.
Но прежде всего, каков OBJPROP_TEXT кнопки? Имеют ли какие-либо другие объекты такой же OBJPROP_TEXT?
Более элегантное решение - изменить систему именования.
Тем не менее, вы все равно можете убрать номер заказа. Это просто зависит от точного формата именования.
Но прежде всего, каков OBJPROP_TEXT кнопки? Имеют ли другие объекты такой же OBJPROP_TEXT?
Да! Я знаю, что могу изменять имена объектов Button (также я использую Prefix), если я изменю имена кнопок, я смогу изменить много вещей, например, удалить систему и другие вещи, которые все связаны друг с другом.
Ниже приведены имена кнопок и HLine.
"#"+IntegerToString(OrderTicket())+" -"+"Object Button"
(конечно, имена объектов немного отличаются, но метод тот же).
Заранее спасибо.
Рынок закрыт
Возможно, я нашел, но я не уверен.
Если это не подходит, пожалуйста, дайте мне знать.
Заранее спасибо.
//--- 2-й раз редактировалось
Эй! Мужик!
Спасибо большое. Пока никаких проблем. Корректно работает!
#Кроссовер Объекты - Открыть
Я несколько раз сталкивался с этой проблемой, иногда проходил, иногда сдавался, сейчас не хотелось бы сдаваться еще раз.
У меня есть 2 объекта " HLine и Button " они пересекаются, то есть когда я нажимаю на один из них, оба выбираются, что не очень хорошо для меня. ( Ширина BUTTON = 20, ширина HLINE = как вы знаете )
Вопрос: Как я могу сделать так, чтобы при нажатии на BUTTON объект HLINE не выбирался, пока они пересекаются, пожалуйста?
( Я могу легко выбрать HLINE, где они не пересекаются )
Заранее спасибо.
(Я работаю над этим, любой хороший комментарий будет лучше, пожалуйста).
#Прибыль в пунктах - Открыто |#Прибыль в пунктах - Закрыто на данный момент - я решил эту проблему
Мистер Уильям- Я использую ваши " Pip, Point ... " коды расчета.
Теперь я пытаюсь получить прибыль в пипсах с помощью следующих кодов. У меня есть 2 ордера, один из них показывает правильно ( OP_BUY ), второй не показывает правильно - 399 - фактический 400 ( OP_SELL ).
Вопрос: Подскажите, пожалуйста, что я делаю неправильно при расчете прибыли в пунктах?
Заранее спасибо.
( в последний день я проверил форумы на разных сайтах - это не принесло мне пользы )
Форум о трейдинге, автоматических торговых системах и тестировании торговых стратегий
Выпущен MetaTrader 4 Build 574 с обновленным языком MQL4 и рынком приложений
whroeder1, 2014.01.27 14:11
Один из удивительных примеров оператора " if " для сложного условия от господина Уильяма.
Просто спасибо!
Я боролся последние 2 дня, чтобы исправить мое сложное условие оператора " if ", но я не мог решить свою проблему, пока не нашел вышеупомянутый замечательный пример.
Пожалуйста, кто-нибудь помогите мне, мне очень трудно решить эту проблему.
#296
Заранее спасибо.
Приведенный ниже код иногда работает идеально, иногда нет. Я не могу решить эту проблему. Когда я использую один ордер, он работает отлично, но когда я открываю несколько ордеров, эта функция не работает правильно.
Пожалуйста, помогите мне, и немного больше объясните (что не так в приведенном ниже коде), что было бы лучше для меня.
(Сейчас я работаю над этим).
{
ticketnumber=(int) StringSubstr(sparam,1);
if(OrderSelect(ticketnumber,SELECT_BY_TICKET))
{
if(StringFind(sparam,Button_1,0)>=0)
{
// ...
}
if(StringFind(sparam,Button_2,0)>=0)
{
//...
}
for(i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(Symbol()!=OrderSymbol()) continue;
update_1();
update_2();
update_3();
}
}
}
Заранее спасибо.