Répondre

Partageons ici les fonctions MQL4 personnalisées de SQ !

10 réponses

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visiter le profil

Il y a 8 ans #114883

Bonjour à tous les utilisateurs de la SQ,

parce que peu d'entre nous sont issus de la programmation MQL4, nous avons nos propres idées sur la manière d'améliorer les fonctionnalités MQL4 de la SQ originale,

Je voulais donc partager avec vous quelques uns des "add-ons" que j'ai implémentés dans les fichiers MQL4 de la SQ...

De plus, je souhaite que tous ceux qui ont modifié d'une manière ou d'une autre les fichiers MQL4 de SQ partagent leurs modifications ici avec tout le monde 🙂 .

 

Je commencerai par partager quelques-uns des miens... Amusez-vous bien !

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

¢ BACKTEST BEAUCOUP PLUS RAPIDE EN UTILISANT MT4 (SANS LE MODE VISUEL) :

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Ouvrez votre fichier "Main.tpl" et insérez la ligne de code suivante quelque part sous "int start() {" et au-dessus de "drawStats() ;":

if(IsTesting()&&IsVisualMode()==false){ObjectsDeleteAll();} //Supprime tous les objets pour un backtesting MT4 plus rapide...

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

¢ LIMITEUR D'ÉCARTEMENT :

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Recherchez "MaxSlippage = 3 ;" dans le fichier "PrintParameters.inc", puis insérez la ligne de code suivante sous cette ligne :

extern double MaxSpread = 1.5 ; // << entrez votre spread maximum en PIPs ici

Recherchez "void openPosition" dans le fichier "MT4Functions.inc", puis sous "if(sqIsTradeAllowed() == 1) {" insérez la partie de code suivante :

         chaîne de caractères OrderTypeString ;
         if(orderType==OP_BUY) OrderTypeString= "#BUY" ;
         if(orderType==OP_SELL) OrderTypeString= "#SELL" ;
         if(orderType==OP_BUYLIMIT) OrderTypeString="#BUY_LIMIT" ;
         if(orderType==OP_SELLLIMIT) OrderTypeString="#SELL_LIMIT" ;
         if(orderType==OP_BUYSTOP) OrderTypeString="#BUY_STOP" ;
         if(orderType==OP_SELLSTOP) OrderTypeString="#SELL_STOP" ;
         //
         int orderStartPointInTime = GetTickCount() ;
         if(orderType==OP_BUY||orderType==OP_SELL){if(DoubleToStr((Ask - Bid)*gPointPow, 1)>DoubleToStr(MaxSpread, 1)){Log("#ERROR! : Le spread ("+OrderTypeString+") de l'ordre était trop élevé, - (Spread actuel : ("+DoubleToStr((Ask - Bid)*gPointPow, 1)+")>("+DoubleToStr(MaxSpread, 1)+" Maximum), Retardé.");Sleep(500);return(0);}}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

¢ Déterminer si l'ordre a été clôturé par le Stoploss/Takeprofit LOG NOTIFIER :

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Ouvrez votre fichier "Main.tpl" et insérez la ligne de code suivante quelque part sous "int start() {" et au-dessus de "drawStats() ;":

Order_Closure_OfSLTP_Notifier() ;

Ouvrez votre fichier "CustomCodeMT4,mq4" et insérez le code suivant quelque part sous le reste du code existant.. :

void Order_Closure_OfSLTP_Notifier()
{
   for(int i=OrdersHistoryTotal()-1;i>=0;i--){
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true&&OrderSymbol()==Symbol()){
   if(OrderMagicNumber()==MagicNumber){
   if(TimeCurrent()-OrderCloseTime()==0) //<=OrderTakeProfit()){Log("#Order : ("+OrderTypeString+" [Ticket : "+OrderTicket()+"]) was Closed By TP.");}
            if(OrderType()==OP_BUY&OrderClosePrice()<=OrderStopLoss()){Log("#Order : ("+OrderTypeString+" [Ticket : "+OrderTicket()+"]) was Closed By SL.");}
            //
            if(OrderType()==OP_SELL&OrderClosePrice()=OrderStopLoss()){Log("#Order : ("+OrderTypeString+" [Ticket : "+OrderTicket()+"]) was Closed By SL.");}
         //
      //________________________________________________________
   }}}}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visiter le profil

Il y a 8 ans #135833

Si quelqu'un a obtenu un BreakEven & TrailingStop par TICKS, merci de le partager..,

merci.

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visiter le profil

Il y a 8 ans #135874

Si quelqu'un a obtenu un BreakEven & TrailingStop par TICKS, merci de le partager..,

merci.

Quelqu'un ?

0

stearno

Client, bbp_participant, communauté, 379 réponses.

Visiter le profil

Il y a 8 ans #135903

Karish,

Je suis désolé de poser une question aussi simple. Où se trouve le "Main.tpl" ?  

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visiter le profil

Il y a 8 ans #135904

Karish,

Je suis désolé de poser une question aussi simple. Où se trouve le "Main.tpl" ?  

Tous les fichiers se trouvent dans le dossier "SQ\code",

le fichier "Main.tpl" situé dans le dossier "SQcode\Mql_MT4".

 

il y a un Main.tpl dans le dossier "SQcode\Mql_MT4_BarOpen" aussi, mais je n'utilise pas la fonctionnalité "BarOpen", seulement basée sur les Tick, donc référé au dossier "SQcode\Mql_MT4".

0

stearno

Client, bbp_participant, communauté, 379 réponses.

Visiter le profil

Il y a 8 ans #135905

Merci de votre attention !

0

mouchoirs

Client, bbp_participant, community, sq-ultimate, 487 réponses.

Visiter le profil

Il y a 7 ans #141012

Est-ce que quelqu'un a modifié le code MQL4 de la SQ pour passer le processus de validation sur MQL Market ? Je suis bloqué sur ce problème https://www.mql5.com/en/articles/2555#invalid_lot

Vous voulez devenir un algotrader rentable ? Nous avons commencé à utiliser le logiciel StrateQuant début 2014. Nous avons maintenant un très grand savoir-faire pour construire des EAs pour tous les types de marchés possibles. Nous partageons ce savoir-faire, les applications, les outils et toutes les stratégies finales avec de vrais traders. Si vous souhaitez nous rejoindre, remplissez le formulaire suivant FORMULAIRE.

0

daveng

Customer, bbp_participant, community, 93 replies.

Visiter le profil

Il y a 7 ans #141066

Oui, MQL exige de vérifier la taille du lot pour s'assurer qu'elle reste dans la fourchette de taille de lot minimale et maximale du courtier. L'étape du lot doit également être vérifiée.

Vous pouvez utiliser le code suivant (pour MT4) que j'ai modifié à partir du code original de MQL :

============================================================================

bool CheckLotSizeValue(double volume)
{
//- volume minimal autorisé pour les opérations commerciales
   if(volume<volume_min)
   {
      Print("Le volume de la taille du lot est inférieur au minimum autorisé. La taille de lot minimale autorisée est de ",min_volume) ;
      return(false) ;
   }

//- volume maximal autorisé d'opérations commerciales
   if(volume>max_volume)
   {
      Print("Le volume de la taille du lot est supérieur au maximum autorisé. La taille de lot maximale autorisée est de ",max_volume) ;
      return(false) ;
   }

//- obtenir le pas minimal de changement de volume
   int ratio=(int)MathRound(volume/volume_step) ;
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
   {
      PrintFormat("Le volume de la taille du lot n'est pas un multiple de l'étape minimale SYMBOL_VOLUME_STEP=%.2f, le volume correct le plus proche est %.2f",volume_step,ratio*volume_step) ;
      return(false) ;
   }
   
   return(true) ;
}

 

========================================================

 

Puis insérez-les dans votre section "Init" :

 

min_volume=MarketInfo(Symbol(),MODE_MINLOT) ;
max_volume=MarketInfo(Symbol(),MODE_MAXLOT) ;
volume_step=MarketInfo(Symbol(),MODE_LOTSTEP) ;

 

========================================================

 

Insérez également la commande d'appel de fonction dans votre section "start" :

 

   if(!CheckLotSizeValue(LotSize))return ;

 

En général, vous devrez insérer ce code dès le début pour que votre EA vérifie d'abord la taille du lot avant de passer au reste des codes...

=========================================================

 

Et ce n'est qu'une des vérifications, il y a un certain nombre d'autres vérifications que l'administrateur MQL s'attend à ce que vous mettiez en place également, y compris la vérification de la marge libre, la vérification du niveau de stop, la vérification du niveau de gel, la vérification de la limite de l'ordre en attente, la vérification de la limite du volume du lot et la vérification de l'erreur 1 de l'Ordermodify. Tous ces éléments sont mentionnés dans l'article de MQL.

N'oubliez pas non plus que tous vos paramètres externes doivent être dotés d'une fonction de contrôle pour vérifier la valeur de chaque paramètre. Ainsi, lorsqu'un utilisateur saisit une valeur non valide, votre EA affiche automatiquement une erreur dans le journal afin d'alerter l'utilisateur et d'arrêter l'EA.

 

Voir aussi,

Dave

 

0

mouchoirs

Client, bbp_participant, community, sq-ultimate, 487 réponses.

Visiter le profil

il y a 6 ans #143499

Est-ce que quelqu'un est capable de faire une modification MQL personnalisée du code MQ4 vers le SQ, de sorte que la taille de lot appropriée passe directement du SQ au code de la stratégie ? Ainsi, si j'ai une taille de lot de 0,08 dans le SQ, cette taille sera appliquée dès que je cliquerai sur le code MQ4. Si je dois changer cela dans plus de 100 stratégies, c'est très contrariant.

Vous voulez devenir un algotrader rentable ? Nous avons commencé à utiliser le logiciel StrateQuant début 2014. Nous avons maintenant un très grand savoir-faire pour construire des EAs pour tous les types de marchés possibles. Nous partageons ce savoir-faire, les applications, les outils et toutes les stratégies finales avec de vrais traders. Si vous souhaitez nous rejoindre, remplissez le formulaire suivant FORMULAIRE.

0

daveng

Customer, bbp_participant, community, 93 replies.

Visiter le profil

il y a 6 ans #143502

Est-ce que quelqu'un est capable de faire une modification MQL personnalisée du code MQ4 vers le SQ, de sorte que la taille de lot appropriée passe directement du SQ au code de la stratégie ? Ainsi, si j'ai une taille de lot de 0,08 dans le SQ, cette taille sera appliquée dès que je cliquerai sur le code MQ4. Si je dois changer cela dans plus de 100 stratégies, c'est très contrariant.

Si vous voulez dire qu'il faut modifier manuellement la valeur par défaut de la taille du lot dans les codes, c'est facile.

Dans les codes, recherchez "extern double Lots = 0.1 ;" qui se trouve généralement dans la partie supérieure des codes, puis modifiez manuellement la valeur en "0.08".

Sauvegardez-le, et à chaque fois que vous lancerez l'EA, il utilisera une taille de lot par défaut de "0.08".

Mais si vous avez 100 EA, vous devrez le faire manuellement pour chaque EA. Je ne sais pas s'il y a un moyen facile de changer cela en masse.

 

Voir aussi,

Dave

0

mouchoirs

Client, bbp_participant, community, sq-ultimate, 487 réponses.

Visiter le profil

il y a 6 ans #143503

Ce conseil est inutile, je sais comment le faire manuellement, je sais comment le faire pour plus de 100 stratégies en un seul clic si la taille de lot est la même - mais pour moi, chaque stratégie négocie une taille de lot différente, qui est déjà utilisée dans SQ et stockée dans le fichier STR. et je veux un moyen simple de mettre cette valeur exacte dans le code MQL.

 

si nous ne pouvons pas écrire quelque chose comme ce qui a été discuté - fonction MQL personnalisée

 

nous pouvons exécuter un script (R, python, etc.) qui recherchera la taille des lots dans le fichier STR et l'intégrera automatiquement dans le fichier MQ4.

Vous voulez devenir un algotrader rentable ? Nous avons commencé à utiliser le logiciel StrateQuant début 2014. Nous avons maintenant un très grand savoir-faire pour construire des EAs pour tous les types de marchés possibles. Nous partageons ce savoir-faire, les applications, les outils et toutes les stratégies finales avec de vrais traders. Si vous souhaitez nous rejoindre, remplissez le formulaire suivant FORMULAIRE.

0

Affichage de 10 réponses de 1 à 10 (sur un total de 10)