conseiller expert - questions diverses - page 34

 
Marco vd Heijden:

Non, c'est pour vérifier s'il s'agit d'un compte de démonstration ou d'un compte réel, le concours est rarement utilisé.
Le lot max peut être très facile.

Merci pour cette réponse rapide.

J'ai juste besoin d'appliquer la taille de lot maximale uniquement au compte démo.
(mais bien sûr, il s'agit en fait d'un compte réel - c'est juste un test - je veux essayer si le compte démo, si la taille du lot est meilleure, alors la taille maximale du lot n'ouvrira pas les ordres de vente et d'achat - mais si le compte réel ou le compte de concours - alors cette taille maximale du lot ne s'appliquera pas aux deux (réel ou concours)).

Puis-je utiliser l'opérateur de commutation ?

Merci beaucoup.
( Je vais essayer plus tard. )

 
Oui, vous pouvez utiliser un opérateur de commutation.
 
Marco vd Heijden:
//---
// calculate lotsize here
//---

// check if lotsize is not too high

if(lotsize>lotsize_max)
{
  lotsize=losize_max;
}

Je veux demander - vous voulez dire - si " lotsize > lotsize_max " la taille de lot devrait être " lotsize = lotsize_max " pour le compte Démo? Est-ce que j'ai bien compris, s'il vous plaît ?

Merci beaucoup.
( Je travaille sur ce sujet )

 
Max Enrik:

Je veux demander - vous voulez dire - si " lotsize > lotsize_max " la taille de lot devrait être " lotsize = lotsize_max " pour le compte Démo? J'ai bien compris, s'il vous plaît ?

Merci beaucoup.
( Je travaille dessus )

Essayez
if(IsDemo() && lotsize>lotsize_max) lotsize=lotsize_max ;
 
honest_knave:
Essayez
if(IsDemo() && lotsize>lotsize_max) lotsize=lotsize_max ;

Oh, super ! Merci beaucoup.

----
fonction devrait me demander - Oui ou Non- Je pense que cela pourrait être mieux pour le moment. (J'ai juste besoin d'expérience pour savoir comment cette fonction fonctionne pour moi sur un compte de démonstration (bien sûr en direct) - je testerai cette fonction lundi - si je peux terminer cette partie du code).
( maintenant je ne connais pas assez cette fonction - j'espère que je peux le faire jusqu'à demain )

Tout commentaire positif serait la meilleure aide pour moi.
Merci d'avance.

 

Oui, bien sûr, par tous les moyens, allez-y sans le lotsmax et si vous voulez plus tard affiner votre stratégie ou limiter le risque, vous pouvez l'utiliser, donc ce n'est pas une nécessité en tant que telle actuellement.

Vous pouvez simplement l'éliminer, je voulais juste vous montrer quelques lignes de mon mécanisme de sécurité.


Si vous voulez une confirmation, vous pouvez utiliser un

MessageBox()

https://docs.mql4.com/common/messagebox


int result=MessageBox(" This is a Messagbox, Do you want to proceed?","Warning",MB_YESNO);

if(result==IDYES)
{
  // Yes Pressed
   Print("OK");
}

if(result==IDNO)
{
  // No Pressed
}

Voici les principaux drapeaux que vous définissez dans la fonction messagebox après le message :

Constante

Valeur

Description

MB_OK

0x00000000

La fenêtre de message ne contient qu'un seul bouton : OK. Par défaut,

MB_OKCANCEL

0x00000001

La fenêtre de message contient deux boutons : OK et Annuler

MB_ABORTRETRYIGNORE

0x00000002

La fenêtre de message contient trois boutons : Abandonner, Réessayer et Ignorer

MB_YESNOCANCEL

0x00000003

La fenêtre de message contient trois boutons : Oui, Non et Annuler

MB_YESNO

0x00000004

La fenêtre de message contient deux boutons : Oui et Non

MB_RETRYCANCEL

0x00000005

La fenêtre de message contient deux boutons : Retenter et Annuler

MB_CANCELTRYCONTINUE

0x00000006

La fenêtre de message contient trois boutons : Annuler, Réessayer, Continuer


Et voici les valeurs de retour :

Constante

Valeur

Description

IDOK

1

Le bouton "OK" a été pressé

IDCANCEL

2

Le bouton "Cancel" a été actionné

IDABORT

3

Le bouton "Abandon" a été actionné

IDRETRY

4

Le bouton "Retry" a été pressé

IDIGNORE

5

Le bouton "Ignorer" a été actionné

IDYES

6

Le bouton "Oui" a été actionné

IDNO

7

Le bouton "Non" a été pressé

IDTRYAGAIN

10

Le bouton "Try Again" a été actionné

IDCONTINUE

11

Le bouton "Continuer" a été pressé


Messagebox() ne fonctionne pas dans le testeur.

MessageBox - Common Functions - MQL4 Reference
MessageBox - Common Functions - MQL4 Reference
  • docs.mql4.com
MessageBox - Common Functions - MQL4 Reference
 
Marco vd Heijden:

Oui, bien sûr, par tous les moyens, allez-y sans le lotmax et si plus tard vous voulez affiner votre stratégie ou limiter les risques, vous pouvez l'utiliser.
Vous pouvez simplement l'éliminer, je voulais juste vous montrer quelques lignes de mon mécanisme de sécurité.

Merci beaucoup plus pour votre une de grandes aides.

Donc, je viens d'essayer la méthode ci-dessous, est-ce que je fais bien, s'il vous plaît ?
(J'avais besoin de demander avant de les intégrer dans mon fichier principal .mq4 - je travaille dessus).

Merci d'avance.

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }

  if(result_message==IDNO)
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}
 

Juste une astuce de style, qui rendra votre code plus efficace (très, très légèrement)... mais bon, tout s'additionne !

Vous avez une boîte de message avec 2 boutons. S'il n'est pas IDYES, il doit être IDNO (ou la fonction n'a pas été complétée avec succès).

Il n'est donc pas nécessaire de tester result_message deux fois.

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }
   else
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}

Si vous préférez le voir écrit, utilisez une instruction 'else if' :

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }

  else if(result_message==IDNO)
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}
 
honest_knave:

Juste une astuce de style, qui rendra votre code plus efficace (très, très légèrement)... mais bon, tout s'additionne !
Vous avez une boîte de message avec 2 boutons. S'il n'est pas IDYES, il doit être IDNO (ou la fonction n'a pas été complétée avec succès).
Il n'y a donc pas besoin de tester result_message deux fois.

Merci encore pour tout.
Maintenant, je peux les mettre dans les EA principales.
( j'ai aussi besoin d'expérience pour MessageBox() )

 
Max Enrik:

Merci beaucoup plus pour tout.
Maintenant, je peux les mettre dans l'EA principale.
( j'ai aussi besoin d'expérience pour MessageBox() )

Il n'y avait rien de mal à l'écrire de l'autre façon, c'est juste une question de préférence personnelle. Je suis content que vous ayez trouvé une solution.
Raison: