Сразу 2 проблемы в 2-х терминалах - страница 4 123456 Новый комментарий PSmith 2007.08.09 10:07 #31 cloud666: if(OrderType()==0) { if((slu)>PP) { PP=slu; } } Так работает, а так нет: if(OrderType()==0 && slu>PP) { PP=slu; } И что про терминал под смарты??? (длинна пароля, индикаторы) Давно заметил, что операция && имеет самый большой приоритет, поэтому порядок выполнения получается следующий: 1. Выполняется (0 && slu) при этом sly преобразуется к bool 2. Сравнивается OrderType() == (0 && slu) 3. Проверяется (OrderType() == (0 && slu)) > PP результат совершенно неопределенный Поэтому принял за правило все сравнения заключать в скобки, а уж потом выполнять && или || Правильное написание условия if((OrderType() == 0) && (slu > PP)) Проблемы с делением! Вопросы от "чайника" Особенности языка mql5, тонкости [Deleted] 2007.08.09 10:08 #32 2007.08.09 12:05:51 2006.10.18 10:47 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: OrderModify error 1 2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: OrderModify error 1 2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: OrderModify error 1 2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: OrderModify error 1 2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:49 2006.10.16 16:46 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:49 2006.10.16 16:46 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:49 2006.10.16 16:46 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:49 2006.10.16 16:45 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:49 2006.10.16 16:45 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:49 2006.10.16 16:45 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:49 2006.10.16 16:45 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:49 2006.10.16 16:45 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:48 2006.10.13 11:52 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:48 2006.10.13 11:52 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:48 2006.10.13 11:52 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:48 2006.10.13 11:52 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:48 2006.10.13 11:52 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:48 2006.10.13 11:51 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:48 2006.10.13 11:51 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 2007.08.09 12:05:48 2006.10.13 11:51 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605 Вот лог с такой вставкой в код: Alert(OrderStopLoss()," ",sd," ",su); Система ASCTrend BrainSystem: Разработка торговых систем Нелинейный интервал PSmith 2007.08.09 10:15 #33 cloud666: Этот код должен работать только когда стоп не равен ни одному из значений!!! А он выдает ордер модифи еррор! В чем причина??? if((OrderStopLoss()!=su) && (OrderStopLoss()!=sd)) { if((OrderType()==0) && (PP>=Point*ProfitPoints) && (OrderStopLoss()<OrderOpenPrice())) { OrderModify(OrderTicket(), 0, su, 0, 0, 0); } if((OrderType()==1) && (PP>=Point*ProfitPoints) && (OrderStopLoss()>OrderOpenPrice())) { OrderModify(OrderTicket(), 0, sd, 0, 0, 0); } } А надо так. Нету нулевых цен открытия OrderModify(OrderTicket(), OrderOpenPrice(), su, 0, 0, 0); OrderModify(OrderTicket(), OrderOpenPrice(), sd, 0, 0, 0); [Deleted] 2007.08.09 10:29 #34 PSmith: cloud666: Этот код должен работать только когда стоп не равен ни одному из значений!!! А он выдает ордер модифи еррор! В чем причина??? if((OrderStopLoss()!=su) && (OrderStopLoss()!=sd)) { if((OrderType()==0) && (PP>=Point*ProfitPoints) && (OrderStopLoss()<OrderOpenPrice())) { OrderModify(OrderTicket(), 0, su, 0, 0, 0); } if((OrderType()==1) && (PP>=Point*ProfitPoints) && (OrderStopLoss()>OrderOpenPrice())) { OrderModify(OrderTicket(), 0, sd, 0, 0, 0); } } А надо так. Нету нулевых цен открытия OrderModify(OrderTicket(), OrderOpenPrice(), su, 0, 0, 0); OrderModify(OrderTicket(), OrderOpenPrice(), sd, 0, 0, 0); Не помогло :(, мож ручки кривые у разработчиков??? [Deleted] 2007.08.09 10:33 #35 Вот код, где ошибка? Какого из условий не хватает для проверки стоп-лосса??? if(ProfitPoints!=0) { slu=Bid-OrderOpenPrice(); b=Bid; sld=OrderOpenPrice()-Ask; a=Ask; if((OrderType()==0) && (slu>PP)) { PP=slu; } if((OrderType()==1) && (sld>PP)) { PP=sld; } su=OrderOpenPrice()+(Point*MinProfit); sd=OrderOpenPrice()-(Point*MinProfit); Alert(OrderStopLoss()," ",sd," ",su); if((OrderStopLoss()!=su) && (OrderStopLoss()!=sd)) { if((OrderType()==0) && (PP>=Point*ProfitPoints) && (OrderStopLoss()<OrderOpenPrice())) { OrderModify(OrderTicket(), OrderOpenPrice(), su, 0, 0, 0); } if((OrderType()==1) && (PP>=Point*ProfitPoints) && (OrderStopLoss()>OrderOpenPrice())) { OrderModify(OrderTicket(), OrderOpenPrice(), sd, 0, 0, 0); } } } Array 2007.08.09 10:43 #36 Ошибка тут имхо: 'OrderStopLoss() возвращает ненормализованное значение - это нормально?' У меня по крайней мере было так (пытался ставиться тот же стоплосс, что и был)... то есть это условие работает некорректно: (OrderStopLoss()!=su) && (OrderStopLoss()!=sd) попробуй нормальзовать значения вот так: NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(su,Digits) && NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(sd,Digits) PSmith 2007.08.09 10:47 #37 su < (Bid - MarketInfo(Symbol(),0,MODE_STOPLEVEL)*Point) sd > (Ask + MarketInfo(Symbol(),0,MODE_STOPLEVEL)*Point) Array 2007.08.09 10:49 #38 stringo: cloud666: В терминале 208 билд: условия типа if(a>b && b>c || c<d){} срабатывают когда выполняется первое условие!!! Расставляйте скобки, чтобы не было "казнить нельзя помиловать". Или почитайте про приоритеты операций А что, математика уже вне закона? У меня аналогичные вопросы по приоритетам: 'Булевые операции и приоритеты' Буду рад развернутым комментариям разработчиков. [Deleted] 2007.08.09 10:53 #39 PSmith: su < (Bid - MarketInfo(Symbol(),0,MODE_STOPLEVEL)*Point) sd > (Ask + MarketInfo(Symbol(),0,MODE_STOPLEVEL)*Point) Да это понятно! Почему так условия срабатывают??? PSmith 2007.08.09 11:04 #40 ARray: stringo: cloud666: В терминале 208 билд: условия типа if(a>b && b>c || c<d){} срабатывают когда выполняется первое условие!!! Расставляйте скобки, чтобы не было "казнить нельзя помиловать". Или почитайте про приоритеты операций А что, математика уже вне закона? У меня аналогичные вопросы по приоритетам: 'Булевые операции и приоритеты' Буду рад развернутым комментариям разработчиков. Если скобки не стоят, то первой операцией всегда выполняется &&, которая имеет наивысший приритет (на практике проверено неоднократно). 1. b && b = int(b) - целая часть b 2. с || с = int(c) - целая часть c 3. a > int(b) = 1/0 4. 1/0 > int(c) = 1/0 5. 1/0 < d = ? А поскольку разницы между bool и int практически никакой нет то результат может быть любой. Ставьте скобки и будет вам щастье. Проблемы с делением! [Архив!] Любой вопрос новичка, Это глюк или так 123456 Новый комментарий
Так работает, а так нет:
И что про терминал под смарты??? (длинна пароля, индикаторы)
Давно заметил, что операция && имеет самый большой приоритет, поэтому порядок выполнения получается следующий:
1. Выполняется (0 && slu) при этом sly преобразуется к bool
2. Сравнивается OrderType() == (0 && slu)
3. Проверяется (OrderType() == (0 && slu)) > PP результат совершенно неопределенный
Поэтому принял за правило все сравнения заключать в скобки, а уж потом выполнять && или ||
Правильное написание условия
2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: OrderModify error 1
2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: OrderModify error 1
2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: OrderModify error 1
2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: OrderModify error 1
2007.08.09 12:05:50 2006.10.17 15:25 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:49 2006.10.16 16:46 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:49 2006.10.16 16:46 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:49 2006.10.16 16:46 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:49 2006.10.16 16:45 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:49 2006.10.16 16:45 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:49 2006.10.16 16:45 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:49 2006.10.16 16:45 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:49 2006.10.16 16:45 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:48 2006.10.13 11:52 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:48 2006.10.13 11:52 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:48 2006.10.13 11:52 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:48 2006.10.13 11:52 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:48 2006.10.13 11:52 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:48 2006.10.13 11:51 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:48 2006.10.13 11:51 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
2007.08.09 12:05:48 2006.10.13 11:51 cloud's trade 3 GBPUSD,Daily: Alert: 1.8395 1.8585 1.8605
Вот лог с такой вставкой в код:
Этот код должен работать только когда стоп не равен ни одному из значений!!! А он выдает ордер модифи еррор! В чем причина???
А надо так. Нету нулевых цен открытия
Этот код должен работать только когда стоп не равен ни одному из значений!!! А он выдает ордер модифи еррор! В чем причина???
А надо так. Нету нулевых цен открытия
Не помогло :(, мож ручки кривые у разработчиков???
'OrderStopLoss() возвращает ненормализованное значение - это нормально?'
У меня по крайней мере было так (пытался ставиться тот же стоплосс, что и был)... то есть это условие работает некорректно:
попробуй нормальзовать значения вот так:
su < (Bid - MarketInfo(Symbol(),0,MODE_STOPLEVEL)*Point)
sd > (Ask + MarketInfo(Symbol(),0,MODE_STOPLEVEL)*Point)
В терминале 208 билд: условия типа if(a>b && b>c || c<d){} срабатывают когда выполняется первое условие!!!
А что, математика уже вне закона?
У меня аналогичные вопросы по приоритетам:
'Булевые операции и приоритеты'
Буду рад развернутым комментариям разработчиков.
su < (Bid - MarketInfo(Symbol(),0,MODE_STOPLEVEL)*Point)
sd > (Ask + MarketInfo(Symbol(),0,MODE_STOPLEVEL)*Point)
Да это понятно! Почему так условия срабатывают???
В терминале 208 билд: условия типа if(a>b && b>c || c<d){} срабатывают когда выполняется первое условие!!!
А что, математика уже вне закона?
У меня аналогичные вопросы по приоритетам:
'Булевые операции и приоритеты'
Буду рад развернутым комментариям разработчиков.
Если скобки не стоят, то первой операцией всегда выполняется &&, которая имеет наивысший приритет (на практике проверено неоднократно).
1. b && b = int(b) - целая часть b
2. с || с = int(c) - целая часть c
3. a > int(b) = 1/0
4. 1/0 > int(c) = 1/0
5. 1/0 < d = ?
А поскольку разницы между bool и int практически никакой нет то результат может быть любой. Ставьте скобки и будет вам щастье.