MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 440

 
STARIJ:

マウスの動きを追跡することができます。


surollingという意味です)。
 

皆さん、ごきげんよう。上級者の時間軸で情報を分析する必要性がある。

システムにはチャネルを構築 する条件があります。それは、ある数のバーの最大価格と最小価格を見つけることです。以下の方法で実装してみました。

extern ENUM_TIMEFRAMES TimeFrameRZ = PERIOD_M15; //Период разворотной зоны
extern ENUM_TIMEFRAMES TimeFrameIn = PERIOD_M5; //Период точки входа
extern int ATR_period = 14;
extern int UpLineSell = 7;
extern int DownLineSell = 7;
extern int UpLineBuy = 7;
extern int DownLineBuy = 7;

//      Параметры разворотных свечей
extern string Comment2 = "---------------------------------Параметры разворотных свечей------------------------------------------";
extern int Volotilnost = 20; // Диапазон цен для трех разворотных свечей (в пунктах)
extern int MaxLineSell = 3;
extern int MaxLineBuy = 3;

bool SellPattern = false;
bool BuyPattern = false;
bool New_Bar = false;

double UpLine_Sell = 0;
double DownLine_Sell = 0;
double UpLine_Buy = 0;
double DownLine_Buy = 0;

int i = 0, j = 0;
int ULs = 0;
int DLs = 0;
int ULb = 0;
int DLb = 0;

double MassZone[2][10];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits == 3 || Digits ==5 )
  {
  Volotilnost *=10;
  UpLineSell *= 10;
  DownLineSell *= 10;
  UpLineBuy*= 10;
  DownLineBuy*= 10;
  }

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
 
   
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
RazvorotZona();
 
 if(SellPattern == true)
   {

   
     if(ObjectCreate(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJ_HLINE,0,TimeCurrent(),UpLine_Sell))
        {
        ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_COLOR,clrOrange);//--- установим цвет прямоугольника 
        ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
        ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
        ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане
        }
                  
      if(ObjectCreate(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJ_HLINE,0,TimeCurrent(),DownLine_Sell))
        {
        ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_COLOR,clrMagenta);//--- установим цвет прямоугольника 
        ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
        ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
        ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане
        }
        ULs++;
        DLs++;
        if(DLs >= MaxLineSell && ULs >= MaxLineSell)
          {
          ObjectDelete(ChartID(),"UpLine_Sell"+IntegerToString(ULs - MaxLineSell));
          ObjectDelete(ChartID(),"DownLine_Sell"+IntegerToString(DLs - MaxLineSell));
          }
   }
   
 if(BuyPattern == true)
   {
   if(ObjectCreate(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJ_HLINE,0,TimeCurrent(),UpLine_Buy))
        {
        ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_COLOR,clrDeepSkyBlue);//--- установим цвет прямоугольника 
        ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
        ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
        ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане
        }
                   
      if(ObjectCreate(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJ_HLINE,0,TimeCurrent(),DownLine_Buy))
        {
        ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_COLOR,clrBrown);//--- установим цвет прямоугольника 
        ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
        ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
        ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане
        }
        ULb++;
        DLb++;
        if(ULb >= MaxLineBuy && DLb >= MaxLineBuy)
          {
          ObjectDelete(ChartID(),"UpLine_Buy"+IntegerToString(ULb - MaxLineBuy));
          ObjectDelete(ChartID(),"DownLine_Buy"+IntegerToString(DLb - MaxLineBuy));
          }
   }
}
//+------------------------------------------------------------------+
//    Функция определения нового бара                                |
//+------------------------------------------------------------------+
void Find_New_Bar()
{ 
   datetime TimeBar0 = iTime(Symbol(),TimeFrameRZ,0);
   static datetime New_Time=0;                     // Время текущего бара
   New_Bar=false;                                 // Нового бара нет 
   if(New_Time != TimeBar0)                       // Сравниваем время 
   { 
      New_Time = TimeBar0;                        // Теперь время такое 
      New_Bar = true;                             // Поймался новый бар 
   } 
}
//+------------------------------------------------------------------+
//    Функция определения разворотной зоны                           |
//+------------------------------------------------------------------+
void RazvorotZona()
{
Find_New_Bar();

   double Open3= NormalizeDouble (iOpen(Symbol(), TimeFrameRZ,4),Digits);
   double Close3 = NormalizeDouble (iClose(Symbol(), TimeFrameRZ,4),Digits);
   double High3 = NormalizeDouble (iHigh(Symbol(), TimeFrameRZ,4),Digits);
   double Low3 = NormalizeDouble (iLow(Symbol(), TimeFrameRZ,4),Digits);
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед перевернутым Молотом
   double ATR = iATR(Symbol(),TimeFrameRZ,ATR_period,1);
   
   SellPattern = false;
   BuyPattern = false;
   
   int bar1 = 1;
   int bar2 = 3;
   double Max, Min;
   

   Max = High[iHighest(NULL, TimeFrameRZ, MODE_HIGH, bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2].
   Min = Low[iLowest(NULL, TimeFrameRZ, MODE_LOW, bar2, bar1)];

   if(NormalizeDouble((Max - Min) / Point, Digits) < Volotilnost && 
      MathAbs(Close3-Open3) > 1.5*ATR)
      {
      if((Close3 > Open3) && New_Bar == true)
        {
        UpLine_Sell = Max;
        DownLine_Sell = Min;
        SellPattern = true;
        Print ("Идентифицирован паттерн");
        Print ("Максимальная цена "+DoubleToStr(Max));
        Print ("Минимальная цена "+DoubleToStr(Min));
        }
        else {SellPattern = false;}
        
      if((Close3 < Open3) && New_Bar == true)
        {
        UpLine_Buy = Max;
        DownLine_Buy = Min;
        BuyPattern = true;
        Print ("Идентифицирован паттерн");
        }
        else {BuyPattern = false;}
      }
}

しかし、この方法では、現在の作業時間枠M5からのバーを分析することになる。M15からbar1とbar2のパラメータを取得する必要がある

どのように実装するのか?

 

問題はこの辺にあるような気がします。

Max = High[iHighest(NULL, TimeFrameRZ, MODE_HIGH, bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2].
   Min = Low[iLowest(NULL, TimeFrameRZ, MODE_LOW, bar2, bar1)];

誰が何を言うんだ?

 
voron_026:

問題はこの辺にあるような気がします。

誰が何を言うんだ?

そうそう、時間帯を指定してね。

 
STARIJ:

はい、正しい時間枠を指定してください

だから言ったんだ...

TimeFrameRZ = PERIOD_M15
それは外部変数です。
 
double array[10];
array[0]=0.1;

配列を宣言して、要素を埋めていく。

2行目でtypeエラーのない宣言が表示されるのはなぜですか?

 
Juer:

配列を宣言して、要素を埋めていく。

2行目でtypeエラーのない宣言が表示されるのはなぜですか?

void OnTick()にコードを書けば、すべてうまくいきます。

または、void OnTick()の中で、array[0]=0.1; と記述します。

 
Juer:

配列を宣言して、要素を埋めていく。

2行目でtypeエラーのない宣言が表示されるのはなぜですか?

グローバル変数の領域で配列を宣言していませんか?

そして、例えば、値(コードの中で自分で記入するので、あらかじめ定義されている)を使って一気に宣言します。

double array[10]={0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0};

...あるいは、OnInit() や関数内で、配列に値を記入します。

 
ZigZagインジケータの値をEAに出力する方法を教えてください。その他はiMA, iStochastic, iWPR ...と書くと出力されます。ZigZagを手動で計算する方法は?
 
ZZuretc:
ZigZagインジケータの値をEAに出力する方法を教えてください。その他、iMA、iStochastic、iWPR ...と印刷されています。ZigZagを手動で計算する方法は?

使用することを決定した?ZigZagの指標 値はどこでも0です。トップのみジグザグの値がトップの価格と同じになる。

鉄棒を輪切りにして通るのです。例を見る

ファイル:
Zig2fl.mq4  4 kb