[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 613

 

Да они у меня типа int но я думал результат сразу выводится без присваивания. Спасибо буду пробовать.


Гут заработало.

 


Вот что у меня получилось. Если кому то интересно могу исходник выложить. Этот скрипт составляет статистику по барам. На данном рисунке анализировались дневные бары.


Нашел интересную закономерность. Почти на всех периодах процентные соотношения одинаковые. +-5% разницы. В соотношениях быков к медведям по одном, двум и трем подряд.

 
ChAnton:


Вот что у меня получилось. Если кому то интересно могу исходник выложить. Этот скрипт составляет статистику по барам. На данном рисунке анализировались дневные бары.


Нашел интересную закономерность. Почти на всех периодах процентные соотношения одинаковые. +-5% разницы. В соотношениях быков к медведям по одном, двум и трем подряд.


Выкладывайте, интересно посмотреть.
 
//+------------------------------------------------------------------+
//|                                                 Анализ баров.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//для метатрейдера 4

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+

#property show_inputs
extern int Periods = 5;                     // Период таймсерии
extern int Nachalo = 1;                     // Начало баров откуда начинается анализ
extern int Konec = 500;                     // Конец баров на каком баре заканчивается анализ
extern int Bolee = 0;                       // тело бара больше установленной величины (для расчета от 0 указывать -1)
extern int Menee = 50;                      // тело бара меньше установленной величины
extern int Teny = 100;                      // минимальная величина тени с обоих сторон
extern int Otkr = 100;                      // минимальное отклонение от точки открытия

int start()
  {
  int i;      //счетчик
  double nul = 0; //количество баров размер тела которых равно нулю
  double vverh = 0;  //Бар вверх бычий
  double vniz = 0;   //Бар вниз медвежий
  double dvavverh = 0;  //Бар вверх 2 подряд
  double dvavniz = 0;   //Бар вниз 2 подряд
  double trivverh = 0;  //Бар вверх 3 подряд
  double trivniz = 0;   //Бар вниз 3 подряд
  double vibor = 0;  //Бар удовлетворяющий условию поиска
  double Maks =0;//максимальный бар
  double Mun =10000;//минимальный бар
  double ten = 0;//тени с обоих сторон превышающие установленную величину
  double otkrytie = 0; // смещение цены в обе стороны на эту величину с момента открытия бара
  double L; //вре'менная переменная
  string S;
  
  string Symb;
  //используемый фин. инструмент - торговая пара
  Symb=Symbol();  
  string P;
  if (Periods == 1) P = "PERIOD_M1";
  if (Periods == 2) P = "PERIOD_M5";
  if (Periods == 3) P = "PERIOD_M15";
  if (Periods == 4) P = "PERIOD_M30";
  if (Periods == 5) P = "PERIOD_H1";
  if (Periods == 6) P = "PERIOD_H4";
  if (Periods == 7) P = "PERIOD_D1";
  if (Periods == 8) P = "PERIOD_W1";
  if (Periods == 9) P = "PERIOD_MN1";
//----
  if ( Konec > iBars( Symb, P) )
  {
   Konec = iBars( Symb, P);
  } 
  Alert ("___________________________________________________________");

//----
  /*   iTime("USDCHF",PERIOD_H1,i)
       iOpen("USDCHF",PERIOD_H1,i)
       iHigh("USDCHF",PERIOD_H1,i)
       iLow("USDCHF",PERIOD_H1,i)
       iClose("USDCHF",PERIOD_H1,i)
       iVolume("USDCHF",PERIOD_H1,i));    */
            
  for(i=Nachalo;i<=Konec;i++)
    {
     if (iOpen(Symb,P,i) == iClose(Symb,P,i)) nul = nul + 1; //количество нулевых баров
    
     if (iOpen(Symb,P,i) < iClose(Symb,P,i)) vverh = vverh + 1; //количество бычьих баров
     
     if (iOpen(Symb,P,i) > iClose(Symb,P,i)) vniz =  vniz  + 1; //количество медвежьих баров
     
     if (iOpen(Symb,P,i) < iClose(Symb,P,i))
         if (iOpen(Symb,P,i+1) < iClose(Symb,P,i+1)) 
             dvavverh = dvavverh + 1; //количество бычьих баров
     
     if (iOpen(Symb,P,i) > iClose(Symb,P,i)) 
         if (iOpen(Symb,P,i+1) > iClose(Symb,P,i+1))
             dvavniz =  dvavniz  + 1; //количество медвежьих баров
     
     if (iOpen(Symb,P,i) < iClose(Symb,P,i)) 
         if (iOpen(Symb,P,i+1) < iClose(Symb,P,i+1))
             if (iOpen(Symb,P,i+2) < iClose(Symb,P,i+2))
                 trivverh = trivverh + 1; //количество бычьих баров
     
     if (iOpen(Symb,P,i) > iClose(Symb,P,i)) 
         if (iOpen(Symb,P,i+1) > iClose(Symb,P,i+1))
             if (iOpen(Symb,P,i+2) > iClose(Symb,P,i+2))
                 trivniz =  trivniz  + 1; //количество медвежьих баров
              
     L = iOpen(Symb,P,i) - iClose(Symb,P,i);
     if (L < 0) L = L * (-1);
     
     if (L < Menee * Point) if (L >  Bolee * Point) vibor = vibor + 1; //количество выбранных баров
     
     L = L / Point;
     if (L > Maks) Maks = L;
     if (L < Mun) Mun = L;
     
     if (iOpen(Symb,P,i) < iClose(Symb,P,i))
         if (iOpen(Symb,P,i) - iLow(Symb,P,i)> Teny*Point)
             if (iHigh(Symb,P,i) - iClose(Symb,P,i)> Teny*Point)
                ten = ten + 1;    

     if (iOpen(Symb,P,i) > iClose(Symb,P,i))
         if (iClose(Symb,P,i) - iLow(Symb,P,i)> Teny*Point)
             if (iHigh(Symb,P,i) - iOpen(Symb,P,i)> Teny*Point)
                ten = ten + 1; 
                
                
     if (iHigh(Symb,P,i) - iOpen(Symb,P,i)> Otkr*Point)
         if (iOpen(Symb,P,i) - iLow(Symb,P,i)> Otkr*Point)
                otkrytie = otkrytie + 1;                
                

    }
     
  Alert ("Максимальный бар = " , Maks , " ----- ","Минимальный бар = " , Mun);
  
  Alert ("Бары удовлетворяющие условию по размеру отклонений >",Otkr ," пунктов = " , otkrytie, " --- ", otkrytie/(Konec/100), " % " );
  Alert ("Бары удовлетворяющие условию по размеру теней >",Teny ," пунктов = " , ten, " --- ", ten/(Konec/100), " % " );
  Alert ("Бары удовлетворяющие условию по размеру тела > ",Bolee ," пунктов и < ",Menee  ," пунктов = " , vibor, " --- ", vibor/(Konec/100), " % " );
  
  Alert ("                            ",trivverh/(Konec/100), " % " , " -------------------------- ", trivniz/(Konec/100), " % " );
  Alert ("3 быка подряд = " , trivverh, " ----- ","3 медведя подряд  = " , trivniz );
  
  Alert ("                               ",dvavverh/(Konec/100), " % "," ------------------------------ ",   dvavniz/(Konec/100), " % " );
  Alert ("2 быка подряд = " , dvavverh, " ----- ","2 медведя подряд  = " , dvavniz );
  
  Alert ("                             ",nul/(Konec/100), " % " ,
         " -------------------- ", vverh/(Konec/100), " % ",
         " ------------------------- ",vniz/(Konec/100) , " % " );
  Alert ("нулевые бары = " , nul, " ----- ","бычьи бары = " , vverh, " ----- ","медвежьи бары = " , vniz );
  
  Alert ("Общее количество баров на графике ",P," : ",iBars( Symb, P)); 
  Alert ("Количество анализируемых баров = " , Konec);

   return(0);
  }
//+------------------------------------------------------------------+
Есть нерешенные проблемы. Проценты считает неточно +- 0.5% почему так я понять не могу пока. Также для анализа используется период который установлен на графике, а не указанный в настройке скрипта.
 
Подскажите,какой есть хороший советник.Скачал несколько штук с заявленными хорошими результатами.Пробовал в тестере- результаты намного хуже.Нормального не нашёл ни одного.
 

Есть индикатор самодельный, но что-то я притупил, я хочу с него получать знаечение

day_max и day_min, не подскажите как вытащить? Понятно что с iCustom, но как не могу разобраться.(Связано с тем, что данный индюк в сову запихать очень трудно:(... для меня)


property copyright "DOC"
#property link "none"


#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Green
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double day_max;
double day_min;

 
Добрый день.Подскажите, пожалуйста,как проверить открыт ли ордер на данном финансовом инструменте?)))
 
Ali007:
Добрый день.Подскажите, пожалуйста,как проверить открыт ли ордер на данном финансовом инструменте?)))

Подсказываю:

Идем циклом по всем открытым ордерам и смотрим на символ ордера: если это интересующий нас - увеличиваем счетчик, либо возвращаем "истина", смотря что дальше нужно. Если прошли по всем ордерам и не нашли с нужным символом - возвращаем "ложь" или ноль, если нужно было определить количество ордеров.

 
Ali007:
Добрый день.Подскажите, пожалуйста,как проверить открыт ли ордер на данном финансовом инструменте?)))

bool got_order=false;

for(int i=OrdersTotal()-1;i>=0;i--)
{
   if(OrderSelect(i,SELECT_BY_POS))
      if(OrderSymbol()==Symbol())
         if(OrderType()==OP_BUY||OrderType()==OP_SELL) 
         {
            got_order=true;break;
         }
}
 
VladislavVG:

Подсказываю:

Идем циклом по всем открытым ордерам и смотрим на символ ордера: если это интересующий нас - увеличиваем счетчик, либо возвращаем "истина", смотря что дальше нужно. Если прошли по всем ордерам и не нашли с нужным символом - возвращаем "ложь" или ноль, если нужно было определить количество ордеров.

Спасибо большое!
А как пройтись по всем открытым ордерам?какую функцию использовать? OrderSelect?
Причина обращения: