[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 477

 
ああ...そうですね。
 
ふっふっふ!!!助けてくれない。あ、新しいEAで犬を一匹ずつコンプする!?
 
Dimka-novitsek:
ふっふっふ!!!動作しない。あ、犬は新しいEAで一枚一枚コンプしようかなー


こういう時はこうする。

- 関数のテキストを全てコメントアウトしています。

- コメントを部分的に書き下ろしてコンパイルし、エラーが出るのを待つ。

 
   if (strela1>strela2&&BUY==0&&SELL==0)    {    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits),  
          NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE); 

 
            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),  
     "    NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }

そこで

   for( int A=0; A<100 ; A++)
   {
       double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, A);
       double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, A);
            
       int BUY=0,SELL=0;int ticket; 
       Print ( A,  "  strela1 " , strela1 , "    strela2  " , strela2 ); 
           
       for(int i=1; i<=OrdersTotal(); i++)
       {  
         if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
         {                                       // Анализ ордеров:
            if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
            if (OrderMagicNumber( ) !=magicnumber)continue;
            if (OrderType()==0){ BUY++; ticket=OrderTicket( );}
            if (OrderType()==1) {SELL++;ticket=OrderTicket( );}
         }
       }
    }

このように

      if (strela1<strela2&&BUY==0&&SELL==0)
      {  

         OrderSend( Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
         NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
         Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError()  ,"  Bid ",Bid,
         "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", NormalizeDouble( Ask- (stoplos*Point),Digits),
         "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble( Bid+( takeprofit*Point),Digits));
      }

とうとう

    Print (   "  Конец " );      

ヒント1:インデントでプログラムを構成する

ヒント2:このようなエラーや他の多くのエラーを検索する場合、コード部分/* */のコメントを使用する - 構文エラーは非常に迅速に見つかります。

 
Dimka-novitsek:
ありがとうございます!!!コードを見てみないと...。ブラケットも紙に書いてあるんですよ~、バランスよく!!!

片手落ちは正しくない - ネスティングルールに従え

 
Dimka-novitsek:
分岐はどこ?それとも私がバカなのか...。というか、この条件でオーダーを開けるだけなんです
if演算子は分岐演算子ですが、あなたのコードには2番目の分岐(else)がありません。
 

ありがとうございます!!!

その行がなくてもコンパイルされますよね。

Print( "strela1<strela2&&BUY==0&&SELL==   " ,   GetLastError(),    "  Bid ",  Bid,  "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", 
 NormalizeDouble( Ask- (stoplos*Point),Digits),  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ",  NormalizeDouble( Bid+( takeprofit*Point),Digits);

そして、私はそれを犯罪者とは思わない!!!EA全体を部分的に転送し、根幹を見つけるまで別々にまとめた、いわば「根回し」をしたのが私です。

 
Dimka-novitsek:

ありがとうございます!!!

その行がなくてもコンパイルされますよね。

そして、私はそれを犯罪者とは思わない!!!EA全体を部分的に運んで、根っこが見つかるまで別々にコンパイルした、いわば私の仕事です。

Printの 閉じ括弧がない

Print( "strela1<strela2&&BUY==0&&SELL==   " ,   GetLastError(),    "  Bid ",  Bid,  "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", 
 NormalizeDouble( Ask- (stoplos*Point),Digits),  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ",  NormalizeDouble( Bid+( takeprofit*Point),Digits));
[Deleted]  

こんにちは...簡単なインジケータを書きました(添付ファイル参照)。

インジケーターの本質を一言で言うと、インジケーターは3本の線で構成されています。

1行は、期間aと 期間bの クローズにおける2つのMAの差 (条件付き)を示しています。

2 行目は、期間cと dの クローズに関する2つのMAの差 (条件付き);a≠b≠c≠dを示します。

3行目は、Line1とLine2の差のMA、つまりMA(Line1-Line2)を一定周期で表示します。

質問:グラフの中でLine3(黒色)が直線で表示されているのはなぜですか?


画像への注記:上のチャートは望ましい結果を示し、下のチャートは私が作成したインジケーターを示しています。

:もし誰かがもっと多くのバグを発見してくれたら、私は非常に感謝します。

P.S. フォーラムを散らかさないために、事前にフィードバックをお願いします。

ファイル:
aom3.mq4  12 kb
 

まず、4番目の非表示バッファであるExtMapBuffer4をインジケータバッファにリンクしてみてください。

SetIndexBuffer(3,ExtMapBuffer4);

だって

   IndicatorBuffers(4);                                                 //устанавливаем общее количество всех индикаторов, участвующих в расчете всех индикаторных линий

冒頭で、3つのライン/バッファについて説明しています。

ちなみに、その場合は、タイムスリップとして宣言してチェックする必要はありません。