Le code ci-dessous semble bien fonctionner, et j'ai déjà essayé le bool 'stoploss_use & takeprofit_use', mais une fois que cela n'a pas fonctionné correctement, je doute de ce code, faites-moi savoir. ( si c'est nécessaire - je peux poster tous les codes de cet EA de test )
Donc, si vous dites oui, le code ci-dessus fonctionne bien. Alors je dois demander si la combinaison du code ci-dessus est optimale ? Donc, j'essaie juste d'obtenir une combinaison de code optimale, c'est-à-dire que le code doit fonctionner parfaitement.
S'il vous plaît, aidez-moi ou donnez-moi un bon conseil. Tous les meilleurs.
Je peux utiliser le code ci-dessous pour la valeur 'Stop Loss Default' qui fonctionne bien pour moi. Mais j'ai déjà passé quelques heures pour'Checkmark' Utilisation'On / Off' mais malheureusement pas de bons résultats. J'ai juste un objet'Bitmap Label', quand je l'utilise séparément , il fonctionne bien, mais quand j'essaie de l'utiliser comme ceci : Si c'est ON, 'Stop Loss' peut s'appliquer, si c'est OFF, 'Stop Loss' ne peut pas s'appliquer.
Quand j'ai commencé à écrire le code de cette fonction, je pensais pouvoir l'écrire en quelques minutes. Mais malheureusement, il a déjà pris quelques heures, s'il vous plaît aidez-moi, qui est de prendre mon temps de vie.
( si vous trouvez ma préoccupation comme un idiot, s'il vous plaît ne me blâmez pas, juste une raison épuisé )
L'étiquette bitmap fonctionne un peu différemment de l'objet bouton.
Il utilise deux bitmaps, l'un pour l'état activé et l'autre pour l'état désactivé.
#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 inputstring InpName= "BmpLabel" ; // Label name inputstring InpFileOn= "\\Images\\dollar.bmp" ; // File name for On mode inputstring InpFileOff= "\\Images\\euro.bmp" ; // File name for Off mode inputbool InpState= false ; // Label pressed/released inputENUM_BASE_CORNER InpCorner= CORNER_LEFT_UPPER ; // Chart corner for anchoring inputENUM_ANCHOR_POINT InpAnchor= ANCHOR_CENTER ; // Anchor type inputcolor InpColor= clrRed ; // Border color when highlighted inputENUM_LINE_STYLE InpStyle= STYLE_SOLID ; // Line style when highlighted inputint InpPointWidth= 1 ; // Point size to move inputbool InpBack= false ; // Background object inputbool InpSelection= false ; // Highlight to move inputbool InpHidden= true ; // Hidden in the object list inputlong InpZOrder= 0 ; // Priority for mouse click //+------------------------------------------------------------------+ //| Create Bitmap Label object | //+------------------------------------------------------------------+ bool BitmapLabelCreate( constlong chart_ID= 0 , // chart's ID conststring name= "BmpLabel" , // label name constint sub_window= 0 , // subwindow index constint x= 0 , // X coordinate constint y= 0 , // Y coordinate conststring file_on= "" , // image in On mode conststring file_off= "" , // image in Off mode constint width= 0 , // visibility scope X coordinate constint height= 0 , // visibility scope Y coordinate constint x_offset= 10 , // visibility scope shift by X axis constint y_offset= 10 , // visibility scope shift by Y axis constbool state= false , // pressed/released constENUM_BASE_CORNER corner= CORNER_LEFT_UPPER , // chart corner for anchoring constENUM_ANCHOR_POINT anchor= ANCHOR_LEFT_UPPER , // anchor type constcolor clr= clrRed , // border color when highlighted constENUM_LINE_STYLE style= STYLE_SOLID , // line style when highlighted constint point_width= 1 , // move point size constbool back= false , // in the background constbool selection= false , // highlight to move constbool hidden= true , // hidden in the object list constlong 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( constlong chart_ID= 0 , // chart's ID conststring name= "BmpLabel" , // label name constint on_off= 0 , // modifier (On or Off) conststring 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( constlong chart_ID= 0 , // chart's ID conststring name= "BmpLabel" , // label name constint x= 0 , // X coordinate constint 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( constlong chart_ID= 0 , // chart's ID conststring name= "BmpLabel" , // label name constint width= 0 , // label width constint 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( constlong chart_ID= 0 , // chart's ID conststring name= "BmpLabel" , // label name constint x_offset= 0 , // visibility scope X coordinate constint 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( constlong chart_ID= 0 , // chart's ID conststring 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 | //+------------------------------------------------------------------+ voidOnStart () { //--- 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 ); //--- }
Ainsi, par exemple, vous pouvez utiliser une version colorée et une version en niveaux de gris du même bmp pour afficher les états activé et désactivé.
Max Enrik: Oh, je ne sais pas pourquoi je n'arrive pas à comprendre votre dernier commentaire, est-ce un problème ? Si oui, comment puis-je le résoudre ?
Je voulais juste signaler que la fonction OrderSend() renvoie un Integer et non un Boolean.
Le numéro de ticket ou -1 si la fonction échoue est très différent de vrai ou faux.
Si vous avez utilisé deux images, veuillez poster une partie de votre code : où définissez-vous l'état ? voulez-vous qu'il soit cliquable ? quel est le but ?
Tout d'abord, merci pour votre excellent commentaire, j'apprécie beaucoup. Peut-être que je n'ai pas décrit mon problème, mais je vais essayer d'en écrire un autre.
Donc, j'essaie toujours d'écrire du code dans 'test.mq4' pour mon idée. Et j'ai déjà utilisé 2 images dans celui-ci, celui que je veux. Et je voudrais juste apporter les fonctions suivantes.
Si State = true ( l'image montre 'On ') - et je veux juste écrire le code pour cette fonction - 'Stop Loss' pourrait s'appliquer à mes ordres.
Si State = false ( l'image montre 'Off ') - et je veux juste écrire le code pour cette fonction - 'Stop Loss' ne pourrait pas s'appliquer à mes ordres.
Je ne peux pas faire cette fonction pour moi, même si j'utilise déjà'Bitmap Label Object' pour mes autres fonctions, et les autres fonctions fonctionnent parfaitement comme je le veux. Alors, s'il vous plaît, aidez-moi.
Je vous souhaite bonne chance.
(J'ai créé un fichier .zip, afin que vous puissiez trouver mon fichier de test .mq4 et 2 fichiers .bmp - j'espère que cela vous aidera à comprendre mon problème).
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Le code ci-dessous semble bien fonctionner, et j'ai déjà essayé le bool 'stoploss_use & takeprofit_use', mais une fois que cela n'a pas fonctionné correctement, je doute de ce code, faites-moi savoir. ( si c'est nécessaire - je peux poster tous les codes de cet EA de test )
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;
}
}
Donc, si vous dites oui, le code ci-dessus fonctionne bien. Alors je dois demander si la combinaison du code ci-dessus est optimale ? Donc, j'essaie juste d'obtenir une combinaison de code optimale, c'est-à-dire que le code doit fonctionner parfaitement.
S'il vous plaît, aidez-moi ou donnez-moi un bon conseil.
Tous les meilleurs.
Vous obtiendrez une erreur lorsqu'il échoue et vous pourrez rechercher le code d'erreur dans la documentation.
Il arrive que les ordres échouent à cause d'un slippage ou de cotations erronées, il ne s'agit donc pas toujours d'un problème de codage.
Ce sera un problème de codage si vous placez vos stops trop près du prix du marché.
Aussi, j'écrirais des fonctions séparées pour l'ordre et je les appellerais simplement dans votre événement onchart.
Mais les résultats devraient être les mêmes.
J'écrirais également des fonctions séparées pour commander et les appeler simplement dans votre événement onchart.
La combinaison de codes ci-dessous est-elle bonne, s'il vous plaît ?
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;
}
Merci d'avance.
Ordersend renvoie le numéro du ticket ou -1 si la fonction échoue.
#Checkmark - Ouvrir
Je peux utiliser le code ci-dessous pour la valeur 'Stop Loss Default' qui fonctionne bien pour moi.
Mais j'ai déjà passé quelques heures pour'Checkmark' Utilisation'On / Off' mais malheureusement pas de bons résultats. J'ai juste un objet'Bitmap Label', quand je l'utilise séparément , il fonctionne bien, mais quand j'essaie de l'utiliser comme ceci : Si c'est ON, 'Stop Loss' peut s'appliquer, si c'est OFF, 'Stop Loss' ne peut pas s'appliquer.
Quand j'ai commencé à écrire le code de cette fonction, je pensais pouvoir l'écrire en quelques minutes. Mais malheureusement, il a déjà pris quelques heures, s'il vous plaît aidez-moi, qui est de prendre mon temps de vie.
( si vous trouvez ma préoccupation comme un idiot, s'il vous plaît ne me blâmez pas, juste une raison épuisé )
{ ObjectSetInteger( 0, stoplossbmp, OBJPROP_STATE, false ); } else
{ ObjectSetInteger( 0, stoplossbmp, OBJPROP_STATE, true ); }
ObjectSetString ( 0, stoplossedit, OBJPROP_TEXT, IntegerToString( stoploss ) );
Merci d'avance.
L'étiquette bitmap fonctionne un peu différemment de l'objet bouton.
Il utilise deux bitmaps, l'un pour l'état activé et l'autre pour l'état désactivé.
//--- 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 );
//---
}
Ainsi, par exemple, vous pouvez utiliser une version colorée et une version en niveaux de gris du même bmp pour afficher les états activé et désactivé.
S'il te plait regarde:
https://docs.mql4.com/constants/objectconstants/enum_object/obj_bitmap_label
Si vous avez utilisé deux images, veuillez poster plus de votre code où définissez-vous l'état ? voulez-vous qu'il soit cliquable ? quel est le but ?Oh, je ne sais pas pourquoi je n'arrive pas à comprendre votre dernier commentaire, est-ce un problème ? Si oui, comment puis-je le résoudre ?
Je voulais juste signaler que la fonction OrderSend() renvoie un Integer et non un Boolean.
Le numéro de ticket ou -1 si la fonction échoue est très différent de vrai ou faux.
Marco vd Heijden:
Si vous avez utilisé deux images, veuillez poster une partie de votre code : où définissez-vous l'état ? voulez-vous qu'il soit cliquable ? quel est le but ?Tout d'abord, merci pour votre excellent commentaire, j'apprécie beaucoup. Peut-être que je n'ai pas décrit mon problème, mais je vais essayer d'en écrire un autre.
Donc, j'essaie toujours d'écrire du code dans 'test.mq4' pour mon idée. Et j'ai déjà utilisé 2 images dans celui-ci, celui que je veux. Et je voudrais juste apporter les fonctions suivantes.
- Si State = true ( l'image montre 'On ') - et je veux juste écrire le code pour cette fonction - 'Stop Loss' pourrait s'appliquer à mes ordres.
- Si State = false ( l'image montre 'Off ') - et je veux juste écrire le code pour cette fonction - 'Stop Loss' ne pourrait pas s'appliquer à mes ordres.
Je ne peux pas faire cette fonction pour moi, même si j'utilise déjà'Bitmap Label Object' pour mes autres fonctions, et les autres fonctions fonctionnent parfaitement comme je le veux. Alors, s'il vous plaît, aidez-moi.Je vous souhaite bonne chance.
(J'ai créé un fichier .zip, afin que vous puissiez trouver mon fichier de test .mq4 et 2 fichiers .bmp - j'espère que cela vous aidera à comprendre mon problème).