//ResetLastError();//if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("Чё-та не закрылася позиция. Фигня вот такая происходит: "+GetLastError());
//+------------------------------------------------------------------+// Если bool print = true или нет окна индикатора, то функция будет выводить сообщения в журналvoid iPrint(string mess1, int sz=9, color color1=clrDarkGray,
string mess2="", color color2=clrDarkGray,
string mess3="", color color3=clrDarkGray,
string mess4="", color color4=clrDarkGray,
bool draws=true) {
string NameGrafText, message, nm;
int i, y, k, shift, Win_Num=-1, num=0;
color cl;
Win_Num=WindowFind("Win_Inform");
if (mess1=="") {
//Print("Func iPrint: Передана пустая строка, выходим");return;
}
if (!draws || Win_Num<0) {
message=mess1+mess2+mess3+mess4;
Print(message);
return;
}
k=ArraySize(Mass_Name_Message)-1;
if (StringLen(mess1)>0) num++;
if (StringLen(mess2)>0) num++;
if (StringLen(mess3)>0) num++;
if (StringLen(mess4)>0) num++;
// Смещение и перекрашивание старых сообщений for (i=k; i>=0; i--) {
NameGrafText=Mass_Name_Message[i];
if (StringLen(NameGrafText)>0) {
if (ObjectFind(NameGrafText)==Win_Num) {
if (i+num>k) { // Удаляем самую верхнюю строчкуObjectDelete(NameGrafText);
Mass_Name_Message[i]="";
}
elseif (i+num<=k) { // Сдвигаем и перекрашиваем старые сообщения
Mass_Name_Message[i+num]=Mass_Name_Message[i];
y=(int)ObjectGet(NameGrafText, OBJPROP_YDISTANCE); // старая координата Y
ObjectSet (NameGrafText, OBJPROP_YDISTANCE, y+(sz+1)*num); // новая координата Y
ObjectSet (NameGrafText, OBJPROP_COLOR, clrDimGray); // новый цвет
}
}
}
}
// Вывод новых сообщений
shift=num;
uint v=GetTickCount();
for (i=0; i<num; i++) {
shift--;
NameGrafText=Prefix+"_GT_"+IntegerToString(i)+"_"+IntegerToString(v); // Уникальное имя объектаint app=0;
while (ObjectFind(NameGrafText)==Win_Num) { // Если всё-таки такой объект есть
app++;
NameGrafText=Prefix+"_GT_"+IntegerToString(i)+"_"+IntegerToString(v)+"_"+IntegerToString(app); // добавим к его имени "хвостик"
}
Mass_Name_Message[num-1-i]=NameGrafText;
switch (i) {
case0: message=mess1; cl=color1; break;
case1: message=mess2; cl=color2; break;
case2: message=mess3; cl=color3; break;
case3: message=mess4; cl=color4; break;
default:message=mess1; cl=color1; break;
}
ObjectCreate (NameGrafText, OBJ_LABEL, Win_Num, 0, 0);
ObjectSetText(NameGrafText, message, sz, "Courier New", cl);
ObjectSet (NameGrafText, OBJPROP_COLOR, cl); // цвет
ObjectSet (NameGrafText, OBJPROP_CORNER, 2); // угол
ObjectSet (NameGrafText, OBJPROP_XDISTANCE, 150); // координата Х
ObjectSet (NameGrafText, OBJPROP_YDISTANCE, 2+(sz+1)*shift); // координата Y
WindowRedraw();
}
}
//+------------------------------------------------------------------+
単色メッセージの使用例として(異なる単語を1行で4色にすることができます)。
if(get.BarOpenLastPos(sy,PERIOD_H4,OP_SELL,mn)!=0) {
string mess1="На D1 вниз, на H4 ниже SAR, M15 сигнал. Продаём";
iPrint(mess1,9,clrBlue);
trade.OpenS(sy,lots,mn,0.0,0.0,co);
}
こんにちは!時々、ifle演算子が効かないことがあるのですが、どうしてか教えてください。
以下はその例です。
Where:
H3はレベルの価格値
priceは現在の価格
結果は、価格がこのレベルに達する(時にはそこで止まる)のですが、Alertは発動しません。
エラーが何なのか教えてください。
おはようございます。
プログラムはこのようになっています。
コンパイルすると出ます。
オゼロ。mq4'オゼロ。mq4 1 1
OrderClose の戻り値を確認する必要があります。
数値」から「文字列」への暗黙の変換 Ozero.mq4 49 117
エラー0件、警告2件1 3
結果」タブには、注文の開始と終了が表示されます。
1 2014.08.25 00:00 購入 1 0.10 1.6550 0.0000 0.0000 0.00 10000.00
2 2014.08.25 06:30 close 1 0.10 1.6562 0.0000 0.0000 0.12 10000.12
3 2014.08.25 06:31購入 2 0.10 1.6564 0.0000 0.0000 0.00 10000.12
4 2014.08.25 10:00 close 2 0.10 1.6574 0.0000 0.0000 0.10 10000.22
5 2014.08.25 10:00購入 3 0.10 1.6576 0.0000 0.0000 0.00 10000.22
6 2014.08.25 12:58 close 3 0.10 1.6586 0.0000 0.0000 0.10 10000.32
7 2014.08.25 12:58購入 4 0.10 1.6590 0.0000 0.0000 0.00 10000.32
8 2014.08.26 13:13 ストップ4でクローズ 0.10 1.6576 0.0000 0.0000 -0.14 10000.18
8 - テスターを閉じて作業を中断した。
次に「ジャーナル」を見てみます。
2014.10.31 07:46:44.837 GBPUSD,M15: 4453ティックイベント(5608バー、340128バーステート)を312876ms以内に処理(合計時間324436ms)。
2014.10.31 07:46:44.837 2014.08.26 13:13 テスター:注文番号4は終了しました。
2014.10.31 07:46:44.798 2014.08.26 13:13ビジュアルテスターが 停止しました。
2014.10.31 07:43:15.315 2014.08.25 12:58 オゼロ GBPUSD,M15: ORDER OPEN 4
2014.10.31 07:43:15.315 2014.08.25 12:58 Ozero GBPUSD,M15: オープン #4 買い 0.10 GBPUSD at 1.6590 ok
2014.10.31 07:43:15.315 2014.08.25 12:58 Ozero GBPUSD,M15: 開く #4 buy 0.10 GBPUSD at 1.6590 ok。
2014.10.31 07:43:15.245 2014.08.25 12:58 Ozero GBPUSD,M15: 閉じていないような気がするのですが。さあ、どうぞ:4108
2014.10.31 07:43:15.245 2014.08.25 12:58 オゼロ GBPUSD,M15: OrderClose error 4108
2014.10.31 07:43:15.245 2014.08.25 12:58 Ozero GBPUSD,M15: OrderClose関数のチケット3が不明です。
2014.10.31 07:43:15.245 2014.08.25 12:58 Ozero GBPUSD,M15: Close #3 GBPUSD 0.10 buy at 1.6576 at price 1.6586.
2014.10.31 07:42:51.123 2014.08.25 10:00 オゼロ GBPUSD,M15: HOLD OPEN #3
2014.10.31 07:42:51.123 2014.08.25 10:00 オゼロ GBPUSD,M15: オープン #3 買い 0.10 GBPUSD at 1.6576 ok
2014.10.31 07:42:51.123 2014.08.25 10:00 オゼロ GBPUSD,M15: オープン #1 ポジション
2014.10.31 07:42:51.059 2014.08.25 10:00 オゼロ GBPUSD,M15:どうしたんだ?さあ、どうぞ:4108
2014.10.31 07:42:51.059 2014.08.25 10:00 オゼロ GBPUSD,M15: OrderClose error 4108
2014.10.31 07:42:51.059 2014.08.25 10:00 Ozero GBPUSD,M15: OrderClose 関数の不明チケット 2枚
2014.10.31 07:42:51.059 2014.08.25 10:00 Ozero GBPUSD,M15: Close #2 GBPUSD 0.10 buy at 1.6564 at price 1.6574.
2014.10.31 07:42:31.473 2014.08.25 06:31 オゼロ GBPUSD,M15: HOLD OPEN 2
2014.10.31 07:42:31.473 2014.08.25 06:31 Ozero GBPUSD,M15: 開く #2 買 0.10 GBPUSD at 1.6564 ok。
2014.10.31 07:42:31.473 2014.08.25 06:31 オゼロ GBPUSD,M15:最初のポジションを開く
2014.10.31 07:42:31.331 2014.08.25 06:30 オゼロ GBPUSD,M15:どうしたんだ?さあ、どうぞ:4108
2014.10.31 07:42:31.331 2014.08.25 06:30 オゼロ GBPUSD,M15: OrderClose error 4108
2014.10.31 07:42:31.331 2014.08.25 06:30 Ozero GBPUSD,M15: OrderClose 関数の不明チケット1枚
2014.10.31 07:42:31.331 2014.08.25 06:30 Ozero GBPUSD,M15: Close #1 GBPUSD 0.10 buy at 1.6550 at price 1.6562.
2014.10.31 07:41:31.966 2014.08.25 00:00 オゼロ GBPUSD,M15: ORDER OPEN 1
2014.10.31 07:41:31.966 2014.08.25 00:00 オゼロ GBPUSD,M15: オープン #1 買い 0.10 GBPUSD at 1.6550 ok
2014.10.31 07:41:31.966 2014.08.25 00:00 オゼロ GBPUSD,M15: オープン #1 買い 0.10 GBPUSD at 1.6550 ok
2014.10.31 07:41:31.958 オゼロ入力:gLot=0.1; gPoint=0.001。
今、私はまったく途方に暮れています。一方では、チャートと結果で見ることができるように、注文は閉じられています。他方では、ログに見られるように、コードはエラーで実行されています: ((((((((((( ;゚Д゚)))))))
オゼロ。
同じ注文を2回決済しようとしている。一番上のものを外す。
おはようございます。
2行を削除しました。すべてがうまくいく。そして、グラフにも、結果にも、ログにも、すべてが正しく表示されるのです。
質問:コンパイル時に出る
'オゼロ'です。mq4'オゼロ。mq4 1 1
OrderCloseの戻り値を確認する必要があります。
エラー0件、警告1件1 2
コンパイラーは何について警告していますか?46行目はOrderClose(OrderTicket(),OrderLots(),_Bid,15)です。
オゼロ。
今日発生した不具合は何が原因なのか、皆さん教えてください。
このEAには、金曜日のマーケットクローズ15分前に取引を停止するオプションがあります。
新しい日が表示されたら、EAはそれが金曜日であるかどうかをチェックし、今日はStringToTime("23:59")-15*60で取引を停止します。
テスターでは正常に動作していますが、実際の取引では、金曜日が来るとExpert Advisorが最初のティックで取引を停止してしまうという、全く異なる状況が見られます。
Expert Advisorの日記からプリントを紹介します。
ブローカー1号、デモ
0 05:59:47.731 Scalper GBPAUDpt,M1: Finish In Friday = 2014.10.23 23:44:00
ブローカー2、リアル。
0 03:00:11.999 Scalper EURUSD,M1: Finish In Friday = 2014.10.23 23:44:00
つまり、1ティック目に今日の日足バー(10月24日(金))が表示されると、EA
は、"23:59 "という行を、今日の日を代入するのではなく、昨日の時間に変換します。
しかし、金曜日の日中にExpert Advisorを再起動すると、完了時刻を正しく判断することができます。
この問題の原因がわかりました。https://forum.mql4.com/33023。
予想通り、実質的にはStringToTime 関数のバグである。症状はすべて似ています。この関数は、"23:59 "という文字列を、ローカルPCの日付で日付時刻に変換しますが、MT4の日付には変換しません。そしてテスターでは、ご存知のようにローカルPCの日付をエミュレートして端末の時刻と等しくしています。そのため、テスターではすべて正常に動作するのに、デモ・リアルタイムでは不具合や損失が発生するのです。ドキュメントにはもちろん、日付がどこから来ているのか書かれていませんし、上のリンクではこの問題は4年前に報告されていますが、どうやらmethaquotesは気にしていないようです。
もうひとつ質問です。という理解でいいのでしょうか。
1. 注文番号は "0 "から始まります。
2.このコードは、私が手動で開くかプログラムで開くかにかかわらず、絶対にすべての注文を閉じるのですか?つまり、この部分が閉じられないオーダーを見つけることはできないのでしょうか?
オゼロ。
画面上でテキストをスクロールさせることをやったことのある人はいますか?例えば、「○○という注文を開けた/閉じた/変更した」等。ニュースです。?
差し支えなければ、コードの一部をお見せください。
ありがとうございます。
下の方が良い。順番は事前に決めておく必要があります。
こっちの方がいいんです。
画面上でテキストをスクロールさせることをやったことのある人はいますか?例えば、「○○という注文を開けた/閉じた/変更した」等。ニュースです。?
差し支えなければ、コードの一部をお見せください。
センズ!
空のインジケーターウィンドウで 縦スクロールをして いました。これがその機能です。
単色メッセージの使用例として(異なる単語を1行で4色にすることができます)。
チャート上にWin_Informという名前の空のインジケータがあるはずです。