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

 

どなたか親切に、次のことをどう書けばいいのか教えてください。

iVolumeは上昇したものはプラス、下降したものはマイナスのiVolumeをカウントするトレーニング用インジケータを作りました。カーブを作るために、すべてのiVolume(正と負)をバーからバーへ増加する合計を追加します。曲線が得られます。しかし、2つの問題が発生しました。

1)ラインが非常に壊れた状態になる。

2) 取得した iVolume チャートは実数しかないため、Expert Advisor をテストすることは不可能です。

質問です。

1) バッファに書き込んだ平均化されたデータを元にチャートを作ることができるコードをどのように記述したらよいでしょうか。

2) このインディケータのデータ(リアルモードで受信したもの)をあるファイルに書き込んで、後でこのファイルを参照しながら、すでに収集したティックボリュームを適用して、ヒストリカルデータのインディケータを構築することは可能でしょうか。可能であれば、プログラム的にどのように記述すればよいのでしょうか。あるいは、現在のiVolumeの情報をファイルに書き込む 必要のない、他の解決策がありますか?

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;
double   Buf_1[];
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // объем текущего тика вниз
long V4; // накопленный объем для всех тиков вниз для текущего бара
long V5;  // отрицательные и положительные iVolume нарастающим итогом

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   //SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
   V5 = 0;
  
   
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
//      Buf_1[0]=0;         // и обнулить последний элемент буфера
   }
   
      
   if(Bid >= Bid1) 
{
   if(Bid > Bid1) 
{   
   V1 = iVolume(NULL, 0, 0); // если повышающий цену тик
   V2 = V1 + V2;
}
  else
{
   V1 = 0;                // если Bid1 = Bid2, т.е. изменение цены = 0, то iVolume этого тика присваиваем 0;
   V2 = V1 + V2;      
}               
}              
   else 
{
   V3 = iVolume(NULL, 0, 0); // если понижающий цену тик 
   V4 = V3 + V4;
}
  
   V5 = V2-V4;
   Bid1=Bid;
   Buf_1[0]= V5; // в буфер сгружаем 
  
   
  return(rates_total);
}
 

コードの末尾に追加するとか。

double macurrent=iMAOnArray(Buf_1[0],0,5,0,MODE_LWMA,0);

え、うそ!?コンパイラは、配列がないというエラーを発生させます。


 
こんにちは、攻略トースターのエクスクラメーションマークの意味を教えてください。
 

どなたか......、助けていただけませんか?私にとってのデッドエンドは、ここに定められています。https://www.mql5.com/ru/forum/160683/page378#comment_6053255

 
YarTrade: このインディケータのデータ(リアルモードで取得したもの)をファイルに書き込んで、後でこのファイルを参照しながら、既に収集したティックボリュームを適用して、ヒストリカルデータのインディケータを構築することは可能でしょうか。可能であれば、プログラム的にどのように記述すればよいのでしょうか。あるいは、現在のiVolumeの情報をファイルに書き込む 必要のない、他の解決策があるのでしょうか?

ファイルからのデータに基づくインジケータ- 検索でこの行を入力し、見つけました

 

ある種の悪夢のようなもので、なぜこのように出るのか理解できません。
Code section :


line[0]=MathFloor(Low[1]*MathPow(10,D-1));
Print("Var ",DoubleToStr(line[0],D));
Print("Code ",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D);

Output :

EURUSD,M15: Var 0.00000
EURUSD,M15: コード 11754.00000


代入後の値はどうなるのでしょうか?

 
LuckySith:   コードセクション:

line[0]=MathFloor(Low[1]*MathPow(10,D-1));
Print("Var ",DoubleToStr(line[0],D));
Print("Code ",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D);

Print :

EURUSD,M15: Var 0.0.00000
EURUSD,M15: コード 11754.00000

代入後の値はどうなるのでしょうか?

代入後の変数の値と変数 D の値を表示 します。電卓で計算してみてください。

 

皆さん、こんにちは。みなさん、ちょっとだけお願いします。どなたか、サウンドファイル名を指定できる行を、インジケーターの設定に設定していただけないでしょうか。

ファイル:
Awesome-33.ex4  16 kb
 
STARIJ:

代入後の変数の値と変数Dの値をプリントアウトしてください。電卓で計算してみよう・・・。


そこで、代入後の変数の値をプリントアウトしています。ということで、基本的には以下のようなコードになります。


a=bです。

印刷する(a)。

プリント(b)。

しかし、aは0に等しく、bは正しく印刷される

 
LuckySith:

このように、割り当てられている値を出力しています。そのため、基本的には以下のようなコードになります。


a=bです。

印刷する(a)。

プリント(b)。

しかし、aは0に等しく、bは正しくプリントされる


私はゼロを見ません、あなたはどこかを間違えています。

   int D=5;
   double a=MathFloor(Low[1]*MathPow(10,D-1)); 
   Print("Var ",DoubleToStr(a,D)); 
   Print("Code ",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D));