[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 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%,为什么我还不能理解。另外,分析使用的是图表上设置的周期,而不是脚本设置 中指定的周期。
 
我下载了几个EA,效果不错,但我在策略测试器中试了一下,结果要差很多。
 

有一个自制的指标,但我把它简化了,我想得到的值是

day_maxday_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:
(请告诉我如何检查这个符号上是否有订单))

这里有一个提示。

我们循环浏览所有未结订单,并查看订单符号:如果我们对它感兴趣,我们就增加计数器,或返回 "true",这取决于我们接下来需要什么。如果我们浏览了所有的订单,但没有找到必要的符号,我们会返回 "false "或零,如果我们必须确定订单的数量

 
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:

这里有一个提示。

我们循环浏览所有未结订单,并查看订单符号:如果我们对它感兴趣,我们就增加计数器,或返回 "true",这取决于我们接下来需要什么。如果我们对所有的订单进行了循环,但没有找到必要的符号,我们就会返回 "false",或者是零,如果我们想确定订单的数量。

非常感谢您!
我们怎样才能浏览所有的未结订单? 我们应该使用什么功能?订单选择