2в1 - Ошибка 130 и расчет разворотных точек на H1

 
Помогите пожалуйста.
Вот часть кода

int TrailingStop.TR() // move stoploss according to trailing stop
{
if(TS.TR==0)
return(0);
RefreshRates();
int i=0;
if(OrdersTotal()>0)
 {
  double b=Bid;
  double a=Ask;
  if(b>lastbid||a<lastask)
  for(i=0;i<OrdersTotal();i++)
   {
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    if(Symbol()!=OrderSymbol())
    continue;
    if(OrderMagicNumber()==Magic.TR)
     {
      if(OrderType()==OP_BUY)
       {
        if(OrderStopLoss()<b-TS.TR*Point)
         {
          if(OrderOpenPrice()<b-TS.TR*Point)
           {
            OrderModify(OrderTicket(),OrderOpenPrice(),b-TS.TR*Point,OrderTakeProfit(),0);
            lastbid=b;
           }
         }
       }
      if(OrderType()==OP_SELL)
       {
        if(OrderStopLoss()>a+TS.TR*Point)
         {
          if(OrderOpenPrice()>a+TS.TR*Point)
           {
            OrderModify(OrderTicket(),OrderOpenPrice(),a+TS.TR*Point,OrderTakeProfit(),0);
            lastask=a;
           }
         }
       }
     }
   }
 }
   //Sleep(5000);
return(0);
}
 
//-----------------------------------------------------------------------------------------------------------------
 
int BE.TR()
{
if(BE.TR==0)
return(0);
int i=0;
RefreshRates();
if(OrdersTotal()>0)
 {
  for(i=0;i<OrdersTotal();i++)
   {
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    if(Symbol()!=OrderSymbol())
    continue;
    if(OrderMagicNumber()==Magic.TR)
     {
      if(OrderType()==OP_BUY)
       {
        if(OrderOpenPrice()<Bid-BE.TR*Point)
         {
          if(OrderOpenPrice()>OrderStopLoss())
          OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BV.TR*Point,OrderTakeProfit(),0);
         }
       }
      if(OrderType()==OP_SELL)
       {
        if(OrderOpenPrice()>Ask+BE.TR*Point)
         {
          if(OrderOpenPrice()<OrderStopLoss())
          OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BV.TR*Point,OrderTakeProfit(),0);
         }
       }
     }
   }
 }
 
return(0);
}
Я думаю переменные понятны.

Эта часть кода работает на одном терминале (Альпари, оффлайн)
но НЕ работает на другом терминале (ВХЦ капитал), выдавая ошибку 130
Ошибок при копи-пейсте добавлять я пока не научился, код идентичен в обоих программах.
В альпари вроде бы работает.
В ВХЦ ошибка что ни делай. Результат бектеста соответственно разный.


Раз уж создаю тему то закину и второй интересующий вопрос:
Пишу эксперта который расчет разворотных (pivot) точек проводит через часовой таймфрейм.
Вот только по сравнению с Д1 (не смотря на то что все переменные вроде бы совпадают) выдает разные результаты...
Коды:
для часовика
  close=iClose(Symbol(),0,TimeHour(TimeCurrent())+1);
  high=High[ArrayMaximum(High,24,TimeHour(TimeCurrent())+1)];
  low=Low[ArrayMinimum(Low,24,TimeHour(TimeCurrent())+1)];
  BuyZone = NormalizeDouble ( ( close + high + high - low ) / 2 , Digits ) ; //  ( c + h + h - l ) / 2
  SellZone = NormalizeDouble ( ( close + low ) / 2 , Digits ) ; // ( c + l ) / 2

для дневника
 BuyZone=NormalizeDouble((iClose(NULL,PERIOD_D1,1)+iHigh(NULL,PERIOD_D1,1)+iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1))/2,Digits);
 SellZone=NormalizeDouble((iClose(NULL,PERIOD_D1,1)+iLow(NULL,PERIOD_D1,1))/2,Digits);

Результат разный...

Кто-то может что-то конкретное сказать?
 
Насчет WHC - там нельзя одновременно выставить/подправить тейкпрофит и стоплосс одновременно, все нужно делать по очереди.
А насчет pivot - посмотри код внимательно, там довольно много ошибок.
 
favoritefx просьба - если видите ошибку, назвать. я мысли читать не умею. Хай-лоу-закрытие-открытие считывает нормально.

С WHC проблем раньше не было - все ставилось нормально. Разве что сначала выставлял пустой ордер а потом добавлял стоп и тейк - и все работает. А тут глюки.
Кстати что с форумом? При вставке вставляет в конец первой строчки и остальные не видит а курсор становится длинной во все строки ниже. Браузер мозилла версия последняя.
 
Пофиксил называется...
Дописал
  BuyZone = NormalizeDouble ( ( close + high + high - low ) / 2.0 , Digits ) ; //  ( c + h + h - l ) / 2
  SellZone = NormalizeDouble ( ( close + low ) / 2.0 , Digits ) ; // ( c + l ) / 2
вместо 2 написал 2.0
Работает... Прям вуду...

Просьба если вы видите ошибки в формуле, расчетах или еще в чем-либо - скажите!
 

Это так задумано, что функция переменная названы одинаково?

int BE.TR()
{
if(BE.TR==0)
...

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

      if(OrderType()==OP_BUY)
       {
        if(OrderOpenPrice()<Bid - BE.TR*Point)
         {
          if(OrderOpenPrice()>OrderStopLoss())
          OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + BV.TR*Point,OrderTakeProfit(),0);
         }
       }
 
PSmith - так и задумано, обе переменные внешние.
Трейл пофиксил. Работает.

Проблема с развототными точками. Тоесть Пайвот пойнты.
У кого-нибуть есть индикатор, который считает ВСЕ уровни?
В смысле Pivot, M1 M2 M3 M4, R1 R2, S1 S2?
Главное условие - работа с любым таймфреймом и отображение уровней с дневного графика на протяжении всего дня линиями, чтобы можно было в любой момент обратится и получить одно и то же значение.

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

Использую этот код:

double PivotCalc()
{
//////////////// parameter initialization /////////////////
SellZone=0;BuyZone=0;
double close=0,
       open=0,
       high=0,
       low=0,
       range=0,
       move=MinMove.TR*Point;
///////////////////// parameter calculation /////////////////
       close=iClose(Symbol(),0,TimeHour(TimeCurrent())+1);
       open=iOpen(Symbol(),0,TimeHour(TimeCurrent())+24);
       high=High[ArrayMaximum(High,24,TimeHour(TimeCurrent())+1)];
       low=Low[ArrayMinimum(Low,24,TimeHour(TimeCurrent())+1)];
       range=high-low;
///////////////////////////////////// pivot calculation ////////////////////////////////
if(close>open+move) //trend up
 {
  Trend = 1 ; 
  BuyZone = NormalizeDouble ( ( close + high + high - low ) / 2.0 , Digits ) ; //  ( c + h + h - l ) / 2
  SellZone = NormalizeDouble ( ( close + low ) / 2.0 , Digits ) ; // ( c + l ) / 2
 }
else if(close<open-move) //trend down
 {
  Trend = -1 ; //
  BuyZone = NormalizeDouble ( ( close + high ) / 2.0 , Digits ) ; //  ( c + h ) / 2
  SellZone = NormalizeDouble ( ( close + low + low - high ) / 2.0 , Digits ) ; // ( c + l + l - h ) / 2
 }
else // no trend, side, ranging, whipsawing, ect
 {
  Trend = 5 ;
  BuyZone = NormalizeDouble ( ( close + close + high + high - low ) / 3.0 , Digits ) ; //  ( c + c + h + h - l ) / 3
  SellZone = NormalizeDouble ( ( close + close + low + low - high ) / 3.0 , Digits ) ; // ( c + c + l + l - h ) / 3
 }
///////////////////////////////////////////////////////////
 
 
return(0);
}
вместо этого

         double range_Tenchi2=0;
         if(prev_day_Tenchi2==iTime(NULL,PERIOD_D1,0))//checking start of the next bar
         range_Tenchi2=iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1);
         if(range_Tenchi2>rangemin_Tenchi2*Point)
          {
           if(iClose(NULL,PERIOD_D1,1)>iOpen(NULL,PERIOD_D1,1)) //trend up
            {
             BuyZone_Tenchi2=NormalizeDouble((iClose(NULL,PERIOD_D1,1)+iHigh(NULL,PERIOD_D1,1)+iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1))/2,Digits);
             SellZone_Tenchi2=NormalizeDouble((iClose(NULL,PERIOD_D1,1)+iLow(NULL,PERIOD_D1,1))/2,Digits);
             Trend_Tenchi2="UP";
            }
           if(iClose(NULL,PERIOD_D1,1)<iOpen(NULL,PERIOD_D1,1)) //trend down
            {
             BuyZone_Tenchi2=NormalizeDouble((iClose(NULL,PERIOD_D1,1)+iHigh(NULL,PERIOD_D1,1))/2,Digits);
             SellZone_Tenchi2=NormalizeDouble((iClose(NULL,PERIOD_D1,1)+iLow(NULL,PERIOD_D1,1)+iLow(NULL,PERIOD_D1,1)-iHigh(NULL,PERIOD_D1,1))/2,Digits);
             Trend_Tenchi2="DOWN";
            }
          }
         if(range_Tenchi2<=rangemin_Tenchi2*Point)
          {
           BuyZone_Tenchi2=NormalizeDouble((iClose(NULL,PERIOD_D1,1)+iClose(NULL,PERIOD_D1,1)+iHigh(NULL,PERIOD_D1,1)+iHigh(NULL,PERIOD_D1,1))/3-iLow(NULL,PERIOD_D1,1)/3,Digits);
           SellZone_Tenchi2=NormalizeDouble((iClose(NULL,PERIOD_D1,1)+iClose(NULL,PERIOD_D1,1)+iLow(NULL,PERIOD_D1,1)+iLow(NULL,PERIOD_D1,1))/3-iHigh(NULL,PERIOD_D1,1)/3,Digits);
           Trend_Tenchi2="side";
          }
          prev_day_Tenchi2=iTime(NULL,PERIOD_D1,0);
эта часть работает вроде нормально но используется 2 вместо 2.0 и т.д.

Подскажите пожалуйста, как верхнюю часть заставить работать точно так же как и нижнюю
 
Опробовал вариант, найденный в библиотеке функций. Дописал то, что по идее должно быть проверкой на воскресенье. Запустил - висим! Перезапускаю МТ4 - зависает при запуске.
Когда будет новый билд с защитой от зацыкленных функций? (баров в истории 2000+ а уже висит - не порядок!)
Попробовал подправить в другом компиляторе - висим! Счас вообще все кроме музыки и браузера позависает....
 
Накопал таки этот индикатор.
Называется
SDX-TzPivots
Огромный респект автору Shimodax.
Нашел в виде кода, значит, индикатор бесплатный - из принципа ничего не покупаю ибо могу написать сам. А если не могу - значит кто-то уже написал :)