conseiller expert - questions diverses - page 32

 

( Avant d'essayer d'écrire ce commentaire, je pense avoir fait de nombreuses recherches pour trouver une solution, oui j'ai trouvé des fils similaires, mais je n'ai pas trouvé de solution pour ce problème. )

J'utilise le code ci-dessous pour l'ordre de vente qui me montre le Stop Loss en pips, il me montre la valeur correcte jusqu'à ce que le Stop Loss devienne positif.
Donc, je n'ai aucune idée de la façon dont je peux essayer de résoudre ce problème.

N'importe quel commentaire serait le bienvenu, s'il vous plaît.
( note : Je n'utilise pas de Trailing Stop pour le moment. Aussi le code ci-dessous juste pour les mises à jour d'information, pas pour OrderSend() ou des choses similaires. )

if(OrderType()==OP_SELL || (OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP))
  {
   riskinpips=change_to_pips(OrderStopLoss()-OrderOpenPrice());
  }
Print("stop loss in pips",DoubleToString(riskinpips,2));

Merci d'avance.

Quand le Stop Loss génère un profit positif

(Note : les étiquettes de capture d'écran ont été faites par le programme d'édition de photos pour décrire mon problème.)
 

C'est la valeur la plus élevée moins la valeur la plus basse qui donne le résultat. Vous pouvez donc vérifier laquelle est la plus élevée.

if(OrderStopLoss()>OrderOpenPrice())
{
  // orderstoploss - orderopenprice
}

else if(OrderOpenPrice()>OrderStopLoss())
{
  // orderopenprice - orderstoploss
}
 
Marco vd Heijden:

C'est la valeur la plus élevée moins la valeur la plus basse qui donne le résultat. Vous pouvez donc vérifier laquelle est la plus élevée.

if(OrderStopLoss()>OrderOpenPrice())
{
  // orderstoploss - orderopenprice
}

else if(OrderOpenPrice()>OrderStopLoss())
{
  // orderopenprice - orderstoploss
}

Je me moque de moi-même en disant que ça ne me dérange pas. Je pense que ça pourrait m'aider. Je vais bientôt l'essayer.

Merci beaucoup M. Marco

 

#Profit Currency Calculate - Fermé

Cela fonctionne parfaitement jusqu'à présent.
Merci beaucoup @Marco vd Heijden et @whroeder1

 

#Time - Ouvert

Depuis que j'ai commencé à faire des recherches sur le temps / l'horloge pour mon EA. Je vois que les auteurs utilisent start() JUST dans l'indicateur pour cela.
J'utilise OnTimer() et OnTick() dans mon EA, je ne voudrais pas utiliser start().
J'ai donc juste besoin d'être sûr / d'apprendre quelle fonction spéciale serait meilleure pour la fonction Time and Clock ?

Je vais continuer à faire des recherches sur cette question 10 heures plus tard.
(note : J'ai déjà trouvé quelques indicateurs de temps et d'horloge sur la page Codebase de Mql5.com - mais je n'aime pas copier et coller).

Tout bon commentaire, partage de forum, et liens et autre serait mieux pour moi.

Merci d'avance.

 

La fonction de démarrage est remplacée par OnStart uniquement dans les scripts. Dans les Expert Advisors et les indicateurs, elle doit être renommée respectivement en OnTick et OnCalculate. Le code qui doit être exécuté lors d'une opération du programme mql5 doit être situé dans ces trois fonctions :

Voir : https://www.mql5.com/en/docs/migration

Documentation on MQL5: Moving from MQL4
Documentation on MQL5: Moving from MQL4
  • www.mql5.com
Moving from MQL4 - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

La fonction de démarrage est remplacée par OnStart uniquement dans les scripts. Dans les Expert Advisors et les indicateurs, elle doit être renommée respectivement en OnTick et OnCalculate. Le code qui doit être exécuté pendant une opération du programme mql5 doit se trouver dans ces trois fonctions :

Merci beaucoup plus @Marco ce commun si instructif pour moi. J'ai déjà lu " Moving from MQL4 to MQL5 ".
 
Max Enrik:

#Time - Ouvert

Depuis que j'ai commencé à faire des recherches sur le temps et l'horloge pour mon EA. Je vois que les auteurs utilisent start() JUST dans l'indicateur pour cela.
J'utilise OnTimer() et OnTick() dans mon EA, je ne voudrais pas utiliser start().
J'ai donc juste besoin d'être sûr / d'apprendre quelle fonction spéciale serait meilleure pour la fonction Time and Clock ?

Je vais continuer à faire des recherches sur cette question 10 heures plus tard.
(note : J'ai déjà trouvé quelques indicateurs de temps et d'horloge sur la page Codebase de Mql5.com - mais je n'aime pas copier et coller).

Tout bon commentaire, partage de forum, et liens et autre serait mieux pour moi.

Merci d'avance.

Utilisez OnTimer().

L'utilisation de TimeLocal() donnera une meilleure apparence, mais elle ne sera pas synchronisée avec le fuseau horaire du courtier.

L'utilisation de TimeCurrent() sera synchronisée avec votre courtier, mais peut être décalée puis "sauter" des secondes en fonction de l'arrivée des ticks. Cet exemple va mettre en évidence le problème :

#property strict

int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

void OnTimer()
  {
   Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
  }
 

#Timer - Fermé

honest_knave:

Utilisez OnTimer().
Utiliser TimeLocal() donnera une meilleure apparence, mais ne sera pas synchronisé avec le fuseau horaire du courtier.
L'utilisation de TimeCurrent() sera synchronisée avec votre courtier, mais peut être décalée puis "sauter" des secondes en fonction de l'arrivée des ticks. Cet exemple met en évidence le problème :

#property strict

int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

void OnTimer()
  {
   Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
  }
Commentaire tout à fait utile. Merci beaucoup.
 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

conseiller expert - questions diverses

honest_knave, 2016.11.30 01:28

IMHO il serait mieux que vous gardiez tous vos calculs de lot ensemble, plutôt que de les diviser entre OnChartEvent() et _lotCalc(). Une fonction qui vérifie min / max / pas et fait l'incrémentation / décrémentation.

void OnChartEvent(const int      id     , // Event ID
                  const long   & lparam , // Parameter of type long event
                  const double & dparam , // Parameter of type double event
                  const string & sparam   // Parameter of type string events
                  )
{
    _lotCalc();
    //-------Process Button---------------------------------------------------------|
    if ( sparam == _btnLotMinus )
    {
        ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
        _lotSize = fmax(_lotMin, _lotSize-_lotStep);
        _calcUpdade( CALC_CHANGE_LOT );
        printf( " | Lot: %.2f  ", _lotSize );
        return;
    }   //---if Close
    //                          ...
}

void _lotCalc()
{
    //---
    _lotMin  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MIN  );
    _lotMax  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MAX  );
    _lotStep = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_STEP );

    //---
}

#Lot Step - ReOpen

@honest_knave- merci pour votre grande aide concernant la taille de lot et le pas de lot.

J'ai juste besoin d'améliorer cette partie du code pour que lorsque " Taille du lot >= ( Lot Step * 100 ) ", le Lot Step augmente de " Lot Step * 100 ".

// lot plus
if(sparam==lotbuttonplus)
  {
   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? lotstep*10 : lotstep));

// global variable
   infoupdate();

   printf("Lot: %.2f ",lotsize);
   ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
   return;
  }

Merci d'avance.