Индикаторы: MA Levels

 

MA Levels:

iMA (Moving Average, MA) и восемь уровней (четыре вверх и четыре вниз)

MA Levels

Автор: Vladimir Karputov

 
Привет Владимир!
Что-то привлекло мое внимание.

Ниже приведены блоки кода «Маximum spread», которые вы недавно выпустили и использовали в более старых версиях.

новый код;
bool CheckSpread()
{
   double spread = 0;
   
   if(_MaxSpread > 0 && (spread = m_symbol.Ask()-m_symbol.Bid()) > _MaxSpread) {
      Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY ... but spread (",IntegerToString(int(spread/m_symbol.Point())),") > 'Maximum spread'");
      return false;
   }
   
   return true;
}

старый код;
bool CheckSpread()
{
   double spread = 0;

   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;
   }
   
   return true;
}

В своих тестах я обнаружил, что оба блока кода дают одинаковые результаты.
Но новый механизм принятия решений с «Mаximum spread» содержит больше строк кода. В чем разница между ними и зачем нам лишние строки кода?

Спасибо.
 

Вот новый код:

   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 #:

Вот новый код:

что именно здесь Вас смущает?

Я просто пытаюсь чему-то научиться.

Я пытаюсь понять «логическое мышление и подход», которые вызывают больше кодирования между двумя блоками кода с одинаковыми функциями и результатами.

Этот блок кода несовместим с текущим блоком кода «Маximum spread» советника, над которым я работаю.
Советник, над которым я работаю, по-разному обрабатывает спреды, связанные с отложенными ордерами.

Вот почему я могу использовать два блока кода, которые я привел в своем первом посте, и поэтому мне любопытны различия в нюансах между ними.

 
Edviao #:

Я просто пытаюсь чему-то научиться.

Я пытаюсь понять «логическое мышление и подход», которые вызывают больше кодирования между двумя блоками кода с одинаковыми функциями и результатами.

Этот блок кода несовместим с текущим блоком кода «Маximum spread» советника, над которым я работаю.
Советник, над которым я работаю, по-разному обрабатывает спреды, связанные с отложенными ордерами.

Вот почему я могу использовать два блока кода, которые я привел в своем первом посте, и поэтому мне любопытны различия в нюансах между ними.

Вы показали два блока - ни один из них не есть моим. Вы или показывайте истинный код или указывайте какие изменения Вы внесли. И самое главное - я использую стилизатор

Остальные стили неприемлимы.

 
Vladimir Karputov #:

Вы показали два блока - ни один из них не есть моим. Вы или показывайте истинный код или указывайте какие изменения Вы внесли. И самое главное - я использую стилизатор

Остальные стили неприемлимы.

Я провожу несколько тестов с вашим «EMA Cross Contest Hedged EA» и пытаюсь улучшить себя.
Функция "Маximum spread" в этом советнике недоступна.

Вот почему я попытался адаптировать функцию «Маximum spread», которую вы используете в своем советнике «Alligator EA iSAR Trailing 2».
Поэтому в кодовых блоках есть обязательные отличия.

 

Разберём код по косточкам:

   1. double spread=m_symbol.Ask()-m_symbol.Bid();
   2. if(m_pending_max_spread>0.0 && spread>m_pending_max_spread)
   3.  {
   4.   m_waiting_pending_order=false;
   5.   if(InpPrintLog)
   6.      Print(__FILE__," ",__FUNCTION__,
   7.            ", ERROR: ","Spread Ask-Bid (",DoubleToString(spread,m_symbol.Digits()),")",
   8.            " > Maximum spread (",DoubleToString(m_pending_max_spread,m_symbol.Digits()),")");
   9.   return;
   10.  }

Строка 1: получаем в переменную 'spread' разницу между текущими ценами 'Ask' и 'Bid'

Строка 2: 'm_pending_max_spread' - эта переменная типа 'double', содержит заданный спред (рассчитывается в OnInit как InpMaxSpread * m_symbol.Point() )

если 'm_pending_max_spread' больше нуля (помним, что '0' - это OFF) и если 'm_pending_max_spread' больше 'spread' 

Строка 4: опускаем флаг 'm_waiting_pending_order'

Строки 5-8: распечатываем информационное сообщение об ошибке 

Строка 9: выходим.

 
Vladimir Karputov #:

Разберём код по косточкам:

Строка 1: получаем в переменную 'spread' разницу между текущими ценами 'Ask' и 'Bid'

Строка 2: 'm_pending_max_spread' - эта переменная типа 'double', содержит заданный спред (рассчитывается в OnInit как InpMaxSpread * m_symbol.Point() )

если 'm_pending_max_spread' больше нуля (помним, что '0' - это OFF) и если 'm_pending_max_spread' больше 'spread' 

Строка 4: опускаем флаг 'm_waiting_pending_order'

Строки 5-8: распечатываем информационное сообщение об ошибке 

Строка 9: выходим.

Я получил эти ошибки.


 
Edviao #:

Я получил эти ошибки.


Вы должны были поместить блок кода в функцию. 

 
Vladimir Karputov #:

Вы должны были поместить блок кода в функцию. 

Спасибо.
Я работаю над необходимым блоком кода.

Кстати, Владимир, есть ли функциональная разница между этим блоком кода максимального распространения, который вы указали, и блоками кода "Маximum spread", которые я сейчас использую выше?

 
Edviao #:
Спасибо.
Я работаю над необходимым блоком кода.

Кстати, Владимир, есть ли функциональная разница между этим блоком кода максимального распространения, который вы указали, и блоками кода "Маximum spread", которые я сейчас использую выше?

На вкус и цвет все фломастеры разные. Вы пришли из языка нечеткой логики. А я не наоборот, не люблю составные выражения.

Причина обращения: