新しいMetaTrader 4クライアントターミナルビルド402 - ページ 6

 
dmmikl86:
これは、ペアによってピップ値が異なるからです...。

利益(pips)表示モードでは、pip値は冗長だと思います。

 
olyakish:

ポイント値は「利益(pips)」表示モードでは冗長だと思うのですが

これもエターナルMTの不具合です )
 

不具合は...。

1) Market Watchから不要な商品を削除し、再度追加すると、面白いことが起こります。

楽器上で右クリックし、"Chart Window "を選択すると、チャートが表示されます。

これで、選択した楽器とは別の楽器のチャートが開きます!!!!

このエラーが発生するためには、先ほど追加したツールから選択する必要があります。(スクリーンショット pic1, pic2, pic3 を参照)

2) 私のスクリーンショットでは、USDCHFの楽器が "Symbols "ウィンドウで選択されていることがわかりますが、実際には "Market Watch "にはありません。(pic4)

もしかしたら、1つ目の不具合は2つ目の不具合の影響かもしれません。Market Watchの商品の番号付けが間違っているのですから。

私はインターネットがとても苦手なので、すべてのスクリーンショットはアーカイブにあります。

以下、リンクhttp://www.sendspace.com/file/tbav73

 
dimonsky:

不具合は...。

1) Market Watchから不要な商品を削除し、再度追加すると、面白いことが起こります。

楽器上で右クリックし、"Chart Window "を選択すると、チャートが表示されます。

これで、選択したツール以外のチャートが開きます!!!!

また、401ビルドの頃にも気づきました。
 

今日(というか昨日)の朝、MT4で奇妙な不具合が発生しました。あるExpert Advisorでチケット番号による注文をOrderSelectが見つけ られませんでした。

EAには、現在の価格の反対側に、BUY_STOPとSELL_STOPという2つの保留注文が 出されています。これらの注文のチケットはt1、t2に格納される。エラーが発生したコードでは、下図のように、これらの保留中の注文の1つが開かれると、2番目の注文が削除され、代わりに番号t3の次の保留中の注文が発注されるようになっています。t1 と t2 が最初に発注されたときにエラーがあった場合、誤発注されたチケットは注文リストにないはずです。これを if (OrderSelect ...) でチェックし、エラーの場合はログにメッセージを書き込んで restart() でシリーズを終了しています。

今日のt1は6:30にオープンしました。注文t2はExpert Advisorによって直ちに削除されました(マーケットからは削除されましたが、履歴には残りました-「キャンセルされました」と表示されました)。その後、t3が配置されました。これらの事象は、MTとEAのログに全て残っています。すると、"OrderSelect(t2, SELECT_BY_TICKET) "のチェックがFALSEを返し、"Unknown order t2 "のエラーでシリーズが異常終了してしまうのです。t2はエラーなく設定・削除され、履歴にも残ったので不思議です。MTの履歴モードは「全履歴」です。どうしてOrderSelectはそれを見つけられないのでしょうか?

コンピュータはスタンドアロンで、取引にのみ使用し、他には何もしません。私以外、誰も触れない。CPU負荷は平均10%。メモリ、ディスク容量などは十分な大きさです。
MT4のバージョンは402です。数ヶ月間、Expert Advisorは、デモ口座において、1つのMTで3つの異なるペア(3つのチャート)に対してリアルタイムで異なるバリエーションで動作しています。今朝まで、この部分のコードに問題はありませんでした。その後、午後から夕方にかけて、同じEAの他のペアでもすべてが順調に進みました。つまり、そのエラーは自由に再現することができないのです。

質問:どうしてこんなことが起こるのでしょうか?MTの不具合なのか、それとも私がコードに考慮しなかったことなのでしょうか?

このコードでは、関数OrderDeleteXとOrderSendXを使用しています。OrderDeleteとOrderSendは、取引スレッドが忙しくないかどうかをチェックし、EAのログに "Deleting order ..." や "Sending order ..." といったイベントを追加する標準のOrderDeleteとOrderSendのラッパーのようなものです。
コードをよりシンプルでわかりやすくするために、価格計算を削除しました。

if (OrderSelect(t1, SELECT_BY_TICKET)) {
  if (OrderType() == OP_BUY) {
    Print("--------------------------------------------------");
    if (t2 > 0) OrderDeleteX(t2);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_SELLSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendSell);
  }   
} else {
  Print("ERROR: Unknown order t1 in step 1");
  restart(3);
}
 

if (OrderSelect(t2, SELECT_BY_TICKET)) {     
  if (OrderType() == OP_SELL) {
    Print("--------------------------------------------------");
    if (t1 > 0) OrderDeleteX(t1);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_BUYSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendBuy);
  }
} else {
  Print("ERROR: Unknown order t2 in step 1");
  restart(4);
}


変数での注文番号。
t2 = 119732180
t3 = 119733656

Лог эксперта:
06:30:43 CheMurom v3.4.real EURUSD,H1: --------------------------------------------------
06:30:43 CheMurom v3.4.real EURUSD,H1: Deleting order #119732180; attempt number: 1
06:30:43 CheMurom v3.4.real EURUSD,H1: delete #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432 ok
06:30:43 CheMurom v3.4.real EURUSD,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.46032, slip=3, sl=1.46932, tp=1.44082; attempt number: 1
06:30:44 CheMurom v3.4.real EURUSD,H1: open #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082 ok
06:30:44 CheMurom v3.4.real EURUSD,H1: ERROR: Unknown t2 in step 1

Лог терминала:
06:30:43 '2871084': delete pending order #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432
06:30:44 '2871084': request was accepted by server
06:30:44 '2871084': request in process
06:30:44 '2871084': pending order #119732180 was deleted
06:30:44 '2871084': pending order sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
06:30:44 '2871084': request was accepted by server
06:30:45 '2871084': request in process
06:30:45 '2871084': order was opened : #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
 

注文が見つからない。DCレポートから、オーダー67930924が開かれていたことがわかる...。

これらは、08.06.11以降の口座履歴にあるクローズドトレードです。

だから、オープントレードでなければならない。下の写真、オープントレードです。

しかし、ここにもない。明日、DCからどのような報告があるのか気になりますが、ソフトウェア開発者のバージョン、どうすればいいのか聞きたいですね。

そしてもうひとつ、どうでもいいことかもしれませんが、私の日付は保存されておらず、それに関する情報もありません。


 
voinG:

注文が見つからない。DCレポートから、オーダー67930924が開かれていたことがわかる...。

これらは、08.06.11から始まる口座履歴のクローズド取引です。この注文はここにないことがわかります。

だから、オープントレードでなければならない。下の写真、オープントレードです。

しかし、ここにもない。明日、DCからどのような報告があるのか気になりますが、ソフトウェア開発者のバージョン、どうすればいいのか聞きたいですね。

そしてもうひとつ、どうでもいいことかもしれませんが、私の日付は保存されておらず、それに関する情報もありません。



ホールストーリーを開くと、このバージョンで表示されます。
 

テーマ「OrderSelectでチケット番号の注文が見つからなかった」の続きとして。

今朝、別のペアの同じExpert Advisorで同じエラーが発生しました。保留中の注文t2=#119899844が正常に発注され、同様に正常に削除された後、保留中の注文t3=#119903758が発注され、その後t2はOrderSelect関数で 見つからなくなりました。

昨日のエラーと今日のエラーの間に、Expert Advisorで前回のメッセージであげたコードが何度かエラーもなく正常に動作し、削除された注文も問題なく見つかりました。

その数ヶ月前から、このExpert AdvisorはバージョンMT4 229で動作していました。このようなことは、これまでにはなかったことです。4日前の週末に、バージョン402に切り替えました。エラーが新しいバージョンに関連しているかどうかはわかりません。というのも、このExpert Advisorが取引されているAlpariが引用のタイムゾーンを変更し、バージョン402だけがこの変更を正しく反映するからです(Alpariはそう主張しています)。

疑問は残ったままである。
履歴は全体が表示され、失われたオーダーはその中に見えるのに、なぜOrderSelectは履歴の中からオーダーを見つけられなかったのでしょうか?これはMTの不具合なのか、それとも私がコードの何かを見逃しているのか?

Лог эксперта:
10:15:33 CheMurom v3.4.real EURCHF,H1: --------------------------------------------------
10:15:33 CheMurom v3.4.real EURCHF,H1: Deleting order #119899844; attempt number: 1
10:15:34 CheMurom v3.4.real EURCHF,H1: delete #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735 ok
10:15:34 CheMurom v3.4.real EURCHF,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.21745, slip=3, sl=1.22845, tp=1.20015; attempt number: 1
10:15:36 CheMurom v3.4.real EURCHF,H1: open #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015 ok
10:15:36 CheMurom v3.4.real EURCHF,H1: ERROR: Unknown t2 in step 1

Лог терминала:
10:15:35 '2871084': delete pending order #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735
10:15:35 '2871084': request was accepted by server
10:15:35 '2871084': request in process
10:15:36 '2871084': pending order #119899844 was deleted
10:15:36 '2871084': pending order sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
10:15:36 '2871084': request was accepted by server
10:15:36 '2871084': request in process
10:15:37 '2871084': order was opened : #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
 
スクリーンショットとともにRenateに問題を説明したところ、399ビルドでは削除されましたが、401と402では再びこの不具合が発生し、399ビルドに戻さなければなりませんでした。
 

Delphi7で書かれたDLLがあります。機能はただ一つ、指定したパスにファイルがあるかどうかをチェックすることです。

以下はそのコードである。

library FileGDV;

uses
  SysUtils,
  Classes;

//{$R *.res}

function FileExists(s:pchar):boolean; StdCall;
begin
   result:=sysutils.fileexists(s);
end;

exports FileExists;

begin
end.

複雑でもなく、特別でもなく、ただひとつの機能。

この関数を使用するExpert Advisorのコードを以下に示します。

if (FileExists(s))
      {
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE|FILE_READ);
         
      }
      else
      {
         Alert("File not found   "+s);         
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE);
         s="Time;;M1;M5;M15;M30;H1;H4;D1\n";
         FileWriteString(handleM,s,StringLen(s));
      } 

そして、以下はヘッダーファイルのコードです。

#import "FileGDV.dll"


bool FileExists(string s);

 
#import


以下は、ヘッダーファイルのコードです。ターミナルにExpert Advisorが1つしかない場合、すべてが時計のように動きます。

ターミナルで2つ 別のウィンドウでこの関数を呼び出すと、数時間おきに両方のEAが動かなくなり、ジャーナルにメッセージが表示されます。

2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: expert stopped
2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: function 'FileExists' call from dll 'FileGDV.dll' critical error
理由: