Présentation et utilisation du langage MQL5

 

MQL5 est le nouveau langage de programmation de la plateforme MetaTrader 5.

Voici l’enregistrement, les slides et l’automate du webinaire intitulé: “Présentation et utilisation du langage MQL5“.

Sommaire: Nicolas Vitale et Alexandre Navet du site Trading Automatique, vous présenterons le langage MQL5 et MetaEditor. Ce webinaire vous permettra de vous familiariser avec ce nouveau langage de programmation.

Intervenants: Nicolas Vitale et Alexandre Navet

Cliquez sur l’image pour accéder a l’enregistrement du webinaire. (il faut être connecté)

webinaire ninjatrader

Téléchargez la présentation (il faut être connecté)

Téléchargez l’automate de démonstration (il faut être connecté)

Programmer en MQL4

 

Sortie en boutique ce mois ci du livre de Henry Baltzer intitulé “Programmer en MQL4“. Henry avait déjà écrit en format électronique le fameux “MQL4 pour les nuls“. Face à la demande et à l’abscence de toute offre francophone, il a décidé d’amméliorer ce premier jet et de produire un livre complet au format papier. Le livre étant publié à compte d’auteur, acheter une version est aussi un moyen de supporter ce genre d’inititatives plus que rares puisque c’est la première…

 

 

Apprenez à automatiser vos stratégies sur MetaTrader 4. Cet ouvrage est le premier guide de programmation en MQL4 en français. Grâce à ce manuel, vous pourrez apprendre à programmer vos stratégies, modifier des codes existants ou encore tout simplement comprendre la logique derrière certains experts consultants.

Programmer en MQL4 est dispoinible en boutique de Trading Automatique.

Trading Semi Automatique – Une évidence ?

Présentation

L’accidentologie en trading… vous connaissez ? Si non, vous trouverez probablement, ici, de nombreuses réponses à vos questions dans ce domaine.

Des questions? Des idées? Des astuces? Venez échanger et discuter sur le forum !

Le ‘Trading Semi Automatique‘ est né de deux constats à la fois simples et déroutants :

Constat No1: Nombreux sont les traders qui prennent des positions, sur les marchés financiers, à l’aveugle, au feeling, avec plus ou moins de réussite. A moyen ou long terme, les gains sont moyens, n’équilibrant parfois même pas les frais d’équipement et de courtage. Au final, un rapport gain/temps passé ne justifiant pas la poursuite de cette activité, sauf à titre de divertissement intellectuel.

Constat No2: Même s’il est en possession d’un système de trading statistiquement gagnant, sur la base d’une simulation sur des données historiques, tout être humain (trader, spéculateur, investisseurs, boursicoteurs…) risque de ne pas réaliser les gains potentiels sur les marchés financiers, voir même de perdre ses capitaux s’il ne respecte pas exactement les règles sous jacentes au système de trading sus mentionné. Et cela, pour diverses raisons inhérentes aux comportements humains.

Ainsi, comme illustré ci dessous, de nombreuses idées de trading, à fort potentiel de réussite, naissent dans votre esprit sans pourtant ne jamais être mise en pratique. D’une part, car le passage de l’idée à sa simple expression sur un feuille de papier, puis ensuite sur une plateforme de trading est un vrai chemin de croix; D’autre part car une fois mise en place, avec tous les indicateurs, voyants et clignotants nécessaires, la stratégie est difficile à lire et à interpréter. Par conséquent, elle n’est pas scrupuleusement respectée. Et donc ne elle ne produit pas les résultats escomptés.

Le ‘Trading Semi Automatique‘ est un style de trading actif, à mi chemin entre le trading automatique, ou vous déléguez totalement à votre ordinateur personnel l’exécution de votre stratégie de trading, et le trading manuel,  dans lequel les tâches de sélection des instruments, d’analyse et de décision sont entièrement exécutées par vous même. En effet, tout en restant présents devant vos écrans et étant acteurs de la gestion de vos positions, vous déléguez les tâches les plus importantes et fastidieuses à votre nouvel assistant personnel.

Batir votre stratégies de trading

Dans un premier temps, le ‘Trading Semi Automatique‘ est le fil rouge de la construction de votre stratégie de trading. Sous la forme d’un canevas, sa mise en place vous contraint à suivre une réflexion jalonnée de questions essentielles auxquelles il faut répondre avant de prendre vos premières décisions d’achat et de vente.

Stratégie de trading et Statistiques

Les réponses aux questions essentielles à une prise de position gagnante en trading ne sont pas suffisantes. Il est important d’évaluer leur application sur les marchés afin de valider leur pertinence.

Donc, avant toute utilisation, a posteriori, “tactique”, le ‘Trading Semi Automatique‘ offre à son utilisateur un ensemble de données statistiquement calculées sur un échantillon sélectionné par l’utilisateur. Ainsi, le ‘Trading Semi Automatique‘ permet une utilisation “stratégique” car il guide également, par une cartographie statistique des résultats issus d’une simulation de trading sur des données historiques, son utilisateur dans la construction et l’optimisation d’un système et d’une stratégie de trading personnels.

Sur une période de temps, ou une série de données historiques, choisie par l’utilisateur, le ‘Trading Semi Automatique‘  permet de calculer en temps réel des données statistiques.

D’une part, comme ci dessous, sur la performance de la stratégie de trading, en quantifiant le taux de réussite des différentes opérations dérivées de l’application de la stratégie sous jacente.

D’autre part, comme ci dessous, en cartographiant, sur la base d’une simulation passée, les durées moyennes des différentes étapes et actions de la stratégie sous jacente.

Si les résultats sont satisfaisant pour vous, alors vous pouvez allez encore plus loin en utilisant le ‘Trading Semi Automatique‘ comme interface pilote pour le ProBackTest.

Non seulement le ‘Trading Semi Automatique‘ facilite l’utilisation du module ProBackTest de ProRealTime, mais aussi il vous fournit un esemble de données statistiques complémentaires afin de valider vos décisions stratégiques.

La partition du trader

Ca y est… avec le ‘Trading Semi Automatique‘, votre stratégie de trading est en place. Maintenant, le ‘Trading Semi Automatique‘ devient une partition de trading pour le trader, spéculateur, investisseur ou  boursicoteur… A l’instar d’une partition musicale pour un musicien, le ‘Trading Semi Automatique‘ retranscrit en temps réel et avec détails et exactitude, la succession rythmée des actions nécessaires à l’exécution parfaite et répétée de votre stratégie de trading.

Le ‘Trading Semi Automatique‘ est une approche alternative à l’utilisation de “robots” de trading. Elle est accessible à tous, sous condition d’avoir une stratégie de trading personnelle.

En d’autres termes, c’est un assistant logiciel ou programme informatique qui s’adresse à tous ceux, ou celles (trader, spéculateurs, investisseurs, boursicoteurs…) qui achètent ou vendent des actifs sur les marchés financiers, quelle que soit leur nature (e.g. actions, indices, future, options, devises, métaux, matières première et autres).

A ce jour, il est uniquement disponible sur la plateforme ProRealTime.

Attention, le ‘Trading Semi Automatique‘ n’est pas une stratégie de trading générant des signaux d’achat ou de vente. Aussi, le ‘Trading Semi Automatique‘ n’est pas un robot de trading prenant des positions sur les marchés pour le compte de son utilisateur.

Le ‘Trading Semi Automatique‘ est un tuteur logiciel pour guider, à chaque cotation de prix sur le marché étudié, son utilisateur dans l’exécution des décisions issues d’une stratégie de trading personnelle.

Illustration

L’écran d’un trader est souvent optimisé pour fournir une grande quantité d’informations, qui parfois nuit gravement à la santé de la stratégie de trading. Il est difficile, même pour les plus érudits d’extraire à un instant précis l’essentiel de l’information pour une prise de décision rapide et performante.

Les indications fournies par le Trading Semi Automatique sont le reflet du système et de la stratégie de trading de l’utilisateur.

Le Trading Semi Automatique sous la forme d’une fenêtre à l’écran de la plateforme de trading se positionne au dessus, au dessous, ou à la place de la fenêtre de représentation des prix !

Par un code de couleurs et de formes, il guide l’utilisateur dans le passage d’ordres d’achat ou de vente sur les marchés financiers.

L’écran Trading Semi Automatique seul peut permettre à son utilisateur de transmettre à son courtier des ordres d’achat et de vente sans même consulter le graphique des prix, alors inutile.

Le Trading Semi Automatique est aussi disponible pour les stratégies de vente ou prise de positions à découvert.

Par un code de couleurs et de formes, il guide l’utilisateur dans le passage d’ordres sur les marchés financiers.

L’affichage simultané, par l’utilisateur, des deux fenêtres, positions à l’achat et à la vente, est également possible.

Avec l’écran Trading Semi Automatique, tous les indicateurs techniques du trader peuvent être supprimés de l’écran. Même le graphique des prix n’est plus indispensable.

 

L’alerte

Le Trading Semi Automatique inclus dans la définition de votre stratégie un code ‘Alerte’. Ce dernier déclenche un signal en amont de celui de prise de position. Ainsi, le Trading Semi Automatique simplifie l’utilisation du ProScreener de ProRealTime. Quelques lignes de programation suffisent pour être alerté des opportunités détectées par votre stratégie de trading.

Stratégie “Tuning”

Bien évidemment, vous pouvez utiliser votre stratégie sur plusieurs instruments financiers, et sur plusieurs marchés.  Et bien évidemment, les composants variables de votre stratégie, tels que le spread de votre courtier ou encore le seuil de financement de votre position, doivent être adaptés.

L’interface de paramétrage du Trading Semi Automatique vous permet de personaliser les variables de gestion de position selon l’instrument financier.

Plug & Play

La communauté des utilisateurs ProRealTime ne cesse de grandir. Et pourtant, souvent l’échange d’idées, d’indicateurs et de stratégies se confronte à des erreurs d’interpretations et de programmations. L’interface de prgrammation du ‘Trading Semi Automatique’ est précise et unique. Un simple copier/coller de la trame d’une stratégie postée sur un forum, et vous pouvez immédiatement en comprendre les rouages, l’adapter à votre style de trading et vérifier sa performance sur les marchés que vous preférez.

En Résumé

Le ‘Trading Semi Automatique’ vous permet dans un premier temps de construire pas à pas votre stratégie de trading, de l’évaluer, de la tester et de l’optimiser. Une fois satisfait, le même  ‘Trading Semi Automatique’ vous guide avec exactitude dans l’application de votre stratégie.

Il se présente sous la forme de 3 indicateurs pour chaque type de position (achat et vente)

  1. Bandeau tuteur pour la gestion des positions.
  2. Statistique des ordres.
  3. Statistique des positions.

Le code  ?

Si vous utilisez ProRealTime, “en direct”, alors n’hésitez pas à envoyer un email à info@prorealtime.com pour demander l’activation gratuite des indicateur suivants.

GNT@SYS

GNT@TSA-Long

GNT@TSA-Long-BarStat

GNT@TSA-Long-OrderStat

GNT@TSA-Short

GNT@TSA-Short-BarStat

GNT@TSA-Short-OrderStat

N’oubliez pas de préciser votre identifiant ProRealTime et aussi bien évidemment de mentionner que je vous ai donné le droit d’accès sur www.trading-automatique.fr

Si vous utilisez ProRealTime à travers un courtier, alors il va faudra copier/coller le code de l’indicateur (cliquez sur le nom) et aussi paramétrer les variables comme indiqué. Surement un peu de travail, mais vous verrez que ce travail sera vite récompensé. Pour ceux qui souhaitent obtenir le détail du code, veuillez noter que le code est réservé aux membres inscrits sur www.trading-automatique.fr Rejoignez-nous… c’est gratuit 🙂

Bons Trades,

Grégoire Tardy

 

ProRealTime: GNT@SYS

Voici le code de l’indicateur ProRealTime GNT@SYS

Des questions? Des idées? Des astuces? Venez échanger et discuter sur le forum !

Bons trades.

Grégoire Tardy

// Grégoire Tardy 01.01.2010
// Update : 01.01.2011

///////   A LIRE ATTENTIVEMENT AVANT L’UTILISATION DU TRADING SEMI AUTOMATIQUE ////////

/// LE PROGRAMME CI DESSOUS EST LIBRE DE TOUTE MODIFICATION. EN EFFET, IL VOUS PERMET
/// DE CONSTRUIRE VOTRE STRATEGIE DE TRADING ET DE LA COMMUNIQUER AU TRADING SEMI
/// AUTOMATIQUE. AVANT TOUTE MODIFICATION, PRENEZ SOINS DE COPIER TOUT SON CONTENU
/// DANS UN FICHIER TEXTE QUE VOUS CONSERVEREZ PRECIEUSEMENT.

/// LE TRADING SEMI AUTOMATIQUE N’EST PAS UN SYSTEME DE TRADING. AINSI, POUR L’UTILISER
/// VOUS DEVEZ LUI ADJOINDRE VOTRE SYSTEME DE TRADING PERSONNEL. POUR CE FAIRE, VOUS
/// DEVEZ COPIER ET COLLER VOTRE SYSTEME DE TRADING DANS L’INDICATEUR PROREALTIME
/// ‘GNT@SYS’ QUE VOUS TROUVEREZ DANS LA LISTE DES INDICATEURS UNE FOIS LE MODULE
/// ‘GNT@TSA’ INSTALLE SUR VOTRE PLATEFORME. L’INDICATEUR ‘GNT@SYS’ EST LE SEUL INDICATEUR
/// QUI EST UTILISE PAR LE PROGRAMME ‘GNT@TSA’.

/// L’INDICATEUR ‘GNT@SYS’ EST UNE STRUCTURE PROFORMAT POUR VOUS GUIDER DANS LA
/// COMMUNICATION DES DONNEES NECCESSAIRES AU FONCTIONNEMENT DU ‘GNT@TSA’

/// A TITRE D’EXEMPLE, UN SYSTEME DE TRADING FICTIF EST FOURNI PAR DEFAUT DANS L’INDICATEUR
/// ‘GNT@SYS’. IL PERMET D’ILLUSTRER L’UTILISATION DU ‘GNT@TSA’ SUR LE MARCHE DES DEVISES
/// DIT ‘FOREX’. ATTENTION, NE PAS UTILISER CE SYSTEME FICTIF !

/// EN VOICI CI DESSOUS UN DESCRIPTIF.

// Signal Alerte : Croissement d’une moyenne mobile exponentielle de 8 périodes avec une
// moyenne mobile exponentielle de 21 périodes

// Signal Entrée en position : Rebond du cours (prix) sur la moyenne mobile
// exponentielle de 21 périodes

// Signal d’invalidation : Croissement, dans le sens inverse au signal d’alerte, des deux
// moyennes mobiles, rapidement après la prise de position sur le marché.

// Signal de prise de bénéfice : Croissement de la moyenne mobile exponentielle de 21
// périodes par le cours de clôture.

// Signal de clôture de position : Croissement, dans le sens inverse au signal d’alerte,
// des deux moyennes mobiles.

// STOP DE PROTECTION A 10 PIPS AU DELA DU PUS HAUT/BAS A L’INSTANT DU SIGNAL
// OBJECTIF DE SORTIE A 40 PIPS AU DELA DU PUS HAUT/BAS A L’INSTANT DU SIGNAL

/////////////////////////////////////////////////////////////////////////////////////////
// Initialisation des variables
/////////////////////////////////////////////////////////////////////////////////////////

/// CI APRES DEUX VARIABLES POUR LA GESTION DE LA TENDANCE DANS LE SYSTEME DE TRADING
/// FICTIF

Trda = 0
Trdv = 0

/// CI APRES, TOUTES LES VARIABLES NECESSAIRES AU TRADING SEMI AUTOMTIQUE POUR VOUS
/// GUIDER DANS LA GESTION DE VOS POSITIONS

LgAle = 0
ShAle = 0

LgSig = 0
ShSig = 0

StopPrice = 0
ObjPrice = 0

LgBenSig = 0
ShBenSig = 0

LgOutSig = 0
ShOutSig = 0

LgInvSig = 0
ShInvSig = 0

/////////////////////////////////////////////////////////////////////////////////////////
// Appel des fonctions externes ou calcul d’indicateurs sous jacents à la stratégie
/////////////////////////////////////////////////////////////////////////////////////////

EMASh = ExponentialAverage[8](close)
EMALg = ExponentialAverage[21](close)

/////////////////////////////////////////////////////////////////////////////////////////
// Gestion des filtres
/////////////////////////////////////////////////////////////////////////////////////////

/// LA TENDANCE EST DEFINIE PAR LA POSITION DE LA MOYENNE MOBILE COURTE, PAR RAPPORT A LA
/// MOYENNE MOBILE LONGUE

If EMASh => EMALg Then
 
 TRDA = 1
 TRDV = 0
Else
 TRDA = 0
Endif

If EMASh < EMALg  Then
 
 TRDV = 1
 TRDA = 0
Else
 TRDV = 0
Endif

/////////////////////////////////////////////////////////////////////////////////////////
// Gestion des signaux
/////////////////////////////////////////////////////////////////////////////////////////

// Signal d’alerte //
//——————//

// LE SIGNAL D’ALERTE ET ISSUE DU CROISSEMENT DES DEUX MOYENNES MOBILES EXPONENTIELLES

LgAle = EMASh crosses over  EMALg  /// Signal d’alerte à la hausse
ShAle = EMASh crosses under EMALg  /// Signal d’alerte à la baisse

// Signal d’entrée en position //
//—————————–//

// LE SIGNAL D’ENTREE EN POSITION EST ISSU DU REBOND DES PRIX SUR LA MOYENNE MOBILE EXPONENTIELLE DE 21 PERIODES

LgSig = TRDA AND ((Close crosses over EMALg) OR (Close > EMALg AND OPEN > CLOSE))
ShSig = TRDV AND ((Close crosses under EMALg) OR (Close EMALg AND CLOSE < EMALg)) AND (OPEN < CLOSE)

 

// Signal d’invalidation de la position //

//————————————-//

// IL Y A INVALIDATION DU SIGNAL SI NOUVEAU CROISSEMENT, DANS LE SENS INVERSE DES DEUX MOYENNES MOBILES.

LgInvSig = EMASh crosses under EMALg
ShInvSig = EMASh crosses over EMALg

// Si vous ne souhaitez pas utiliser un signal d’invalidation, alors il suffit
// d’attribuer la valeur 0 à la variable. Comme ci dessous !
// LgInvSig = 0
// ShInvSig = 0

// Signal de prise de bénéfice //
//—————————-//

// IL Y A UN SIGNAL DE PRISE DE BENENFICES SI LE COURS EN CLOTURE CROISE LA MOYENNE MOBILE EXPONENTIELLE DE 21 PERIODES

LgBenSig = CLOSE crosses under EMALg
ShBenSig = CLOSE crosses over EMALg

// Si vous ne souhaitez pas utiliser un signal de prise de bénéfice, alors il suffit
// d’attribuer la valeur 0 à la variable. Comme ci dessous !
// LgBenSig = 0
// ShBenSig = 0

// Signal de sortie de position //
//——————————//

// IL Y A SIGNAL DE SORTIE SI NOUVEAU CROISSEMENT, DANS LE SENS INVERSE DES DEUX MOYENNES MOBILES.

LgOutSig = EMASh crosses under EMALg
ShOutSig = EMASh crosses over EMALg

/////////////////////////////////////////////////////////////////////////////////////////////
// Stop & Objectif
/////////////////////////////////////////////////////////////////////////////////////////

/// IL EST IMPORTANT DE COMMUNIQUER AU TRADING SEMI AUTOMATIQUE VOTRE NIVEAU DE SORTIE ET
/// VOTRE OBJECTIF AU MOMENT OU VOUS AVEC VOTRE SIGNAL D’ENTREE EN POSITION.

/// ATTENTION, VOUS AVEZ LA POSSIBILITE DE TRANSMETTRE UNE VALEUR ISSUE D’UN CALCUL FIXE,
/// SOIT PRIX/COURS PLUS OU MOINS X% OU X POINTS OU PIPS. MAIS EGALEMENT D’UN INDICATEUR, /// SOIT LA VALEUR D’UNE MOYENNE MOBILE PLUS OU MOINS X% OU X POINTS OU PIPS.
/// TOUTEFOIS, CES DONNES NE SONT TRANSMISES QU’A L’INSTANT DU SIGNAL D’ENTREE EN
/// POSITION

/// SI ENTREE EN POSITION LONGUE ////

If LgSig = 1 Then
 StopPrice = LOW – 0.001
 ObjPrice = HIGH + 15
Endif

/// SI ENTREE EN POSITION COURTE ////

If ShSig = 1 Then
 StopPrice = HIGH + 0.001
 ObjPrice =  Low – 15
Endif

/////////////////////////////////////////////////////////////////////////////////////////
// Gestion des retours
/////////////////////////////////////////////////////////////////////////////////////////

// CI APRES LA LIGNE LA PLUS IMPORTANTE DU PROGRAMME GNT@SYS, CELLE QUI VA PERMETTRE
// LA TRANSMISSION DES VALEURS DE VOTRE SYSTEME DE TRADING AU TRADING SEMI AUTOMATIQUE
// GNT@TSA

// VOUS TROUVEREZ CI APRES 12 VALEURS A RETOURNER. NE PAS MODIFIER CETTE LIGNE AU RISQUE // DE CREER UN DYSFONCTIONNEMENT DU TRADING SEMI AUTOMATIQUE. SI VOUS N’UTILISEZ PAS CERTAINS SIGNAUX, ALORS AFFECTEZ LEUR UNE VALEUR DE 0 DANS LE PROGRAMME CI DESSUS.

Return LgAle as “LgAle”, ShAle as “ShAle”, LgSig as “LgSig” , ShSig as “ShSig” , StopPrice as “StopPrice” , ObjPrice as “ObjectifPrice”,  LgInvSig as  “LgInvSig”,  ShInvSig as “ShInvSig”, LgBenSig as “LgBenSig” , ShBenSig as “ShBenSig”, LgOutSig as  “LgOutSig”,   ShOutSig as “ShOutSig”

ProRealTime: GNT@TSA-Long

Voici le code de l’indicateur ProRealTime GNT@TSA-Long

Des questions? Des idées? Des astuces? Venez échanger et discuter sur le forum !

Pour le paramétrage des variables… c’est ici.

Bons trades.

Grégoire Tardy

// Update : 08.11.2010
// Version 8
// Ajout autonomie des modules
// GNT@TSA-Long

Once FinObj = FinObj
Once FinObjSup = FinObjSup
Once FinBenef = FinBenef
Once FinType = FinType
Once Spread = Spread
Once SprType = SprType
Once Pymd = Pymd
Once Annee = Annee
Once Mois = Mois
Once Jour = Jour

If (Annee > 1950 AND Annee < 2050) AND Mois < 13 AND Jour <32 Then

If (Year > Annee) OR (Year = Annee AND Month => Mois and Day => Jour) Then

Once PosLgOpenActiv = 0
Once PosLgFinActiv = 0
Once PosLgFinSupActiv = 0
Once PosLgObjActiv = 0
Once PosLgInIndic = 0
PosLgAleIndic = 0
PosLgStopIndic = 0
PosLgInvIndic = 0
PosLgFinIndic = 0
PosLgFinPlusIndic = 0
PosLgObjIndic = 0
PosLgPydIndic = 0
PosLgBenTrendIndic = 0
PosLgBenIndic = 0
PosLgOutIndic = 0
xHIndic = 0
Once PosLgOpenPrice = 0
Once PosLgClosePrice = 0
Once PosLgBenefPrice = 0
Once PosLgStopPrice = 0
Once PosStopPrice = 0
Once PosLgObjPrice = 0
Once NextObjPrice = 0
Once NextObjSupPrice = 0
Once BenefObjPrice = 0
Once NbTrLg = 0
Once NbTrLgSto = 0
Once NbTrLgInv = 0
Once NbTrLgFin = 0
Once NbTrLgObj = 0
Once NbTrLgWin = 0
Once NbTrLgLos = 0
Once GainTrLg= 0
Once TotGainTrLg = 0
Once AvgGainTrLg = 0
Once LosTrLg = 0
Once TotLosTrLg = 0
Once AvgLosTrLg = 0
PosNbBar = 0
Once PosBarIn = 0
Once PosBarOut = 0
Once CountPosBar = 0
Once NbMoyPosBar = 0
Once MinPosNbBar = 0
Once MaxPosNbBar = 0
Once StopPosNbBar = 0
Once InvPosNbBar = 0
Once FinPosNbBar = 0
Once ObjPosNbBar = 0
Once WinPosNbBar = 0
Once LosPosNbBar = 0
LgAle = 0
LgSig = 0
StopPrice = 0
ObjPrice = 0
LgInvSig = 0
LgBenSig = 0
LgOutSig = 0
LgAle, ignored, LgSig , ignored, StopPrice, ObjPrice, LgInvSig, ignored, LgBenSig, ignored, LgOutSig, ignored = CALL “GNT@SYS
If PosLgOpenActiv = 0 Then
If LgAle 0 Then
PosLgAleIndic = 3
EndIf
EndIf
If LgSig 0 Then
xHIndic = 3
If PosLgOpenActiv 0 Then
xHIndic = xHIndic / 3*2
If Pymd 0 Then
If Pymd = 1 Then
If PosLgFinActiv 0 Then
PosLgPydIndic = 1
EndIf
EndIf
If Pymd = 2 Then
PosLgPydIndic = 1
EndIF
EndIf
Endif
Else
xHIndic =0
EndIf
If PosLgOpenActiv 0 Then
PosLgInIndic = 1
If PosLgObjActiv 0 Then
PosLgInIndic = PosLgInIndic /2
EndIf
Else
PosLgInIndic = 0
Endif
If PosLgOpenActiv 0 Then
GainTrLg = Close – PosLgOpenPrice
Else
GainTrLg = 0
Endif
If FinObj 0 Then
If PosLgOpenActiv 0 Then
If PosLgFinActiv = 0 then
If FinType = 0 Then
NextObjPrice = PosLgOpenPrice + FinObj
Else
NextObjPrice = PosLgOpenPrice * ( 1 + ( FinObj / 100))
Endif
If High => (NextObjPrice) Then
PosLgFinIndic = 2
PosLgFinPlusIndic = 0
PosLgFinActiv = 1
NbTrLgFin = NbTrLgFin + 1
FinPosNbBar = FinPosNbBar + (BarIndex – PosBarIn)
Else
PosLgFinIndic = 0
PosLgFinPlusIndic = 0
Endif
Else
PosLgFinIndic = 0
PosLgFinPlusIndic = 0
Endif
Endif
EndIf
If (FinObjSup 0 AND FinObjSup > FinObj) OR (FinObj = 0 AND FinObjSup 0) Then
If PosLgOpenActiv 0 Then
If (PosLgFinActiv 0 OR FinObj = 0) and PosLgFinSupActiv = 0 Then
If FinType = 0 Then
NextObjSupPrice = PosLgOpenPrice + FinObjSup
Else
NextObjSupPrice = PosLgOpenPrice * ( 1 + (FinObjSup / 100))
Endif
If High => (NextObjSupPrice) Then
PosLgFinIndic = PosLgFinIndic
PosLgFinPlusIndic = 2
PosLgFinSupActiv = 1
Else
PosLgFinIndic = PosLgFinIndic
PosLgFinPlusIndic = 0
PosLgFinSupActiv = 0
Endif
Endif
Endif
EndIf
If PosLgOpenActiv 0 Then
If PosLgObjActiv = 0 Then
If High => PosLgObjPrice Then
PosLgObjIndic = 1.5
PosLgObjActiv = 1
NbTrLgObj = NbTrLgObj + 1
ObjPosNbBar = ObjPosNbBar + (BarIndex – PosBarIn)
Else
PosLgObjIndic = 0
EndIf
EndIf
If LgBenSig = 1 Then
PosLgBenIndic = 1
Else
PosLgBenIndic = 0
Endif
If FinBenef 0 AND FinBenef > MAX(FinObj, FinObjSup) Then
If PosLgFinActiv = 1 Then
If FinType = 0 Then
BenefObjPrice = PosLgBenefPrice + FinBenef
Else
BenefObjPrice = PosLgBenefPrice * ( 1 + (FinBenef / 100))
Endif
If High >= BenefObjPrice Then
PosLgBenTrendIndic = 1.5
If FinType = 0 Then
PosLgBenefPrice = PosLgBenefPrice + FinBenef
Else
PosLgBenefPrice = PosLgBenefPrice * ( 1 + (FinBenef / 100))
Endif
Else
PosLgBenTrendIndic = 0
Endif
Endif
EndIf
EndIf
If PosLgOpenActiv 0 Then
If Low <= PosLgStopPrice OR ( LgInvSig 0 AND PosLgFinActiv = 0 AND PosLgFinSupActiv = 0) Or LgOutSig 0 Then
If LgInvSig 0 AND PosLgFinActiv = 0 Then
PosLgInvIndic = 1.5
NbTrLgInv = NbTrLgInv + 1
InvPosNbBar = InvPosNbBar + (BarIndex – PosBarIn)
InvPosNbBar = InvPosNbBar
EndIf
If LgOutSig 0 Then
PosLgOutIndic = 2.5
EndIf
PosLgClosePrice = OpenOfNextBar
If Low <= PosLgStopPrice Then
PosLgStopIndic = 3
NbTrLgSto = NbTrLgSto + 1
StopPosNbBar = StopPosNbBar + (BarIndex – PosBarIn)
StopPosNbBar = StopPosNbBar
PosLgClosePrice = PosLgStopPrice
If PosLgInvIndic = 2 Then
NbTrLgInv = NbTrLgInv – 1
InvPosNbBar = InvPosNbBar – (BarIndex – PosBarIn)
EndIf
Endif
PosLgOpenActiv = 0
PosLgFinActiv = 0
PosLgFinSupActiv = 0
PosLgObjActiv = 0
PosBarOut = BarIndex
NbTrLg = NbTrLg + 1
If (PosLgClosePrice – PosLgOpenPrice ) > 0 Then
NbTrLgWin = NbTrLgWin + 1
WinPosNbBar = WinPosNbBar + (BarIndex – PosBarIn)
GainTrLg = (PosLgOpenPrice – PosLgClosePrice)
TotGainTrLg = TotGainTrLg + GainTrLg
AvgGainTrLg = TotGainTrLg / NbTrLgWin
AvgGainTrLg = AvgGainTrLg
EndIf
If (PosLgClosePrice – PosLgOpenPrice ) <= 0 Then
NbTrLgLos = NbTrLgLos + 1
LosPosNbBar = LosPosNbBar + (BarIndex – PosBarIn)
LosTrLg = ( PosLgClosePrice – PosLgOpenPrice)
TotLosTrLg = TotLosTrLg + LosTrLg
AvgLosTrLg = TotLosTrLg / NbTrLgLos
AvgLosTrLg = AvgLosTrLg
EndIf
PosNbBar = PosBarOut – PosBarIn
CountPosBar = CountPosBar + PosNbBar
NbMoyPosBar = CountPosBar / NbTrLg
NbMoyPosBar = NbMoyPosBar
If MinPosNbBar = 0 Then
MinPosNbBar = PosNbBar
Else
If PosNbBar < MinPosNbBar Then
MinPosNbBar = PosNbBar
EndIf
EndIf
If MaxPosNbBar = 0 Then
MaxPosNbBar = PosNbBar
Else
If PosNbBar > MaxPosNbBar Then
MaxPosNbBar = PosNbBar
EndIf
EndIf
GainTrLg = 0
Endif
Endif
If (PosLgStopIndic = 0 AND PosLgInvIndic = 0 AND PosLgInvIndic = 0) Then
If LgSig = 1 Then
If PosLgOpenActiv = 0 Then
PosLgOpenActiv = 1
PosLgFinActiv = 0
PosLgFinSupActiv = 0
PosLgObjActiv = 0
PosLgAleIndic = 0
PosLgInIndic = 0
PosLgStopIndic = 0
PosLgInvIndic = 0
PosLgFinIndic = 0
PosLgFinPlusIndic = 0
PosLgPydIndic = 0
PosLgObjIndic = 0
PosLgBenIndic = 0
PosLgBenTrendIndic = 0
PosLgOutIndic = 0
If SprType = 0 Then
PosLgOpenPrice = OpenOfNextBar + Spread
Else
PosLgOpenPrice = OpenOfNextBar * (1 + (Spread / 100))
EndIf
PosLgBenefPrice = PosLgOpenPrice
PosLgStopPrice = StopPrice
PosStopPrice = PosLgStopPrice
PosStopPrice = PosStopPrice
PosLgObjPrice = ObjPrice
GainTrLg = 0
LosTrLg = 0
PosNbBar = 0
PosBarIn = BarIndex
PosBarOut = 0
EndIf
EndIf
EndIf
Else
xHIndic = 0
PosLgInIndic = 0
PosLgInvIndic = 0
PosLgStopIndic = 0
PosLgFinIndic = 0
PosLgFinPlusIndic = 0
PosLgObjIndic = 0
PosLgBenTrendIndic = 0
PosLgBenIndic = 0
PosLgOutIndic = 0
NbTrLg = 0
NbTrLgSto = 0
NbTrLgInv = 0
NbTrLgFin = 0
NbTrLgWin = 0
NbTrLgLos = 0
NbTrLgObj = 0
TotGainTrLg = 0
TotLosTrLg = 0
AvgGainTrLg = 0
AvgLosTrLg = 0
GainTrLg = 0
LosTrLg = 0
PosStopPrice = 0
FinObj = FinObj
FinObjSup = FinObjSup
FinBenef = FinBenef
FinType = FinType
Spread = Spread
SprType = SprType
Pymd = Pymd
Annee = Annee
Mois = Mois
Jour = Jour
Endif
EndIf
Return PosLgAleIndic as “Alerte”, xHIndic as “Signal Prise Position”, PosLgInIndic as “En Position Longue”, PosLgInvIndic as “Signal Invalidation”, PosLgStopIndic as “Signal Stop”, PosLgFinIndic as “Financement Prudent”, PosLgFinPlusIndic as “Financement Audacieux”, PosLgObjIndic as “Signal Position Objectif” , PosLgBenTrendIndic as “Position Objectif Absolu” , PosLgBenIndic as “Signal Prise Bénéfice”, PosLgOutIndic as “Signal Sortie”, PosLgPydIndic as “Signal Pyramidage”

ProRealTime: GNT@TSA-Long-BarStat

Voici le code de l’indicateur ProRealTime GNT@TSA-Long-Barstat

Des questions? Des idées? Des astuces? Venez échanger et discuter sur le forum !

Pour le paramétrage des variables… c’est ici.

Bons trades.

Grégoire Tardy

// Grégoire Tardy 01.01.2010
// Update : 08.11.2010
// Version 8
// Ajout autonomie des modules

Once FinObj = FinObj
Once FinObjSup = FinObjSup
Once FinBenef = FinBenef
Once FinType = FinType
Once Spread = Spread
Once SprType = SprType
Once Pymd = Pymd
Once Annee = Annee
Once Mois = Mois
Once Jour = Jour

If (Annee > 1950 AND Annee < 2050) AND Mois < 13 AND Jour <32 Then
 
 If (Year > Annee) OR (Year = Annee AND Month => Mois and Day => Jour) Then
  
  Once PosLgOpenActiv = 0
  Once PosLgFinActiv = 0
  Once PosLgFinSupActiv = 0
  Once PosLgObjActiv = 0
  Once PosLgInIndic = 0
  PosLgAleIndic = 0
  PosLgStopIndic = 0
  PosLgInvIndic = 0
  PosLgFinIndic = 0
  PosLgFinPlusIndic = 0
  PosLgObjIndic = 0
  PosLgPydIndic = 0
  PosLgBenTrendIndic = 0
  PosLgBenIndic = 0
  PosLgOutIndic = 0
  xHIndic = 0
  Once PosLgOpenPrice = 0
  Once PosLgClosePrice = 0
  Once PosLgBenefPrice = 0
  Once PosLgStopPrice = 0
  Once PosStopPrice = 0
  Once PosLgObjPrice = 0
  Once NextObjPrice = 0
  Once NextObjSupPrice = 0
  Once BenefObjPrice = 0
  Once NbTrLg = 0
  Once NbTrLgSto = 0
  Once NbTrLgInv = 0
  Once NbTrLgFin = 0
  Once NbTrLgObj = 0
  Once NbTrLgWin = 0
  Once NbTrLgLos = 0
  Once GainTrLg= 0
  Once TotGainTrLg = 0
  Once AvgGainTrLg = 0
  Once LosTrLg = 0
  Once TotLosTrLg = 0
  Once AvgLosTrLg = 0
  PosNbBar = 0
  Once PosBarIn = 0
  Once PosBarOut = 0
  Once CountPosBar = 0
  Once NbMoyPosBar = 0
  Once MinPosNbBar = 0
  Once MaxPosNbBar = 0
  Once StopPosNbBar = 0
  Once InvPosNbBar = 0
  Once FinPosNbBar = 0
  Once ObjPosNbBar = 0
  Once WinPosNbBar = 0
  Once LosPosNbBar = 0
  LgAle = 0
  LgSig = 0
  StopPrice = 0
  ObjPrice = 0
  LgInvSig = 0
  LgBenSig = 0
  LgOutSig = 0
  LgAle, ignored, LgSig , ignored, StopPrice, ObjPrice, LgInvSig, ignored, LgBenSig, ignored, LgOutSig, ignored = CALL “GNT@SYS
  If PosLgOpenActiv = 0 Then
   If LgAle 0 Then
    PosLgAleIndic = 3
   EndIf
  EndIf
  If LgSig 0 Then
   xHIndic = 3
   If PosLgOpenActiv 0 Then
    xHIndic = xHIndic / 3*2
    If Pymd 0 Then
     If Pymd = 1 Then
      If PosLgFinActiv 0 Then
       PosLgPydIndic = 1
      EndIf
     EndIf
     If Pymd = 2 Then
      PosLgPydIndic = 1
     EndIF
    EndIf
   Endif
  Else
   xHIndic =0
  EndIf
  If PosLgOpenActiv 0 Then
   PosLgInIndic = 1
   If PosLgObjActiv 0 Then
    PosLgInIndic = PosLgInIndic /2
   EndIf
  Else
   PosLgInIndic = 0
  Endif
  If PosLgOpenActiv 0 Then
   GainTrLg = Close – PosLgOpenPrice
  Else
   GainTrLg = 0
  Endif
  If FinObj 0 Then
   If PosLgOpenActiv 0 Then
    If PosLgFinActiv = 0 then
     If FinType = 0 Then
      NextObjPrice = PosLgOpenPrice + FinObj
     Else
      NextObjPrice = PosLgOpenPrice * ( 1 + ( FinObj / 100))
     Endif
     If High => (NextObjPrice) Then
      PosLgFinIndic = 2
      PosLgFinPlusIndic = 0
      PosLgFinActiv = 1
      NbTrLgFin = NbTrLgFin + 1
      FinPosNbBar = FinPosNbBar + (BarIndex – PosBarIn)
     Else
      PosLgFinIndic = 0
      PosLgFinPlusIndic = 0
     Endif
    Else
     PosLgFinIndic = 0
     PosLgFinPlusIndic = 0
    Endif
   Endif
  EndIf
  If (FinObjSup 0 AND FinObjSup > FinObj) OR (FinObj = 0 AND FinObjSup 0) Then
   If PosLgOpenActiv 0 Then
    If (PosLgFinActiv 0 OR FinObj = 0) and PosLgFinSupActiv = 0 Then
     If FinType = 0 Then
      NextObjSupPrice = PosLgOpenPrice + FinObjSup
     Else
      NextObjSupPrice = PosLgOpenPrice * ( 1 + (FinObjSup / 100))
     Endif
     If High => (NextObjSupPrice) Then
      PosLgFinIndic = PosLgFinIndic
      PosLgFinPlusIndic = 2
      PosLgFinSupActiv = 1
     Else
      PosLgFinIndic = PosLgFinIndic
      PosLgFinPlusIndic = 0
      PosLgFinSupActiv = 0
     Endif
    Endif
   Endif
  EndIf
  If PosLgOpenActiv 0 Then
   If PosLgObjActiv = 0 Then
    If High => PosLgObjPrice Then
     PosLgObjIndic = 1.5
     PosLgObjActiv = 1
     NbTrLgObj = NbTrLgObj + 1
     ObjPosNbBar = ObjPosNbBar + (BarIndex – PosBarIn)
    Else
     PosLgObjIndic = 0
    EndIf
   EndIf
   If LgBenSig = 1 Then
    PosLgBenIndic = 1
   Else
    PosLgBenIndic = 0
   Endif
   If FinBenef 0 AND FinBenef > MAX(FinObj, FinObjSup) Then
    If PosLgFinActiv = 1 Then
     If FinType = 0 Then
      BenefObjPrice = PosLgBenefPrice + FinBenef
     Else
      BenefObjPrice = PosLgBenefPrice * ( 1 + (FinBenef / 100))
     Endif
     If High >= BenefObjPrice Then
      PosLgBenTrendIndic = 1.5
      If FinType = 0 Then
       PosLgBenefPrice = PosLgBenefPrice + FinBenef
      Else
       PosLgBenefPrice = PosLgBenefPrice * ( 1 + (FinBenef / 100))
      Endif
     Else
      PosLgBenTrendIndic = 0
     Endif
    Endif
   EndIf
  EndIf
  If PosLgOpenActiv 0 Then
   If Low <= PosLgStopPrice OR ( LgInvSig 0 AND PosLgFinActiv = 0 AND PosLgFinSupActiv = 0) Or LgOutSig 0 Then
    If LgInvSig 0 AND PosLgFinActiv = 0 Then
     PosLgInvIndic = 1.5
     NbTrLgInv = NbTrLgInv + 1
     InvPosNbBar = InvPosNbBar + (BarIndex – PosBarIn)
     InvPosNbBar = InvPosNbBar
    EndIf
    If LgOutSig 0 Then
     PosLgOutIndic = 2.5
    EndIf
    PosLgClosePrice = OpenOfNextBar
    If Low <= PosLgStopPrice Then
     PosLgStopIndic = 3
     NbTrLgSto = NbTrLgSto + 1
     StopPosNbBar = StopPosNbBar + (BarIndex – PosBarIn)
     StopPosNbBar = StopPosNbBar
     PosLgClosePrice = PosLgStopPrice
     If PosLgInvIndic = 2 Then
      NbTrLgInv = NbTrLgInv – 1
      InvPosNbBar = InvPosNbBar – (BarIndex – PosBarIn)
     EndIf
    Endif
    PosLgOpenActiv = 0
    PosLgFinActiv = 0
    PosLgFinSupActiv = 0
    PosLgObjActiv = 0
    PosBarOut = BarIndex
    NbTrLg = NbTrLg + 1
    If (PosLgClosePrice – PosLgOpenPrice ) > 0 Then
     NbTrLgWin = NbTrLgWin + 1
     WinPosNbBar = WinPosNbBar + (BarIndex – PosBarIn)
     GainTrLg = (PosLgOpenPrice – PosLgClosePrice)
     TotGainTrLg = TotGainTrLg + GainTrLg
     AvgGainTrLg = TotGainTrLg / NbTrLgWin
     AvgGainTrLg = AvgGainTrLg
    EndIf
    If (PosLgClosePrice – PosLgOpenPrice ) <= 0 Then
     NbTrLgLos = NbTrLgLos + 1
     LosPosNbBar = LosPosNbBar + (BarIndex – PosBarIn)
     LosTrLg = ( PosLgClosePrice – PosLgOpenPrice)
     TotLosTrLg = TotLosTrLg + LosTrLg
     AvgLosTrLg = TotLosTrLg / NbTrLgLos
     AvgLosTrLg = AvgLosTrLg
    EndIf
    PosNbBar = PosBarOut – PosBarIn
    CountPosBar = CountPosBar + PosNbBar
    NbMoyPosBar = CountPosBar / NbTrLg
    NbMoyPosBar = NbMoyPosBar
    If MinPosNbBar = 0 Then
     MinPosNbBar = PosNbBar
    Else
     If PosNbBar < MinPosNbBar Then
      MinPosNbBar = PosNbBar
     EndIf
    EndIf
    If MaxPosNbBar = 0 Then
     MaxPosNbBar = PosNbBar
    Else
     If PosNbBar > MaxPosNbBar Then
      MaxPosNbBar = PosNbBar
     EndIf
    EndIf
    GainTrLg = 0
   Endif
  Endif
  If (PosLgStopIndic = 0 AND PosLgInvIndic = 0 AND PosLgInvIndic = 0) Then
   If LgSig = 1 Then
    If PosLgOpenActiv = 0 Then
     PosLgOpenActiv = 1
     PosLgFinActiv = 0
     PosLgFinSupActiv = 0
     PosLgObjActiv = 0
     PosLgAleIndic = 0
     PosLgInIndic = 0
     PosLgStopIndic = 0
     PosLgInvIndic = 0
     PosLgFinIndic = 0
     PosLgFinPlusIndic = 0
     PosLgPydIndic = 0
     PosLgObjIndic = 0
     PosLgBenIndic = 0
     PosLgBenTrendIndic = 0
     PosLgOutIndic = 0
     If SprType = 0 Then
      PosLgOpenPrice = OpenOfNextBar + Spread
     Else
      PosLgOpenPrice = OpenOfNextBar * (1 + (Spread / 100))
     EndIf
     PosLgBenefPrice = PosLgOpenPrice
     PosLgStopPrice = StopPrice
     PosStopPrice = PosLgStopPrice
     PosStopPrice = PosStopPrice
     PosLgObjPrice = ObjPrice
     GainTrLg = 0
     LosTrLg = 0
     PosNbBar = 0
     PosBarIn = BarIndex
     PosBarOut = 0
    EndIf
   EndIf
  EndIf
 Else
  xHIndic = 0
  PosLgInIndic = 0
  PosLgInvIndic = 0
  PosLgStopIndic = 0
  PosLgFinIndic = 0
  PosLgFinPlusIndic = 0
  PosLgObjIndic = 0
  PosLgBenTrendIndic = 0
  PosLgBenIndic = 0
  PosLgOutIndic = 0
  NbTrLg = 0
  NbTrLgSto = 0
  NbTrLgInv = 0
  NbTrLgFin = 0
  NbTrLgWin = 0
  NbTrLgLos = 0
  NbTrLgObj = 0
  TotGainTrLg = 0
  TotLosTrLg = 0
  AvgGainTrLg = 0
  AvgLosTrLg = 0
  GainTrLg = 0
  LosTrLg = 0
  PosStopPrice = 0
  FinObj = FinObj
  FinObjSup = FinObjSup
  FinBenef = FinBenef
  FinType = FinType
  Spread = Spread
  SprType = SprType
  Pymd = Pymd
  Annee = Annee
  Mois = Mois
  Jour = Jour
  
  PosLgInIndic = PosLgInIndic
  PosLgAleIndic = PosLgAleIndic
  PosLgStopIndic = PosLgStopIndic
  PosLgInvIndic = PosLgInvIndic
  PosLgFinIndic = PosLgFinIndic
  PosLgFinPlusIndic = PosLgFinPlusIndic
  PosLgObjIndic = PosLgObjIndic
  PosLgPydIndic = PosLgPydIndic
  PosLgBenTrendIndic = PosLgBenTrendIndic
  PosLgBenIndic = PosLgBenIndic
  PosLgOutIndic  = PosLgOutIndic
  
 Endif
EndIf

Return MaxPosNbBar COLOURED(0,0,200) as “Durée Maximum Position”, MinPosNbBar COLOURED(255,0,0) as “Durée Minimum Position”, ROUND(NbMoyPosBar) COLOURED(0,0,255) as “Durée Moyenne Position”, Round(WinPosNbBar / NbTrLgWin ) COLOURED(0,150,0) as “Durée Moyenne Gagnant”, Round(ObjPosNbBar / NbTrLgObj) COLOURED(255,0,200) as “Durée Moyenne Objectif”, Round(FinPosNbBar/NbTrLgFin) COLOURED(255, 150,0) as “Durée Moyenne Financement”, Round(LosPosNbBar / NbTrLgLos) COLOURED(255,0,0) as “Durée Moyenne Perdant”, Round(StopPosNbBar / NbTrLgSto) COLOURED(255,255,0) as “Durée Moyenne Stop”, Round(InvPosNbBar / NbTrLgInv) COLOURED(0,0,0) as “Durée Moyenne Invalidation”