Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Je pense que oui.
C'est légèrement différent.
La question du global par rapport au statique n'est ni ici ni là. Mais votre méthode de réinitialisation est bonne. Elle empêche le dépassement.
J'ai parlé trop tôt. Le vôtre déborde dans l'autre sens. Il se déclenchera sur une pression ultérieure de CTRL. Si vous cliquez sur le graphique, puis appuyez sur CTRL, il se déclenche.
@honest_knave- merci pour votre commentaire. J'apprécie beaucoup - mais j'ai commencé par essayer le commentaire de @Marco vd Heijden. ( J'ai lu tous vos commentaires à ce sujet. )
@Marco vd Heijden- Merci.
Mais je pense que je fais quelque chose de mal, peut-être que je ne comprends pas plus clairement. En tout cas j'ai essayé, vous pouvez trouver le code ci-dessous.
Où est mon erreur, s'il vous plaît ?
//| keydown.mq4 |
//| Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
string prefix = "Custom Expert |";
string lotedit = prefix + "Edit Name";
string lotbtnplus = prefix + "Lot button Plus";
string lotbtnminus = prefix + "Lot button Minus";
double lot = 0.01, lotstep = 0.01 ;
bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
graphicsObj();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
ObjectsDeleteAll( 0, prefix );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
graphicsObj();
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if( id == CHARTEVENT_CLICK )
{
if ( sparam == lotbtnplus )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot = lot + lotstep;
update();
Print( " | lot plus : ", lot );
return;
}
Print( "Click" );
ctrl_click = 1;
}
if( id == CHARTEVENT_KEYDOWN )
{
//Print(lparam);// print to identify keycode
if( lparam == 17 ) // ctrl key
{
if( ctrl_click == 1 )// if mouse click
{
//Do Something when CTRL (keycode 17) is pressed
if ( sparam == lotbtnplus )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot = lot + ( lotstep * 10 );
Print( " | lot plus + Ctrl initial: ", lot );
update();
Print( " | lot plus + Ctrl: ", lot );
return;
}
Print( "Ctrl + Click" );
ctrl_click = 0; // reset
}
}
ctrl_click = 0; // reset if not ctrl
}
}
//|+--------------------------------------------------------------------------------+
//| - Function Update |
//|+--------------------------------------------------------------------------------+
void update()
{
//---
ObjectSetString( 0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ) );
//---
return;
}
{
ObjectCreate(0, lotedit, OBJ_EDIT, 0,0,0);
ObjectSetInteger(0, lotedit, OBJPROP_XDISTANCE, 30);
ObjectSetInteger(0, lotedit, OBJPROP_YDISTANCE, 30);
ObjectSetInteger(0, lotedit, OBJPROP_XSIZE, 60);
ObjectSetInteger(0, lotedit, OBJPROP_YSIZE, 30);
ObjectSetString(0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ));
ObjectCreate( 0, lotbtnplus, OBJ_BUTTON, 0, 0, 0);
ObjectSetString( 0, lotbtnplus, OBJPROP_TEXT, "+");
ObjectSetInteger( 0, lotbtnplus, OBJPROP_XDISTANCE, 100);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_YDISTANCE, 30);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_XSIZE, 70);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_YSIZE, 30);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_BACK, false);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_SELECTABLE, false);
}
Votre premier problème est que CHARTEVENT_CLICK n'est pas la même chose que CHARTEVENT_OBJECT_CLICK. Vous voulez attraper les clics sur un objet, pas n'importe quel clic sur le graphique.
const long &lparam,
const double &dparam,
const string &sparam)
{
// if( id == CHARTEVENT_CLICK )
if( id == CHARTEVENT_OBJECT_CLICK )
const long &lparam,
const double &dparam,
const string &sparam)
{
static bool wasCTRL=false;
if(id==CHARTEVENT_OBJECT_CLICK && sparam == lotbtnplus)
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot+=(wasCTRL)?lotstep*10:lotstep;
update();
Print( " | lot plus : ", lot );
return;
}
wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==17);
}
Ceci peut vous aider. Il se peut que vous trouviez qu'il ne passe à 0,1 qu'au deuxième clic de la souris, en fonction de la rapidité avec laquelle vous appuyez sur le bouton après CTRL.
#Ctrl + Bouton de la souris - Fermé
Wow, juste comme ça, incroyable énorme merci honnête !
Merci à@honest_knave et @Marco vd Heijden.
(La plateforme MT4 a été mise à jour deux fois.) Après ces mises à jour, cette feuille de calcul ne s'actualise pas sur le graphique, j'ai vérifié tout ce qui concerne la feuille de calcul et je ne vois aucun problème.
Je dois vous informer que j'utilise également les prix Bid et Ask au-dessus de la feuille de calcul, Bid et Ask fonctionnent bien, mais pas la feuille de calcul.
Si vous comprenez ma préoccupation, faites-moi savoir comment je peux résoudre ce problème.
Merci d'avance.
Avez-vous un code pour le tableur?
Avez-vous un code pour le tableur ?
Puis-je écrire 2 fonctions d'étiquette différentes ?
(par exemple : 1 pour le texte, 2 pour le texte et la taille de la police).