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

 
missha689:
昨日の日付と時刻の調べ方を教えてください。

まあ、必要なことは全部書いてあるから、読めばいいんだけどね。このように。

iTime("USDCHF",PERIOD_H1,0)
指定したシンボルを_Symbolに、PERIOD_H1をPERIOD_D1に置き換えるだけで、ここに一日の開始時刻が 表示されます。0を1に置き換えると、昨日の開店時刻が表示されます。
 
missha689:
昨日の日付と時刻をプログラム的に調べる方法を教えてください。

のカレンダーを昨日作成しました。

datetime tim=TimeCurrent()‌-24*60*60;

MqlDateTime ts;

TimeToStruct(tim,ts);

ts.hour=0;ts.min=0;ts.sec=0;

tim=StructToTime(ts);

現在時刻 - 昨日の暦日開始時刻(!!プレバーD1の開店時刻では ありません)。

プレバーD1の開店時間 - iTime(0,PERIOD_D1,1); 小さな修正あり - 土曜日なら24時間、日曜日なら48時間追加します。

 
Alexey Viktorov:

必要なことはすべて書いてあるから、読むだけでいい。このように。

iTime("USDCHF",PERIOD_H1,0)
指定したシンボルを_Symbolに、PERIOD_H1からPERIOD_D1に置き換えるだけで、ここにその日の開始時刻が 表示されます。0を1に置き換えると、昨日の開店時刻が表示されます。

昨日からやり方を考えているのですが、できないので、初めてなので、教えてください。

昨日の15:00のバーのインデックスと今日の7:00のバーのインデックスを、例にあるように日付を明示的に指定せずに見つけるのを手伝ってください。

 
Maxim Kuznetsov:

のカレンダーを昨日作成しました。

datetime tim=TimeCurrent()‌-24*60*60;

MqlDateTime ts;

TimeToStruct(tim,ts);

ts.hour=0;ts.min=0;ts.sec=0;

tim=StructToTime(ts);

現在時刻 - 昨日のカレンダー上の一日の始まり(!!D1プレバーの開店時刻では ありません。)

プレバーD1の開始時間 - iTime(0,PERIOD_D1,1); 小さな修正 - 土曜なら24時間、日曜なら48時間を追加します。

ありがとうございました。
 
Sergey Gritsay:


関数に,ストップバンドをロスレスに移行するためのオーダーチケットと 距離(pips)を送信します。

void zero_profit(int ticket, int distance)
  {
   double sl=0.0;

   if(OrderSelect(ticket,SELECT_BY_TICKET))
     {
      if(OrderType()==OP_BUY)
        {
         if(Bid>=OrderOpenPrice() && Bid-OrderOpenPrice()>=distance*_Point) sl=OrderOpenPrice();
         if(OrderStopLoss()!=0 && OrderStopLoss()>=OrderOpenPrice())return;
        }
      if(OrderType()==OP_SELL)
        {
         if(Ask<=OrderOpenPrice() && OrderOpenPrice()-Ask>=distance*_Point) sl=OrderOpenPrice();
         if(OrderStopLoss()!=0 && OrderStopLoss()<=OrderOpenPrice())return;
        }
      ResetLastError();

      if(sl<=0)return;
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0))
        {
         int error=GetLastError();
         rezult=StringConcatenate(OrderSymbol(),": error modifying StopLoss order ",OrderTicket()," ",TypeToStr(OrderType())," №- ",error);
         Print(rezult);
        }

     }
  }


...セルゲイさん、ありがとうございます!!!!

 
Vitaly Muzichenko:

クール、EAに機能を引っ張ってくるようにします。結果は後ほど掲載します。

ありがとうございます!!!

2つ目の検索方法を追加しました。

//+------------------------------------------------------------------+
//|                                             iFreeNumFractals.mq4 |
//|              Copyright 2017, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "3.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot UpperFractal
#property indicator_label1  "Upper Fractal"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot LowerFractal
#property indicator_label2  "Lower Fractal"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrSteelBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//---
enum ENUM_TYPE_FRACTAL
  {
   TYPE_FRACTAL_ACCURATE   =  0,    // Accurate fractal
   TYPE_FRACTAL_INACCURATE =  1,    // Inaccurate fractal
  };
//--- input parameters
input ENUM_TYPE_FRACTAL TypeFractals   =  TYPE_FRACTAL_ACCURATE;  // Type of fractal
input int               LeftNumUp      =  2;                      // The number of bars on the left for upper fractals
int leftNumUp;    // Количество баров слева для верхнего фрактала
input int               RightNumUp     =  2;                      // The number of bars on the right for upper fractals
int rightNumUp;   // Количество баров справа для верхнего фрактала
input int               LeftNumDn      =  2;                      // The number of bars on the left for lower fractals
int leftNumDn;    // Количество баров слева для нижнего фрактала
input int               RightNumDn     =  2;                      // The number of bars on the right for lower fractals
int rightNumDn;   // Количество баров справа для нижнего фрактала
//--- indicator buffers
double         BufferUpperFractal[];
double         BufferLowerFractal[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferUpperFractal);
   SetIndexBuffer(1,BufferLowerFractal);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
   SetIndexArrow(0,217);
   SetIndexArrow(1,218);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexEmptyValue(1,EMPTY_VALUE);
//---
   leftNumUp=(LeftNumUp<1?1:LeftNumUp);
   rightNumUp=(RightNumUp<1?1:RightNumUp);
   leftNumDn=(LeftNumDn<1?1:LeftNumDn);
   rightNumDn=(RightNumDn<1?1:RightNumDn);
   string short_name=MQLInfoString(MQL_PROGRAM_NAME)+"("+(string)leftNumUp+","+(string)rightNumUp+")("+(string)leftNumDn+","+(string)rightNumDn+")";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<fmax(leftNumUp+rightNumUp,leftNumDn+rightNumDn)) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>0) {
      ArrayInitialize(BufferUpperFractal,0.0);
      ArrayInitialize(BufferUpperFractal,0.0);
      limit=rates_total-fmax(leftNumUp,leftNumDn)-1;
      }
   //---
   for(int i=limit; i>fmin(rightNumUp,rightNumDn); i--) {
      if(GetFreeUpperFractal(Symbol(),PERIOD_CURRENT,i,leftNumUp,rightNumUp)>0) BufferUpperFractal[i]=high[i];
      if(GetFreeLowerFractal(Symbol(),PERIOD_CURRENT,i,leftNumDn,rightNumDn)>0) BufferLowerFractal[i]=low[i];
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+----------------------------------------------------------------------------+
double GetFreeLowerFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) {
   int bars=Bars(symbol_name,timeframe);
   if(left_dimension<1)  left_dimension=1;
   if(right_dimension<1) right_dimension=1;
   if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1);
   if(TypeFractals==TYPE_FRACTAL_ACCURATE) {
      for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,i+1)) return(-1);
      for(int i=shift+1; i<=shift+left_dimension; i++)  if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,i-1)) return(-1);
      }
   else {
      for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,shift)) return(-1);
      for(int i=shift+1; i<=shift+left_dimension; i++)  if(GetPriceLow(symbol_name,timeframe,i)<GetPriceLow(symbol_name,timeframe,shift)) return(-1);
      }
   return(GetPriceLow(symbol_name,timeframe,shift));
}
//+----------------------------------------------------------------------------+
double GetFreeUpperFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) {
   int bars=Bars(symbol_name,timeframe);
   if(left_dimension<1)  left_dimension=1;
   if(right_dimension<1) right_dimension=1;
   if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1);
   if(TypeFractals==TYPE_FRACTAL_ACCURATE) {
      for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,i+1)) return(-1);
      for(int i=shift+1; i<=shift+left_dimension; i++)  if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,i-1)) return(-1);
      }
   else {
      for(int i=shift-1; i>=shift-right_dimension; i--) if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,shift)) return(-1);
      for(int i=shift+1; i<=shift+left_dimension; i++)  if(GetPriceHigh(symbol_name,timeframe,i)>GetPriceHigh(symbol_name,timeframe,shift)) return(-1);
      }
   return(GetPriceHigh(symbol_name,timeframe,shift));
}
//+----------------------------------------------------------------------------+
double GetPriceHigh(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
   double array[1];
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   return(-1);
}
//+----------------------------------------------------------------------------+
double GetPriceLow(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
   double array[1];
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   return(-1);
}
//+----------------------------------------------------------------------------+
ファイル:
 
Artyom Trishkin:

2つ目の検索方法を追加しました。


ありがとうございます。

kodobaseにアップロードされる遺品)

 
Vitaly Muzichenko:

ありがとうございます。ただ、すべてがスーパーです。

コドベースへのアップロードが残っている)

既に終了 :)))テストのために送った。
 

こんにちは。

私はリナックスを使っています。MT4で複数の通貨ペアを開いているのですが、最大で10種類です。MQL4を使って、チャートタブをある順序で並べるにはどうしたらいいですか?

プロファイルを使った作業、1_MQL4.pdfの勉強、インターネットでは結果が出ませんでした。

ウラジミール

 
DVlad:

こんにちは。

私はリナックスを使っています。MT4で複数の通貨ペアを開いているのですが、最大で10種類です。MQL4を使って、チャートタブをある順序で並べるにはどうしたらいいですか?

プロファイルを使った作業、1_MQL4.pdfの勉強、インターネットでは結果が出ませんでした。

ウラジミールさん、ありがとうございます。

Windowsでも、mql4によるタブの並べ替えができない。

必要な順番でチャートを開き、そこに必要なテンプレートを設定するだけです。