MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1792 1...178517861787178817891790179117921793179417951796179717981799...1953 新しいコメント Tretyakov Rostyslav 2021.12.06 09:24 #17911 Alexey Viktorov #:No Makar、こんな感じです。ObjectFind()関数は、メインウィンドウの番号を返します。そして、この数値は0です。一方、0==falseなので、関数が0を返してもfalseを返すということになります。もちろん、この関数が-1、つまりエラーを返した場合、オブジェクトの位置がメインウィンドウにないと考えることができるので、私はこれを使いません。そのうえ、どんな修正が入るかわからない...。 だから、議論しないで、やり方を勉強しないで...。ObjectFind()関数は、メインウィンドウの番号を返しません。オブジェクトが見つかったウィンドウの数(0、1、2...)、またはオブジェクトが存在しない場合は-1を返します。1 "は嘘なのか本当なのか。bool型は 、真偽 値を格納するために使用さ れ、 それぞれ 1 と 0 の数値表現と なる。 Alexey Viktorov 2021.12.06 09:29 #17912 MakarFX #:ObjectFind()関数は、メインウィンドウの番号を返しません。オブジェクトが見つかったウィンドウの数(0,1,2...)、またはオブジェクトがない場合は-1です。 オブジェクトがメインウィンドウにある場合の具体的な話をしました。議論しないで、勉強しないで...。 Alexey Viktorov 2021.12.06 09:30 #17913 MakarFX #:1」は嘘なのか本当なのか、気になりますね。bool型は 真偽 値を格納 するためのものであり、 その数値表現はそれぞれ 1 と 0 である。 falseは0のみ、それ以外はすべてtrue Tretyakov Rostyslav 2021.12.06 09:36 #17914 Alexey Viktorov #:falseは0のみ、それ以外はすべてtrue"-1 " もそうなんですか? すでに確認済み。本当に "0 "だけが偽 Nerd Trader 2021.12.06 09:53 #17915 Alexey Viktorov #:No Makar、こんな感じです。ObjectFind()関数は、メインウィンドウの番号を返します。そして、この数値は0です。一方、0==falseなので、関数が0を返してもfalseを返すということになります。もちろん、この関数が-1、つまりエラーを返した場合、オブジェクトの位置がメインウィンドウにないと考えることができるので、私はこれを使いません。そのうえ、どんな修正が入るかわからない...。 だから、議論もせず、やり方も覚えずに...。 そうすべきではないことは承知していますが、美観のためにそうせざるを得ませんでした(=どの条件でも0は醜く見えます)。そして、メインウィンドウにあるオブジェクトだけが必要なのです。 Tretyakov Rostyslav 2021.12.06 10:05 #17916 Nerd Trader #:やってはいけないことだと分かっているが、美観のためにそうせざるを得なかった(=どの条件でも0は不細工に見える)。そして、メインウィンドウにあるオブジェクトだけが必要なのです。 そして、次のようにします。 if(ObjectFind("Buy Stop") || ObjectFind("not allowed")) オブジェクトがない場合は、"-1"、すなわち真が返されます。 Nerd Trader 2021.12.06 10:19 #17917 オプション==0で再作成。 問題:チャート上でボタンを 押すと、黄色と灰色の線("Stop Sell" と "not allowed")が常に作成され、ちらつく。また、ObjectCreate()は常にfalseではなくtrueを返すので、あたかも別のウィンドウで作成したようになり、それがちらつきを説明できるかもしれません...。しかし、ウィンドウはメインのみで、緑の線(「Buy Stop」)にも、赤い線(「Stop Loss」)にも異常はありません。 。 void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { datetime static dt = 0; double static price = 0; int static window = 0; string static line_name; if(id==CHARTEVENT_OBJECT_CLICK){ ... //Нажатие на SO в зависимоти от расположения панели создаёт линию if(sparam=="Button Stop Order"){ if(panel_position == 1 || panel_position == 2){ line_name = "Buy Stop"; CreateLine(line_name, clrGreen); } if(panel_position == 3 || panel_position == 4){ line_name = "Sell Stop"; CreateLine(line_name, clrYellow); } } //Нажатие на линию удаляет её и создаёт красную if(sparam=="Buy Stop" || sparam=="Sell Stop"){ ObjectDelete(line_name); line_name = "Stop Loss"; CreateLine(line_name, clrRed); } //Нажатие на красной линии удаляет её и отжимает кнопку if(sparam=="Stop Loss"){ ObjectDelete(line_name); button_name = "Button Stop Order"; ms=GetMicrosecondCount(); } } //Если кнопка SO нажата, то линия будет следовать за курсором if(ObjectGetInteger(0,"Button Stop Order",OBJPROP_STATE)){ int x = (int)lparam; int y = (int)dparam; //Переведём координаты X, Y в дату и время if(ChartXYToTimePrice(0,x,y,window,dt,price)){ //Линия меняет цвет с зелёного на желтый if(price < Bid){ if(ObjectFind("Buy Stop") == window || ObjectFind("not allowed") == window){ ObjectDelete(line_name); line_name = "Sell Stop"; CreateLine(line_name, clrYellow); } } //Линия меняет цвет с желтого на зелёный if(price > Ask){ if(ObjectFind("Sell Stop") == window || ObjectFind("not allowed") == window){ ObjectDelete(line_name); line_name = "Buy Stop"; CreateLine(line_name, clrGreen); } } //Линия меняет цвет на серый если в зоне спреда if(price > Bid && price < Ask){ if(ObjectFind("Buy Stop") == window || ObjectFind("Sell Stop") == window){ ObjectDelete(line_name); line_name = "not allowed"; CreateLine(line_name, clrGray); } } //Прикрепляем линию к курсору if(id == CHARTEVENT_MOUSE_MOVE) if(ObjectMove(0,line_name,0,0,price)) ChartRedraw(0); } }else if(ObjectFind(line_name) == window) Print(ObjectDelete(line_name)); //Если нажать Esc то удалится линия и кнопка отожмется if(id == CHARTEVENT_KEYDOWN && lparam == 27){ button_name = "Button Stop Order"; ms=GetMicrosecondCount(); } } //---------------------------------------------------------------------- void CreateLine(const string name, const color clr) { Print(ObjectCreate(0, name, OBJ_HLINE, 0,0,0)); ObjectSetInteger(0, name, OBJPROP_COLOR, clr); ObjectSetInteger(0, name, OBJPROP_STYLE, 3); } Nerd Trader 2021.12.06 10:26 #17918 MakarFX #:そして、次のようにします。オブジェクトがない場合は"-1",すなわち "true "を返します。 試してみたところ、オブジェクト名を変える(反転させる)だけで例外が成立するようです。しかし、この方法では線がまったくできません。 if(ObjectFind("Sell Stop") || ObjectFind("Stop Loss")){ ObjectDelete(line_name); line_name = "Sell Stop"; CreateLine(line_name, clrYellow); } Tretyakov Rostyslav 2021.12.06 10:33 #17919 Nerd Trader #:試してみましたが、オブジェクトの名前だけは変更する必要がありますね。しかし、これでは全く線が出ない。 価格は "0 "ですが、私にもあなたにも使えます。 Nerd Trader 2021.12.06 10:38 #17920 MakarFX #: 私もあなたも作成済みですが、価格だけが「0」になっています。 確かに8個ですが、チャート上では見えません。価格が0であることは重要ではなく、ラインはまだカーソルにしがみついています(それに従う)。 1...178517861787178817891790179117921793179417951796179717981799...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
No Makar、こんな感じです。
ObjectFind()関数は、メインウィンドウの番号を返します。そして、この数値は0です。一方、0==falseなので、関数が0を返してもfalseを返すということになります。もちろん、この関数が-1、つまりエラーを返した場合、オブジェクトの位置がメインウィンドウにないと考えることができるので、私はこれを使いません。そのうえ、どんな修正が入るかわからない...。
だから、議論しないで、やり方を勉強しないで...。
ObjectFind()関数は、メインウィンドウの番号を返しません。オブジェクトが見つかったウィンドウの数(0、1、2...)、またはオブジェクトが存在しない場合は-1を返します。
1 "は嘘なのか本当なのか。
bool型は 、真偽 値を格納するために使用さ れ、 それぞれ 1 と 0 の数値表現と なる。ObjectFind()関数は、メインウィンドウの番号を返しません。オブジェクトが見つかったウィンドウの数(0,1,2...)、またはオブジェクトがない場合は-1です。
オブジェクトがメインウィンドウにある場合の具体的な話をしました。議論しないで、勉強しないで...。
MakarFX #:
1」は嘘なのか本当なのか、気になりますね。
bool型は 真偽 値を格納 するためのものであり、 その数値表現はそれぞれ 1 と 0 である。falseは0のみ、それ以外はすべてtrue
falseは0のみ、それ以外はすべてtrue
No Makar、こんな感じです。
ObjectFind()関数は、メインウィンドウの番号を返します。そして、この数値は0です。一方、0==falseなので、関数が0を返してもfalseを返すということになります。もちろん、この関数が-1、つまりエラーを返した場合、オブジェクトの位置がメインウィンドウにないと考えることができるので、私はこれを使いません。そのうえ、どんな修正が入るかわからない...。
だから、議論もせず、やり方も覚えずに...。
そうすべきではないことは承知していますが、美観のためにそうせざるを得ませんでした(=どの条件でも0は醜く見えます)。そして、メインウィンドウにあるオブジェクトだけが必要なのです。
やってはいけないことだと分かっているが、美観のためにそうせざるを得なかった(=どの条件でも0は不細工に見える)。そして、メインウィンドウにあるオブジェクトだけが必要なのです。
そして、次のようにします。
オブジェクトがない場合は、"-1"、すなわち真が返されます。
問題:チャート上でボタンを 押すと、黄色と灰色の線("Stop Sell" と "not allowed")が常に作成され、ちらつく。また、ObjectCreate()は常にfalseではなくtrueを返すので、あたかも別のウィンドウで作成したようになり、それがちらつきを説明できるかもしれません...。しかし、ウィンドウはメインのみで、緑の線(「Buy Stop」)にも、赤い線(「Stop Loss」)にも異常はありません。
。
そして、次のようにします。
オブジェクトがない場合は"-1",すなわち "true "を返します。
試してみたところ、オブジェクト名を変える(反転させる)だけで例外が成立するようです。しかし、この方法では線がまったくできません。
試してみましたが、オブジェクトの名前だけは変更する必要がありますね。しかし、これでは全く線が出ない。
私もあなたも作成済みですが、価格だけが「0」になっています。