移動平均線が交差したバーの時刻を求めるには?(コードはこちら) - ページ 3

 

PERIOD_H1チャートのために特別にそれが必要です。タイムフレームを変更する可能性があるので、そのTFのためにハードコードされたものが必要です。

(特にMAとif文に関してWHRoederが2度書いてくれたことが心配です。- だから、私はいくつかのスラップを覚悟しているが、私はそれが私にMAの交差したバー(下)を教えてくれると思います。ということは、iBarShiftに適用すればきっとうまくいくのでは...?)

if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12)triggerBarTime = Time[1];
 
WHRoeder:

複数の移動平均線が同時にクロス することはありません。

なぜ二重投稿しているのですか?あなたの質問には以前に回答して います。

すべての移動平均が正しい順序で並んでいた最も古いバーを見つけてください。


int DIR = 0;
for(int iBar = 0; iBar < Bar; iBar++){
   double MA20 = ... iBar), 
           MA5 = ... iBar);
          :
   if(     MA20 > MA5 && MA5 > ...) DIR = -1;
   else if(MA20 < MA5 && MA5 < ...) DIR = +1; // All fanning up.
   else if (DIR != 0){ iBar--; break; }       // Last one was cross.
}
Bar変数の目的は何ですか?また、"--"とはどういう意味ですか?2つの「--」と「!」マークは何ですか?ヘルプを見ましたが、何のためにあるのかわかりませんでした。)
 
DomGilberto:

Bar変数の目的を聞いてもいいでしょうか?また、"--"とはどういう意味ですか?2つの"--"と"!"マークは何ですか?私はヘルプセクションに目を通しましたが、それらが何の目的であるかに出会っていません)。


それと、なぜbookのbasicが未だに不明なのか聞いていいですか?

https://book.mql4.com/basics/expressions

 
あなたの質問は、あなたが「この小さな金属製のものは何ですか(キー)、なぜ1つのプレッシーは長方形で(ガス)、他のものは四角形なのですか」と言うようなものです。
コードを 勉強して ください。
 

でも、ガスキーは知っている。- コーディングよりも簡単なんです。

でも、皆さんの言う通り、ちゃんと読み込まないといけませんね。

というのも、私は試行錯誤しながら学ぶのが一番好きなんです。ロジックを理解するのに役立ちます。それに、MQL4のサイトでは、それらがどのように連動しているのか、必ずしも明確に説明されているわけではありません。

だから、あなたの質問に答えるために、私はいくつかの基本的なことと、より高度なことを知っています。

でも、私は遊びながら学ぶのが好きなので、パッチワークのようになります。

EDIT - WHRoederが書いたコードの "Bar "の部分がまだ理解できていないのですが、これで良いのでしょうか?

 
DomGilberto: でも、ガスキーは知っている...。- コーディングより簡単だ...

でも、それを知らずに運転しようとするだろうか?そんなのバカバカしいじゃないですか。

あなたは"--"と"!"が何なのか知らないまま、コーディングしようとしている。どう違うんだ?

 

!=True, if x is not equal to y -(DIR != 0) - もしDIR (これは0) が "0" と等しくなければ、Break演算子はfor演算子に制御を 戻す。そして、再びループを開始する。

-- 変数の値から1を引きます。iBar--;」=iBar=0なので、1引く=-1?

ちょっとー、ここは本当に試行錯誤中なんです。人並みに早く覚えられなくて申し訳ない(むしろそっちの方がいいと思わないか!?でも、私は一生懸命やっています。私は世界で一番輝いている人間ではないかもしれません...。だから、少なくともその点だけは許して欲しい。

 
DomGilberto:

!=True, if x is not equal to y -(DIR != 0) - もしDIR (これは0) が "0" と等しくなければ、Break演算子はfor演算子に制御を 戻す。そして、再びループを開始する。

-- 変数の値から1を引きます。iBar--;」=iBar=0なので、1引く=-1?

ちょっとー、ここは本当に試行錯誤中なんです。人並みに早く覚えられなくて申し訳ない(むしろそっちの方がいいと思わないか!?でも、私は一生懸命やっています。私は世界で一番輝いている人間ではないかもしれません...。だから、少なくともその点だけは許して欲しい。


このループでは

for(int iBar = 0; iBar < Bar; iBar++){//....do some stuff and come back}

iBarは、それがBarとして小さい限り、それはより高い値1になるように、ここで異なる値を持っている

iBar--;

というのは....

iBar = iBar - 1;
 
int DIR = 0;
for(int iBar = 0; iBar < Bars; iBar++)
   {
   double i1  = iMA(NULL,60,3,0,1,0,1); 
   double i2  = iMA(NULL,60,5,0,1,0,1);
   double i3  = iMA(NULL,60,8,0,1,0,1);
   double i4  = iMA(NULL,60,10,0,1,0,1);  
   double i5  = iMA(NULL,60,12,0,1,0,1);
   double i6  = iMA(NULL,60,15,0,1,0,1);  
   double i7  = iMA(NULL,60,30,0,1,0,1);
   double i8  = iMA(NULL,60,35,0,1,0,1);
   double i9  = iMA(NULL,60,40,0,1,0,1);
   double i10 = iMA(NULL,60,45,0,1,0,1);
   double i11 = iMA(NULL,60,50,0,1,0,1);
   double i12 = iMA(NULL,60,60,0,1,0,1); 
   double ema21 = iMA(NULL,60,21,0,1,0,1);

   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
   
   if (DIR != 0)
   { 
   iBar--; break; 
   }       // Last one was cross.

しばらくバーとにらめっこしていたのですが、気がつきました:)- 私がコード化しようとしているものは、私が最初に考えたよりも若干複雑であることに気付き始めています。私は、MAが回転し、上または下(それが買いまたは売りであるかどうかに応じて)扇動する必要があります。もし(長い間)扇状に広がるなら、彼らは常に正しい順序である必要はありません - それはちょうど彼らがすべて正しい順序で積み上げられ、扇状に広がったときに最初に識別するケースです - この時点から私が欲しいのは、価格が21絵馬をチェック し、高値の上に注文を置くことのみです。もちろん、いろいろ試してみるつもりです。もちろん、いろいろやってみますよ!誰かがコードを書いてくれるとは思っていません。

ありがとうございました

 
インデントやブレースの欠落を修正する
投稿コード
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
適切なインデント
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
   triggerBarTime = Time[1];
   if(Low[1]<ema21) OrderEntry(0);
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
   triggerBarTime1 = Time[1];
   if(High[1]>ema21)  OrderEntry(1);
適切な中括弧
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && 
      i8<i9 && i9<i10 && i10<i11 && i11<i12){
      DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21) OrderEntry(0);
   }
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && 
           i8>i9 && i9>i10 && i10>i11 && i11>i12){
      DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)  OrderEntry(1);
   }