初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 533

 
      // AO
      if(ao) {
         CopyTime(symbol_name[st],ao_time_frame,1,1,time_buf);
         if(symbol_ao_timebar[st]!=time_buf[0]) {
            symbol_ao_timebar[st]=time_buf[0];
            double ao_buf[];
            CopyBuffer(symbol_ao_handle[st],0,enter_bar,2,ao_buf);
            if(ao_buf[1]>ao_buf[0]&&ao_buf[0]<0) symbol_ao_signal[st]=0;
            if(ao_buf[1]<ao_buf[0]&&ao_buf[0]>0) symbol_ao_signal[st]=1;
            }
         }else symbol_ao_signal[st]=2;
      
      // AC
      if(ac) {
         CopyTime(symbol_name[st],ac_time_frame,1,1,time_buf);
         if(symbol_ac_timebar[st]!=time_buf[0]) {
            symbol_ac_timebar[st]=time_buf[0];
            double ac_buf[];
            CopyBuffer(symbol_ac_handle[st],0,enter_bar,2,ac_buf);
            if(ac_buf[1]>ac_buf[0]&&ac_buf[0]<0) symbol_ac_signal[st]=0;
            if(ac_buf[1]<ac_buf[0]&&ac_buf[0]>0) symbol_ac_signal[st]=1;
            }      
         }else symbol_ac_signal[st]=2;
みなさん、こんにちは。ここで質問です。コードの一部分がありますと書かれています。つまり、買いか売りかを言うべきですが、AOとACが同一平面上にあるときだけです。ゼロ以下は買い、ゼロ以上は売り。
そうなんですか?達人たちよ、助けてください。
質問は基本的にこうです。これは正常なコードなのか、それともデタラメなのか?
 
MASTERXAYS:
みなさん、こんにちは。ここで質問です。コードの一部分がありますと書かれています。つまり、買いか売りかを言うべきですが、AOとACが同一平面上にあるときだけです。ゼロ以下は買い、ゼロ以上は売り。
そうなんですか?どうか、達人を助けてください。
という質問です。これは正常なコードなのか、それともデタラメなのか?

そのやり方は" たらめ "と言わざるを得ません

価格が指標に従うのを見たことがありますか?また、これらはB.ウィリアムズの指標であり、彼はご存知のように外国為替市場で取引しておらず、考え方そのものが時代遅れであることに注意してください。

 
-Aleks-:
そして、このゼロ調整はどのように行うのでしょうか?
単純型のゼロ化と全く同じ方法です。必須項目に0を 代入すると同時に、StructToTime()という逆操作を行います。
 
MASTERXAYS:
みなさん、こんにちは。ここで質問です。コードの一部分がありますと書かれています。つまり、買いか売りかを言うべきですが、AOとACが同一平面上にあるときだけです。ゼロ以下は買い、ゼロ以上は売り。
そうなんですか?達人の力を貸してください。
質問は基本的に以下の通りです。これは正常なコードなのか、それともグリーンオイルのデタラメなのか?

信号機の建設コードについて説明している私の 記事を読んでください。しかし、私自身はシグナル関数をこのように書いています。

ENUM_ORDER_TYPE GetSignal(int i,ENUM_TIMEFRAMES tf)
  {
   double bbup[1];
   double bbdw[1];
   double rsi[1];
   double macd[2];
   double stoh[2];
   double Close[2];

   if(IND01[i]==INVALID_HANDLE || IND01[i]==0){IND01[i]=iBands(m_symbol,tf,BB_period,0,2,PRICE_CLOSE);return(WRONG_VALUE);}
   if(IND02[i]==INVALID_HANDLE || IND02[i]==0){IND02[i]=iRSI(m_symbol,tf,RSI_period,PRICE_CLOSE);return(WRONG_VALUE);}
   if(IND03[i]==INVALID_HANDLE || IND03[i]==0){IND03[i]=iMACD(m_symbol,tf,MACD_fast_ema_period,MACD_slow_ema_period,9,PRICE_CLOSE);return(WRONG_VALUE);}
   if(IND04[i]==INVALID_HANDLE || IND04[i]==0){IND04[i]=iStochastic(m_symbol,tf,ST_Kperiod,ST_Dperiod,ST_slowing,MODE_SMA,STO_LOWHIGH);return(WRONG_VALUE);}

   if(CopyBuffer(IND01[i],1,0,1,bbup)<1) return(WRONG_VALUE);
   if(CopyBuffer(IND01[i],2,0,1,bbdw)<1) return(WRONG_VALUE);
   if(CopyBuffer(IND02[i],0,0,1,rsi)<1) return(WRONG_VALUE);
   if(CopyBuffer(IND03[i],0,0,2,macd)<2) return(WRONG_VALUE);
   if(CopyBuffer(IND04[i],0,0,2,stoh)<2) return(WRONG_VALUE);
   if(CopyClose(m_symbol,tf,0,2,Close)<2) return(WRONG_VALUE);

   if(Close[0]<bbdw[0]&& Close[1]>bbdw[0]&&  stoh[1]>stoh[0]&&  stoh[0]<20  &&  rsi[0]<30  &&  macd[1]<macd[0]) return(ORDER_TYPE_BUY);
   if(Close[0]>bbup[0]&& Close[1]<bbup[0]&&  stoh[1]<stoh[0]&&  stoh[0]>80  &&  rsi[0]>70  &&  macd[1]>macd[0]) return(ORDER_TYPE_SELL);

   return(WRONG_VALUE);
  }
 
Aleksey Lebedev:

1になります。どちらの時刻もまず丸められ、その後引き算されます。

式の中の数字がすべて四捨五入されていると思うのはなぜですか?丸みがないんです。変数が丸くなるのは賛成です。

そして、それらが丸められた場合、私は例を示した - 今日の現在のバーと昨日の計算されたもの - 1時間のTF - それらの違いは、すべての丸めではゼロに等しくなる......常に上に向かって丸めればいいのかもしれませんが......。

アレクセイ・コジツィン
単純な型のゼロ化と全く同じです。必須項目に0を代入 した時点で、逆の操作であるStructToTime()を使用します。

ありがとうございます-もう一度やってみます-ヘルプの例が良くないので...。

 
-Aleks-:

式の中の数字がすべて四捨五入されていると思うのはなぜですか?四捨五入はしていません。でも、変数は丸くなるんですねー、納得。

と丸められた場合、私は例を示した - 今日の現在のバーと昨日計算 - 1時間のTF - それらの違いは、任意の四捨五入でゼロに等しくなる...常に上に向かって丸めればいいのかもしれませんが......。

整数(int,long,datetimeなど)の除算は、結果が整数であるため、余りは捨てられます。今日の00:00と昨日の23:59:59では、その差は1日分となります。

 

教えてください、MQL4...
M5で動作するインジケーターのコードで、H1の前のバーのHighまたはLowを参照する方法がわかりません。
iHigh(NULL,PERIOD_H1, i)のように ....ポイントは、現在のM5ローソク足が前時間の高値をブレイクしたかどうかを判断する(M5チャートに上下の矢印をつける)ことです。


 
MQL4インジケーターのコードで、以下の行を置き換えます。
for(i=pos; i<rates_total; i++) 
をもって
for(i=pos; i<rates_total-1; i++) 
は、現在の(未完成の)バーではインジケータが考慮されないという事実につながります - このバーの下にインジケータラインが 存在しないだけです。
MQL5では、現在のバーには奇妙なインジケータ値があり、時には0.0000だけということもあります。
どうしたらいいのでしょうか?
 
MikeZv:

ヒントをください、MQL4・・・。
M5で動作するインジケーターで、H1で前のバーのHighまたはLowを参照する方法がわかりません?
iHigh(NULL,PERIOD_H1, i)のように ....ポイントは、現在のM5ローソク足が前時間の高値をブレイクしたかどうかを判断する(M5チャートに上下の矢印をつける)ことです。


MikeZv:
MQL4インジケーターのコードで、次の行を置き換えます。
をもって
は、インジケータが現在の(未完成の)バーで計算されないという事実につながります - このバーの下にインジケータラインが 存在しないだけなのです。
MQL5では、現在のバーには奇妙なインジケータ値があり、時には0.0000だけということもあります。
どうしたらいいのでしょうか?

そこでインジケーターバッファをどう回してもいいのですが、ここはJunaにしかできないことです。

追加されました。

デバッグの際には、time[i]配列にどのような値が格納されているかを確認し、どの端からバーを数え始め、どこに「ゼロ」バーがあるのかを理解します。

 
Karputov Vladimir

そこでインジケーターバッファを少しひねりました。ここはJunaにしかできないことです。
...どの端から小節を数え始め、どこで "0 "小節になるかを指定します。

Vladimir、最初の質問に答えてくれてありがとう、私はこれらの機能を見逃していました...。

MT4とMT5に同じインジケータを入れました(もちろんコードは各プラットフォームに合わせます)。
ゼロバーまでは同じ値なので、どうやら一端から ...:)
また、MT4で現在のバーの計算を無効にすると、現在のバーの下に何も描画されず、MT5では、間違った値が表示されます。

ファイル:
mvt_Vlt.mq4  5 kb
mvt_Vlt.mq5  5 kb
理由: