iCustomの詳細説明 - ページ 2

 
NewCoder47:


RaptorUKに感謝します。しかし、私が困っているのは実際のコーディングです。私はMQL4の初心者で、数ヶ月しかやっておらず、まだ勉強中です。ですから、コーディングとインジケータでのセットアップ方法について簡単な説明が必要な のです。

私が書いたことを読んでいないのですか? "インジケータに変更は必要ありません ... EAは単に必要なシフト値で必要なバッファにアクセス するだけです。 "
 
dabbler:
いいえ、できません。今試してみました。カンマとカンマの間を空けるだけで、パラメータの一つを省いてもコンパイルされません。 。
やっぱり、最後の文は修正すべきでしたね。パラメータの カンマは抜いてください。
 
ubzen:
やっぱり最後の文は修正すべきでした。 パラメータのカンマをはずす。

このIndicatorをIndicator Folder内にTOR.mqhとしてコンプリートしたところです。そして、Expert Folderに以下のコードを書きました。

void start(){
    iCustom(Symbol(),0,"TOR",0,1);
}
これで、パラメータを渡さなくても、正常に実行されるようになった。
 
ubzen:

このIndicatorをIndicator Folder内にTOR.mqhとしてコンプリートしたところです。そして、Expert Folderに以下のコードを書きました。

パラメータを渡さずにコンパイル すると、うまくいきました。
しかし、実際に動作するのでしょうか?
 
dabbler:
しかし、実際に効果はあるのでしょうか?
そうです。いつもそうです。私はExtern Valuesについて話しています。あなたはバッファのことを言ってるんでしょう。
 

ありがとうございます、明日の夜に調べてみます。

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

 

やあ、みんな。私はまだいくつかの困難に直面しているようです。

これは、インジケータ(私はインジケータで何も変更していない)のコードで、私は関連する部分であると思うものを示しています。これらはインジケータの中で互いに続いていないことに注意してください、私が取り除いたものがもっとたくさんあります。

//---- indicator buffers
double     STDBuffer[];
double     stddevma[];


//---- macd counted in the 1-st buffer
  for(int i=limit-1; i>=0; i--){
     STDBuffer[i]=iStdDev(Pair1,0,StdDev.MA.Period, StdDev.MA.Shift, StdDev.MA.Method, StdDev.MA.Price, i);
     }
  for(i=limit-1; i>=0; i--){
     stddevma[i] = iMAOnArray(STDBuffer, 0, MA.Fast.Period, MA.Fast.Shift, MA.Fast.Method, i);
     } 

以下はEA内のコードです。

                double FastMA = iMA(NULL,0,FastMAPeriod,0,0,0,0);
                double SlowMA = iMA(NULL,0,SlowMAPeriod,0,0,0,0);
                double     STDBuffer = iCustom(Null,0,"SFX", , ,0,0);
                double     stddevma = iCustom(Null,0,"SFX", , ,1,0);
                

よくわからないのはパラメータの 部分です。ここにどんな値を入れればいいのでしょうか?ここが悩ましいところです。STDBufferとstddevmaの値をEAのさらに下のテストで使いたいのです。例えば、Pair1(現在のチャートとして宣言されたIndicatorの別の場所にある)を含めるのでしょうか?iCustomの開始時にすでにNullとして宣言されているので。

また、どのような値がEAに送られているのか物理的に確認する方法はありますか?

どんな助けでも非常に感謝されます。

ありがとうございます。

 
NewCoder47:

以下は、インジケーターのコードです(インジケーターは何も変えていません)。これらはインジケータの中で互いに続いているわけではなく、私が取り除いたものがもっとたくさんあることに注意してください。

以下はEA内のコードです。

よくわからないのは、パラメータの部分。ここにどんな値を入れればいいのか?という部分で悩んでいます。STDBufferとstddevmaの値をEAのさらに下のテストで使いたいのです。例えば、Pair1(現在のチャートとして宣言されたIndicatorの別の場所にある)を含めるのでしょうか?iCustomの最初にNullとして宣言されているので。

インジケータの関連する部分が表示されていません extern ステートメントをすべて表示し、それらが発生する順序を表示する必要があります。

SetIndexBuffer ステートメントをすべて表示する必要があります。なぜこれらを表示する必要があるのかを理解すれば、何をしなければならないかがわかると思います。

それから、iCustom ステートメントのカンマとカンマの間に空白を入れてはいけません。

iCustomの ドキュメントを読み直してみてください、元々ロシア語であることを考慮に入れて。注意深く勉強する必要があります。

 
dabbler:

インジケーターの該当箇所を表示していません extern ステートメントをすべて表示し、それらが発生する順序を示す必要があります。

SetIndexBuffer ステートメントをすべて表示する必要があります。なぜこれらを表示する必要があるのかを理解すれば、何をしなければならないかがわかると思います。

それから、iCustomの ステートメントのカンマの間に空白を入れてはいけません。

iCustomの ドキュメントはロシア語であることを考慮して、もう一度読んでみてください。慎重に勉強する必要があります。

Dabblerさん、ありがとうございます。EAとIndicatorの全容を添付しました。iCustomのドキュメントを読んで、パラメータの 部分を除けばすべて理解できましたが、非常に曖昧です。このEAは、今テストしているところなので、非常に手抜きです。

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

マイクです。

インジケーター

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Yellow
#property  indicator_color2  Red
#property  indicator_width1  1

//---- indicator parameters
extern string PairName = "";   // Leave blank for the pair of the chart, enter other pair name to compare correlated pairs

extern int StdDev.MA.Period=12;  // D1=20
extern int StdDev.MA.Shift=0;    //
extern int StdDev.MA.Method = 0; // 0=SMA 1=EMA 2=Smoothed 3=Linear Weighted
extern int StdDev.MA.Price = 0;  // 0 Close price, 1 Open price, 2 High price, 3 Low price, 4 Median price, (high+low)/2, 5 Typical price, (high+low+close)/3, 6 Weighted close price, (high+low+close+close)/4

extern int MA.Fast.Period = 3;
extern int MA.Fast.Method = 2;   //  0=SMA 1=EMA 2=Smoothed 3=Linear Weighted
extern int MA.Fast.Shift = 0;

extern bool CheckOncePerBar = true;

int i, limit, counted_bars;
static string Pair1;

datetime CurrentTimeStamp;

//---- indicator buffers
double     STDBuffer[];
double     stddevma[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  
   IndicatorDigits(Digits+1);
     
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE); // 
   SetIndexStyle(1,DRAW_LINE);

      
//---- indicator buffers mapping
   SetIndexBuffer(0, STDBuffer);
   SetIndexBuffer(1, stddevma);

   
   if (PairName == "") Pair1 = Symbol();
   else Pair1 = PairName;

//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("SFX TOR: "+Pair1+"("+StdDev.MA.Period+")");
   SetIndexLabel(0,"StdDev");
   SetIndexLabel(1,"StdDev MA");

//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {

   counted_bars=IndicatorCounted();
   
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
//---- macd counted in the 1-st buffer
  for(int i=limit-1; i>=0; i--){
     STDBuffer[i]=iStdDev(Pair1,0,StdDev.MA.Period, StdDev.MA.Shift, StdDev.MA.Method, StdDev.MA.Price, i);
     }
  for(i=limit-1; i>=0; i--){
     stddevma[i] = iMAOnArray(STDBuffer, 0, MA.Fast.Period, MA.Fast.Shift, MA.Fast.Method, i);
     } 
    
//Execute on bar Open
    if( CheckOncePerBar == true ){
      if( CurrentTimeStamp == Time[0] )
         return( 0 );
   }
   
   CurrentTimeStamp = Time [0];
   
          
//---- done
   return(0);
  }

EAです。

//+------------------------------------------------------------------+
//|                                                       Simple.mq4 |
//|                                                       Mike Clegg |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright "Mike Clegg"


// External variables
extern double LotSize = 1;

extern int MagicNumber = 123;

extern int FastMAPeriod = 12;
extern int SlowMAPeriod = 26;


// Global variables
int BuyTicket;
int SellTicket;


// Start function
int start()
        {
                // Moving averages
                double FastMA = iMA(NULL,0,FastMAPeriod,0,0,0,0);
                double SlowMA = iMA(NULL,0,SlowMAPeriod,0,0,0,0);
                double     STDBuffer = iCustom(NULL,0,"SFX",0,0);
      double     stddevma = iCustom(NULL,0,"SFX",1,0);
                
                // Buy order 
                if(FastMA > SlowMA && BuyTicket == 0 && stddevma > STDBuffer)
                        {PlaySound("alert.wav");
         Alert(Symbol(),"All Crossing",Period(),"All Crossing");
                        }
                                
                return(0);
        }

EAがインジケーターの仕事をしていることは無視してください、言ったように、私は現時点でテストしているのです。

 
NewCoder47:

Dabblerさん、ありがとうございます。EAとIndicatorの全貌を添付します。iCustomの記述を読み、パラメータの部分を除けばすべて理解しました。このEAは、現在テストしているだけなので、非常に手抜きです。

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

マイクです。

インジケーター

EAです。

EAがインジケーターの仕事をしていることは無視してください。


ここで素晴らしいアドバイスをもらっていたのに、まだ悩んでいるのか...。

iCustomがどのようにあなたのインディケータで動作するかを知るには、helpEAやhelpIndicatorを作って、インディケータのバッファの中に何があるのかをチェックすることができます。

この方法で、MT4でのコマンドのチェックについて最もよく学ぶことができます。 詳しくはこちらhttps://www.mql5.com/en/forum/138379

このようなものを作れば、あなたの作りたいEAでの使い方がわかるはずです。

理由: