专家顾问 - 杂项问题 - 页 9 12345678910111213141516...43 新评论 Max Enrik 2016.12.13 05:04 #81 下面的代码看起来工作得不错,而且已经试过bool 'stoploss_use&takeprofit_use',但有一次 没有正常工作,然后我怀疑这段代码,请让我了解一下。(如果有必要的话--我可以把所有测试EA的代码贴出来。)void OnChartEvent(const int id , const long& lparam , const double& dparam , const string& sparam ){ // Sell if ( sparam == sellbutton ) { ObjectSetInteger( 0, sparam, OBJPROP_STATE, false ); // stoploss if ( stoploss_use == true ) { sl = Bid + points_to_change( stoploss );} // takeprofit if ( takeprofit_use == true ) { tp = Bid - points_to_change( takeprofit );} if ( !OrderSend( Symbol(), OP_SELL, lot, Bid, slippage, sl, tp, NULL, magic, 0, CLR_NONE ) ) Print( " | OrderSend SELL: ", GetLastError() ); return; } // Buy if ( sparam == buybutton ) { ObjectSetInteger( 0, sparam, OBJPROP_STATE, false ); // stoploss if ( stoploss_use == true ) { sl = Ask - points_to_change( stoploss ); } // takeprofit if ( takeprofit_use == true ) { tp = Ask + points_to_change( takeprofit ); } if ( !OrderSend( Symbol(), OP_BUY, lot, Ask, slippage, sl, tp, NULL, magic, 0, CLR_NONE ) ) Print( " | OrderSend SELL: ", GetLastError() ); return; }}所以,如果你说是的, 上述代码运行良好。那么我需要问的是,上述代码的组合是最佳的吗? 所以,我只是想得到最佳的代码组合,也就是代码应该完美地工作。请帮助我,或给我好的建议。 祝您一切顺利。 expert advisor - miscellaneous [存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. [Archive!] Any rookie question, Marco vd Heijden 2016.12.13 08:13 #82 当它失败时,你会得到一个错误,你可以在文档中查找错误代码。有时订单发送失败是因为滑点或偏离报价,所以它不一定是一个编码问题。如果你把你的止损放在离市场价格太近的地方,这将是一个编码问题。我也会为订单编写单独的函数,并在你的onchart事件中简单地调用这些函数。但结果应该是一样的。 Max Enrik 2016.12.13 08:38 #83 Marco vd Heijden:我也会写单独的函数来排序,并在你的onchart事件中简单地调用这些函数。 不错的评论,我已经开始把它们分开了,谢谢你。 Max Enrik 2016.12.13 13:17 #84 下面的代码组合好吗,请问?// Sellif ( sparam == sellbutton ){ ObjectSetInteger( 0, sparam, OBJPROP_STATE, false ); ordersellfnc(); return;}void ordersellfnc(){ if ( stoploss_use == true ) { sl = Bid + points_to_change( stoploss ); } if ( takeprofit_use == true ) { tp = Bid - points_to_change( takeprofit ); } if ( !OrderSend( Symbol(), OP_SELL, lot, Ask, slippage, sl, tp, NULL, magic, 0, clrRed ) ) Print( " | OrderSend SELL: ", GetLastError() ); return;}预先感谢。 expert advisor - miscellaneous My script does not 初学者的问题 MQL4 MT4 MetaTrader Marco vd Heijden 2016.12.13 15:48 #85 如果函数 失败,Ordersend会返回票号或-1。 Max Enrik 2016.12.14 02:16 #86 Marco vd Heijden: 如果函数 失败,Ordersend返回票号或-1。 哦,我不知道为什么我不能理解只是你的最新评论,那是问题吗?如果是的话,我该如何解决? Max Enrik 2016.12.14 16:01 #87 #Checkmark - 打开我可以使用下面的代码来设定 "默认止损 "值,这对我来说很有用。 但我已经花了几个小时来处理'Checkmark'使用'On/Off',但不幸的是没有好结果。我有'位图标签'对象,当我单独 使用它时,效果很好,但当我试图这样使用它时。如果它是 "开","止损 "可以应用,如果 "关","止损 "就不能应用。当我开始写这个函数的代码时,我以为我可以在短短几分钟内写完它。但不幸的是,它已经花了几个小时,请帮助我,那是在占用我的生命时间。(如果你觉得我的担心很愚蠢,请不要责怪我,只是一个理由而已)if ( stoploss == stoplossresetvalue ){ ObjectSetInteger( 0, stoplossbmp, OBJPROP_STATE, false ); } else{ ObjectSetInteger( 0, stoplossbmp, OBJPROP_STATE, true ); } ObjectSetString ( 0, stoplossedit, OBJPROP_TEXT, IntegerToString( stoploss ) );先谢谢你了。 expert advisor - miscellaneous MQL5 细则手册:MetaTrader 5 交易事件的声音通知 一张图表上的多个指标(第 05 部分):将 MetaTrader Marco vd Heijden 2016.12.14 21:39 #88 位图标签的工作方式与按钮对象略有不同。它使用两个位图,一个用于开启状态,另一个用于关闭状态。 #property strict //--- description #property description "Script creates \"Bitmap Label\" object." //--- display window of the input parameters during the script's launch #property script_show_inputs //--- input parameters of the script input string InpName= "BmpLabel" ; // Label name input string InpFileOn= "\\Images\\dollar.bmp" ; // File name for On mode input string InpFileOff= "\\Images\\euro.bmp" ; // File name for Off mode input bool InpState= false ; // Label pressed/released input ENUM_BASE_CORNER InpCorner= CORNER_LEFT_UPPER ; // Chart corner for anchoring input ENUM_ANCHOR_POINT InpAnchor= ANCHOR_CENTER ; // Anchor type input color InpColor= clrRed ; // Border color when highlighted input ENUM_LINE_STYLE InpStyle= STYLE_SOLID ; // Line style when highlighted input int InpPointWidth= 1 ; // Point size to move input bool InpBack= false ; // Background object input bool InpSelection= false ; // Highlight to move input bool InpHidden= true ; // Hidden in the object list input long InpZOrder= 0 ; // Priority for mouse click //+------------------------------------------------------------------+ //| Create Bitmap Label object | //+------------------------------------------------------------------+ bool BitmapLabelCreate( const long chart_ID= 0 , // chart's ID const string name= "BmpLabel" , // label name const int sub_window= 0 , // subwindow index const int x= 0 , // X coordinate const int y= 0 , // Y coordinate const string file_on= "" , // image in On mode const string file_off= "" , // image in Off mode const int width= 0 , // visibility scope X coordinate const int height= 0 , // visibility scope Y coordinate const int x_offset= 10 , // visibility scope shift by X axis const int y_offset= 10 , // visibility scope shift by Y axis const bool state= false , // pressed/released const ENUM_BASE_CORNER corner= CORNER_LEFT_UPPER , // chart corner for anchoring const ENUM_ANCHOR_POINT anchor= ANCHOR_LEFT_UPPER , // anchor type const color clr= clrRed , // border color when highlighted const ENUM_LINE_STYLE style= STYLE_SOLID , // line style when highlighted const int point_width= 1 , // move point size const bool back= false , // in the background const bool selection= false , // highlight to move const bool hidden= true , // hidden in the object list const long z_order= 0 ) // priority for mouse click { //--- reset the error value ResetLastError (); //--- create a bitmap label if (! ObjectCreate (chart_ID,name, OBJ_BITMAP_LABEL ,sub_window, 0 , 0 )) { Print ( __FUNCTION__ , ": failed to create \"Bitmap Label\" object! Error code = " , GetLastError ()); return ( false ); } //--- set the images for On and Off modes if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE , 0 ,file_on)) { Print ( __FUNCTION__ , ": failed to load the image for On mode! Error code = " , GetLastError ()); return ( false ); } if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE , 1 ,file_off)) { Print ( __FUNCTION__ , ": failed to load the image for Off mode! Error code = " , GetLastError ()); return ( false ); } //--- set label coordinates ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x); ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y); //--- set visibility scope for the image; if width or height values //--- exceed the width and height (respectively) of a source image, //--- it is not drawn; in the opposite case, //--- only the part corresponding to these values is drawn ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width); ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height); //--- set the part of an image that is to be displayed in the visibility scope //--- the default part is the upper left area of an image; the values allow //--- performing a shift from this area displaying another part of the image ObjectSetInteger (chart_ID,name, OBJPROP_XOFFSET ,x_offset); ObjectSetInteger (chart_ID,name, OBJPROP_YOFFSET ,y_offset); //--- define the label's status (pressed or released) ObjectSetInteger (chart_ID,name, OBJPROP_STATE ,state); //--- set the chart's corner, relative to which point coordinates are defined ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner); //--- set anchor type ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor); //--- set the border color when object highlighting mode is enabled ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr); //--- set the border line style when object highlighting mode is enabled ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style); //--- set a size of the anchor point for moving an object ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,point_width); //--- display in the foreground (false) or background (true) ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back); //--- enable (true) or disable (false) the mode of moving the label by mouse ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection); ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection); //--- hide (true) or display (false) graphical object name in the object list ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden); //--- set the priority for receiving the event of a mouse click in the chart ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order); //--- successful execution return ( true ); } //+------------------------------------------------------------------+ //| Set a new image for Bitmap label object | //+------------------------------------------------------------------+ bool BitmapLabelSetImage( const long chart_ID= 0 , // chart's ID const string name= "BmpLabel" , // label name const int on_off= 0 , // modifier (On or Off) const string file= "" ) // path to the file { //--- reset the error value ResetLastError (); //--- set the path to the image file if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE ,on_off,file)) { Print ( __FUNCTION__ , ": failed to load the image! Error code = " , GetLastError ()); return ( false ); } //--- successful execution return ( true ); } //+------------------------------------------------------------------+ //| Move Bitmap Label object | //+------------------------------------------------------------------+ bool BitmapLabelMove( const long chart_ID= 0 , // chart's ID const string name= "BmpLabel" , // label name const int x= 0 , // X coordinate const int y= 0 ) // Y coordinate { //--- reset the error value ResetLastError (); //--- move the object if (! ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x)) { Print ( __FUNCTION__ , ": failed to move X coordinate of the object! Error code = " , GetLastError ()); return ( false ); } if (! ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y)) { Print ( __FUNCTION__ , ": failed to move Y coordinate of the object! Error code = " , GetLastError ()); return ( false ); } //--- successful execution return ( true ); } //+------------------------------------------------------------------+ //| Change visibility scope (object) size | //+------------------------------------------------------------------+ bool BitmapLabelChangeSize( const long chart_ID= 0 , // chart's ID const string name= "BmpLabel" , // label name const int width= 0 , // label width const int height= 0 ) // label height { //--- reset the error value ResetLastError (); //--- change the object size if (! ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width)) { Print ( __FUNCTION__ , ": failed to change the object width! Error code = " , GetLastError ()); return ( false ); } if (! ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height)) { Print ( __FUNCTION__ , ": failed to change the object height! Error code = " , GetLastError ()); return ( false ); } //--- successful execution return ( true ); } //+--------------------------------------------------------------------+ //| Change coordinate of the upper left corner of the visibility scope | //+--------------------------------------------------------------------+ bool BitmapLabelMoveVisibleArea( const long chart_ID= 0 , // chart's ID const string name= "BmpLabel" , // label name const int x_offset= 0 , // visibility scope X coordinate const int y_offset= 0 ) // visibility scope Y coordinate { //--- reset the error value ResetLastError (); //--- change the object's visibility scope coordinates if (! ObjectSetInteger (chart_ID,name, OBJPROP_XOFFSET ,x_offset)) { Print ( __FUNCTION__ , ": failed to change X coordinate of the visibility scope! Error code = " , GetLastError ()); return ( false ); } if (! ObjectSetInteger (chart_ID,name, OBJPROP_YOFFSET ,y_offset)) { Print ( __FUNCTION__ , ": failed to change Y coordinate of the visibility scope! Error code = " , GetLastError ()); return ( false ); } //--- successful execution return ( true ); } //+------------------------------------------------------------------+ //| Delete "Bitmap label" object | //+------------------------------------------------------------------+ bool BitmapLabelDelete( const long chart_ID= 0 , // chart's ID const string name= "BmpLabel" ) // label name { //--- reset the error value ResetLastError (); //--- delete the label if (! ObjectDelete (chart_ID,name)) { Print ( __FUNCTION__ , ": failed to delete \"Bitmap label\" object! Error code = " , GetLastError ()); return ( false ); } //--- successful execution return ( true ); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart () { //--- chart window size long x_distance; long y_distance; //--- set window size if (! ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS , 0 ,x_distance)) { Print ( "Failed to get the chart width! Error code = " , GetLastError ()); return ; } if (! ChartGetInteger ( 0 , CHART_HEIGHT_IN_PIXELS , 0 ,y_distance)) { Print ( "Failed to get the chart height! Error code = " , GetLastError ()); return ; } //--- define bitmap label coordinates int x=( int )x_distance/ 2 ; int y=( int )y_distance/ 2 ; //--- set label size and visibility scope coordinates int width= 32 ; int height= 32 ; int x_offset= 0 ; int y_offset= 0 ; //--- place bitmap label at the center of the window if (!BitmapLabelCreate( 0 ,InpName, 0 ,x,y,InpFileOn,InpFileOff,width,height,x_offset,y_offset,InpState, InpCorner,InpAnchor,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder)) { return ; } //--- redraw the chart and wait one second ChartRedraw (); Sleep ( 1000 ); //--- change label's visibility scope size in the loop for ( int i= 0 ;i< 6 ;i++) { //--- change visibility scope size width--; height--; if (!BitmapLabelChangeSize( 0 ,InpName,width,height)) return ; //--- check if the script's operation has been forcefully disabled if ( IsStopped ()) return ; //--- redraw the chart ChartRedraw (); // 0.3 seconds of delay Sleep ( 300 ); } //--- 1 second of delay Sleep ( 1000 ); //--- change label's visibility scope coordinates in the loop for ( int i= 0 ;i< 2 ;i++) { //--- change visibility scope coordinates x_offset++; y_offset++; if (!BitmapLabelMoveVisibleArea( 0 ,InpName,x_offset,y_offset)) return ; //--- check if the script's operation has been forcefully disabled if ( IsStopped ()) return ; //--- redraw the chart ChartRedraw (); // 0.3 seconds of delay Sleep ( 300 ); } //--- 1 second of delay Sleep ( 1000 ); //--- delete the label BitmapLabelDelete( 0 ,InpName); ChartRedraw (); //--- 1 second of delay Sleep ( 1000 ); //--- }因此,例如,您可以使用相同 bmp 的彩色版本和灰度版本来显示开启和关闭状态。请参见: https://docs.mql4.com/constants/objectconstants/enum_object/obj_bitmap_label如果您确实使用了两张图片,请发布更多代码您在哪里设置状态?你想让它可以点击吗?目标是什么? OBJ_BITMAP_LABEL - Object Types - Objects Constants - Standard Constants, Enumerations and Structures - MQL4 Reference docs.mql4.com OBJ_BITMAP_LABEL - Object Types - Objects Constants - Standard Constants, Enumerations and Structures - MQL4 Reference expert advisor - miscellaneous need help adding a 爆仓卫士源代码-Brust guard source code Marco vd Heijden 2016.12.14 21:46 #89 Max Enrik: 哦,我不知道为什么我不能理解你最近的评论,是这个问题吗?如果是的话,我该如何解决呢?我只是想指出,OrderSend()函数 返回的是一个整数而不是一个布尔值。如果函数失败,票号或-1与真或假是非常不同的。 Max Enrik 2016.12.15 05:53 #90 Marco vd Heijden: 如果你确实使用了两张图片,请公布更多你的代码,你在哪里设置状态?你希望它能被点击吗?首先感谢你的精彩评论,非常感谢。也许我没有描述我所关心的问题,但我将尝试再写一个。所以,我总是试图在'test.mq4'中为我的想法写代码。我已经在其中使用了两张图片,其中一张是我想要的。我只是想带来以下功能。如果状态=真(图片显示为'开')--我只想为这个功能写代码--'止损'可以适用于我的订单。如果状态=假(图片显示为'关')--我只想为这个函数写代码--'止损'不能应用于我的订单。 我不能做这个功能,即使我在其他功能中已经使用了'Bitmap Label Object',其他功能也能完美地实现我的要求。所以,请帮助我。祝你一切顺利。(我制作了.zip文件,所以你可以找到我的测试.mq4文件和2个.bmp文件格式 - 我希望这能帮助你理解我的担忧) 附加的文件: ea-checkmark.zip 4 kb 12345678910111213141516...43 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
下面的代码看起来工作得不错,而且已经试过bool 'stoploss_use&takeprofit_use',但有一次 没有正常工作,然后我怀疑这段代码,请让我了解一下。(如果有必要的话--我可以把所有测试EA的代码贴出来。)
const long& lparam ,
const double& dparam ,
const string& sparam
)
{
// Sell
if ( sparam == sellbutton )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
// stoploss
if ( stoploss_use == true )
{ sl = Bid + points_to_change( stoploss );}
// takeprofit
if ( takeprofit_use == true )
{ tp = Bid - points_to_change( takeprofit );}
if ( !OrderSend( Symbol(), OP_SELL, lot, Bid, slippage, sl, tp, NULL, magic, 0, CLR_NONE ) )
Print( " | OrderSend SELL: ", GetLastError() );
return;
}
// Buy
if ( sparam == buybutton )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
// stoploss
if ( stoploss_use == true )
{ sl = Ask - points_to_change( stoploss ); }
// takeprofit
if ( takeprofit_use == true )
{ tp = Ask + points_to_change( takeprofit ); }
if ( !OrderSend( Symbol(), OP_BUY, lot, Ask, slippage, sl, tp, NULL, magic, 0, CLR_NONE ) )
Print( " | OrderSend SELL: ", GetLastError() );
return;
}
}
所以,如果你说是的, 上述代码运行良好。那么我需要问的是,上述代码的组合是最佳的吗? 所以,我只是想得到最佳的代码组合,也就是代码应该完美地工作。
请帮助我,或给我好的建议。
祝您一切顺利。
当它失败时,你会得到一个错误,你可以在文档中查找错误代码。
有时订单发送失败是因为滑点或偏离报价,所以它不一定是一个编码问题。
如果你把你的止损放在离市场价格太近的地方,这将是一个编码问题。
我也会为订单编写单独的函数,并在你的onchart事件中简单地调用这些函数。
但结果应该是一样的。
我也会写单独的函数来排序,并在你的onchart事件中简单地调用这些函数。
下面的代码组合好吗,请问?
if ( sparam == sellbutton )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
ordersellfnc();
return;
}
{
if ( stoploss_use == true ) { sl = Bid + points_to_change( stoploss ); }
if ( takeprofit_use == true ) { tp = Bid - points_to_change( takeprofit ); }
if ( !OrderSend( Symbol(), OP_SELL, lot, Ask, slippage, sl, tp, NULL, magic, 0, clrRed ) )
Print( " | OrderSend SELL: ", GetLastError() );
return;
}
预先感谢。
如果函数 失败,Ordersend返回票号或-1。
#Checkmark - 打开
我可以使用下面的代码来设定 "默认止损 "值,这对我来说很有用。
但我已经花了几个小时来处理'Checkmark'使用'On/Off',但不幸的是没有好结果。我有'位图标签'对象,当我单独 使用它时,效果很好,但当我试图这样使用它时。如果它是 "开","止损 "可以应用,如果 "关","止损 "就不能应用。
当我开始写这个函数的代码时,我以为我可以在短短几分钟内写完它。但不幸的是,它已经花了几个小时,请帮助我,那是在占用我的生命时间。
(如果你觉得我的担心很愚蠢,请不要责怪我,只是一个理由而已)
{ ObjectSetInteger( 0, stoplossbmp, OBJPROP_STATE, false ); } else
{ ObjectSetInteger( 0, stoplossbmp, OBJPROP_STATE, true ); }
ObjectSetString ( 0, stoplossedit, OBJPROP_TEXT, IntegerToString( stoploss ) );
先谢谢你了。
位图标签的工作方式与按钮对象略有不同。
它使用两个位图,一个用于开启状态,另一个用于关闭状态。
//--- description
#property description "Script creates \"Bitmap Label\" object."
//--- display window of the input parameters during the script's launch
#property script_show_inputs
//--- input parameters of the script
input string InpName= "BmpLabel" ; // Label name
input string InpFileOn= "\\Images\\dollar.bmp" ; // File name for On mode
input string InpFileOff= "\\Images\\euro.bmp" ; // File name for Off mode
input bool InpState= false ; // Label pressed/released
input ENUM_BASE_CORNER InpCorner= CORNER_LEFT_UPPER ; // Chart corner for anchoring
input ENUM_ANCHOR_POINT InpAnchor= ANCHOR_CENTER ; // Anchor type
input color InpColor= clrRed ; // Border color when highlighted
input ENUM_LINE_STYLE InpStyle= STYLE_SOLID ; // Line style when highlighted
input int InpPointWidth= 1 ; // Point size to move
input bool InpBack= false ; // Background object
input bool InpSelection= false ; // Highlight to move
input bool InpHidden= true ; // Hidden in the object list
input long InpZOrder= 0 ; // Priority for mouse click
//+------------------------------------------------------------------+
//| Create Bitmap Label object |
//+------------------------------------------------------------------+
bool BitmapLabelCreate( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" , // label name
const int sub_window= 0 , // subwindow index
const int x= 0 , // X coordinate
const int y= 0 , // Y coordinate
const string file_on= "" , // image in On mode
const string file_off= "" , // image in Off mode
const int width= 0 , // visibility scope X coordinate
const int height= 0 , // visibility scope Y coordinate
const int x_offset= 10 , // visibility scope shift by X axis
const int y_offset= 10 , // visibility scope shift by Y axis
const bool state= false , // pressed/released
const ENUM_BASE_CORNER corner= CORNER_LEFT_UPPER , // chart corner for anchoring
const ENUM_ANCHOR_POINT anchor= ANCHOR_LEFT_UPPER , // anchor type
const color clr= clrRed , // border color when highlighted
const ENUM_LINE_STYLE style= STYLE_SOLID , // line style when highlighted
const int point_width= 1 , // move point size
const bool back= false , // in the background
const bool selection= false , // highlight to move
const bool hidden= true , // hidden in the object list
const long z_order= 0 ) // priority for mouse click
{
//--- reset the error value
ResetLastError ();
//--- create a bitmap label
if (! ObjectCreate (chart_ID,name, OBJ_BITMAP_LABEL ,sub_window, 0 , 0 ))
{
Print ( __FUNCTION__ ,
": failed to create \"Bitmap Label\" object! Error code = " , GetLastError ());
return ( false );
}
//--- set the images for On and Off modes
if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE , 0 ,file_on))
{
Print ( __FUNCTION__ ,
": failed to load the image for On mode! Error code = " , GetLastError ());
return ( false );
}
if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE , 1 ,file_off))
{
Print ( __FUNCTION__ ,
": failed to load the image for Off mode! Error code = " , GetLastError ());
return ( false );
}
//--- set label coordinates
ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x);
ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y);
//--- set visibility scope for the image; if width or height values
//--- exceed the width and height (respectively) of a source image,
//--- it is not drawn; in the opposite case,
//--- only the part corresponding to these values is drawn
ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width);
ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height);
//--- set the part of an image that is to be displayed in the visibility scope
//--- the default part is the upper left area of an image; the values allow
//--- performing a shift from this area displaying another part of the image
ObjectSetInteger (chart_ID,name, OBJPROP_XOFFSET ,x_offset);
ObjectSetInteger (chart_ID,name, OBJPROP_YOFFSET ,y_offset);
//--- define the label's status (pressed or released)
ObjectSetInteger (chart_ID,name, OBJPROP_STATE ,state);
//--- set the chart's corner, relative to which point coordinates are defined
ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner);
//--- set anchor type
ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
//--- set the border color when object highlighting mode is enabled
ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- set the border line style when object highlighting mode is enabled
ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- set a size of the anchor point for moving an object
ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,point_width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- enable (true) or disable (false) the mode of moving the label by mouse
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- successful execution
return ( true );
}
//+------------------------------------------------------------------+
//| Set a new image for Bitmap label object |
//+------------------------------------------------------------------+
bool BitmapLabelSetImage( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" , // label name
const int on_off= 0 , // modifier (On or Off)
const string file= "" ) // path to the file
{
//--- reset the error value
ResetLastError ();
//--- set the path to the image file
if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE ,on_off,file))
{
Print ( __FUNCTION__ ,
": failed to load the image! Error code = " , GetLastError ());
return ( false );
}
//--- successful execution
return ( true );
}
//+------------------------------------------------------------------+
//| Move Bitmap Label object |
//+------------------------------------------------------------------+
bool BitmapLabelMove( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" , // label name
const int x= 0 , // X coordinate
const int y= 0 ) // Y coordinate
{
//--- reset the error value
ResetLastError ();
//--- move the object
if (! ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x))
{
Print ( __FUNCTION__ ,
": failed to move X coordinate of the object! Error code = " , GetLastError ());
return ( false );
}
if (! ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y))
{
Print ( __FUNCTION__ ,
": failed to move Y coordinate of the object! Error code = " , GetLastError ());
return ( false );
}
//--- successful execution
return ( true );
}
//+------------------------------------------------------------------+
//| Change visibility scope (object) size |
//+------------------------------------------------------------------+
bool BitmapLabelChangeSize( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" , // label name
const int width= 0 , // label width
const int height= 0 ) // label height
{
//--- reset the error value
ResetLastError ();
//--- change the object size
if (! ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width))
{
Print ( __FUNCTION__ ,
": failed to change the object width! Error code = " , GetLastError ());
return ( false );
}
if (! ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height))
{
Print ( __FUNCTION__ ,
": failed to change the object height! Error code = " , GetLastError ());
return ( false );
}
//--- successful execution
return ( true );
}
//+--------------------------------------------------------------------+
//| Change coordinate of the upper left corner of the visibility scope |
//+--------------------------------------------------------------------+
bool BitmapLabelMoveVisibleArea( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" , // label name
const int x_offset= 0 , // visibility scope X coordinate
const int y_offset= 0 ) // visibility scope Y coordinate
{
//--- reset the error value
ResetLastError ();
//--- change the object's visibility scope coordinates
if (! ObjectSetInteger (chart_ID,name, OBJPROP_XOFFSET ,x_offset))
{
Print ( __FUNCTION__ ,
": failed to change X coordinate of the visibility scope! Error code = " , GetLastError ());
return ( false );
}
if (! ObjectSetInteger (chart_ID,name, OBJPROP_YOFFSET ,y_offset))
{
Print ( __FUNCTION__ ,
": failed to change Y coordinate of the visibility scope! Error code = " , GetLastError ());
return ( false );
}
//--- successful execution
return ( true );
}
//+------------------------------------------------------------------+
//| Delete "Bitmap label" object |
//+------------------------------------------------------------------+
bool BitmapLabelDelete( const long chart_ID= 0 , // chart's ID
const string name= "BmpLabel" ) // label name
{
//--- reset the error value
ResetLastError ();
//--- delete the label
if (! ObjectDelete (chart_ID,name))
{
Print ( __FUNCTION__ ,
": failed to delete \"Bitmap label\" object! Error code = " , GetLastError ());
return ( false );
}
//--- successful execution
return ( true );
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
//--- chart window size
long x_distance;
long y_distance;
//--- set window size
if (! ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS , 0 ,x_distance))
{
Print ( "Failed to get the chart width! Error code = " , GetLastError ());
return ;
}
if (! ChartGetInteger ( 0 , CHART_HEIGHT_IN_PIXELS , 0 ,y_distance))
{
Print ( "Failed to get the chart height! Error code = " , GetLastError ());
return ;
}
//--- define bitmap label coordinates
int x=( int )x_distance/ 2 ;
int y=( int )y_distance/ 2 ;
//--- set label size and visibility scope coordinates
int width= 32 ;
int height= 32 ;
int x_offset= 0 ;
int y_offset= 0 ;
//--- place bitmap label at the center of the window
if (!BitmapLabelCreate( 0 ,InpName, 0 ,x,y,InpFileOn,InpFileOff,width,height,x_offset,y_offset,InpState,
InpCorner,InpAnchor,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return ;
}
//--- redraw the chart and wait one second
ChartRedraw ();
Sleep ( 1000 );
//--- change label's visibility scope size in the loop
for ( int i= 0 ;i< 6 ;i++)
{
//--- change visibility scope size
width--;
height--;
if (!BitmapLabelChangeSize( 0 ,InpName,width,height))
return ;
//--- check if the script's operation has been forcefully disabled
if ( IsStopped ())
return ;
//--- redraw the chart
ChartRedraw ();
// 0.3 seconds of delay
Sleep ( 300 );
}
//--- 1 second of delay
Sleep ( 1000 );
//--- change label's visibility scope coordinates in the loop
for ( int i= 0 ;i< 2 ;i++)
{
//--- change visibility scope coordinates
x_offset++;
y_offset++;
if (!BitmapLabelMoveVisibleArea( 0 ,InpName,x_offset,y_offset))
return ;
//--- check if the script's operation has been forcefully disabled
if ( IsStopped ())
return ;
//--- redraw the chart
ChartRedraw ();
// 0.3 seconds of delay
Sleep ( 300 );
}
//--- 1 second of delay
Sleep ( 1000 );
//--- delete the label
BitmapLabelDelete( 0 ,InpName);
ChartRedraw ();
//--- 1 second of delay
Sleep ( 1000 );
//---
}
因此,例如,您可以使用相同 bmp 的彩色版本和灰度版本来显示开启和关闭状态。
请参见:
https://docs.mql4.com/constants/objectconstants/enum_object/obj_bitmap_label
如果您确实使用了两张图片,请发布更多代码您在哪里设置状态?你想让它可以点击吗?目标是什么?哦,我不知道为什么我不能理解你最近的评论,是这个问题吗?如果是的话,我该如何解决呢?
我只是想指出,OrderSend()函数 返回的是一个整数而不是一个布尔值。
如果函数失败,票号或-1与真或假是非常不同的。
Marco vd Heijden:
如果你确实使用了两张图片,请公布更多你的代码,你在哪里设置状态?你希望它能被点击吗?首先感谢你的精彩评论,非常感谢。也许我没有描述我所关心的问题,但我将尝试再写一个。
所以,我总是试图在'test.mq4'中为我的想法写代码。我已经在其中使用了两张图片,其中一张是我想要的。我只是想带来以下功能。
- 如果状态=真(图片显示为'开')--我只想为这个功能写代码--'止损'可以适用于我的订单。
- 如果状态=假(图片显示为'关')--我只想为这个函数写代码--'止损'不能应用于我的订单。
我不能做这个功能,即使我在其他功能中已经使用了'Bitmap Label Object',其他功能也能完美地实现我的要求。所以,请帮助我。祝你一切顺利。
(我制作了.zip文件,所以你可以找到我的测试.mq4文件和2个.bmp文件格式 - 我希望这能帮助你理解我的担忧)