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

 

みんな、TF d1/weekを他のものに変更するコードで私を助けてください。

H1や分単位に変更する方法は知っています。

m30、m15、m5への変更方法に興味がある方。

//|                                               For__red_r2005.mq4 |
//|                                       Copyright © 2010, PapaYozh |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, PapaYozh"
#property link      "*"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Coral
#property indicator_color2 CornflowerBlue
#property indicator_width1 2
#property indicator_width2 2

// ---- buffers ----
double BuffD[];
double BuffM[];
//+------------------------------------------------------------------+
int init()
{
   SetIndexBuffer(0,BuffD);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexStyle(0,DRAW_SECTION,EMPTY,EMPTY);

   SetIndexBuffer(1,BuffM);
   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,EMPTY);
   
   return(0);
} // init()
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
} // deinit()
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
int start()
{
   int    shift;

   shift = Bars - 1 - IndicatorCounted();
   for ( ; shift>0 ; shift-- )
   {
      if ( TimeDayOfYear(Time[shift]) != TimeDayOfYear(Time[shift-1]) )
      {
         BuffD[shift]   = Close[shift];
         if ( TimeDayOfWeek(Time[shift-1]) == 1 )
            BuffM[shift]   = Close[shift];
         else
            BuffM[shift]   = EMPTY_VALUE;
      }
      else
      {
         BuffD[shift]   = EMPTY_VALUE;
         BuffM[shift]   = EMPTY_VALUE;
      }
   }
   return(0);
} // start()
//+------------------------------------------------------------------+
 
インジケータを一時停止したいのですが、ヘルプにあるようにSleep()関数は カスタムインジケータから呼び出すことができません...。他に方法はないのでしょうか?
 
Yevhenii Levchenko:
インジケーターをしばらく一時停止させたいのですが、ヘルプにあるSleep()関数が カスタムインジケータから呼び出せません...。他の方法はないのでしょうか?

OnCalculate()の条件により、インジケータ値を計算せずに出力する - 最も簡単なのはティックカウンタ、もう少し複雑なのはタイマーを使うこと、これはインジケータで動作します。

 
Igor Makanu:

OnCalculate()の条件により、インジケータ値を計算せずに出力する - 最も簡単なのはティックカウンタ、もう少し複雑なのはタイマーを使うこと、これはインジケータで動作します。

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

タイマーでやったことがあります。この選択肢の方が簡単だと思ったので...。

 
Yevhenii Levchenko:

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

タイマーを使ってやった。この選択肢の方が簡単だと思ったので...。

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[])
  {
//---
   static int TickCount = 0;
   TickCount--;
   if(TickCount>0) return(rates_total);
   TickCount=10;
 
Igor Makanu:

スタティック 変数のことはすっかり忘れていました...。ありがとうございます :)

また、普通の変数をグローバル変数と宣言すれば、実はある意味スタティック変数と同じになるのでは?感覚的には、番組内のあらゆる場所から変更できるようになる?

 

こんにちは。

構造体型の動的 配列を関数に参照渡しすることは可能かどうか教えてください。

例えば、Func()にstruct_name_array[]配列を渡して処理させ、そこにフィルを入れるような場合です。

struct StructName {int x;
                   int y;} struct_name_array[];

void Func (int &x[],
           int &y[])
        {
        }

可能であれば、具体的にどのように移管を行うのでしょうか?関数のパラメータはどのような形式になっていますか?C++のガイドが使えないようです。

ありがとうございます。

 
Mikhail Sobolev:

例えば、配列 struct_name_array[] を Func() に渡すと、そこで処理・充填されます。

//+------------------------------------------------------------------+
struct StructName
  {
   int               x;
   int               y;
  }
struct_name_array[];
//+------------------------------------------------------------------+
void OnStart()
  {
   ArrayResize(struct_name_array,5);
   for(int i=0;i<5;i++)
     {
      struct_name_array[i].x = i;
      struct_name_array[i].y = i*100;
     }
   Func(struct_name_array);
   for(int i=0;i<5;i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,struct_name_array[i].x,i,struct_name_array[i].y);
     }
  }
//+------------------------------------------------------------------+
void Func(StructName &s[])
  {
   for(int i=0;i<ArraySize(s);i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,s[i].x,i,s[i].y);
      s[i].x*=33;
      s[i].y*=12;
     }
  }
//+------------------------------------------------------------------+
 

こんにちは。

私のくだらない質問ですでに多くの人を困らせていることは承知していますので、以下は大目に見ていただき、なおかつ何が問題なのかをここで説明してください。

        if((op1-lo1)>50 && (cl1-lo1)<10)
        {  Alert("VertLine");
        string obj_name="VertLine";
        datetime time=Time[0];
        color col = clrGreen; 
        ObjectCreate(0,obj_name,OBJ_VLINE,0,time,0,0,0);
        ObjectSetInteger(0,obj_name,OBJPROP_COLOR,col);
        }

警告は出るが、縦線が ない。その理由は何ですか?

 
novichok2018:

こんにちは。

私のくだらない質問ですでに多くの人を困らせていることは承知していますので、以下は大目に見ていただき、なおかつここで何が問題なのかを説明してください。

警告は出るが、縦線が ない。その理由は何ですか?

理由は、まさにフォーラムへの言及まで、すでに理解しています。すでに一本の線が引かれていることを理解したのだと思います。他の線を引くためには、この線を消さなければならない。