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

 
RomanRott:

私のインジケータ/アドバイザで、スイッチを入れるとすぐに他のインジケータに接続されるようなコードを規定することを意味します。
どのようなコードですか?

なんか、テスター用な気がするんだけど。これは、プログラミングをしなくても半クリックで解決します。必要な指標をすべて含んだテンプレートを作成し、それを「Tester」またはアドバイザーの名前にします。 そして、テスターでアドバイザーを実行すると、すでに設定された指標でチャートが開か れます。

 
RomanRott:

私は私の指標/顧問でいくつかのコードを記述することを意味し、それは
をオンに切り替えるとすぐにいくつかの他の指標を接続します。 何をどのように追加するのですか?

たくさんのバリエーションを持っています。例 1)ChartApplyTemplate- 指定されたテンプレートをチャートに適用します(テンプレートはインジケータを表示します)。2) インジケーターに含まれるインジケーターのコードを追加します。3) Expert Advisor で、グラフィックオブジェクトでインジケータを表示します。4) ...
 

Vinini_HMAインジケータをEAに組み込む必要があるのですが、リソースとiCustomを介して接続しデータを取得することができましたが、テストが非常に遅くなっています。私は最後の3つのローソクのための1つのパラメータのみを必要とするEA自体でインジケータ値が計算されるようにする方法を助言してください。

以下は、インジケーターのコードです。

#property indicator_chart_window 
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green 
#property indicator_color3 Red 
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- input parameters 
extern int period=15; 
extern int method=3; // MODE_SMA 
extern int price=0; // PRICE_CLOSE 
extern int sdvig=0;
//---- buffers 

double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];

double vect[]; 

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() { 
   IndicatorBuffers(4); 
   SetIndexBuffer(0, ExtMapBuffer); 
   SetIndexBuffer(1, Uptrend); 
   SetIndexBuffer(2, Dntrend); 
   SetIndexBuffer(3, vect); 
   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);

   SetIndexDrawBegin(0,1*period);
   SetIndexDrawBegin(1,2*period);
   SetIndexDrawBegin(2,3*period);

   IndicatorShortName("Signal Line("+period+")"); 
   SetIndexLabel(1,"UP");
   SetIndexLabel(2,"DN");
   return(0); 
} 

//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() { return(0); } 

//+------------------------------------------------------------------+ 
//| ?????????? ??????? | 
//+------------------------------------------------------------------+ 
double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method, price, x+sdvig)); } 

//+------------------------------------------------------------------+ 
//| Custom indicator iteration function | 
//+------------------------------------------------------------------+ 
int start() { 
   int counted_bars = IndicatorCounted(); 

   if (counted_bars < 0) return(-1); 
   if (counted_bars > 0) counted_bars--;
   
   int p = MathSqrt(period); 

   int i, limit0,limit1,limit2;
   
   limit2=Bars - counted_bars;
   limit1=limit2;
   limit0=limit1;

   if (counted_bars==0){
      limit1-=(period);
      limit2-=(2*period);
   }

   for(i = limit0; i >= 0; i--)    vect[i]          = 2*WMA(i, period/2) - WMA(i, period); 
   for(i = limit1; i >= 0; i--)    ExtMapBuffer[i]  = iMAOnArray(vect, 0, p, 0, method, i); 
   for(i = limit2; i >= 0; i--) { 
      Uptrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]> ExtMapBuffer[i+1]) Uptrend[i] = ExtMapBuffer[i]; `  AZ4
      Dntrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]< ExtMapBuffer[i+1]) Dntrend[i] = ExtMapBuffer[i]; 
   }
   return(0); 
} 

バッファExtMapBuffer[i]にある最後の3つの値を計算する必要があります。 私は初心者ですが、厳しく判断しないでください。Expert Advisor にこれらのコード断片を挿入してみましたが、値が正しく計算されません。

extern int period1=14;
extern int method1=3;
extern int price1=0;
extern int sdvig1=0;

-----------------------------------------------------
.
int p = MathSqrt(period1);      
        
        int z = 3;
        double vect[];
        ArrayResize(vect,z);
        
for(int i = 2; i >= 0; i--) vect[i] = 2*WMA(i, period1/2) - WMA(i, period1);
                
        int y = 3;;
        double HMA[];
        ArrayResize(HMA,y);
        
for(i = 2; i >= 0; i--) HMA[i]  = iMAOnArray(vect, 0, p, 0, method, i);

-------------------------------------------------------

double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method1, price1, x+sdvig1)); }

本当に必要なんです!ありがとうございました。ありがとうございました。そして、長いメッセージで申し訳ありません。

ファイル:
123.png  22 kb
 

結局、3つの値vect[0], vect[1], vect[2]になってしまうのです。でも、HMAの値が必要なんです。HMA[0]は計算されますが、正しくありません。HMA[1]とHMA[2]は0です。

 
ilfat85:

結局、3つの値vect[0], vect[1], vect[2]になってしまうのです。でも、HMAの値が必要なんです。HMA[0]は計算されますが、正しくありません。HMA[1]とHMA[2]は0です。

このページですでに議論されて いたと思いますが・・・。作者に連絡を取ってみましたか?
 
ilfat85:

Vinini_HMAインジケータをEAに組み込む必要があるのですが、リソースとiCustomを介して接続しデータを取得することができましたが、テストが非常に遅くなっています。私は最後の3つのローソクのための1つのパラメータのみを必要とするEA自体でインジケータ値が計算されるようにする方法を助言してください。

以下は、インジケーターのコードです。

バッファExtMapBuffer[i]にある最後の3つの値を計算する必要があります。 私は初心者ですが、厳しく判断しないでください。Expert Advisor にこれらのコード断片を挿入してみましたが、値が正しく計算されません。

本当に必要なんです!ありがとうございました。ありがとうございました。そして、長いメッセージで申し訳ありません。

テスターでは、リソースを 接続しないでください- それは遅いです(この特定のインジケータに適用されませんが、すべてに - テスターではすべてのリソースが遅いです)。

リソースからではなく、そのフォルダのファイルの位置からiCustom()を介して簡単に接続します。

 
STARIJ:
このページですでに議論 されていると思いますが...。作者に連絡を取ってみましたか?

Vityaがここに登場することは非常に稀です。

 
STARIJ:
このページですでに議論されて いたと思いますが・・・。作者に連絡を取ってみましたか?

そこは少し違う問題で、インジケータから値を取得しているのですが、私はEAで直接値を計算させたかったのです。計算式は簡単なようですが、どこかで間違えてしまいました。著者に連絡はしていない。情報ありがとうございます、手紙を書いてみます。

 
Artyom Trishkin:

テスターでは、リソースを 接続しないでください- それは遅くなります(この特定のインジケータに適用されませんが、すべてに - テスターでリソースの速度が低下します)。

リソースからではなく、そのフォルダのファイルの位置からiCustom()を介して簡単に接続します。


ありがとうございました。知らなかった、この方法でやってみる。

 

こんにちは、ローソクの大きさを基準に棒グラフを作っています。最初のローソクの大きさは、過去10本のローソクの中で一番大きいことを知るのに役立つ。ヒストグラムのバーは、幅や色など、何らかの形で印をつける必要があります。バッファも付けた方がいいかもしれませんね。

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,limit = Bars-1;
//--- counting from 0 to rates_total
   

//--- the main loop of calculations
   for(i = limit; i >= 0; i--)
     {
      if (hl) ExtATRBuffer[i] = (iHigh(Symbol(),Period(),i) - iLow(Symbol(),Period(),i)); 
                        
      else    ExtATRBuffer[i] = MathAbs(iOpen(Symbol(),Period(),i) - iClose(Symbol(),Period(),i));
      
      if (ExtATRBuffer[i] < x) ExtATRBuffer[i] = 0;
    
    //
      
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
п