if(OrderStopLoss()>MA && MA-Ask>10*Point && MA<OrderOpenPrice())
поменяй на:
if((OrderStopLoss()-MA>0) && MA-Ask>10*Point && MA<OrderOpenPrice())
а еще лучше поменяй на:
if((OrderStopLoss()-MA>0) && (MA-Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point>0) && MA<OrderOpenPrice())и сорри за лишние скобки, 1С попортил стиль:)
if(OrderStopLoss()-MA>0 && MA-Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point>0 && MA<OrderOpenPrice()) { Print(OrderStopLoss()-MA>0," (OrderStopLoss()-MA ",OrderStopLoss()-MA,">0 ",0,") && ", MA-Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point>0," && ",MA<OrderOpenPrice()); OrderModify(OrderTicket(),OrderOpenPrice(),MA,0,0,CLR_NONE); }:(
Вот собственно скрипт:
int start() { double a=0.00001; //---- Print(a," > 0"); if (a>0) Print("True"); else Print("False"); //---- return(0); }Вот собственно результат:
2007.10.02 13:54:04 Test USDCHF,H4: removed
2007.10.02 13:54:04 Test USDCHF,H4: True
2007.10.02 13:54:04 Test USDCHF,H4: 0 > 0
2007.10.02 13:54:04 Test USDCHF,H4: loaded successfully
После чего меняем в функции Print запятую на "конкатенацию строк", как показано ниже:
Print(a + " > 0");выполняем скрипт заново, и получаем весьма интересный результат:
2007.10.02 14:00:04 Test USDCHF,H4: removed
2007.10.02 14:00:04 Test USDCHF,H4: True
2007.10.02 14:00:04 Test USDCHF,H4: 0.00001000 > 0
2007.10.02 14:00:04 Test USDCHF,H4: loaded successfully
Вывод: проблемы с машинным округлением, так что вместо ">0" поставьте нечто вроде >0.00005, т.к. не думаю что после 4-го знака имеются значащие разряды.
if(OrderStopLoss()-MA>0.00005
Я в основном программирую на асме под дос... Можно про результат сравнения ноль??? (иходя из знаний программирования на машинном коде 1 и будет !!! )
Ето:
if(OrderStopLoss()>MA && MA-Ask>10*Point && MA<OrderOpenPrice())
сделай так и пролем с ошибка будет решится :
if(OrderStopLoss()>MA+Point && MA-Ask>10*Point && MA<OrderOpenPrice()
if(OrderStopLoss()-MA>0 && MA-Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point>0 && MA<OrderOpenPrice()) { Print(OrderStopLoss()-MA>0," (OrderStopLoss()-MA ",OrderStopLoss()-MA,">0 ",0,") && ", MA-Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point>0," && ",MA<OrderOpenPrice()); OrderModify(OrderTicket(),OrderOpenPrice(),MA,0,0,CLR_NONE); }:(
if(OrderStopLoss()-MA>Point && MA-Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point>0 && MA<OrderOpenPrice())
Попробуй так должно работать
Оп пока думал уже ответили
Ето:
if(OrderStopLoss()>MA && MA-Ask>10*Point && MA<OrderOpenPrice())
сделай так и пролем с ошибка будет решится :
if(OrderStopLoss()>MA+Point && MA-Ask>10*Point && MA<OrderOpenPrice()
if(OrderStopLoss()-MA>Point && MA-Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point>0 && MA<OrderOpenPrice())
Попробуй так должно работать
Оп пока думал уже ответили
Проблема в том что OrderStopLoss() возвращает ненормализованное(!) значение. Сам на это натыкался.
А OrderStopLoss() > MA+Point не подходит, так как потом делается OrderModify(. ..,MA,...) и натыкаемся на ту же ошибку 1.
Либо приходится сдвигать стоп на лишний Point. Решило проблему
OrdSL = NormalizeDouble(OrderStopLoss(),Point);
if(OrdSL > MA)
....
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите найти в моём коде неправельность которая делает эту ошибку.
В низу сам код.