インジケーターに関する雑多な質問 - ページ 2

 

#オブジェクトの順序

3つのオブジェクトを 作成し、それらのオブジェクトが互いに交差している。

#1 水平線#2 垂直線、#3 トレンドライン

これらのZ位置を 設定する必要がある。

どのようにZポジションの 値を与えることができますか?

ありがとうございます。

 
Marco vd Heijden:

OnInit()ですべての線を描画し、最後のバーからの開始時間が変わるたびに新しい線を描画すれば、新しいバーがあったことを知ることができます。

しかし、あなたが何をしたいのかよくわかりません。

OK! 私は何かを試して みます。その後、ここに戻って きます。

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

 

マルコ・ファット・ヘイデン(Marco vd Heijden

それについて研究を 始める前に。本当に聞きたいのですが、start()関数は チャート(/ MT4 Platforms)を遅くするのでしょうか?

p.s 私はすべてのコードをstart() 特殊関数に入れました、そのコードはピリオドライン- H1, H4, D1, W1, MN1に対して機能します。

良い週末をお過ごしください。

 
Max Enrik: 私は本当に尋ねる必要がある、start()関数は、チャート(/ MT4 Platforms)の速度を低下させるのですか?
すべてのインジケータが更新されている間、ターミナルは他の何もしません。そのため、インジケータはスリープすることができず、取引やWebリクエストを 行うことができません。
 
whroeder1:
すべてのインジケータが更新されている間、ターミナルは他の何もしません。そのため、インジケータはスリープすることができず、取引もできず、Webリクエストもできません。

あなたのコメントをありがとうございました。(コメント後、私は私のインジケータのすべてを変更することにしました - 私はほとんどすべての私のインジケータをstart() 関数で 作ったので。)

以下のコードをstart() 関数に入れましたが、私のインジケーターにはどの 方法が良いでしょうか?

実は、以下のコードを編集して連続更新を 止める方法(init()関数内にある全てのstart()コードを 削除する方法)が全く分かりません。

//---MN1
int _cnt_MN1 = 11; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ )
{
    if ( _Period < PERIOD_MN1 )
    {
        //---time convert
        datetime _tltpMN1      = TimeToString( iTime( Symbol(), PERIOD_MN1, i_MN ), TIME_DATE );
        datetime _time         = iTime( Symbol(), PERIOD_MN1, i_MN );// + PeriodSeconds( PERIOD_MN1  );
        //---name
        string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );

        ObjectCreate     ( 0, _vlineName_MN, OBJ_VLINE          , 0, _time, 0     );
        ObjectSetString  ( 0, _vlineName_MN, OBJPROP_TOOLTIP    , _tltpMN1        );
        ObjectSetInteger ( 0, _vlineName_MN, OBJPROP_COLOR      , C'180,160,080'  );
        ObjectSet        (    _vlineName_MN, OBJPROP_BACK       , true            );
        ObjectSet        (    _vlineName_MN, OBJPROP_HIDDEN     , true            );
        ObjectSet        (    _vlineName_MN, OBJPROP_SELECTABLE , false           );
        ObjectSet        (    _vlineName_MN, OBJPROP_STYLE      , STYLE_SOLID     );
    }   //---if Close
}   //---for Close

ありがとうございます。

 

本当に困って います、どなたか 回答お願いします。

ありがとうございます。

 
Max Enrik: 実は、以下のコードをどのように編集すれば連続更新を停止 できるのか見当がつきません。
  1. 新しい月のために新しいバーコードを適応させる。
    Bars is unreliable (a refresh/reconnect can change the number of bars on the chart) volume is unreliable (miss ticks) Always use time.Bars is unreliable (a refresh/reconnect can change bar on the chart).新しいローソク足 - MQL4フォーラム
    私は新しいバー関数を作ることに反対です、それは1ティックにつき1回しか呼び出すことができないからです。変数は何度もテストすることができます。
    void OnTick(){
       static datetime BOMcur=0;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool     isNewMonth = BOMcur != BOMpre;
       if(isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
    オブジェクト名にシフト番号を 使用しないで ください。新しいバーが始まると、すべてのオブジェクトの名前が間違っていて、新しい "<prefix>0" を作成することができません。元の投稿で正しい(timeを使用)。
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    あるいは、時間をintから文字列に変換してください。
 

インジケーターの代わりにエキスパートに入れることで、将来的に取引戦略を追加する際に簡単に使用することができます。

バーの問題については、バーの開始時刻を datetime変数に格納し、記録された時刻と実際の時刻を比較するだけで、新しいバーが発生するたびにそれがトリガーされます。

以下はその例です。

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(250);

//--- create some things

   CreateLines(); // Function that creates time lines

//--- load open times
   M1=iTime(Symbol(),PERIOD_M1,0);
   M5=iTime(Symbol(),PERIOD_M5,0);
   M15=iTime(Symbol(),PERIOD_M15,0);
   M30=iTime(Symbol(),PERIOD_M30,0);
   H1=iTime(Symbol(),PERIOD_H1,0);
   H4=iTime(Symbol(),PERIOD_H4,0);
   D1=iTime(Symbol(),PERIOD_D1,0);
   W1=iTime(Symbol(),PERIOD_W1,0);
   MN1=iTime(Symbol(),PERIOD_MN1,0);


//--- set timelines
   ObjectMove(0,"Time-M1",0,M1,0);
   ObjectMove(0,"Time-M5",0,M5,0);
   ObjectMove(0,"Time-M15",0,M15,0);
   ObjectMove(0,"Time-M30",0,M30,0);
   ObjectMove(0,"Time-H1",0,H1,0);
   ObjectMove(0,"Time-H4",0,H4,0);
   ObjectMove(0,"Time-D1",0,D1,0);
   ObjectMove(0,"Time-W1",0,W1,0);
   ObjectMove(0,"Time-MN1",0,MN1,0);



//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(M1!=iTime(Symbol(),PERIOD_M1,0))
     {
      M1=iTime(Symbol(),PERIOD_M1,0);  // overwrite old value with new value  
      //Alert("New Bar on M1! ",TimeToString(M1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M1",0,M1,0);
     }

   if(M5!=iTime(Symbol(),PERIOD_M5,0))
     {
      M5=iTime(Symbol(),PERIOD_M5,0);
      //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M5",0,M5,0);
     }

   if(M15!=iTime(Symbol(),PERIOD_M15,0))
     {
      M15=iTime(Symbol(),PERIOD_M15,0);
      //Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M15",0,M15,0);
     }

   if(M30!=iTime(Symbol(),PERIOD_M30,0))
     {
      M30=iTime(Symbol(),PERIOD_M30,0);
      //Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M30",0,M30,0);
     }

   if(H1!=iTime(Symbol(),PERIOD_H1,0))
     {
      H1=iTime(Symbol(),PERIOD_H1,0);
      //Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-H1",0,H1,0);
     }

   if(H4!=iTime(Symbol(),PERIOD_H4,0))
     {
      H4=iTime(Symbol(),PERIOD_H4,0);
      //Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-H4",0,H4,0);
     }

   if(D1!=iTime(Symbol(),PERIOD_D1,0))
     {
      D1=iTime(Symbol(),PERIOD_D1,0);
      //Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-D1",0,D1,0);
     }

   if(W1!=iTime(Symbol(),PERIOD_W1,0))
     {
      W1=iTime(Symbol(),PERIOD_W1,0);
      //Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-W1",0,W1,0);
     }

   if(MN1!=iTime(Symbol(),PERIOD_MN1,0))
     {
      MN1=iTime(Symbol(),PERIOD_MN1,0);
      //Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-MN1",0,MN1,0);
     }

  }
//+------------------------------------------------------------------+
 
whroeder1:
  1. 新しい月のために新しいバーコードを適応させる。
    void OnTick(){
       static datetime BOMcur=0;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool     isNewMonth = BOMcur != BOMpre;
       if(isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
    オブジェクトの名前にシフト番号を 使用しないで ください。新しいバーが始まると、すべてのオブジェクトの名前が間違っていて、新しい "<プレフィックス>0" を作成することができません。元の投稿で正しい(timeを使用)。
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    または、時間をintから文字列に変換してください。

コメントありがとうございます。

コメントいただいてから、コメントについて調べ 始めていました。(私は'Void OnTick()'関数を使用したことがないので)

そこで、以下のリンクを読んで、'OnTick()'関数がExpert Advisorでのみ実行されて いることを理解しました。

私はすでにチャートで1つのExpert Advisor(トレードパネル)を使用しています1つのチャートウィンドウで すべての指標とExpert Advisorを使用する必要があります)。

もし、あなたのコードを「Expert Advisor」で 使えるということであれば、私は「Trade Panel」を改良し、また、コードを別に書き たいので、実際には使いません。(将来的には(私にとって重要な)指標の 束を結合する可能 性はありますが、今のところはありません)

とにかく、Williamさん、あなたのコメントは本当に私にアイデアを与え、また何かを教えてくれました。

(p.s.もし私の考えが間違っていたら、教えてください)

そして、もう一度、本当にありがとう ございました。
Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference
 
Max Enrik(「Void OnTick()」関数を使ったことがないため)

ビルド600以前(2014年 2月3日)はstart() しかなかった。今はOnTick (EA、)OnCalculate (インジケーター、)OnStart (スクリプト)があります。 インジケーターの話だったのを忘れてました。

新しいイベント処理関数の 使用を開始- 関数 - 言語の基礎 - MQL4 Reference.ルックバックを正しく 行う方法を参照してください。

Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference
理由: