if((spread = m_symbol.Ask()-m_symbol.Bid()) > _MaxSpread) { //if(InpPrintLog) Print("Spread Ask-Bid (",DoubleToString(spread,m_symbol.Digits()),")", " > Maximum spread (",DoubleToString(_MaxSpread,m_symbol.Digits()),")"); return false;
Я использую стороннюю программу для исторических данных, и спред установлен на фиксированную точку "3" (3 Points)
if((spread = m_symbol.Ask()-m_symbol.Bid()) > _MaxSpread) {
if((spread = NormalizeDouble(m_symbol.Ask()-m_symbol.Bid(), m_symbol.Digits())) > _MaxSpread) {
Смотрите справку Вещественные типы (double, float), пример функции CompareDoubles
- www.mql5.com
Смотрите справку Вещественные типы (double, float), пример функции CompareDoubles
Итак, в исходном коде вы говорите, что нет проблем с округлением до 5 цифр.
Я правильно понял?
Итак, в исходном коде вы говорите, что нет проблем с округлением до 5 цифр.
Я правильно понял?
В исходном коде
double spread=m_symbol.Ask()-m_symbol.Bid(); if(m_pending_max_spread>0.0 && spread>m_pending_max_spread) { m_waiting_pending_order=false; if(InpPrintLog) Print(__FILE__," ",__FUNCTION__, ", ERROR: ","Spread Ask-Bid (",DoubleToString(spread,m_symbol.Digits()),")", " > Maximum spread (",DoubleToString(m_pending_max_spread,m_symbol.Digits()),")"); return; }
ВООБЩЕ нет округления.
Если Ваша задача ловля блох - используйте
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Vladimir Karputov, 2021.10.04 12:38
Смотрите справку Вещественные типы (double, float), пример функции CompareDoubles
для точного сравнения двух чисел 'double' на равенство между собой.
В исходном коде
ВООБЩЕ нет округления.
Если Ваша задача ловля блох - используйте
для точного сравнения двух чисел 'double' на равенство между собой.
пожалуйста, не злись на меня :)
Обязательное условие быть хорошим учеником - задавать вопросы учителю :)
Короче, можно ли это четко сказать?
Код «MaxSpread», указанный ниже, будет работать «как надо», не вызывая проблем с 5-значными историческими данными и 5-значными брокерами.
double spread=m_symbol.Ask()-m_symbol.Bid(); if(m_pending_max_spread>0.0 && spread>m_pending_max_spread) { m_waiting_pending_order=false; if(InpPrintLog) Print(__FILE__," ",__FUNCTION__, ", ERROR: ","Spread Ask-Bid (",DoubleToString(spread,m_symbol.Digits()),")", " > Maximum spread (",DoubleToString(m_pending_max_spread,m_symbol.Digits()),")"); return; }
От Вас нужно несколько цифр: Ask, Bid, расчетное значение m_pending_max_spread и компоненты из которых Вы получили m_pending_max_spread
Какие числа нам нужны? Можете ли вы привести практический пример приведенного выше кода для 5-значных исторических данных и брокера?
Vladimir,
Какие числа нам нужны? Можете ли вы привести практический пример приведенного выше кода для 5-значных исторических данных и брокера?
Вот тестовый код - можете экспериментировать:
//+------------------------------------------------------------------+ //| Script 1.mq5 | //| Copyright © 2021, Vladimir Karputov | //+------------------------------------------------------------------+ #property copyright "Copyright © 2021, Vladimir Karputov" #property version "1.000" #property script_show_inputs //--- input parameters input double InpAsk=1.56027; input double InpBid=1.560241; //--- double m_pending_max_spread=0.00003; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double spread=InpAsk-InpBid; if(m_pending_max_spread>0.0 && spread>m_pending_max_spread) { Print("i am here"); return; } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Extend Box:
Индикатор-утилита: управляет прямоугольниками, всегда сдвигает правую границу по бару #0
Автор: Vladimir Karputov