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

 
psyman:

私のトピックをきっかけとした皆さんのやり取りを読ませていただきましたが、この話題を引き起こした質問についてはどうでしょうか?

SetIndexBuffer(1, tmp1) で配列を宣言しても、何も 起こりません。もちろん、同じループの中で配列のサイズを大きくすることもできますが、もっと簡単で効率的な方法を知りたいのです。

そこで何をしたのか、何をしたかったのか、何ができたのか、コードを全部見せてください。

 

ボラティリティに気をつけたい。そもそも最低でもOpen-Closeで、期間平均はSMAで行う。


//+------------------------------------------------------------------+
//|                                                        _null.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot OC
#property indicator_label1  "O-C"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrSteelBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double         ip1Buf[];

input int ip1=100;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  
string s_name1;

s_name1="O-C (" + IntegerToString(ip1) + ")";

IndicatorShortName(s_name1);
SetIndexLabel(0, s_name1);


//--- indicator buffers mapping
   SetIndexBuffer(0,ip1Buf);
   
//---
   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[])
  {


int i;
double tmp1[];

SetIndexBuffer(1, tmp1);


      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total-1; i++)
      {
      tmp1[i]=close[i];      
      ip1Buf[i]=iMA(NULL,0,100,0,0,tmp1[i],0);
      
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
psyman:

ボラティリティに気をつけたい。まずは最低でもOpen-Closeで、期間平均はSMAで行います。


SetIndexBuffer(1, tmp1) なぜ OnInit() でないのか?

なぜIndicatorBuffers(2)がないのか?

なぜ、最適な計算をしないのか?すべてのティックに フルループがあります。

なぜiMAOnArray()ではなく、iMA()なのですか?

 

=なぜIndicatorBuffers(2)がないのか?


#property strictは文句を言わないから、書き込まなかったのでしょう。


=なぜiMAOnArray()ではなくiMA()なのですか?


知識が足りないし、教科書には何も書いていない。

システムに関する知識の不足は深刻な制約となります。


=1目盛りごとにフルループ


私はそれについて何も理解していません。理由を説明するか、それが行われている場所のリンクを教えてください。

最低1時間のTFがある。

 
=На 各ティックが1サイクルと なる。


全く理解できないので、説明するか、どこでやっているのかリンクを教えてください。

私は最低1時間のTFを持っています。

OnCalculateを呼び出すたびに、1からrates_totalまでのデータを精査するforループがあり、つまり同じ仕事をしています。これはもちろん、悪いことです。

 
psyman:

=なぜIndicatorBuffers(2)がないのか?


#property strictは文句を言わないから、書き込まなかったのでしょう。


=なぜiMAOnArray()ではなくiMA()なのですか?


知識が足りないし、教科書には何も書いていない。

システムに関する知識の不足は深刻な制約となります。


=1目盛りごとにフルループ


私はそれについて何も理解していない、私にそれを説明するか、それが行われる場所のリンクを教えてください。

最低1時間のTFがある。

このスレッドの真ん中あたりにインジケーターのテンプレートを添付しておいたから、それを見つけて好きなように作ればいいんだよ。調べてみてください。あと、何だかんだと興味を持たれることが多いので、インジケーターのテンプレートを作ってこのスレッドに貼ることにしましたと書いています。

 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

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

アンドレイ・ノビチコフ さん 2018.10.17 22:06

OnCalculateを呼び出すたびに、1からrate_totalまでのデータを洗い出すforループがあり、つまり同じ仕事をしています。これは確かに悪いことだと思います。


悪いというなら、どうすればうまくできるのか教えてほしい。OnInitに計算を移しますか?

 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MQL4初心者のための質問、アルゴリズムやコードに関するヘルプとディスカッション

アルチョム・トリシキン さん 2018.10.17 22:10

この枝の中のどこかに、インジケーターのテンプレートがありますから、それを見つけて、そこから直接好きなことをやってください。調べてみてください。仕組みに興味がある人が多いと書いたので、インジケーターのテンプレートを作ってこのスレッドに載せることにしました。


インジケータ・テンプレート」という言葉と自分の名前を検索しても何も出てこず、「戦争と平和」の巻ですでにここに書きました。

投稿の中から、どんな言葉の組み合わせでもいいので、思い浮かべてみてください。

 
クラスインスタンスの配列を作成する方法は?
ClassName* className[] を作成し、その上でArrayResizeを 行うが、メソッドへの 無効なポインタ アクセスは 行われない。
 
Roman Sharanov:
クラスインスタンスの配列を作成する方法は?
ClassName* className[] を作成し、その上でArrayResizeを 行うが、メソッドへの 無効なポインタ アクセスは 行われない。

CArrayObjに 例があります。