Буфер iCustom() — как получить значения из буферов пользовательских индикаторов в MT4?

Я пытаюсь написать советник, который будет размещать ПОКУПКУ, когда пользовательский индикатор показывает стрелку {продать или купить}. Для этого я использую iCustom(), но мне сложно сравнивать значения.

Вот мой код:

void OnTick()
  {
//---
       double sell=iCustom(NULL,0,"fx30",0,0);
       double buy=iCustom(NULL,0,"fx30",1,0);
       
       if(sell>0)//sell
       {
        //check if buy trade is running
        //close a buy trade
        //open a sell trade on success
         if(buyTicket>0)
          {
            bool ret=OrderClose(buyTicket, lot, Bid, slipage,clrBlue);
            if(ret==true)
              {
                printf("the sell number is: "+sell);
                sellTicket=OrderSend(Symbol(),OP_SELL,lot,Bid,slipage,NULL,NULL,"MATHUNYA SELL",magic,0,clrRed);
              }
          }
         else
         {
           //we dont have a buy trade open
           //place a sell trade
           //only one trade should be open
           if(sellTicket>0)
           {
             printf("sell order already running");
           }
           else
           {
             printf("the sell number is: "+sell);
             sellTicket=OrderSend(Symbol(),OP_SELL,lot,Bid,slipage,NULL,NULL,"MATHUNYA SELL",magic,0,clrRed);
           }     
         }            
       }
       else{
         Print("buy: "+buy+", sell: "+sell+" Time: "+TimeToStr(Time[1]));
         printf("awaiting sell order..");
       }
       
       if(buy>0)//buy
       {
       //check if sell trade is running
       //close a sell trade
       //open a buy trade on success
         if(sellTicket>0)
          {
            bool ret=OrderClose(sellTicket, lot, Ask, slipage,clrYellow);
            if(ret==true)
              {
                printf("the buy number is: "+buy);
                buyTicket=OrderSend(Symbol(),OP_BUY,lot,Ask,slipage,NULL,NULL,"MATHUNYA BUY",magic,0,clrGreen);
              }
          }
         else
         {
           //we dont have a sell trade open
           //place a buy trade
           //only one trade should be open
           if(buyTicket>0)
           {
             printf("buy order already running");
           }
           else
           {
              printf("the buy number is: "+buy);
              buyTicket=OrderSend(Symbol(),OP_BUY,lot,Ask,slipage,NULL,NULL,"MATHUNYA BUY",magic,0,clrGreen);
           }     
         }          
       }else
       {
         Print("buy: "+buy+", sell: "+sell+" Time: "+TimeToStr(Time[1]));
         printf("awaiting buy order..");
       }
      
  }
//+------------------------------------------------------------------+

// global variables

int    buyTicket  =   0;
int    sellTicket =   0;
double lot        =   0.01;
int    slipage    =   3;
int    magic      = 321;

person Mathunya    schedule 18.07.2017    source источник


Ответы (1)


что вы подразумеваете под сравнением значений? как я вижу, вы сравниваете только sell>0 и buy>0. Мой совет: сразу после сравнения добавить строку
Print(__LINE__," indicator value = "+DoubleToStr(sell,Digits)); и то же самое с buy. Вполне вероятно, но, конечно, у нас тут нет хрустального шара, что ваш индикатор возвращает значение (например, 100 или 1.16000) на одном буфере и EMPTY_VALUE на другом. EMPTY_VALUE равно 2^31-1 в mql4, поэтому оно больше нуля. если вы увидите, что значение индикатора 2147483648.00000 или что-то в этом роде, - вам нужно заменить sell > 0 на sell != EMPTY_VALUE или комбинировать.

person Daniel Kniaz    schedule 24.07.2017