[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 640

 

配列のどこが悪いのかがわかりません(条件は単純で、平滑化したCCIの次のピークで買い/売りです)。

ストラテジーはエラーなくコンパイルされ、起動時にログに何も書き込まれませんが、注文は発注されません。

   double c1b[];
   ArrayResize(c1b,PeriodB);
   for(i=1;i<=PeriodB;i++)
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+3);
   
   double c1s[];
   ArrayResize(c1b,PeriodS);
   for(i=1;i<=PeriodS;i++)
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+3);


   if (c1s_1>c1s_2&&c1s_2<c1s_3)
     {                                          //
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (c1b_1<c1b_2&&c1b_2>c1b_3)
     {                                          //
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 


double c1s[];
ArrayResize(c1b,PeriodS)

ある配列を宣言して、別の配列を変更する。

 
Roger:


double c1s[];
ArrayResize(c1b,PeriodS)

ある配列を宣言し、別の配列を変更する。


ありがとうございます、他に何か問題があるのでしょうか - 役に立ちませんでした。
 

配列はゼロの要素から始まるので,式

for(i=1;i<=PeriodS;i++)

はゼロをスキップし、最後の1つには何も書き込まない。

を実行すると、ループの中でこの式だけが実行されます。

c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i)とする。

は無意味で、ループの後、i は最大値に等しいので、すべての値はゼロになります。

 
Craft:

なにかべつにわるい


正規化せずに2倍を比較するのは誤りです...は、このように試してみてください。

   double c1b[];
   ArrayResize(c1b,PeriodB);
   for(i=1;i<=PeriodB;i++)
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+3);
   
   double c1s[];
   ArrayResize(c1b,PeriodS);
   for(i=1;i<=PeriodS;i++)
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+3);


   if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {                                          //
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
     {                                          //
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

 
DDFedor:


正規化せずに2倍を比較するのは間違っている...。この方法で試してみてください。


ありがとうございます、兄弟、まだうまくいきません。
 
Roger:

配列はゼロの要素から始まるので,式

for(i=1;i<=PeriodS;i++)

はゼロをスキップし、最後の1つには何も書き込まない。

を実行すると、ループの中でこの式だけが実行されます。

c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i)とする。

は無意味で、ループの後、i は最大値に等しいので、すべての値はゼロになります。


じゃあ、どうすればいいんだ?for(i=0;i<=PeriodS;i++) を試してみたが、うまくいかなかった。
 
Craft:

では、どうするのか?

コードポイントごとに各変数にプリンタを置き、各ステップで何が起こっているかをログで確認する。
 

こんにちは、初心者の方にお聞きしたいのですが、デモを開くとき、Expert Advisorはopen関数にsymbol()と書くと注文が開くのですが、それをシンボル、例えばEURUSDに変更すると、エラーコード133が出て、確認しようとすると - if (MarketInfo(Symbol(),MODE_TRADEALLOWED)==true) と表示されるのです。
{Alert("!");}else{Alert("?");}。- と表示され、同時に133と表示されます。 何が問題なのでしょうか? オープン機能で特定のシンボルを指定しても、EAが取引を開始しませんが・・・。いろいろ試しました。

よろしくお願いします。私はフォーラムを混乱させるためにここにいないです))

 
artmedia70:
これが反転であって補正でないと言っている人は?

すみません、すぐにお返事できず、ノートパソコンが完全に死んでしまいました。歯が痛くなくなるといいですね、怖いです。私の告白ですが、バボンのせいです、正常に動作しますし、インジケータNMAZZのせいです、どこでダウンロードしたか忘れましたが、1つのチャートではまだ動作しますが、3つのチャート(5M、30M、4H)につけたらそれだけで完全にパソコン、いや端末がフリーズしてしまいました。チャートからインジケータを一つずつ削除し始めたら、このバグを発見しました。このインジケーターのどこが悪いのか分かりませんが、当初はうまく動作していました。しかし、30M、1H、4Hでバトンの色が変われば、反転でなくても、一様に修正となり、ある程度の利益を得ることができるのです。