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

 
HELLO PEOPLE !ヘルプPLEASEは、インフォーマを持って、それが削除される必要があります...スワップ、手数料なしの純利益をカウントするようにできますか?ありがとうございました。
ファイル:
 
ANDREY:

皆さんこんにちは!
mql4のfor()文について質問です。この演算子のヘッダは、ある変数の値を徐々に増加または減少させる

for(int A=14; A>=0;A--) orfor(int A=0; A<14;A++) orfor(int A=0; A<14;A=+2) 与えられた例1、2においてA変数の増加、減少のサイズは常に同じと仮定して います。

質問:A変数がタイムフレームの値(1(分),5,15,30,60,240,1440)の場合、この変数の増加または減少のサイズが等しくないことは明らかである。この場合、変数Aを1から始めて、反復毎に必要な分だけを一律にインクリメントするようにfor ヘッダーをフォーマットするにはどうしたらよいでしょうか。

変数Aを使った例は特殊なケースです。一般に、ループヘッダ内の変数を希望する間隔で不均一に変化させる必要がある場合、どのようにループをフォーマットすればよいのでしょうか。
それとも、このような場合に使用する他の演算子があるのでしょうか?しかし、他の演算子はforと 比較して非常にかさばるように思います。 for 文の助けを借りて、 そのヘッダと 正確に私の問題を解決するために私を助けてください。 なぜなら、 for 文の本体の中で私の問題を解決するには、 もちろんif文を使うこともできますが、非常に面倒で、7つの正しい値をフィルタリングするために、for 文は1440回の反復をしなければ ならないからです。
ありがとうございます。

ここにエラーがあります。 for(int A=0; A<14;A+=2) となるはずです。

一番簡単に思いつくのは、ピリオドを配列に入れることです

ENUM_TIMEFRAMES per[] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1};
/********************Script program start function*******************/
void OnStart()
 {
  for(int i = 0; i < ArraySize(per); i++)
   {
    Print(EnumToString(per[i]));
   }
 }/******************************************************************/

/*****************************End program****************************/


 
Alexey Viktorov:

最も単純に思いつくのは、配列でピリオドをスコア化することです

ありがとう、私も使えたよ)

 
Alexey Viktorov:

ここにエラーがあります。 for(int A=0; A<14;A+=2) となるはずです。

一番簡単に思いつくのは、ピリオドを配列に格納することです。


ご指摘ありがとうございます。思っていたよりずっとシンプルに仕上がりました。
ひとつだけわからないことがあります。配列の名前は per です。そして、ENUM_TIMEFRAMESは、変数型の識別子ですか?mql4 Referenceには、そのような識別子は見当たりません。しかありません。

Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
 
ANDREY:

ご教示いただきありがとうございました。思っていたよりずっと簡単なことがわかりました。
ただひとつ、理解できなかったことがあります。配列の名前 per.そして、ENUM_TIMEFRAMESは、変数型の識別子ですか?mql4 Referenceには、そのような識別子は見当たりません。しかありません。

これ

Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
 
MakarFX:

これ

mql 5の情報を送っていただいたということでよろしいでしょうか?それとも、この情報はmql 4にも適用されるのでしょうか?

 
ANDREY:

mql 5の情報を送っていただいたということでよろしいでしょうか?それとも、この情報はmql 4にも適用されるのでしょうか?

修正しました。
 
MakarFX:
修正しました。

ありがとうございます。

 
ANDREY:

ありがとうございます。

ちょっとしたアドバイス:ENUM_TIMEFRAMESに すぐに慣れて、分数という数値 表現は忘れてください。

まずPERIOD_W1 、10080よりも情報量が多く、1週間であることが明確です。

次に、mql5では期間が分数に対応しておらず、mql5への移行時に不要な問題になることはないでしょうし、避けられないでしょう。

まあ、どうしても期間内の分数が必要ということであれば

int  PeriodSeconds( 
   ENUM_TIMEFRAMES  period=PERIOD_CURRENT      // период графика 
   );
Print(PeriodSeconds(PERIOD_W1)/60); // = 10080
 
みんな、インジケータにアラートを付けるのを手伝ってくれ。
#property copyright "Subu"
#property link      "http://www.google.com"
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_chart_window

double UpArrow[];
double DownArrow[];
extern int ShiftArrow = -2;
extern bool FilterBullBearCandle = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, UpArrow);
   SetIndexEmptyValue(0,0.0);
   SetIndexShift(0,ShiftArrow);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, DownArrow);
   SetIndexEmptyValue(1,0.0);
   SetIndexShift(1,ShiftArrow);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit, i, counter;
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
//----
    for(i = 0; i <= limit; i++) {
      DownArrow[i] = 0;
      UpArrow[i] = 0;
   if(High[i+2]>High[i+1] && Low[i+2]>Low[i+1] && High[i+2]>High[i+3] && Low[i+2]>Low[i+3])
      if( Open[i+1]>Close[i+1] && Close[i+2] > Close[i+1])
         if(FilterBullBearCandle)
            {
               if( Open[i+2]>Close[i+2])
                  DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
             }
         else
             DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
   if(High[i+2]<High[i+1] && Low[i+2]<Low[i+1] && High[i+2]<High[i+3] && Low[i+2]<Low[i+3])
      if( Open[i+1]<Close[i+1] && Close[i+2] < Close[i+1])
          if(FilterBullBearCandle)
            {
               if( Open[i+2]<Close[i+2] ) 
                  UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
                  
            }
         else
            UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
            
      }
//----
   return(0);
  }