エラー、バグ、質問 - ページ 949

 
Renat:
端末やリソースに対する考え方がおかしい。

取引端末は、膨大な量のデータを効率的に処理することが主な仕事であるため、リソースを節約するタスクはない。さらに、VPSのメモリがギガバイトで足りず、数字計算機のコピーが4つあっても文句は言えません。

これは問題ではなく、Win2003x64サーバー(VPS)とWin7x64 Homeで挙動が異なるということです。

http://file.karelia.ru/6v55j5/ リンク先の動画によると、端末を起動する際に、OSがこのプロセスに対して表示しているよりもはるかに多くの割り当てメモリを消費しているそうです。

 
olyakish:

これは問題ではなく、Win2003x64サーバー(VPS)とWin7x64 Homeで動作が異なるということです。

http://file.karelia.ru/6v55j5/ リンク先のビデオによると、端末を起動する際に、OSがこのプロセスに対して表示しているよりもはるかに多くの割り当てメモリを消費しているそうです。

ああ、なんとすべてが動いているのだろう。

説明が長すぎるし、端末とは関係ない。忘れてVPSにケチるな。

 
Renat:

ああ、なんていうか、メチャクチャですね。

説明が長すぎるし、端末とは関係ない。忘れてVPSにケチるな。

そうでもないかもしれませんね。

例えば、端末がサードパーティーのサービスを拾ってきて、端末本体よりも多く食ってしまうということがあります。そして、私のノートパソコンでは、起動時に初期化されるだけです。

となると、なぜ端末の 初回実行 時と同じようにメモリが消費されるのでしょうか。サービスは一度だけ実行すればよいのです。(ただし、このサービスがターミナルのコピーごとにスレッドを実行できるかどうかは議論の余地があります)

OK、別の方法で聞きます、サーバーがVPN上の2008であればこのような効果はありません、説明が長くなってしまいましたが。

 
olyakish:

そうでもないかもしれませんね。

例えば、端末がサードパーティーのサービスを拾ってきて、端末本体よりも多く食ってしまうということがあります。私のノートパソコンでは、起動時に初期化されるだけです。

の場合、なぜターミナルの 最初の実行と 同じようなメモリ消費量なのか - サービスは一度だけ実行すればよいのです。(ただし、端末のコピーごとにスレッドを起動できるサービスかどうかは疑問です)

OK別の方法で聞きますが、サーバーがppsの2008であれば、説明が長くなってもその効果はないでしょう。

VPS (Win XP)でMT4ターミナルに約200MBを消費しています。
 
端末でキャッシュスワップを使用することを許可(設定でチェックを入れる)してはどうでしょうか。ユーザーが選択可能な速度/メモリロードのトレードオフが存在することになります。
 

...簡単な操作のように見えますが、正しい整数値(pips単位)が得られないのです。以下は、そのスクリプトのコードです。

void OnStart() {
//---
   double max_price = NormalizeDouble(ChartGetDouble(0, CHART_PRICE_MAX), _Digits);
   double min_price = NormalizeDouble(ChartGetDouble(0, CHART_PRICE_MIN), _Digits);
   
   double entry_price, stop_price, profit_price;
   entry_price = NormalizeDouble((max_price+min_price)/2, _Digits);
   stop_price = NormalizeDouble(entry_price-(entry_price-min_price)/2, _Digits);
   profit_price = NormalizeDouble(max_price-(max_price-entry_price)/2, _Digits);
   
   int stop_pips = int((entry_price - stop_price)/_Point);
   int profit_pips = int((profit_price - entry_price)/_Point);
   
   Print("Entry: ", entry_price, ", Stop: ", stop_price, ", Profit: ", profit_price,
         ", Stop pips: ", stop_pips, ", Profit pips: ", profit_pips);
//---   
}

以下は、その走行結果である。

2013.03.29 16:42:03 Experiment_Script (EURUSD,H4) エントリー: 1.29445, ストップ: 1.28453, 利益: 1.30438, Stop pips: 991, Profit pips: 993
2013.03.29 16:41:57 Experiment_Script (GBPUSD,H4) エントリー: 1.50465, ストップ: 1.49348, 利益: 1.51583, Stop pips: 1117, Profit pips: 1117

992と993(EURUSDの場合)、1117と1118(GBPUSDの場合)である必要があります。正しい結果を得るための方法を教えてください。

 
Rone:

...

2だけ でなく、2. 0で割ってみてください。

整数演算の結果は整数であり、その結果がdoubleで書かれていても影響はない。

 
muallch: 端末でキャッシュスワップを使用することを許可(設定でチェックを入れる)してはどうでしょうか。ユーザーが選択可能な速度/メモリ負荷の妥協点が存在することになる。
そのような質問は、サービスデスクに直接するのがよいでしょう。そうしないと、迷子になってしまうのです。
 
fyords: 2だけ でなく、2. 0で割ってみてください。

いや、そういう問題じゃないんです。割り切れるのはダブル です。

この問題は、これらの線が原因である可能性が高いです。

   int stop_pips = int((entry_price - stop_price)/_Point);
   int profit_pips = int((profit_price - entry_price)/_Point);
ローン
丸めずに「(entry_price - stop_price)/_Point」の値を出力してみてください。
 

このようなことに遭遇したことのある方がいらっしゃいましたら、アドバイスをお願いします。

コードがあります。

//+------------------------------------------------------------------+
double date[];
//+------------------------------------------------------------------+
void OnInit()
{
   ArrayResize(date,3);
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   Print("ArraySize(date)=",ArraySize(date));
}
//+------------------------------------------------------------------+
ターミナルでリアルタイムに動作します。
DH      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
LN      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
DG      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
しかし、テスターでは同じコードで異なる結果が得られます。
MN      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0
OG      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0
IM      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0