Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 924

 

Здравствуйте, подскажите.

Ищу в истории хай равный хай первого бара, запоминаю индекс найденного бара в переменную High_i

Вот так:

 highr=High[i];
      High_i=0;
      for(j=i+3;j<=i+m;j++)
         {
         if(j>Bars-1) break;
         
         if(!ok1)
            {
            if(MathAbs(High[j]-highr)  <= n*Point)
               {
               
               High_i = j;


Теперь проверяю, хаи трёх баров до и после должны быть меньше хай найденного бара.

Нужно записать в цикл вот это:

if(High[High_i]>High[High_i-3]&&High[High_i]>High[High_i-2]&&High[High_i]>High[High_i-1]
   && High[High_i]>High[High_i+3]&&High[High_i]>High[High_i+2]&&High[High_i]>High[High_i+1])

с одной стороны проверять пытаюсь так

 for(jl=High_i;jl<=High_i+3;jl++) 
    {
    // if (High_i!=0);
       
      if ( High[High_i]>High[jl])
          {
               cnt1++;
               if(cnt1>=3)
                  {
                  ok1=true;
                 BuyBuffer[i]=highr+5*Point;
                  }
               }
            }

Помогите, пожалуйста.




	          
 
tatianati:
Теперь проверяю, хаи трёх баров до и после должны быть меньше хай найденного бара.

Возможно так:

bool Status_Successful = true;

for(int x=(High_i-3); x<=(High_i+3); x++) {
   if(x==High_i) {
      continue;
   }
   if(High[x]>=High[High_i]) {
      Status_Successful = false;
      break;
   }
}


if(Status_Successful==true) {
   ....
}
 
atztek:
Возможно так:



Спасибо, работает.

Но после увеличения количества баров, вот так:

for(int x=(High_i-7); x<=(High_i+7); x++)

возникает

array out of range in 'ta_v1_05.mq4' (174,11)

строка 174, эта:

   if(High[x]>=High[High_i])

скажите, пожалуйста, как исправить.

 
а вы уверены что х натуральное число или 0? если high_i = например 6, то х = -1, а High[-1] - это уже проблема. может быть добавить в 173 строку проверку if (x < 0) continue; 
 
tatianati

danik: а вы уверены что х натуральное число или 0? если high_i = например 6, то х = -1, а High[-1] - это уже проблема. может быть добавить в 173 строку проверку if (x < 0) continue; 
Для трех баров такая "проверка" была:
      for(j=i+3;j<=i+m;j++)

Для других значений необходимо изменять их повсеместно.
Начать можно с этого, а дальше смотреть решит это проблему или есть еще что-то, что необходимо исправить.
 
Здравствуйте уважаемые, подскажите пожалуйста, есть функция закрытия ордеров, только ордеры почему то не закрываются, не могу понять в чём косяк
void CloseOrders(int otype)
    {
      int ClosePrice;
      
      if (otype == OP_BUY) ClosePrice=Bid;
      if (otype == OP_SELL) ClosePrice=Ask;
    
       
      int total = OrdersTotal();
      for(int i = total-1; i >= 0; i--)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         { 
           if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
           OrderClose(OrderTicket(),OrderLots(),ClosePrice,Slippage,Yellow);
         }
      }
 
lufer:
Здравствуйте уважаемые, подскажите пожалуйста, есть функция закрытия ордеров, только ордеры почему то не закрываются, не могу понять в чём косяк

Цена не может быть int!

int ClosePrice;
 
TarasBY:

Цена не может быть int!

ой, точно!! Спасибо!!!
 
Уважаемые форумчане, помогите найти ошибку в коде, вроде должен отрисовывать две линии на основе данных с индикаторов ZeroLag MACD для EUR\USD и GBP\USD, но ничего не происходит. Вот код
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 DarkBlue
#property indicator_width1 1
#property indicator_width2 1
//+------------------------------------------------------------------+

extern string ExtParam1="EURUSD";
extern string ExtParam2="GBPUSD";
extern int FastEMA=12;
extern int SlowEMA=24;
extern int SignalEMA=9;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexLabel(0,ExtParam1); 

SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexLabel(1,ExtParam2); 
//----
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars --; 
int limit=Bars-IndicatorCounted();
int bar;
for(bar=0; bar<limit; bar++)
ExtMapBuffer1[bar]=iCustom(ExtParam1,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam1,0,Time[bar],false));
ExtMapBuffer2[bar]=iCustom(ExtParam2,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam2,0,Time[bar],false));
return(0);
}  
 
ASZmyrov:
Уважаемые форумчане, помогите найти ошибку в коде, вроде должен отрисовывать две линии на основе данных с индикаторов ZeroLag MACD для EUR\USD и GBP\USD, но ничего не происходит. Вот код

Ходят слухи, что IndicatorCounted() не работает, ещё пересчёт индикатора корректнее считать из прошлого в настоящее, ну и ещё пару ошибок в коде.

P.S. Сам ZeroLag MACD тоже нужно "подровнять" под новую виртуальную машину.

Файлы:
Причина обращения: