エラー、バグ、質問 - ページ 2737 1...273027312732273327342735273627372738273927402741274227432744...3185 新しいコメント 削除済み 2020.05.12 12:10 #27361 MT4で、インジケーターのデバッグ 中に、チャートに切り替えるとデバッガーが永久にハングする。 標準CCIインジケーターのデバッグ開始時などに再現します。 1.ブレークポイントを設定します。 2.F5キーを押す。 3.グラフに切り替えます。 結果 - デバッガグラフがハングアップする。 また、デバッグ中にF5キーを数回押すだけで、チャートがハングアップします。 1260を構築。 デバッガの設定。 Vladimir Karputov 2020.05.12 16:32 #27362 このトピックに関連しないコメントは、「MQL4 MT4 MetaTrader 4初心者からの質問」に移動しました。 fxsaber 2020.05.12 17:15 #27363 検索結果では、本文の一部が削除されます。 以下はその原文です。 トレーディング、自動売買システム、ストラテジーテスターに関するフォーラム MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案 fxsaber, 2020.05.11 20:31 TesterがHeader.pass_passed== 0となるopt-fileを作成することは、おそらく意味がないでしょう。 Sergey Dzyublik 2020.05.12 17:32 #27364 グラフィカルなオブジェクトで作業することは ほとんどありませんが、OBJ_LABLEの背景に色をつける(OBJPROP_BGCOLORを設定する)必要性が出てきました。 結果的に、OBJ_LABLEタイプのオブジェクトでは背景色の設定ができないため、OBJ_EDITを使用する必要があります。 OBJ_EDITを使用する場合、新しい問題が発生しました。すべてのテキストが対応するオブジェクトの寸法に収まるように、OBJPROP_XSIZEとOBJPROP_YSIZEのサイズを設定する必要があるのです。 質問:テキスト全体にフィットするOBJPROP_XSIZEとOBJPROP_YSIZEのサイズを決定する方法は? 私は2つの選択肢を考えました。 1.OBJ_LABLEオブジェクトの作成、寸法の読み込み、OBJ_LABLEオブジェクトの削除。 寸法記入はオブジェクトが実際に作成された後でなければできず、オブジェクトがChartRedrawのキューにあるときにはできないため、適さない。 2.TextSetFontの後にTextGetSizeを使用する。 1の方法とは結果が根本的に異なり、フォントの大きさによって2.5倍から2.9倍の差があるため、適さない。 おそらく原因は、4Kモニターと175%のDPIだと思います。 #define PRINT(x) ; Print(#x, ":", string(x)) void SetLabel(long achart, string name, int wnd, string text, color clr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma") { ObjectCreate(achart, name, OBJ_LABEL, wnd, 0, 0); ObjectSetInteger(achart, name, OBJPROP_CORNER, corn); ObjectSetString(achart, name, OBJPROP_TEXT, text); ObjectSetInteger(achart, name, OBJPROP_COLOR, clr); ObjectSetInteger(achart, name, OBJPROP_FONTSIZE, fontsize); ObjectSetString(achart, name, OBJPROP_FONT, font); ObjectSetInteger(achart, name, OBJPROP_SELECTABLE, false); ObjectSetInteger(achart, name, OBJPROP_BORDER_TYPE, 0); ObjectSetInteger(achart, name, OBJPROP_XDISTANCE, x); ObjectSetInteger(achart, name, OBJPROP_YDISTANCE, y); } void OnStart(){ string obj_name = "test_obj"; string text = "AAAA::BBBB"; int font_size = 7; string font_name = "Tahoma"; SetLabel(0, obj_name, 0, text, clrWhite, 100, 100, 0, font_size, font_name); ChartRedraw(0); Sleep(1000); uint dx_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_XSIZE)); uint dy_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_YSIZE)); ObjectDelete(0, obj_name); PRINT(dx_fixed_0); PRINT(dy_fixed_0); uint dx_fixed_1; uint dy_fixed_1; TextSetFont(font_name, -10 * font_size); TextGetSize(text, dx_fixed_1, dy_fixed_1); PRINT(1.0 * dx_fixed_0 / dx_fixed_1); // Result: 1.0 PRINT(1.0 * dy_fixed_0 / dy_fixed_1); // Result: 1.0 } 解決して くれたGeessに 感謝します。TextSetFontに 渡すときは、シャッフルのサイズを-10倍する必要があります。 削除済み 2020.05.12 22:33 #27365 Sergey Dzyublik: 私はグラフィカルなオブジェクトを扱う ことはほとんどありませんが、OBJ_LABLEの背景色を塗る必要があります(OBJPROP_BGCOLORを設定します)。 結果的に、OBJ_LABLEタイプのオブジェクトでは背景色の設定ができないため、OBJ_EDITを使用する必要があります。 OBJ_EDITを使用する場合、新しい問題が発生しました。すべてのテキストが対応するオブジェクトの寸法に収まるように、OBJPROP_XSIZEとOBJPROP_YSIZEのサイズを設定する必要があるのです。 質問:テキスト全体にフィットするOBJPROP_XSIZEとOBJPROP_YSIZEのサイズを決定する方法は? 私は2つの選択肢を考えました。 1.OBJ_LABLEオブジェクトの作成、寸法の読み込み、OBJ_LABLEオブジェクトの削除。 寸法記入はオブジェクトが実際に作成された後でなければできず、オブジェクトがChartRedrawのキューにあるときにはできないため、適さない。 2.TextSetFontの後にTextGetSizeを使用する。 1の方法とは結果が根本的に異なり、フォントの大きさによって2.5倍から2.9倍の差があるため、適さない。 おそらく原因は、4Kモニターと175%のDPIだと思います。 まず、文字の大きさとオブジェクトの大きさは同じではありません。最低でも国境は必要です。したがって、これらの価値観が一致することはありえないのです。 次に、制限のないOBJ_BITMAP_LABELを使用するのがよいでしょう。 また、使用する場合は、CCanvasクラスを使用した方がよいでしょう。 #include <Canvas\Canvas.mqh> void SetLabel(CCanvas &c, long achart, string name, int wnd, string text, color clr_text, color clr_bckgrnd, int x, int y, int corn=0, int fontsize=8, int border=2, string font="Tahoma", uchar transparency=0xFF) { uint w,h; c.FontSet(font, fontsize); c.TextSize(text, w, h); if(!c.CreateBitmapLabel(achart,wnd,name,x,y,w+border*2,h+border*2,COLOR_FORMAT_ARGB_NORMALIZE)) Print("Error creating canvas object: ", GetLastError()); c.Erase(ColorToARGB(clr_bckgrnd,transparency)); c.TextOut(border,border,text,ColorToARGB(clr_text,transparency)); c.Update(); } void OnStart(){ string obj_name = "test_obj"; string text = "AAAA::BBBB"; int font_size = 17; string font_name = "Tahoma"; CCanvas Can; SetLabel(Can,0, obj_name, 0, text, clrYellow, clrBlue, 100, 100, 0, font_size,3, font_name, 0x80); Sleep(10000); Can.Destroy(); } その結果、同じオブジェクトでありながら、より多くの可能性を持つようになりました。例えば、テキストラベルに透明度を持たせるなど。 Sergey Dzyublik 2020.05.13 00:36 #27366 Geess: まず、文字の大きさとオブジェクトの大きさは同じではありません。最低限、国境は必要です。だから、この価値観が一致することはありえないのです。 どうもありがとうございました。 既成のソリューションを自分のニーズに合わせているわけですから、ライブラリを実装する必要性は感じませんね。 当初ご提案いただいた解決策は、次のように表すことができます。 void SetBitmapLabel(long achart, string name, int wnd, string text, color clr, color bgclr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma", int border=2) { uint w,h; TextSetFont(font,-10* fontsize,0,0); TextGetSize(text,w,h); w = w+border*2; h = h+border*2; uint pixels[]; ArrayResize(pixels,w*h); ArrayInitialize(pixels,0); ENUM_COLOR_FORMAT color_format = COLOR_FORMAT_XRGB_NOALPHA; string resource_name="::"+name+(string)ChartID()+(string)(GetTickCount()+MathRand()); ResourceCreate(resource_name,pixels,w,h,0,0,0,color_format); ObjectCreate(achart,name,OBJ_BITMAP_LABEL,wnd,0,0); ObjectSetInteger(achart,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(achart,name,OBJPROP_YDISTANCE,y); ObjectSetString(achart,name,OBJPROP_BMPFILE,resource_name); ArrayInitialize(pixels,ColorToARGB(bgclr)); TextOut(text,border,border,0,pixels,w,h,ColorToARGB(clr),color_format); ResourceCreate(resource_name,pixels,w,h,0,0,0,color_format); } void SetLabel(long achart, string name, int wnd, string text, color clr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma") { ObjectCreate(achart, name, OBJ_LABEL, wnd, 0, 0); ObjectSetInteger(achart, name, OBJPROP_CORNER, corn); ObjectSetString(achart, name, OBJPROP_TEXT, text); ObjectSetInteger(achart, name, OBJPROP_COLOR, clr); ObjectSetInteger(achart, name, OBJPROP_FONTSIZE, fontsize); ObjectSetString(achart, name, OBJPROP_FONT, font); ObjectSetInteger(achart, name, OBJPROP_SELECTABLE, false); ObjectSetInteger(achart, name, OBJPROP_BORDER_TYPE, 0); ObjectSetInteger(achart, name, OBJPROP_XDISTANCE, x); ObjectSetInteger(achart, name, OBJPROP_YDISTANCE, y); } void OnStart(){ string obj_name = "test_obj"; string text = "AAAA::BBBB"; int font_size = 50; string font_name = "Tahoma"; SetBitmapLabel(0, "BL" + obj_name, 0, text, clrRed, clrWhite, 100, 100, 0, font_size, font_name); SetLabel (0, "L" + obj_name, 0, text, clrRed, 100, 200, 0, font_size, font_name); ChartRedraw(0); Sleep(10000); } 残念ながら、MT 5の不具合により、提案したソリューションは正常に使用することができません。 WindowsのDPI175%の4Kモニターでは、文字サイズが必要な大きさの3倍になってしまうことが判明。 フォントサイズに DPI / 100% * [1.6 ... 1.8]を掛ける必要があるのです。 Geess さん、解決 策をありがとうござい ました。TextSetFontに渡すときは、フォントサイズに-10を掛ける必要が あります。 削除済み 2020.05.13 01:43 #27367 Sergey Dzyublik: どうもありがとうございました。 既成のソリューションを自分のニーズに合わせているわけですから、ライブラリを実装する必要性は感じませんね。 当初ご提案いただいた解決策は、次のように表すことができます。 残念ながら、MT5の不具合により、提案したソリューションは正常に使用することができません。 WindowsのDPI175%の4Kモニターでは、文字サイズが必要な大きさの3倍になってしまうことが判明。フォントサイズに DPI / 100% * [1.6 ... 1.8]を掛ける必要があるのです。 https://www.mql5.com/ru/docs/objects/textsetfont というようにしなければならない。 void SetBitmapLabel(long achart, string name, int wnd, string text, color clr, color bgclr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma", int border=2, uchar transparency=0xFF) { uint w,h; TextSetFont(font,-10*fontsize,0,0); TextGetSize(text,w,h); w = w+border*2; h = h+border*2; uint pixels[]; ArrayResize(pixels,w*h); ArrayInitialize(pixels,0); ENUM_COLOR_FORMAT color_format = COLOR_FORMAT_ARGB_NORMALIZE; string resource_name="::"+name+(string)ChartID()+(string)(GetTickCount()+MathRand()); ResourceCreate(resource_name,pixels,w,h,0,0,0,color_format); ObjectCreate(achart,name,OBJ_BITMAP_LABEL,wnd,0,0); ObjectSetInteger(achart,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(achart,name,OBJPROP_YDISTANCE,y); ObjectSetString(achart,name,OBJPROP_BMPFILE,resource_name); ObjectSetInteger(achart,name,OBJPROP_BACK,false); ArrayInitialize(pixels,ColorToARGB(bgclr, transparency)); TextOut(text,border,border,0,pixels,w,h,ColorToARGB(clr, transparency),color_format); ResourceCreate(resource_name,pixels,w,h,0,0,0,color_format); } void SetLabel(long achart, string name, int wnd, string text, color clr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma") { ObjectCreate(achart, name, OBJ_LABEL, wnd, 0, 0); ObjectSetInteger(achart, name, OBJPROP_CORNER, corn); ObjectSetString(achart, name, OBJPROP_TEXT, text); ObjectSetInteger(achart, name, OBJPROP_COLOR, clr); ObjectSetInteger(achart, name, OBJPROP_FONTSIZE, fontsize); ObjectSetString(achart, name, OBJPROP_FONT, font); ObjectSetInteger(achart, name, OBJPROP_SELECTABLE, false); ObjectSetInteger(achart, name, OBJPROP_BORDER_TYPE, 0); ObjectSetInteger(achart, name, OBJPROP_XDISTANCE, x); ObjectSetInteger(achart, name, OBJPROP_YDISTANCE, y); } void OnStart(){ string obj_name = "test_obj"; string text = "AAAA::BBBB"; int font_size = 50; string font_name = "Tahoma"; SetBitmapLabel(0, "BL" + obj_name, 0, text, clrRed, clrBlue, 100, 100, 0, font_size, font_name,2,0xA0); SetLabel (0, "L" + obj_name, 0, text, clrBlue, 100, 200, 0, font_size, font_name); ChartRedraw(0); Sleep(10000); } なぜ、そんなにOBJ_LABELが必要なのか理解できないのですが?OBJ_BITMAP_LABELでライブラリなしのVariantを実装しました。そのメリットは何でしょうか?限界しか見えません。 Sergey Dzyublik 2020.05.13 02:17 #27368 ターゲット Geess: https://www.mql5.com/ru/docs/objects/textsetfont なぜ、そんなにOBJ_LABELが必要なのか理解できないのですが?OBJ_BITMAP_LABELでライブラリなしのVariantを実装しました。そのメリットは何でしょうか?限界しか見えません。 今回もありがとうございました。 知らなかった、見なかった、読まなかった、-10 の掛け算について。問題解決 OBJ_LABELは、問題を説明し、再現できるようにするために使用されました。 削除済み 2020.05.13 07:07 #27369 こんにちは。何が問題なのか、教えてください。 正しく動作し、更新されている別の指標は、メインウィンドウに表示されている価格チャートに基づいていない、別の何かを表示するようになります。 毎日ではなく、たまに起こることです。 最初はインジケーターのせいにしていましたが、MT5 ネイティブのものも含め、いろいろ試しているうちに、ターミナルが怪しくなってきました。昨年から、異なるバージョンの端末で、長い間この問題を観察しています。最初はアルパリ・カスタム版で、今はオリジナル版で同じ現象が起きています。デモ口座 とリアル口座の 両方で。 アルパリ・ブローカー2020.03.13よりMT5 ビルド2363。他の期間では覚えていませんが、M1では 間違いなく起こります。 スクリーンショット "Slipped "バリアント。ジグザグを除き、すべてのインジケータを内蔵しています。歴史と共にある正しい仕事とのジグザグ。指標の読みは、それ自体で収束している。 価格と対応していない。 アップデート後 MT5版 ファイル: xb0_200507_01.png 92 kb ux0_200507_01k.png 94 kb 63p_200507_01_MT5.png 33 kb shev1404 2020.05.13 10:16 #27370 午後 訳の分からないものに出会ってしまい、それが何なのか分からない。 戦略によって使い分ける2つの機能があります。論理的には、以下のようなチェックのコードになります。 if(m_position.PositionType()==POSITION_TYPE_SELL && m_position.Magic()==magic) 一つでも条件が悪いと実行されないはずです。しかし、なぜか関数に渡されたマジックナンバーとマジックナンバーがnot EQUALの場合に実行されます。 整数型比較のようです。その理由がわからない。下のスクリーンショットでご覧いただけます。 void OpenNextBuyPositionBySignal(CTrade &m_trade,long magic,double ExtDP,double iuv,double imv,int itp,int isl,double etp,double esl,double ev,double &rev,string numstr,ulong &last_pt) { for(int i=PositionsTotal()-1;i>=0;i--) if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties if(m_position.Symbol()==m_symbol.Name()) { if(m_position.PositionType()==POSITION_TYPE_SELL && m_position.Magic()==magic) { if((m_position.Profit()+m_position.Swap()+m_position.Commission())<0) { if(IsSetBuy(magic,ExtDP)==true) { double cdist=MathFloor(MathAbs((m_position.PriceOpen()-m_position.PriceCurrent())/ExtDP)); Print("#1122 cdist ",numstr,": ",cdist); Print("#2211! m_position.PriceOpen(): ",m_position.PriceOpen()); Print("#2212! m_position.PriceCurrent(): ",m_position.PriceCurrent()); Print("#2213! ExtDP: ",ExtDP); Print("#2214! magic: ",magic); Print("#2215! ev: ",ev); Print("#2216! iuv: ",iuv); Print("#2217! m_position.Volume(): ",m_position.Volume()); Print("#2218! m_position.Magic(): ",m_position.Magic()); if(NormalizeDouble(m_position.Volume()+iuv*cdist,2)<=imv) ev=NormalizeDouble(m_position.Volume()+iuv*cdist,2); if(NormalizeDouble(m_position.Volume()+iuv*cdist,2)>imv) ev=NormalizeDouble(imv,2); rev=ev; double sl=0.0; double tp=0.0; if(itp>0) tp=m_symbol.Ask()+etp; if(isl>0) sl=m_symbol.Bid()-esl; //m_trade.SetExpertMagicNumber(magic); if(OpenBuy(m_trade,ev,sl,tp,numstr)) { last_pt=POSITION_TYPE_BUY; FileWrite(filehandle,numstr+", ",TimeCurrent(),", ",GetLastPositionsType(magic),", ",GetPositionTicket(magic,POSITION_TYPE_BUY)); Print("#516! Position BUY after down SELL "+numstr); //Sleep(3000); continue; } } } } if(m_position.PositionType()==POSITION_TYPE_BUY && m_position.Magic()==magic) { if((m_position.Profit()+m_position.Swap()+m_position.Commission())<0) { if(IsSetBuy(magic,ExtDP)==true) { double cdist=MathFloor(MathAbs((m_position.PriceOpen()-m_position.PriceCurrent())/ExtDP)); Print("#1123 cdist ", numstr," : ",cdist); Print("#3211! m_position.PriceOpen(): ",m_position.PriceOpen()); Print("#3212! m_position.PriceCurrent(): ",m_position.PriceCurrent()); Print("#3213! ExtDP: ",ExtDP); Print("#3214! magic: ",magic); Print("#3215! ev: ",ev); Print("#3216! iuv: ",iuv); Print("#3217! m_position.Volume(): ",m_position.Volume()); Print("#3218! m_position.Magic(): ",m_position.Magic()); if(NormalizeDouble(m_position.Volume()+iuv*cdist,2)<=imv) ev=NormalizeDouble(m_position.Volume()+iuv*cdist,2); if(NormalizeDouble(m_position.Volume()+iuv*cdist,2)>imv) ev=NormalizeDouble(imv,2); rev=ev; double sl=0.0; double tp=0.0; if(itp>0) tp=m_symbol.Ask()+etp; if(isl>0) sl=m_symbol.Bid()-esl; //m_trade.SetExpertMagicNumber(magic); if(OpenBuy(m_trade,ev,sl,tp,numstr)) { last_pt=POSITION_TYPE_BUY; FileWrite(filehandle,numstr+", ",TimeCurrent(),", ",GetLastPositionsType(magic),", ",GetPositionTicket(magic,POSITION_TYPE_BUY)); Print("#517! Position BUY After down BUY "+numstr); //Sleep(3000); continue; } } } } } } void OpenNextSellPositionBySignal(CTrade &m_trade,long magic,double ExtDP,double iuv,double imv,int itp,int isl,double etp,double esl,double ev,double &rev,string numstr,ulong &last_pt) { for(int i=PositionsTotal()-1;i>=0;i--) if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties if(m_position.Symbol()==m_symbol.Name()) { if(m_position.PositionType()==POSITION_TYPE_BUY && m_position.Magic()==magic) { if((m_position.Profit()+m_position.Swap()+m_position.Commission())<0) { if(IsSetSell(magic,ExtDP)==true) { double cdist=MathFloor(MathAbs((m_position.PriceCurrent()-m_position.PriceOpen())/ExtDP)); Print("#1124 cdist ", numstr," : ",cdist); Print("#4211! m_position.PriceOpen(): ",m_position.PriceOpen()); Print("#4212! m_position.PriceCurrent(): ",m_position.PriceCurrent()); Print("#4213! ExtDP: ",ExtDP); Print("#4214! magic: ",magic); Print("#4215! ev: ",ev); Print("#4216! iuv: ",iuv); Print("#4217! m_position.Volume(): ",m_position.Volume()); Print("#4218! m_position.Magic(): ",m_position.Magic()); if(NormalizeDouble(m_position.Volume()+iuv*cdist,2)<=imv) ev=NormalizeDouble(m_position.Volume()+iuv*cdist,2); if(NormalizeDouble(m_position.Volume()+iuv*cdist,2)>imv) ev=NormalizeDouble(imv,2); rev=ev; double sl=0.0; double tp=0.0; if(itp>0) tp=m_symbol.Bid()-etp; if(isl>0) sl=m_symbol.Ask()+esl; //m_trade.SetExpertMagicNumber(magic); if(OpenSell(m_trade,ev,sl,tp,numstr)) { last_pt=POSITION_TYPE_SELL; FileWrite(filehandle,numstr+", ",TimeCurrent(),", ",GetLastPositionsType(magic),", ",GetPositionTicket(magic,POSITION_TYPE_SELL)); Print("#518! Position SELL After down BUY "+numstr); //Sleep(3000); continue; } } } } if(m_position.PositionType()==POSITION_TYPE_SELL && m_position.Magic()==magic) { if((m_position.Profit()+m_position.Swap()+m_position.Commission())<0) { if(IsSetSell(magic,ExtDP)==true) { double cdist=MathFloor(MathAbs((m_position.PriceCurrent()-m_position.PriceOpen())/ExtDP)); Print("#1125 cdist ", numstr," : ",cdist); Print("#5211! m_position.PriceOpen(): ",m_position.PriceOpen()); Print("#5212! m_position.PriceCurrent(): ",m_position.PriceCurrent()); Print("#5213! ExtDP: ",ExtDP); Print("#5214! magic: ",magic); Print("#5215! ev: ",ev); Print("#5216! iuv: ",iuv); Print("#5217! m_position.Volume(): ",m_position.Volume()); Print("#5218! m_position.Magic(): ",m_position.Magic()); if(NormalizeDouble(m_position.Volume()+iuv*cdist,2)<=imv) ev=NormalizeDouble(m_position.Volume()+iuv*cdist,2); if(NormalizeDouble(m_position.Volume()+iuv*cdist,2)>imv) ev=NormalizeDouble(imv,2); rev=ev; double sl=0.0; double tp=0.0; if(itp>0) tp=m_symbol.Bid()-etp; if(isl>0) sl=m_symbol.Ask()+esl; //m_trade.SetExpertMagicNumber(magic); if(OpenSell(m_trade,ev,sl,tp,numstr)) { last_pt=POSITION_TYPE_SELL; FileWrite(filehandle,numstr+", ",TimeCurrent(),", ",GetLastPositionsType(magic),", ",GetPositionTicket(magic,POSITION_TYPE_SELL)); Print("#519! Position SELL After down SELL "+numstr); //Sleep(3000); continue; } } } } } } Заранее спасибо за ответ. 1...273027312732273327342735273627372738273927402741274227432744...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
MT4で、インジケーターのデバッグ 中に、チャートに切り替えるとデバッガーが永久にハングする。
標準CCIインジケーターのデバッグ開始時などに再現します。
1.ブレークポイントを設定します。
2.F5キーを押す。
3.グラフに切り替えます。
結果 - デバッガグラフがハングアップする。
また、デバッグ中にF5キーを数回押すだけで、チャートがハングアップします。
1260を構築。
デバッガの設定。
検索結果では、本文の一部が削除されます。
以下はその原文です。
トレーディング、自動売買システム、ストラテジーテスターに関するフォーラム
MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案
fxsaber, 2020.05.11 20:31
TesterがHeader.pass_passed== 0となるopt-fileを作成することは、おそらく意味がないでしょう。結果的に、OBJ_LABLEタイプのオブジェクトでは背景色の設定ができないため、OBJ_EDITを使用する必要があります。
OBJ_EDITを使用する場合、新しい問題が発生しました。すべてのテキストが対応するオブジェクトの寸法に収まるように、OBJPROP_XSIZEとOBJPROP_YSIZEのサイズを設定する必要があるのです。
質問:テキスト全体にフィットするOBJPROP_XSIZEとOBJPROP_YSIZEのサイズを決定する方法は?
私は2つの選択肢を考えました。
1.OBJ_LABLEオブジェクトの作成、寸法の読み込み、OBJ_LABLEオブジェクトの削除。
寸法記入はオブジェクトが実際に作成された後でなければできず、オブジェクトがChartRedrawのキューにあるときにはできないため、適さない。
2.TextSetFontの後にTextGetSizeを使用する。
1の方法とは結果が根本的に異なり、フォントの大きさによって2.5倍から2.9倍の差があるため、適さない。
おそらく原因は、4Kモニターと175%のDPIだと思います。
解決して くれたGeessに 感謝します。
TextSetFontに 渡すときは、シャッフルのサイズを-10倍する必要があります。
私はグラフィカルなオブジェクトを扱う ことはほとんどありませんが、OBJ_LABLEの背景色を塗る必要があります(OBJPROP_BGCOLORを設定します)。
結果的に、OBJ_LABLEタイプのオブジェクトでは背景色の設定ができないため、OBJ_EDITを使用する必要があります。
OBJ_EDITを使用する場合、新しい問題が発生しました。すべてのテキストが対応するオブジェクトの寸法に収まるように、OBJPROP_XSIZEとOBJPROP_YSIZEのサイズを設定する必要があるのです。
質問:テキスト全体にフィットするOBJPROP_XSIZEとOBJPROP_YSIZEのサイズを決定する方法は?
私は2つの選択肢を考えました。
1.OBJ_LABLEオブジェクトの作成、寸法の読み込み、OBJ_LABLEオブジェクトの削除。
寸法記入はオブジェクトが実際に作成された後でなければできず、オブジェクトがChartRedrawのキューにあるときにはできないため、適さない。
2.TextSetFontの後にTextGetSizeを使用する。
1の方法とは結果が根本的に異なり、フォントの大きさによって2.5倍から2.9倍の差があるため、適さない。
おそらく原因は、4Kモニターと175%のDPIだと思います。
まず、文字の大きさとオブジェクトの大きさは同じではありません。最低でも国境は必要です。したがって、これらの価値観が一致することはありえないのです。
次に、制限のないOBJ_BITMAP_LABELを使用するのがよいでしょう。
また、使用する場合は、CCanvasクラスを使用した方がよいでしょう。
その結果、同じオブジェクトでありながら、より多くの可能性を持つようになりました。例えば、テキストラベルに透明度を持たせるなど。
まず、文字の大きさとオブジェクトの大きさは同じではありません。最低限、国境は必要です。だから、この価値観が一致することはありえないのです。
どうもありがとうございました。
既成のソリューションを自分のニーズに合わせているわけですから、ライブラリを実装する必要性は感じませんね。
当初ご提案いただいた解決策は、次のように表すことができます。
残念ながら、MT 5の不具合により、提案したソリューションは正常に使用することができません。
WindowsのDPI175%の4Kモニターでは、文字サイズが必要な大きさの3倍になってしまうことが判明。
フォントサイズに DPI / 100% * [1.6 ... 1.8]を掛ける必要があるのです。
Geess さん、解決 策をありがとうござい ました。
TextSetFontに渡すときは、フォントサイズに-10を掛ける必要が あります。
どうもありがとうございました。
既成のソリューションを自分のニーズに合わせているわけですから、ライブラリを実装する必要性は感じませんね。
当初ご提案いただいた解決策は、次のように表すことができます。
残念ながら、MT5の不具合により、提案したソリューションは正常に使用することができません。
WindowsのDPI175%の4Kモニターでは、文字サイズが必要な大きさの3倍になってしまうことが判明。
フォントサイズに DPI / 100% * [1.6 ... 1.8]を掛ける必要があるのです。
https://www.mql5.com/ru/docs/objects/textsetfont
というようにしなければならない。
なぜ、そんなにOBJ_LABELが必要なのか理解できないのですが?OBJ_BITMAP_LABELでライブラリなしのVariantを実装しました。そのメリットは何でしょうか?限界しか見えません。
https://www.mql5.com/ru/docs/objects/textsetfont
なぜ、そんなにOBJ_LABELが必要なのか理解できないのですが?OBJ_BITMAP_LABELでライブラリなしのVariantを実装しました。そのメリットは何でしょうか?限界しか見えません。
今回もありがとうございました。
知らなかった、見なかった、読まなかった、-10 の掛け算について。問題解決
OBJ_LABELは、問題を説明し、再現できるようにするために使用されました。
何が問題なのか、教えてください。
正しく動作し、更新されている別の指標は、メインウィンドウに表示されている価格チャートに基づいていない、別の何かを表示するようになります。 毎日ではなく、たまに起こることです。
最初はインジケーターのせいにしていましたが、MT5 ネイティブのものも含め、いろいろ試しているうちに、ターミナルが怪しくなってきました。昨年から、異なるバージョンの端末で、長い間この問題を観察しています。最初はアルパリ・カスタム版で、今はオリジナル版で同じ現象が起きています。デモ口座 とリアル口座の 両方で。
アルパリ・ブローカー2020.03.13よりMT5 ビルド2363。他の期間では覚えていませんが、M1では 間違いなく起こります。
スクリーンショット
"Slipped "バリアント。ジグザグを除き、すべてのインジケータを内蔵しています。歴史と共にある正しい仕事とのジグザグ。指標の読みは、それ自体で収束している。 価格と対応していない。
アップデート後
MT5版
午後
訳の分からないものに出会ってしまい、それが何なのか分からない。
戦略によって使い分ける2つの機能があります。論理的には、以下のようなチェックのコードになります。
一つでも条件が悪いと実行されないはずです。しかし、なぜか関数に渡されたマジックナンバーとマジックナンバーがnot EQUALの場合に実行されます。
整数型比較のようです。その理由がわからない。下のスクリーンショットでご覧いただけます。