conseiller expert - questions diverses - page 11

 
Max Enrik:

Le code ci-dessous fonctionne parfaitement après que vous m'ayez aidé, merci mec.

Et j'ai renommé comme vous l'avez dit, cela fonctionne bien, mais je me demande si je fais quelque chose de mal ?
(je suis juste inquiet)

S'inquiéter de savoir si votre code va fonctionner est très normal (c'est même sain). Il est fréquent de voir du code qui se compile mais qui ne fait pas ce que l'on veut (à cause d'une erreur humaine et/ou d'un manque de connaissances).

Le meilleur moyen est de prendre l'habitude d'imprimer les variables et de vérifier les codes de retour. Une fois que vous avez testé, vous pouvez supprimer les instructions d'impression.

En utilisant votre extrait de code ci-dessus, vous pourriez ajouter une simple Print("Valeur SL : "+sl) et ensuite vérifier votre journal d'expert pour voir si les valeurs sont celles que vous attendez.

 
Max Enrik: Je me demande juste, si je fais quelque chose de mal ?
    { sl = Bid + points_to_change( stoploss * 10 ); }
Pourquoi multipliez-vous par 10 ? Si le stoploss est en pips, convertissez-le via pips_to_change pour qu'il fonctionne sur les brokers à 4 chiffres.
 
Marco vd Heijden:
C'est simple, si ça marche comme prévu, vous ne faites rien de mal, sinon ça ne marche tout simplement pas.

#Checkmark - Fermé

Oui ! Je reconnais que cette étiquette bitmap m'a déjà pris beaucoup de temps. Finalement, j'ai obtenu ce que je voulais...
Bien sûr, grand homme, merci pour votre aide.

Je résous mon problème comme le code ci-dessous.

void ordersell()
{
    //  Sell set Stop Loss with bitmap label
    
    // when bitmap label shows - ON
    if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == true )
    {
        sl = Bid + points_to_change( stoploss * 10 );
        Print( " | TRUE :  Active | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl );
    }

    // when bitmap label shows - OFF
    if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == false )
    {
        sl = 0;
        Print( " | FALSE :  Inactive | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl );
    }

    // call your stop loss 'sl'
    ticket = OrderSend( ..., sl, ... );
    // sounds
    if ( ticket > 0 )
    { PlaySound( "ok.wav"      ); } else
    { PlaySound( "timeout.wav" ); }
    return;
}
 
honest_knave:

Le meilleur moyen est de prendre l'habitude d'imprimer les variables et de vérifier les codes de retour. Une fois que vous avez testé, vous pouvez supprimer les instructions d'impression.
En utilisant votre extrait de code ci-dessus, vous pourriez ajouter une simple Print("Valeur SL : "+sl) et ensuite vérifier votre journal Expert pour voir si les valeurs sont celles que vous attendez.

Je l'utilise déjà, mais parfois je doute de mon code car si vous vérifiez monproblème de#Checkmark , j'espère que vous me comprendrez mieux.
En tout cas,
merci pour votre temps.

 
whroeder1:
Pourquoi multipliez-vous par 10 ? Si le stoploss est en pips, convertissez-le via pips_to_change pour que cela fonctionne sur les brokers à 4 chiffres.

Oh ! Ouais mec, bonne question, j'ai déjà changé. Merci pour votre attention.

 

#Stop Loss /Take Profit- Fermé

Merci pour vos commentaires plus clairs Marco.
Je vous souhaite le meilleur.

Merci spécial à @Marco vd Heijden

 

#Ctrl + Bouton de la souris - Ouvrir

J'ai passé quelques heures, comment puis-je trouver une bonne documentation à ce sujet, et je ne peux pas obtenir de bonnes informations et la documentation pour elle.
J'ai juste besoin que lorsque je clique sur'Souris gauche + Ctrl', la taille du lot augmente de 0,1. (normalement, elle augmente de 0,01 ).

Je souhaite trouver de la documentation et des articles avec des exemples à ce sujet.

Merci d'avance.

 
Max Enrik:

#Ctrl + Bouton de la souris - Ouvrir

J'ai passé quelques heures à chercher comment trouver une bonne documentation à ce sujet, et je n'ai pas trouvé de bonnes informations ni de documentation.
J'ai juste besoin que lorsque je clique sur'Souris gauche + Ctrl', la taille du lot augmente de 0,1. (normalement, elle augmente de 0,01 ).

Je veux trouver de la documentation et des articles avec des exemples à ce sujet.

Merci d'avance.

Je ne connais pas de moyen facile de capturer les combinaisons de touches. Il serait préférable d'avoir un deuxième bouton à cliquer si vous voulez augmenter de 0,1 plutôt que de 0,01.

Néanmoins, vous pouvez essayer ce qui suit :

Vérifiez si le dernier événement était une frappe de touche CTRL.

Si c'est le cas, vérifiez si cet événement est un clic de souris.

Mais cette approche pose quelques problèmes :

1. Si un autre événement graphique se produit entre la frappe et le clic de la souris, elle échoue.

2. Vous obtiendrez un dépassement causé par le délai entre le clic de la souris et le relâchement de la touche CTRL. Les solutions de contournement introduisent leurs propres problèmes.

Peut-être d'autres personnes auront-elles de meilleures idées.

#define CTRL 17

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   static bool wasCTRL=false;
   if(wasCTRL && id==CHARTEVENT_CLICK) Print("CTRL+CLICK detected");
   wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==CTRL);
  }
 
//+------------------------------------------------------------------+
//|                                                      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

bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

   if(id==CHARTEVENT_CLICK)
     {
      //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
            Print("CTRL+CLICK");
            ctrl_click=0;  // reset
           }
        }
       ctrl_click=0; // reset if not ctrl
     }
  }
//+------------------------------------------------------------------+
 

Je pense que oui.

C'est légèrement différent.