どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 97 1...90919293949596979899100101102103104...1178 新しいコメント Alekseu Fedotov 2013.08.27 19:41 #961 hoz: double lastOrderCloseTime = -1, // Время закрытия последнего ордера lastOrderOpenTime = -1; // Время открытия последнего ордера 何ですか? 型、intまたはdatetime Viktar Dzemikhau 2013.08.27 21:22 #962 artmedia70: 以前、空のインジケータウィンドウにメッセージを出力する関数を作ったことがあります。表示される線の色を調整することができます。すでにデバッグ済みです。必要であれば、共有することができます。 喜んであなたのコードを拝見しますよ、Artemさん。テストプリントには、便利なオプションではありませんが...。 Viktar Dzemikhau 2013.08.27 22:25 #963 r772ra: double lastOrderCloseTime = -1, // Время закрытия последнего ордера lastOrderOpenTime = -1; // Время открытия последнего ордера それは何ですか? 型、intまたはdatetime ごちゃごちゃ書き直したら、こんな感じになりました。 //+-------------------------------------------------------------------------------------+ //| Получаем состояние последней позиции (Открыта или закрыта) | //+-------------------------------------------------------------------------------------+ datetime GetLastOrderState() { datetime lastOrderCloseTime = -1, // Время закрытия последнего ордера lastOrderOpenTime = -1; // Время открытия последнего ордера for (int i=OrdersTotal()-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS)) continue; if (OrderMagicNumber() != i_magic) continue; if (OrderSymbol() != Symbol()) continue; if (lastOrderOpenTime < OrderOpenTime()) { lastOrderOpenTime = OrderOpenTime(); lastOrderCloseTime = OrderCloseTime(); } } Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime); return (lastOrderCloseTime); } 注文が終了し、最終注文の終了時刻が0にならない 場合でも、なぜか注文が終了する。 いつもコメントでいただいています。 Время закрытия последнего открытого ордера = 0 そのため、この関数が動作しないため、私のコードはさらに動作しないのです。 Artyom Trishkin 2013.08.27 23:08 #964 hoz:そこで、ごちゃごちゃと書き直したところ、こんな感じになりました。注文が終了し、最終注文の終了時刻が0でない 場合でも、なぜか対応するはずです。ずっとコメントで頂けました。そのため、私のコードでは何も動作しません。この関数は私を入れてくれないからです。このEAでは、あなたのコードで保留中の注文を 考慮します。それに応じて、未決済の注文に目を通すことになります。当然ながら、クローズタイムはゼロに戻ります。 クローズした注文を表示したい場合は、クローズした注文の一覧で表示する必要があります。 for (int i=OrdersHistoryTotal()-1; i>=0; i--) и if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; でも...1つは未決済の注文を探すもの、もう1つは決済された注文を探すもので、2つの関数を作成する必要があります。 Viktar Dzemikhau 2013.08.27 23:21 #965 artmedia70:また、保留中の注文も考慮されます。そして、それに従って、オープンオーダーを調べます。当然ながら、クローズタイムはゼロに戻ります。クローズした注文を表示したい場合は、クローズした注文の一覧で表示する必要があります。иでも...1つは未決済の注文を探すもの、もう1つは決済された注文を探すもので、2つの関数を作成する必要があります。 アルチョムさん、ありがとうございます。その通り...次は、コードの最適 化の問題です。コード構成に疑問があるが、それは新鮮な頭で書かなければならないだろう。 Artyom Trishkin 2013.08.28 00:02 #966 hoz: 喜んであなたのコードを拝見しますよ、Artemさん。プリントのテストには、最も便利なバリエーションとは言えませんが...。 この機能をテストするEAを紹介します。関数そのものとその呼び出しが含まれています。呼び出す前に、最大4行のメッセージを用意する必要があります。1行の長さは、私の記憶が正しければ、64文字以内であるべきです。そのため、1つのメッセージを数行に分割しています。1つのメッセージの各行を異なる色で出力することができます。まずメッセージ行を用意し、それから関数を 呼び出すのです。あまりそちらにはコメントしていないのですが......昔、一気に書き上げました。今はもう、何のためにあるのか忘れてしまいました。何か疑問があれば思い出しますが、今は必要なことしか覚えていません。 //+------------------------------------------------------------------+ //| Test iPrint().mq4 | //| Copyright © 2013, Artyom A. Trishkin | //| skype: artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright © 2013, Artyom A. Trishkin" #property link "skype: artmedia70" //+------------------------------------------------------------------+ //| expert variables | //+------------------------------------------------------------------+ int a,b,c; string Exp_Name, Prefix, pref, message1, message2, message3, message4, Mass_Name_Message[10]; //+----------------------------------------------------------------------------+ int init() { Exp_Name=WindowExpertName(); pref="_r"; if (IsDemo()) pref="_d"; if (IsTesting()) pref="_t"; if (IsVisualMode()) pref="_v"; Prefix=Exp_Name+"_"+Symbol()+pref; //---------------------------- return; // Выход из init() } //+----------------------------------------------------------------------------+ int deinit() { if (!IsTesting()) { Comment(""); // -------- Блок удаления всех объектов, построенных на графике -------- string Name_Del[1]; int Quant_Del=0; int Quant_Objects=ObjectsTotal(); int LenPref=StringLen(Prefix); ArrayResize(Name_Del,Quant_Objects); for(int k=0; k<Quant_Objects; k++) { string Obj_Name=ObjectName(k); string Head=StringSubstr(Obj_Name,0,LenPref); if (Head==Prefix) { Quant_Del+=1; Name_Del[Quant_Del-1]=Obj_Name; } } for(int i=0; i<Quant_Del; i++) ObjectDelete(Name_Del[i]); // ----- Конец блока удаления всех объектов, построенных на графике ----- } return; // Выход из deinit() } //+----------------------------------------------------------------------------+ int start() { //------------------------------------------------------- // Подготавливаем первое сообщение message1=StringConcatenate("Первое сообщение из двух строк: Тик: ",GetTickCount()," "); message2=StringConcatenate("Цена Bid: ", DoubleToStr(Bid,Digits)); iPrint(false, message1, message2, "", "", 9, Aqua, DarkOrange); // Выводим первое Sleep(3000); //------------------------------------------------------- // Подготавливаем второе сообщение b=4; c=7; a=b+c; message1=StringConcatenate("Второе сообщение из трёх строк: a=",a," "); message2=StringConcatenate("b=",b," "); message3=StringConcatenate("c=",c); iPrint(false, message1, message2, message3, "", 9, Aqua, LimeGreen, DarkOrange); // Выводим второе Sleep(3000); //------------------------------------------------------- // Подготавливаем третье сообщение message1=StringConcatenate("Третье сообщение из четырёх строк: Время: ", TimeToStr(TimeCurrent())," "); message2=StringConcatenate("Тик: ",GetTickCount()," "); message3=StringConcatenate("Время бара: ",TimeToStr(Time[0])," "); message4=StringConcatenate("Цена Bid: ", DoubleToStr(Bid,Digits)); iPrint(false, message1, message2, message3, message4, 9, Aqua, Aqua, Aqua, DarkOrange);// Выводим третье Sleep(3000); //------------------------------------------------------- return(0); } //+----------------------------------------------------------------------------+ // Если bool print = true или нет окна индикатора, то функция будет выводить сообщения в журнал void iPrint(bool print, string mess1, string mess2="", string mess3="", string mess4="", int sz=9, color cl1=Aqua, color cl2=Aqua, color cl3=Aqua, color cl4=Aqua) { string NameGrafText, message, nm; int i, y, k, LenStr, shift, Win_Num=-1, num=0; color cl; if (mess1=="") { Print("Func iPrint: Передана пустая строка, выходим"); return; } Win_Num=WindowFind("Win_Inform"); if (print || 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]=""; } else if (i+num<=k) { // Сдвигаем и перекрашиваем старые сообщения Mass_Name_Message[i+num]=Mass_Name_Message[i]; y=ObjectGet(NameGrafText, OBJPROP_YDISTANCE); // координата Y ObjectSet (NameGrafText, OBJPROP_YDISTANCE, y+(sz+1)*num); // координата Y ObjectSet (NameGrafText, OBJPROP_COLOR, DimGray); // цвет } } } shift=num; int v=GetTickCount(); for (i=0; i<num; i++) { shift--; NameGrafText=Prefix+"_Graf_Text_"+i+"_"+Symbol()+"_"+v; // Уникальное имя объекта int app=0; while (ObjectFind(NameGrafText)==Win_Num) { app++; NameGrafText=Prefix+"_Graf_Text_"+i+"_"+Symbol()+"_"+v+"_"+app; } Mass_Name_Message[num-1-i]=NameGrafText; switch (i) { case 0: message=mess1; cl=cl1; break; case 1: message=mess2; cl=cl2; break; case 2: message=mess3; cl=cl3; break; case 3: message=mess4; cl=cl4; break; default:message=mess1; cl=cl1; 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(); } //--------------------------------- nm=Prefix+"_Balance_txt"; message="Баланс :"; cl=Yellow; SetText(message, cl, nm, 2, 4, 20, "Arial", 9, Win_Num); nm=Prefix+"_Balance"; message=DoubleToStr(AccountBalance(),2); cl=DarkTurquoise; SetText(message, cl, nm, 2, 70, 20, "Arial", 9, Win_Num); //--------------------------------- nm=Prefix+"_Equity_txt"; message="Средства :"; cl=Yellow; SetText(message, cl, nm, 2, 4, 8, "Arial", 9, Win_Num); nm=Prefix+"_Equity"; message=DoubleToStr(AccountEquity(),2); cl=DarkTurquoise; SetText(message, cl, nm, 2, 70, 8, "Arial", 9, Win_Num); //--------------------------------- } //+----------------------------------------------------------------------------+ void SetText(string Text, color cl, string nm, int angle, int x, int y, string font, int sz=0, int wnd=0) { if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, wnd, 0, 0); ObjectSet(nm, OBJPROP_CORNER , angle); ObjectSet(nm, OBJPROP_XDISTANCE, x); ObjectSet(nm, OBJPROP_YDISTANCE, y); ObjectSet(nm, OBJPROP_WIDTH , sz); ObjectSetText(nm, Text, sz, font, cl); } //+----------------------------------------------------------------------------+ そして七面鳥。 //+------------------------------------------------------------------+ //| Win_Inform.mq4 | //| Copyright © 2012, Artyom Trishkin | //| skype: artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright © 2012, Artyom Trishkin" #property link "skype: artmedia70" #property indicator_separate_window int start() { } //+------------------------------------------------------------------+ そういうことなんだ...。ぜひとも解明してほしい。 もちろん、メインチャートに出力するのではなく、アンダーレイを作ればいいのですが、私は面倒でできません...。:) [Deleted] 2013.08.28 03:06 #967 artmedia70: この機能をテストするEAを紹介します。関数そのものとその呼び出しが含まれています。呼び出す前に、最大4行のメッセージを用意する必要があります。1行の長さは、私の記憶が正しければ、64文字以内であるべきです。そのため、1つのメッセージを数行に分割しています。1つのメッセージの各行を異なる色で出力することができます。まずメッセージ行を用意し、それから関数を呼び出すのです。あまりそちらにはコメントしていないのですが......昔、一気に書き上げました。今はもう、何のためにあるのか忘れてしまいました。何か疑問があれば思い出しますが、今は必要なことしか覚えていません。 そして七面鳥。 そういうことなんだ...。ぜひとも解明してほしい。 もちろん、メインチャートに出力するのではなく、アンダーレイを作ればいいのですが、私は面倒でできません...。:) [Deleted] 2013.08.28 03:15 #968 良い人たちだ!EAを書きました。実運用ではすべて正常に動作しているようです。でも、テスターで確認すると......不具合が出るんです。その要旨は次の通りである。Expert Advisorは、チャート上に引かれた水平 線で注文を開始する必要があります。テスターでは、何もないのに、あたかもたくさんの線が設定されているかのように、常にいろいろなレベルで開いています何が問題なのか説明してください。 行を担当するコードの一部。 int New_gorizont() { int tip_o_buy。 int tip_o_sell; int obj_total=ObjectsTotal(); // 新しい行がない場合は終了する if(obj_total==0) を返します。 // if(obj_total=ObjectsTotal(), return; // もしあれば・・・。 if(obj_total!=0)とする。 文字列名=ObjectName(0)。 double pr=NormalizeDouble(ObjectGet(name,1),Digits); ObjectDelete(name); // 削除して再度設定する if(pr>Bid+(Stop_level+1)*Point) // 注文の種類を決定する。 { tip_o_sell=OP_SELLLIMIT。 tip_o_buy=OP_BUYSTOP。 } if(pr<ビッド-(ストップ・レベル+1)*ポイント) { tip_o_sell=OP_SELLSTOP。 tip_o_buy=OP_BUYLIMIT。 } // オーダーを設定する OrderSend(Symb,tip_o_sell,Value,pr,3,pr+StopLoss*Point,pr-TakeProfit*Point, "Order set")を実行。 Prov_oshibok()です。 } つまり、obj_total==0とすれば、それで終わりです。しかし、それはなぜかすべてを無限大に設定し、セットする。 Any rookie question, so [ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 削除済み 2013.08.28 04:24 #969 皆さん、こんにちは。保留中の注文が トリガーされたことがログに表示されないのは正常でしょうか?テスターで発生します。このアカウントは本物です。 Alexander 2013.08.28 05:29 #970 Dozol: 良い人たちだ!EAを書きました。実運用ではすべて正常に動作しているようです。でも、テスターで確認すると不具合が出るんです。 私はそれを信じていません、このEAは実際のサイトでもテスターでも動作しません。 1...90919293949596979899100101102103104...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
型、intまたはdatetime
以前、空のインジケータウィンドウにメッセージを出力する関数を作ったことがあります。表示される線の色を調整することができます。すでにデバッグ済みです。必要であれば、共有することができます。
喜んであなたのコードを拝見しますよ、Artemさん。テストプリントには、便利なオプションではありませんが...。
r772ra:
それは何ですか?
型、intまたはdatetime
ごちゃごちゃ書き直したら、こんな感じになりました。
注文が終了し、最終注文の終了時刻が0にならない 場合でも、なぜか注文が終了する。
いつもコメントでいただいています。
Время закрытия последнего открытого ордера = 0そのため、この関数が動作しないため、私のコードはさらに動作しないのです。
そこで、ごちゃごちゃと書き直したところ、こんな感じになりました。
注文が終了し、最終注文の終了時刻が0でない 場合でも、なぜか対応するはずです。
ずっとコメントで頂けました。
そのため、私のコードでは何も動作しません。この関数は私を入れてくれないからです。
このEAでは、あなたのコードで保留中の注文を 考慮します。それに応じて、未決済の注文に目を通すことになります。当然ながら、クローズタイムはゼロに戻ります。
クローズした注文を表示したい場合は、クローズした注文の一覧で表示する必要があります。
и
でも...1つは未決済の注文を探すもの、もう1つは決済された注文を探すもので、2つの関数を作成する必要があります。
また、保留中の注文も考慮されます。そして、それに従って、オープンオーダーを調べます。当然ながら、クローズタイムはゼロに戻ります。
クローズした注文を表示したい場合は、クローズした注文の一覧で表示する必要があります。
и
でも...1つは未決済の注文を探すもの、もう1つは決済された注文を探すもので、2つの関数を作成する必要があります。
アルチョムさん、ありがとうございます。その通り...次は、コードの最適 化の問題です。コード構成に疑問があるが、それは新鮮な頭で書かなければならないだろう。
喜んであなたのコードを拝見しますよ、Artemさん。プリントのテストには、最も便利なバリエーションとは言えませんが...。
この機能をテストするEAを紹介します。関数そのものとその呼び出しが含まれています。呼び出す前に、最大4行のメッセージを用意する必要があります。1行の長さは、私の記憶が正しければ、64文字以内であるべきです。そのため、1つのメッセージを数行に分割しています。1つのメッセージの各行を異なる色で出力することができます。まずメッセージ行を用意し、それから関数を 呼び出すのです。あまりそちらにはコメントしていないのですが......昔、一気に書き上げました。今はもう、何のためにあるのか忘れてしまいました。何か疑問があれば思い出しますが、今は必要なことしか覚えていません。
そして七面鳥。
そういうことなんだ...。ぜひとも解明してほしい。
もちろん、メインチャートに出力するのではなく、アンダーレイを作ればいいのですが、私は面倒でできません...。:)
この機能をテストするEAを紹介します。関数そのものとその呼び出しが含まれています。呼び出す前に、最大4行のメッセージを用意する必要があります。1行の長さは、私の記憶が正しければ、64文字以内であるべきです。そのため、1つのメッセージを数行に分割しています。1つのメッセージの各行を異なる色で出力することができます。まずメッセージ行を用意し、それから関数を呼び出すのです。あまりそちらにはコメントしていないのですが......昔、一気に書き上げました。今はもう、何のためにあるのか忘れてしまいました。何か疑問があれば思い出しますが、今は必要なことしか覚えていません。
そして七面鳥。
そういうことなんだ...。ぜひとも解明してほしい。
もちろん、メインチャートに出力するのではなく、アンダーレイを作ればいいのですが、私は面倒でできません...。:)
良い人たちだ!EAを書きました。実運用ではすべて正常に動作しているようです。でも、テスターで確認すると......不具合が出るんです。その要旨は次の通りである。Expert Advisorは、チャート上に引かれた水平 線で注文を開始する必要があります。テスターでは、何もないのに、あたかもたくさんの線が設定されているかのように、常にいろいろなレベルで開いています何が問題なのか説明してください。
行を担当するコードの一部。
int New_gorizont()
{
int tip_o_buy。
int tip_o_sell;
int obj_total=ObjectsTotal();
// 新しい行がない場合は終了する
if(obj_total==0)
を返します。
// if(obj_total=ObjectsTotal(), return; // もしあれば・・・。
if(obj_total!=0)とする。
文字列名=ObjectName(0)。
double pr=NormalizeDouble(ObjectGet(name,1),Digits);
ObjectDelete(name); // 削除して再度設定する
if(pr>Bid+(Stop_level+1)*Point) // 注文の種類を決定する。
{
tip_o_sell=OP_SELLLIMIT。
tip_o_buy=OP_BUYSTOP。
}
if(pr<ビッド-(ストップ・レベル+1)*ポイント)
{
tip_o_sell=OP_SELLSTOP。
tip_o_buy=OP_BUYLIMIT。
}
// オーダーを設定する
OrderSend(Symb,tip_o_sell,Value,pr,3,pr+StopLoss*Point,pr-TakeProfit*Point, "Order set")を実行。
Prov_oshibok()です。
}
つまり、obj_total==0とすれば、それで終わりです。しかし、それはなぜかすべてを無限大に設定し、セットする。
良い人たちだ!EAを書きました。実運用ではすべて正常に動作しているようです。でも、テスターで確認すると不具合が出るんです。
私はそれを信じていません、このEAは実際のサイトでもテスターでも動作しません。