mql5言語の特徴、微妙なニュアンスとテクニック - ページ 168

 
Slava:

メモリリークに関するメッセージが表示された場合、そのメモリを解放する明示的な命令がなかったことを意味します。

プログラムが終了するとき(このメッセージが表示されるとき)には、リークしたメモリも含めて、とにかくすべてのメモリを解放してしまうのです。

リークという言葉はゆるく使いすぎたかもしれません。要は、オブジェクトを削除すると名前すら分からなくなるリソースがメモリ上にぶら下がったままになっているのだ。また、名前がわかっても、そのリソースを作成したプログラム以外では削除することができません。


現在では、VPS上のTerminalを(必ずしも計画的でなく)サスペンドし、スクリプト実行後に削除されないリソースですべてのメモリをいっぱいにするMarket用スクリプトを非常に簡単に書くことができます。

 

取引サーバーによっては、一度に複数の種類の口座を保有することができます。例えば、ECNやスタンダードなど。この場合、シンボルは接頭辞を持たない、つまり同じ名前になる可能性がある。

この場合、バーヒストリー(チャート上のビッド/アスク/ラストの現在値を含む)およびティックヒストリーは、常に1つの口座タイプにのみ対応します。

そして、Market Watchのデータは、接続されているものに対応する。


このため、Market Watchとチャート、ティック履歴の整合性が全く取れていないことが容易に観察される。

 

戦闘顧問が立っているところのチャート記号を誤って(手で)変えてしまうことに何度か遭遇しました。

記号の変更に対する保護。

int OnInit()
{
  static const string Symb = _Symbol;  
  const bool Res = (_Symbol != Symb);
  
  if (Res)
    Alert("Symbol is change!");
  
  return(Res); // Защита от смены символа.
}
 
EAを起動する際、価格履歴を取得する時刻を決める必要がある場合が多い。毎回手入力する手間を省くために、このような方法をとりました。
#define  WEEK (7 * 24 * 3600)
input datetime temp = __DATE__ - WEEK;

従って、編集の1週間前にネタを取っています。便利なんです。

 
fxsaber:
EAを起動する際、価格履歴を取得する時刻を決める必要がある場合が多い。毎回手入力する手間を省くために、このような方法をとりました。

従って、編集の1週間前にネタを取っています。便利です。

なぜオプティマイザーに頼りすぎる必要があるのか?その方がいいんです。

#define WEEK 604800

 

緊急割り込み機能、正常に動作しているようです

#define  EXIT (STD_CExit(__LINE__,__FUNCTION__)).Exit

class STD_CExit{
   string function;
   int line;
public:
   STD_CExit(int _line,string _func):line(_line),function(_func){}
   void Exit(string reason=NULL);
};
//--------------------------------------------------------------------------
void STD_CExit::Exit(string reason=NULL){
   Alert(StringFormat("Abort in line %i, function %s.\nReason: %s.",line,function,reason==NULL||reason==""?"Unknow":reason));
   int a=0;
   int b=1/a;}

void OnStart()
{
   Test();
}

void Test(){
   EXIT("Some reason");
}
 
Vladimir Simakov:

緊急割り込み機能、うまくいっているようです。

it's the right thing to do - I was happy to see it happen... We solved this problem with@Victhttps://www.mql5.com/ru/forum/318246/page10#comment_12651569

が、これ。

- NotExit http://www.delphibasics.ru/Exit.php

- notAbort http://www.delphibasics.ru/Abort.php

it'sHalt http://www.delphibasics.ru/Halt.php

UPD:このようなスクリプトは非常に必要です

void OnTick()
{
   if(!getData()) EXIT("No data");
}
bool getData()
{
   return(false);
}
 
Igor Makanu:

が必要なのです。私はそれが実現できて嬉しかったです。

が、これ。

- NotExit http://www.delphibasics.ru/Exit.php

- notAbort http://www.delphibasics.ru/Abort.php

it'sHalt http://www.delphibasics.ru/Halt.php

UPD:このようなスクリプトは非常に必要です

まだうまくいくわけがない((
 
Vladimir Simakov:
こちらはまだうまくいっていません(((^^;)

必要なのか?

もし、開発者がexit/abortを標準装備していれば、例えば、TFの準備ができていない場合、データ処理を正しく終了させることが可能です - OHLCデータ、サーバーに送信する注文 処理にも有効でしょう...OnTick()の終了にreturn()を使わずに、任意の場所でコードを中断して次のtickの前に終了できると便利なのですが...。

 
Igor Makanu:

必要なのか?

もし、開発者がexit/abortを標準装備していれば、例えば、TFの準備ができていない場合、データ処理を正しく終了させることができます - OHLCデータ、サーバーへの注文送信処理にも有効でしょう...。OnTick()の終了にreturn()を使わずに、任意の場所でコードを中断して次のtickの前に終了できると便利なのですが...。

まあ、まだ無理か...。

理由: