Жду - не дождусь никак - страница 3

 

Средствами MQL4 тики не собрать! Это возможно только двумя способами: хак и DDE.

Есть отличный способ загрузки тиковой истории через MQL4, но он будет работать только на одном брокере.

 

Не знаю как у вас, у меня всё работет.

double ASK=0;
int start()
{//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
 Comment("start " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));// а так даже часики без замирания работают
 Sleep(500);
 ASK=MarketInfo(Symbol(),MODE_ASK);
 while(ASK==MarketInfo(Symbol(),MODE_ASK))
   {Comment("Loop  " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
    Sleep(100);    
   }
 Comment("Start " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));  
return(0);
}//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+

блин называл "Жду - не дождусь никак" а получилась хрень какаято, но ничего главное чтоб работало :о)
Файлы:
 
Urain >>:

Не знаю как у вас, у меня всё работет.

Есть одна тонкость!


код не будет ловить ТИК при котором дергается только цена Bid!


это у брокеров с плавающим спредом!

тик может прийти по Bid, при этом Ask не дернется!


//
// вот теперь сработает ловля тика и на брокерах с плавающим спредом
//
double ASK=0,BID = 0;
int start()
{//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
 Comment("start " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));// а так даже часики без замирания работают
 Sleep(500);
 ASK=MarketInfo(Symbol(),MODE_ASK);
 BID=MarketInfo(Symbol(),MODE_BID);

 while( ASK==MarketInfo(Symbol(),MODE_ASK) || BID==MarketInfo(Symbol(),MODE_BID)  )
   {Comment("Loop  " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
    Sleep(100);    
   }
 Comment("Start " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));  
return(0);
}//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+


 

подождите... вот что написано в справке

bool RefreshRates( )

Обновление данных в предопределенных переменных и массивах-таймсериях. Эта функция используется, когда эксперт или скрипт производит вычисления в течение долгого времени и нуждается в обновленных данных.

Возвращается TRUE, если данные обновлены, иначе FALSE.

судя по этому вполне достаточно будет конструкции

 while( !RefreshRates() )
   {Comment("Loop  " + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
    Sleep(100);    
   }
 
getch >>:

Средствами MQL4 тики не собрать! Это возможно только двумя способами: хак и DDE.

Есть отличный способ загрузки тиковой истории через MQL4, но он будет работать только на одном брокере.

Одно из высказываний разработчиков на эту тему. Тики средствами MQL4 не собрать.

// код показывает, что средствами MQL4 не возможно собрать ВСЕ тики

#define PAUSE 100

void MyAlert()
{
  Alert(TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS) + " - произошел пропуск тика!");
  
  return;
}

void start()
{
  int PrevTime, Tmp;
  double PrevVolume;

  PrevVolume = Volume[0];
  PrevTime = Time[0];
  
   while (!IsStopped())
   {
   
     if (PrevTime == Time[0])
     {
       Tmp = Volume[0] - PrevVolume + 0.1;
       
       if (Tmp > 1)
         MyAlert();
     }
     else
     {
       PrevTime = Time[0];
       Tmp = Volume[0] + 0.1;
       
       if (Tmp > 1)
         MyAlert();
     }

     PrevVolume = Volume[0];
        
     Sleep(PAUSE);
     RefreshRates();
   }
   
   return;
}
 
ForexTools >>:

подождите... вот что написано в справке

судя по этому вполне достаточно будет конструкции



предложение - в цикле лезть через dll в очередь сообщений и отлавливать месадж о пришедшем тике - должно работать

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