Пытаюсь вычислить пересечение на стандартном MACD сигнальной линии и гистограммы. Идея в следующем: на каждом новом баре берем две предыдущие свечи и получаем значения индикатора на каждой из них. Если значение MACD на второй свече больше чем значение сигнала, а на первой свече макд уже ниже сигнала и все значение выше нуля - значит есть пересечение вверху и соотвественно, наоборот.
Но, в момент получения значения оно становится каким-то огромным. Причем, только одной - сигнальной линии второй свечи. Может быть 8 в черте какой степени, 4,5, 7 и т.д. При появлении следующего бара, значение сигнальной линии второго по счету бара от нового уже может быть нормально. Все остальные получаются правильные. И в окне данных значение тоже правильное. Не могу понять почему. Что я делаю не так?
Ощущение, что дело в переменной double. Потому что значение в окне данных 0,000081, а получается 8,1....., тоже самое заметил с другим значением - в окне данных 0,000071, а в переменной 7,1..... Но они все определены как double переменные.
Спасибо. Так показывает правильно. Дурацкая ошибка, конечно. Но все равно интересно, почему все остальные значения отображаются нормально и только одно криво.
Спасибо. Так показывает правильно. Дурацкая ошибка, конечно. Но все равно интересно, почему все остальные значения отображаются нормально и только одно криво.
Оно не кривое, а правильное на машинном уровне, видите в конце есть "е-08"
К примеру, число 1e-05 это не ошибка, а 0.00001
Чтобы видеть то, что привыкли мы, нужно использовать DoubleToString, а программа в любом случае будет работать правильно
Онлайн калькулятор для перевода чисел в экспоненциальный вид и обратно, другим языком для вычисления чисел с буквой E. На компьютере (в частности в тексте компьютерных программ) экспоненциальную запись записывают в виде MEp (пример 1e-10), где: M — мантисса, E (exponent) — буква E, означающая «*10^» («…умножить на десять в степени…»), p — порядок. Это необходимо для представлении очень больших и очень малых чисел, а также для унификации их написания. Многие пользователи калькуляторов столкнулись с вопросом: Что означает буква "E" в цифровом калькуляторе? Это Экспоненциа́льная за́пись— представление действительных чисел в виде мантиссы и порядка. Удобна для записи очень больших и очень малых чисел.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Всем привет. Подскажите, пожалуйста:
Пытаюсь вычислить пересечение на стандартном MACD сигнальной линии и гистограммы. Идея в следующем: на каждом новом баре берем две предыдущие свечи и получаем значения индикатора на каждой из них. Если значение MACD на второй свече больше чем значение сигнала, а на первой свече макд уже ниже сигнала и все значение выше нуля - значит есть пересечение вверху и соотвественно, наоборот.
Но, в момент получения значения оно становится каким-то огромным. Причем, только одной - сигнальной линии второй свечи. Может быть 8 в черте какой степени, 4,5, 7 и т.д. При появлении следующего бара, значение сигнальной линии второго по счету бара от нового уже может быть нормально. Все остальные получаются правильные. И в окне данных значение тоже правильное. Не могу понять почему. Что я делаю не так?
Ощущение, что дело в переменной double. Потому что значение в окне данных 0,000081, а получается 8,1....., тоже самое заметил с другим значением - в окне данных 0,000071, а в переменной 7,1..... Но они все определены как double переменные.
Там не 8 в коммента, а есть продолжение.
Там не 8 в коммента, а есть продолжение.
Спасибо. Так показывает правильно. Дурацкая ошибка, конечно. Но все равно интересно, почему все остальные значения отображаются нормально и только одно криво.
Спасибо. Так показывает правильно. Дурацкая ошибка, конечно. Но все равно интересно, почему все остальные значения отображаются нормально и только одно криво.
Оно не кривое, а правильное на машинном уровне, видите в конце есть "е-08"
К примеру, число 1e-05 это не ошибка, а 0.00001
Чтобы видеть то, что привыкли мы, нужно использовать DoubleToString, а программа в любом случае будет работать правильно
Почитайте
Оно не кривое, а правильное на машинном уровне, видите в конце есть "е-08"
К примеру, число 1e-05 это не ошибка, а 0.00001
Чтобы видеть то, что привыкли мы, нужно использовать DoubleToString, а программа в любом случае будет работать правильно
Почитайте
Спасибо еще раз. Почитаю.
Пофиксил, теперь работает. Конечно не правильно, но работает
{ if(iTrailTakeProfit > 0.0) { tp=OrderTakeProfit() + NormalizeDouble(iTrailTakeProfit * Point(),_Digits); if(NormalizeDouble(((tp - OrderTakeProfit())) < 0.0,Digits))return; tp = OrderTakeProfit(); }else tp = 0.0; if(OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo(Symbol(), MODE_TICKVALUE) * iTrailStart * OrderLots()); { if(((NormalizeDouble((Bid - OrderOpenPrice()*Point),Digits) >= NormalizeDouble(((Bid - NormalizeDouble((iTrailStart * Point),_Digits))),_Digits) > OrderStopLoss() || OrderStopLoss()==0)));//true { if((OrderStopLoss() == 0.0 && NormalizeDouble(Bid - OrderStopLoss()* Point,Digits) < NormalizeDouble((Bid - NormalizeDouble((iTrailDist * Point),_Digits)),_Digits)));//true { if(iTrailStep > 0.0 && OrderStopLoss() >= 0.0 && NormalizeDouble(((Bid - OrderStopLoss() - iTrailDist * Point)),Digits) >= iTrailStep);//true { sl_lev = NormalizeDouble((Bid - iTrailDist * Point()),_Digits); if(NormalizeDouble(Bid - sl_lev * Point,_Digits) < MarketInfo(Symbol(),MODE_STOPLEVEL));//false { if(!OrderModify(Forder,OrderOpenPrice(),NormalizeDouble(Bid - NormalizeDouble((iTrailStart * Point),_Digits),_Digits),tp,OrderExpiration())); Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } } } } }Выставляет стопы не правильно, как побороть?
И смотрите в журнале, что там получается)
Сначала не чего не писал, потом начал смотреть последовательно и оказалось многое.
Спасибо.
Пофиксил, теперь работает. Конечно не правильно, но работает
Выставляет стопы не правильно, как побороть?
Откуда ты получаешь эти данные?
Откуда ты получаешь эти данные?
От ордера
MQL5 тоже сразу возвращает
При успешном принятии ордера торговым сервером функция OrderSend() возвращает значение true.