どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 722

 
Zver4991:
コードルールはありますか?

もちろん、コードだけではありません

https://forum.mql4.com/ru/38943

 
なぜハングアップするのかがわからない
//+------------------------------------------------------------------+
//|                     Машка за больший период без перерисовки .mq4 |
//|                                                             Zver |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Zver"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Aqua
extern int Otobrajat_v_istorii = 1000;
extern int ma_shift=0;
extern int ma_method =0;
extern int applied_price=0;


double buf_ma[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
     SetIndexBuffer(0,buf_ma);         // Назначение массива буферу
   SetIndexStyle(0,DRAW_LINE,EMPTY,2);// Стиль линии
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

   int i,// Индекс бара
   Counted_bars;
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if(i>Otobrajat_v_istorii-1) // Если много баров то ..
      i=Otobrajat_v_istorii-1;                  // ..рассчитывать заданное колич.
     
   while(i>=1) // Цикл по непосчитанным барам
     {

    
     buf_ma[i]=iMA(Symbol(),Period(),5,ma_shift,ma_method,applied_price,i);
  
     
     }
   
   
   
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
コードバリアント
int Err;   //Номер ошибки
int FunErr(int Err) // Функция обработки ошибок
は警告を発する。
Err' の宣言が 51 行目にあるグローバル宣言を隠している。
別のコードのバリエーション
int Err;   //Номер ошибки
int FunErr(Err) // Функция обработки ошибок
がエラーになる。
Err' - 型のない宣言
正しい書き方は?
 
Zver4991:
なぜハングアップするのかがわからない
int i// バーインデックス
while(i>=1)// 未カウントのバーを循環させる
i>=1であれば常に。
 
Shurkin:
int i// バーインデックス
while(i>=1)// 未カウントのバーをループ する。
i>=1であれば常に。

そうだった、忘れてた...ありがとうございます。

i--;

 
//--------------------------------------------------------------------
int Count=0;                                    
//--------------------------------------------------------------------
void OnTick()   
  {
   Count++;
   Comment("Новый тик ", Count);
   //if(Count>2) ExpertRemove();
  }
//--------------------------------------------------------------------
void OnDeinit(const int reason)
  {
   Comment("Сработала ф-ия deinit() при выгрузке");
  }
//--------------------------------------------------------------------

if(Count>2)ExpertRemove() のコメントを外して、この関数で終了 すると、EA アンロード後に 「Deinit() triggered during unloading」という コメントが チャート上に 表示されたままと なります。

このようなEAをコンテキストメニューでチャートから削除すると、OnDeinitの Comment() チャート上に残らない のはなぜか、ご存知の方はいらっしゃいませんか?

 

Shurkin:

コードバリアント
int Err;   //Номер ошибки
int FunErr(int Err) // Функция обработки ошибок
は警告を発する。
Err' の宣言が 51 行目にあるグローバル宣言を隠している。
別のコードのバリエーション
int Err;   //Номер ошибки
int FunErr(Err) // Функция обработки ошибок
がエラーになる。
Err' - 型のない宣言
正しい書き方は?

これは、一般的な言語設計の誤りであり、最高レベルで防御される。二つの事実。

1.MQL4+言語では、ネストされたスコープで変数名を隠すことができます。

2.ネストしたスコープで変数名を隠す場合、警告を表示する必要があり、これを無効にすることはできません。

その答えとして、少なくとも2つの可能性があります。

1. 名前の隠蔽を使うが、警告の存在を我慢する(悪いことに、名前の隠蔽に関する多くの警告のうち、潜在的なエラーを発見し排除するのに役立つ、本当に重要な別の警告を見逃すかもしれません)。

2.言語がそのような機能を備えていても、名前の隠蔽を使用しないでください。例えば、グローバル変数の 名前をErrではなく、gErrとする。

名前の隠蔽を禁止する代わりに、削除不可の警告を導入しています。それを利用する。

 

ロシア語で:正しい選択肢は最初のもので、警告は無視してください。

 
tara:

ロシア語で:正しい選択肢は最初のもので、警告は無視してください。

ありがとうございます。
 
インクルードファイルの機能説明はどこにあるのでしょうか?