Помогите доработать советник.

 

//+------------------------------------------------------------------+
//| Trade50.mq4 |
//| Copyright © 2006, Cherednichenko W. A |
//| http://www. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Cherednichenko W. A"
#property link "http://www."

#include <WinUser32.mqh>//для MessageBox()


extern double Step = 50;
extern double TakeProfit = 50;
extern double StartValue = 1.75;
extern double HighLevel01 = 300;
extern double LowLevel01 = 300;
extern double HighLevel02 = 400;
extern double LowLevel02 = 400;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
static bool run_once = false;
static int sym_digits;
if (run_once == false)
{
sym_digits = MarketInfo(Symbol(), MODE_DIGITS); // число разрядов после десятичной точки
run_once = true;
}
double ticket = 0;
int ttl = OrdersTotal();
int cnt = 0;
for( cnt=0;cnt<ttl;cnt++ ){
if( OrderSelect( cnt, SELECT_BY_POS ) == true)
{
if (Ask == OrderOpenPrice()) return(0);
if (Bid == OrderOpenPrice()) return(0);
}
}
RefreshRates();
if ( MathMod(Bid / Point, Step) == 0)
{
if ( (Bid < StartValue + HighLevel02 * Point) && (Bid > StartValue - LowLevel02 * Point))
{
if ( Bid > StartValue + HighLevel01 * Point)
{
ticket = OrderSend(Symbol(), OP_SELL, 1, Bid, 3, 0, NormalizeDouble(Bid - TakeProfit * Point, sym_digits), "My order #", 16384, 0, Green);
}
if ( Bid < StartValue - LowLevel01 * Point)
{
ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, NormalizeDouble(Ask + TakeProfit * Point, sym_digits), "My order #", 16384, 0, Green);
}
ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, NormalizeDouble(Ask + TakeProfit * Point, sym_digits), "My order #", 16384, 0, Green);
ticket = OrderSend(Symbol(), OP_SELL, 1, Bid, 3, 0, NormalizeDouble(Bid - TakeProfit * Point, sym_digits), "My order #", 16384, 0, Green);
}
}
return(0);
}
//+------------------------------------------------------------------+


Советник ставит по 2 ордера селл и бай на уровнях кратных шагу (Step). Но пропускает иногда уровни, кратные шагу. Например, на 1.7800 ставит, а вот уже на 1.7750 может не поставить.... почему? :-/ Это наблюдал и в реальной торговле. Обьяснить не могу. Механизм проверки кратности курса вроде нормально написан.

Заранее благодарен за ответы.
Причина обращения: