[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 613

 

確かにint型 ですが、代入しなくてもすぐに結果が出力されるのでは?ありがとうございます、試してみます。


ガッツリ効いてますね。

 


これが、私が手に入れたものです。もし興味がある方がいれば、ソースコードを掲載します。このスクリプトは、棒グラフによる統計情報を生成します。このチャートの日足バーを分析した。


面白いパターンを発見しました。その割合は、どの期間もほぼ同じです。5%の差があります。1、2、3と続けて強気と弱気の比率で。

 
ChAnton:


これが、私が手に入れたものです。もし興味がある方がいれば、ソースコードを掲載します。このスクリプトは、棒グラフによる統計情報を生成します。このチャートの日足バーを分析した。


面白いパターンを発見しました。その割合は、どの期間もほぼ同じです。5%の差があります。1、2、3と続けて強気と弱気の比率で。


出してみると、面白いですよ。
 
//+------------------------------------------------------------------+
//|                                                 Анализ баров.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をダウンロードして良い結果が出ていますが、Strategy Testerで試したところ、結果がかなり悪くなっています。
 

自作のインジケータがありますが、ダブりました、値を取得したいのは

day_maxと day_min、抜き方を教えてください。iCustomではわかるのですが、方法がわかりません(このインジケータはowlに入れるのが非常に難しいため:(・・・私にとっては))


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」を返すか、注文 数を判断する必要がある場合は、「0」を返します。

 
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」、または注文数を決定したい場合はゼロを返します。

ありがとうございました。
すべての未決済注文を調べるにはどうしたらよいですか? どのような関数を使用すればよいですか?OrderSelect?