почитай здесь по поводу сравнения двух вещественных, вставь вывод GetLastError, а тестер выдает ошибку потому что у тебя текущий с.л. уже равен тому что ты хочешь поставить с точностью до ...., а вот если брать большую точность, то не равны
Да GetLastError выдает, соответсвенно, 1. Это и в логе видно
15:25:14 2007.01.23 11:06 May Test GBPUSD,H4: OrderModify error 1
15:25:14 2007.01.23 11:06 May Test GBPUSD,H4: OrderModify error 1
зачем гадать, преобразуй в текстовое с точностью например до 8 знаков и выведи
Print( DoubleToStr(OrderStopLoss(),8) ," < ",DoubleToStr(SL,8));
Вставил.
Вот результат
Вот результат
09:47:23 2007.08.24 20:35 May Test GBPUSD,H1: 1.98450000 < 1.98450000
Легче не стало. Может касяк в не в советнике, а в MT4?
Господа разработчики. Кто тут не прав. Рассудите.
да, что-то не то .... (может разница дальше, я думал восьми знаков будет достаточно)
ну наверно не повредит все таки сделать так: вставляем функцию
ну наверно не повредит все таки сделать так: вставляем функцию
//+---------------------------------------------------------------------------------------------------------------------------------------------------+
//| функция возвращает истину если первое число больше второго |
//+---------------------------------------------------------------------------------------------------------------------------------------------------+
bool GreaterDoubles(double number1,double number2,int dig)
{
if(NormalizeDouble(number1-number2,dig)>0) return(true);
else return(false);
}
//=====================================================================================================================================================
и вместо if(OrderStopLoss()<SL)
пишем if( GreaterDoubles(SL,OrderStopLoss(),Digits) )
Всего в double 15 знаков должно быть. То есть если взять разность и умножить на 10000000 разница должна всплыть в восьмом знаке. Если конечно эти операции её не уничтожат :)
bool GreaterDoubles(double number1,double number2,int dig)
Вроде все случилось. Огромное спасибо.
:) бувай
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Может я что-то не вижу в упор.
Вот кусок кода
if(Trailing>0) { if(OrderType()==OP_BUY) { if(Bid-OrderOpenPrice()>Point*Trailing) { SL=NormalizeDouble(Bid-Point*Trailing,Digits); Print(OrderStopLoss()," < ",SL); if(OrderStopLoss()<SL) { res=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Green); if (!res) {Print(OrderStopLoss()," ",SL);} return ; } } } if(OrderType()==OP_SELL) { if(OrderOpenPrice()-Ask>Point*Trailing) { SL=NormalizeDouble(Ask+Point*Trailing,Digits); Print(OrderStopLoss()," > ",SL); if((OrderStopLoss()>SL) || (OrderStopLoss()==0)) { res=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Red); if (!res) {Print(OrderStopLoss()," ",SL);} return; } } } }И после всего этого тостер периодически выдает ошибку OrderModify error 1.
В логе он пишет вот што:
15:25:14 2007.01.23 11:06 May Test GBPUSD,H4: 1.9546 < 1.9546
15:25:14 2007.01.23 11:06 May Test GBPUSD,H4: OrderModify error 1
15:25:14 2007.01.23 11:06 May Test GBPUSD,H4: 1.9546 1.9546
То есть по его мнению 1.9546 меньше 1.9546. Что тут за беда?