Programmation Mt4
Forex Forum > Français > Ressources > Logiciels et matériels
FerruFx
Bonjour à tous,

Nouveau sur le forex, je lis beaucoup ici et là sur le sujet, teste en démo (mt4) chez IBFX diverses stratégies.

Je commence à avoir mes préférences concernant certains indicateurs (MM, Bollinger Bands, Bulls et Bears).

Je souhaite automatiser un petit processus, et après recherche je ne trouve pas ce que je souhaite. Mes compétences actuelles ne me permettent pas encore de le programmer.

Voici le problème :

Support : ut30, graphique en courbe, moyenne mobile sur 20 périodes.

Le processus que je souhaite automatiser :

1. Prendre position (0.20 lot par exemple) lorsque la MM20 est franchie de X pips, BUY si la MM20 est coupée par le bas (haussier), SELL si la MM20 est coupée par le haut (baissier).

2. Sortir lorsque la MM20 est franchie dans l'autre sens de Y pips.

Est-ce réalisable ?

Merci de votre aide.

FerruFX
jlpi
Oui c'est très facile.

Je peux te le faire assez rapidement (je pense mardi au plus tard car je ne "travaille" pas le week end) et gratuitement bien sur.

Je peux le poster ici ou te l'envoyer à ton email.

quels paramètres modifiables veux-tu en entrée?
d'après ton mail je mettrai

- taille du lot
- période de la MM
- seuils X et Y pour le franchissement

Veux-tu aussi le type de MM (SMA, EMA, LWMA...)

A+
FerruFx
Merci jlpi de la promptitude de ta réponse !

Concernant les données paramétrables, ta liste est bonne. Concernant la MM, j'utilise la "simple" mais si c'est possible de rajouter ce paramètre modifiable alors oui merci. Cela me permettra de tester avec différentes MM.

Est-ce que tout cela pourra se tester facilement sur ma platforme ?

Encore merci de ton aide qui va m'être très précieuse !

Bon week-end.

FerruFX
jlpi
un autre petit point:

est-ce que le déclenchement de l'ordre se fait n'importe quand (aussitot que la condition est vérifiée) ou bien déclenche t-on l'ordre uniquement après cloture de la bougie en cours si la condition est toujours vérifiée?

Je pense aussi rajouter sur quel prix la MM est calculée Open/Close/Median... comme ça cela sera plus complet.
X et Y seront en pip (pour 1 pip il faudra mettre 1 et pas 0.0001)

pour pouvoir faire l'EA ok du premier coup il est bon de définir très précisément sa stratégie. A mon avis c'est un très bon exercice, bénéfique pour le trading.

Après pour le tester sur MT4 c'est très facile si tu sais un peu utiliser MT4. Si tu sais pas je peux te donner des tuyaux (j'ai des petits docs en anglais) mais le mieux est de lire un peu la doc MT4. faire tourner un EA et le tester en backtest est assez simple.
FerruFx
CITATION(jlpi @ Jan 12 2007, 15:32) [snapback]11599[/snapback]

est-ce que le déclenchement de l'ordre se fait n'importe quand (aussitot que la condition est vérifiée) ou bien déclenche t-on l'ordre uniquement après cloture de la bougie en cours si la condition est toujours vérifiée?


Oui je pense que la soluce d'attendre la cloture de la bougie serait très bien.

CITATION(jlpi @ Jan 12 2007, 15:32) [snapback]11599[/snapback]

je pense aussi rajouter sur quel prix la MM est calculée Open/Close/Median... comme ça cela sera plus complet.
X et Y seront en pip (pour 1 pip il faudra mettre 1 et pas 0.0001)


Parfait !

Est-ce que pour les pips (1 et non pas 0.0001), cela me permettra de me servir de cet EA sur différentes paires ?

Oserais-je demander s'il est possible que le lot soit calculé en fonction de l'évolution du capital à la hausse ou à la baisse ? Par exemple fixer le départ (pour un capital de départ C, le lot sera de x.xx) et ensuite le script recalcule avant chaque prise de position si le capital a évolué.

Merci de tout l'intérêt que tu portes à mon "cas" !

Bon week-end,

FerruFX
FerruFx
CITATION(jlpi @ Jan 12 2007, 15:32) [snapback]11599[/snapback]

est-ce que le déclenchement de l'ordre se fait n'importe quand (aussitot que la condition est vérifiée) ou bien déclenche t-on l'ordre uniquement après cloture de la bougie en cours si la condition est toujours vérifiée?


Je reviens sur ce point important. Le problème est que si la bougie est "immense" (il me semble qu'en ut30, la bougie dure 30mn, c'est long) et clôture à 10/20 pips au dessus de la MM, l'entrée en sera considérablement retardée. Qu'en penses-tu ? Serait-il possible de choisir soit la fin de la bougie soit un nombre X de pips afin de tester les deux (idem pour la sortie) ?

Je suis dur avec toi !

FerruFx
jlpi
CITATION(FerruFx @ Jan 14 2007, 3:45) [snapback]11635[/snapback]

Je reviens sur ce point important. Le problème est que si la bougie est "immense" (il me semble qu'en ut30, la bougie dure 30mn, c'est long) et clôture à 10/20 pips au dessus de la MM, l'entrée en sera considérablement retardée. Qu'en penses-tu ? Serait-il possible de choisir soit la fin de la bougie soit un nombre X de pips afin de tester les deux (idem pour la sortie) ?

Je suis dur avec toi !

FerruFx


Ah la la on deviens de plus en plus exigeant ! rolleyes.gif
Ca va ça reste dans les choses simples.

Bon j'ai eu un peu de temps ce matin et voila le source et l'exécutable.
J'ai un peu testé et à mon avis ça à l'air de marcher comme tu veux ou plutot comme j'ai compris que tu voulais que ça marche...

Les paramètres externes modifiables sont:
- Risk si =1 ouvre 0.1 lot pour 10 000 $, si =2 ouvre 0.2 lots pour 10 000 $ etc.. (attention ça arrondi par pas de 0.1 lot donc par exemple si =1 on passe à 0.2 lots lorsqu'on passe au dessus de 15 000 $)
- MAperiod = période de la MM
- SeuilOpen = ton seuil X en pips
- SeuilClose = ton seuil Y en pips
- MAType = type de MM (prendre un type défini dans MT4)
- MAPrice = sur quel prix est appliqué la MM (close, open... prendre un type défini dans MT4)
- FinDeBougie = booléen si on attend la fin de bougie ou non. Si on attend alors l'ordre est passé au premier tick de la bougie suivante.

Voila, si ça ne marche pas comme tu pensais dis le moi, on n'est jamais à l'abri d'un bug !

Un point important. Si tu n'attends pas la fin de la bougie, il faut s'assurer que SeuilOpen + SeuilClose soit supérieur au spread car sinon tu peux avoir la situation amusante ou le Ask est au dessus de la MM et le Bid en dessous ce qui va ouvrir et clore des ordres inutiles.
FerruFx
Merci jlpi pour ta rapidité !

Je regarde tout ça, j'essaie de comprendre et de tester et te reviens pour un petit compte rendu !

FerruFx
FerruFx
CITATION(jlpi @ Jan 15 2007, 9:06) [snapback]11658[/snapback]

Les paramètres externes modifiables sont:
- Risk si =1 ouvre 0.1 lot pour 10 000 $, si =2 ouvre 0.2 lots pour 10 000 $ etc.. (attention ça arrondi par pas de 0.1 lot donc par exemple si =1 on passe à 0.2 lots lorsqu'on passe au dessus de 15 000 $)
- MAperiod = période de la MM
- SeuilOpen = ton seuil X en pips
- SeuilClose = ton seuil Y en pips
- MAType = type de MM (prendre un type défini dans MT4)
- MAPrice = sur quel prix est appliqué la MM (close, open... prendre un type défini dans MT4)
- FinDeBougie = booléen si on attend la fin de bougie ou non. Si on attend alors l'ordre est passé au premier tick de la bougie suivante.


C'est mon 1er EA donc j'ai besoin de conseils (infos) pour paramétrer tout ça !

D'une façon générale, pour chaque variable il y a 4 paramètres (valeur, valeur initiale, pas et stop). A quoi correspondent-ils ?

1. Risk : est-ce que le 10 000$ est modifiable (je pense dans l'EA lui-même) ? si je mets 2 000$ par exemple, en risk 1 le lot sera-t-il tjrs de 0.1 ?

2. MAperiod : je suppose que pour une MM20 je mets 20 dans "valeur" et "valeur initiale". Pour "Pas" et "stop" je ne comprends pas.

3. MAType : les type sont "simple, exponential, smoothed, linear weighted". Apparemment dans les paramètres je ne peux renseigner que des chiffres. Y-t-il des codes pour ces types de MM ?

4. MAPrice : idem que pour MAType.

Voilà et encore merci pour ton aide précieuse.

FerruFx
FerruFx
Après quelques tests en démo et des backtests sur 2005, 2006 et 2007, il semble que l'EA fonctionne bien comme voulu. Pour cela, un grand merci à toi jlpi !

Maintenant la grande question qui est souvent débattue : les backtests sur MT4 sont-ils fiables ? J'ai beaucoup lu sur le sujet ici et là et j'en suis venu à la conclusion que la base de données pour faire les tests est insuffisante. J'ai donc installé une database bien plus complète que certainement vous connaissez tous.

http://www.alpari-idc.com/en/dc/databank.php

Cela m'a permis de tester sur plus de 16 000 bars sur une année (>650 000 ticks). Qu'en pensez-vous ?

J'ai testé 2005, 2006 et 2007 (partiel). Les résultats sont bons. Cependant, afin de confirmer (ou d'infirmer) ces résultats, j'ai besoin de les confronter avec d'autres sources que je n'ai pas et surtout sur quelques années antérieures si possible.

Les tests ont été fait pour un mini account 2'000 USD levier 1:50
Au départ, prise de 1 lot (risk 50) puis l'EA recalcule et fait évoluer la taille du lot en fonction de l'évolution du capital (en + ou en -).

Merci de votre aide et de vos conseils.

FerruFx

PS : ci-joint l'EA (.ex4) et les rapports des backtests
dieupip
Hello
Il faut tout de même se méfier :
Calcule avec un nombre de lots constant et regarde ce qui se passe si tu commences par le trade qui fait la plus grosse perte, combien te reste-t-il de ton capital ? (je ne connais pas la réponse)
Comme tu ne mets pas de stops, sortir sur une fin de bougie lors d'une stat c'est dommage.
Comme le forex c'est 80% de range en daily, que tu trades en H1 et que la nuit, c'est 95% de range, ça ne laisse pas beaucoup de marge de manoeuvre.
Rien de tel qu'un test grandeur nature puis un backtest sur la même période pour vérifier smile.gif
FerruFx
Merci dieupip pour ces conseils. Je vais tester sur un nombre de lot constant.

CITATION(dieupip @ Jan 17 2007, 11:23) [snapback]11719[/snapback]

Comme tu ne mets pas de stops, sortir sur une fin de bougie lors d'une stat c'est dommage.


Une solution ?

CITATION(dieupip @ Jan 17 2007, 11:23) [snapback]11719[/snapback]

Comme le forex c'est 80% de range en daily, que tu trades en H1 et que la nuit, c'est 95% de range, ça ne laisse pas beaucoup de marge de manoeuvre.


En y ajoutant une plage horaire pour les trades, cela devrait peut-être éviter certains ranges. A tester ...

CITATION(dieupip @ Jan 17 2007, 11:23) [snapback]11719[/snapback]

Rien de tel qu'un test grandeur nature puis un backtest sur la même période pour vérifier smile.gif


C'est en cours !

Merci encore.

Je suis preneur de toutes autres remarques constructives !

FerruFx
dieupip
CITATION(FerruFx @ Jan 17 2007, 11:48) [snapback]11721[/snapback]

>Comme tu ne mets pas de stops, sortir sur une fin de bougie lors d'une stat c'est dommage.
Une solution ?


Mettre un stop ! en cas de stat il faut prévoir un peu de slippage également mataf_wink.gif
jlpi
CITATION(FerruFx @ Jan 15 2007, 10:59) [snapback]11660[/snapback]

D'une façon générale, pour chaque variable il y a 4 paramètres (valeur, valeur initiale, pas et stop). A quoi correspondent-ils ?

1. Risk : est-ce que le 10 000$ est modifiable (je pense dans l'EA lui-même) ? si je mets 2 000$ par exemple, en risk 1 le lot sera-t-il tjrs de 0.1 ?

2. MAperiod : je suppose que pour une MM20 je mets 20 dans "valeur" et "valeur initiale". Pour "Pas" et "stop" je ne comprends pas.

3. MAType : les type sont "simple, exponential, smoothed, linear weighted". Apparemment dans les paramètres je ne peux renseigner que des chiffres. Y-t-il des codes pour ces types de MM ?

4. MAPrice : idem que pour MAType.

Voilà et encore merci pour ton aide précieuse.

FerruFx


Pour les variables le 1er paramètre correspond à celui qui est utilisé pour le backtest les 3 autres pour l'optimisation. Dans le cas d'une optim de la MA tu mettras par exemple 10, 1, 20 pour tester les différentes MA de 10 à 20 avec un interval de 1.

Risk est proportionnel a ce que tu as sur le compte. Mais la limite basse est 0.1 car ton broker n'autorise pas forcément de traider en dessous. sinon ce serait 0.02 pour un risque de 1 et 2000$

Il y a des codes pour MAType de 0 à 3 correspondant aux constantes (voir doc mql4)

idem pour MAPrice (de 0 à 6)

Sinon pouir la validité du backtest:
- il faut un nombre de trade minimum. 100 est un strict minimum. Tu peux considérer ton pourcentage d'erreur de l'estimation comme SQRT(1/nb trades) donc 10% pour 100 trades et 1% pour 10 000 trades.

- l'outil de backtest modélise le comportement des ticks à l'intérieur de la bougie M1. ce n'est donc pas le comportement exact. Ceci peut être génant pour certains type d'EA et moins pour d'autres. si tu fait du scalping au pip près c'est embettant. Si tu fais des MM sur M30 normalement ça doit pas être trop génant.
FerruFx
Merci pour la réponse concernant les variables (entretemps je m'étais documenté !).

Concernant les backtests, je l'ai effectué sur 1050 trades entre le 01/01/2005 et aujourd'hui. Pour info, ils sont fait avec MM30 en 1H.

Quelqu'un aurait-il la possibilité de confirmer mes tests sur un autre outil que ma platform MT4 de IBFX ? Afin de comparer et éventuellement avant 2005.

Pour dieupip : test avec lot constant et démarrage au pire trade de l'année reste concluant avec capital x3 après 6 mois. Il me reste également à démarrer au début de la pire période de loss consécutifs. A suivre ...

Merci encore à tous pour votre aide.

FerruFx

Je reste quand même dubitatif concernant ces résultats fussent-ils sur 2 ans et un grand nombre de trades.

Votre avis sur ces résultats ?
FerruFx
Encore pour dieupip (!) : backtest et démo réagissent à l'identique depuis hier.

Pourrait-il s'agir d'un signe que les backtests soient proches de la vérité ?
dieupip
Ne t'embale pas trop vite smile.gif 2 jours de tests ne suffisent pas, surtout qu'en ce moment c'est plutot mou...
FerruFx
Non non je ne m'emballe pas mataf_wink.gif
jlpi
Vu ton UT je ne suis pas surpris que backtest et forward test soient très proches.

Par contre ce dont il faut se méfier est à mon avis la chose suivante:

aujourd'hui tu trouves que MM30 est la solution optimale.

Imaginons que nous soyons début 2006 et que tu testes uniquement sur les données de 2005: quelle MM serait optimale?
Et avec cette MM optimale pour 2005 quels auraient été tes résultats en 2006.

Car tu trouveras toujours une MM te donnant des bons résultats après coup. Par contre est-ce que cette valeur reste valide par exemple sur 1 an.

Un autre test intéressant est qu'est-ce que cela donne avec MM25 et 35. Même si c'est moins bon il faut que la performance ne soit pas trop dégradée pour assurer une zone de stabilité et que MM30 ne soit pas juste un point bon "par miracle".
FerruFx
Les tests ont été fait pour MM30, MM25 et MM35 sur 2005, 2006 et 2007 (partiel) : tous positifs dans les mêmes proportions.

Me manque une database "sérieuse" pour les années avant 2005 ...

Je suis également en train d'étudier les zones de trades négatifs. A suivre ...

Merci à tous.

FerruFx
best trader
Bonjour,je me nomme yapo et j'aimerais que quelqu'un m'aide.
Je suis nul en programmation MT4 mais j'aimerais que quelqu'un m'aide a modifier un programme.
Ce programme dont je parle donne des signau d'achats et de ventes avec stop loss et target a la fois
et j'aimerais qu'il devienne une sorte de logiciel automatique.
en bref, si je ne suis pas là ou si je suis là, je veux qu'il trade automatiquement pour moi en respectant les targets et le stop loss suivi d'un trailling stop.
j'espere que quelqu'un m'aideras.
le programme en question s'appelle fibo calc et voici son code source:
/*+------------------------------------------------------------------+
| FiboCalc |
| Author: Copyright © 2006, |
| |
| |
+------------------------------------------------------------------+*/
#property copyright "Copyright © 2006,"
#property link "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DarkGreen
#property indicator_color2 Maroon
#property indicator_color3 Magenta
#property indicator_color4 Goldenrod
//---- buffers
double PrevDayHiBuffer[];
double PrevDayLoBuffer[];
double PrevDayOpenBuffer[];
double PrevDayCloseBuffer[];
//----
int fontsize = 8;
double PrevDayHi, PrevDayLo, PrevDayOpen , PrevDayClose, fb, fs, fe, tp1, tp2, tp3;
double LastHigh, LastLow, LastOpen, LastClose, x;
double ri, re1, re2, re3, ra1, ra2, ra3;
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("PrevDayHi");
ObjectDelete("PrevDayLo");
ObjectDelete("PrevDayOpen");
ObjectDelete("PrevDayClose");
ObjectDelete("fe");
ObjectDelete("fe Line");
ObjectDelete("fs");
ObjectDelete("fs Line");
ObjectDelete("tp3");
ObjectDelete("tp3 Line");
ObjectDelete("tp2");
ObjectDelete("tp2 Line");
ObjectDelete("tp1");
ObjectDelete("tp1 Line");
ObjectDelete("fb");
ObjectDelete("fb Line");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
SetIndexStyle(3,DRAW_LINE);
//----
SetIndexBuffer(0, PrevDayHiBuffer);
SetIndexBuffer(1, PrevDayLoBuffer);
SetIndexBuffer(2, PrevDayOpenBuffer);
SetIndexBuffer(3, PrevDayCloseBuffer);
//---- name for DataWindow and indicator subwindow label
short_name="Prev Hi-Lo levels";
IndicatorShortName(short_name);
SetIndexLabel(0, short_name);
SetIndexLabel(1, "Maroon");
SetIndexLabel(2, "Magenta");
SetIndexLabel(3, "Goldenrod");
//----
SetIndexDrawBegin(0,1);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
int limit, i;
//---- indicator calculation
if(counted_bars == 0)
{
x = Period();
if(x > 240)
return(-1);
}
limit = (Bars - counted_bars) - 1;
//----
for(i = limit; i >= 0; i--)
{
LastHigh = High[Highest(NULL, 0, MODE_HIGH, i + 1)];
LastLow = Low[Lowest(NULL, 0, MODE_LOW, i + 1)];
if(Open[i+1] > LastOpen)
LastOpen = Open[i+1];
//----
if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
{
PrevDayHi = LastHigh;
PrevDayLo = LastLow;
PrevDayOpen = LastClose;
PrevDayClose = Open[i];
//----
LastLow = Open[i];
LastHigh = Open[i];
LastOpen = Open[i];
LastClose = Open[i];
//----
if(ObjectFind("PrevDayHi") != 0)
{
ObjectCreate("PrevDayHi", OBJ_TEXT, 0, 0, 0);
ObjectSetText("PrevDayHi", " Day High", fontsize, "Arial", Black);
}
else
{
ObjectMove("PrevDayHi", 0, Time[i], PrevDayHi);
}
//----
if(ObjectFind("PrevDayLo") != 0)
{
ObjectCreate("PrevDayLo", OBJ_TEXT, 0, 0, 0);
ObjectSetText("PrevDayLo", " Day Low", fontsize, "Arial", Black);
}
else
{
ObjectMove("PrevDayLo", 0, Time[i], PrevDayLo);
}
//----
if(ObjectFind("PrevDayOpen") != 0)
{
ObjectCreate("PrevDayOpen", OBJ_TEXT, 0, 0, 0);
ObjectSetText("PrevDayOpen", " Prev. Day Open", fontsize,
"Arial", White);
}
else
{
ObjectMove("PrevDayOpen", 0, Time[i], PrevDayOpen);
}
//----
if(ObjectFind("PrevDayClose") != 0)
{
ObjectCreate("PrevDayClose", OBJ_TEXT, 0, 0, 0);
ObjectSetText("PrevDayClose", " Prev. Day Close", fontsize,
"Arial", Black);
}
else
{
ObjectMove("PrevDayClose", 0, Time[i], PrevDayClose);
}

}
PrevDayHiBuffer[i] = PrevDayHi;
PrevDayLoBuffer[i] = PrevDayLo;
PrevDayOpenBuffer[i] = PrevDayOpen;
PrevDayCloseBuffer[i] = PrevDayClose;
}
// BUY
if(Ask > LastClose)
{
fb = PrevDayHi - (PrevDayHi - PrevDayLo)*0.382;
fe = PrevDayHi - (PrevDayHi - PrevDayLo)*0.618;
tp1 = ((PrevDayHi - PrevDayLo)*0.618) + fb;
tp2 = (PrevDayHi - PrevDayLo) + fb;
tp3 = 1.618*(PrevDayHi - PrevDayLo) + fb;
ri = MathRound((fb - fe)*10000) / 10000;
re1=MathRound((tp1 - fb)*10000) / 10000;
re2=MathRound((tp2 - fb)*10000) / 10000;
re3=MathRound((tp3 - fb)*10000) / 10000;
ra1=MathRound((re1 / ri)*10) / 10;
ra2=MathRound((re2 / ri)*10) / 10;
ra3=MathRound((re3 / ri)*10) / 10;
//----
if(ObjectFind("fb") != 0)
{
ObjectCreate("fb", OBJ_TEXT, 0, Time[0], fb);
ObjectSetText("fb", " BUY LEVEL", 8, "Arial", EMPTY);
}
else
{
ObjectMove("fb",fb, Time[0], fb);
}
//----
if(ObjectFind("fb Line") != 0)
{
ObjectCreate("fb Line", OBJ_HLINE, 0, Time[0],fb);
ObjectSet("fb Line", OBJPROP_STYLE, STYLE_DASHDOT);
ObjectSet("fb Line", OBJPROP_COLOR, Blue);
}
else
{
ObjectMove("fb Line",0, Time[0], fb);
}
//----
if((ra1 > 2) && (ra2 > 2) && (ra3 > 2))
Comment("Owner : ", AccountName()," Account number : ", AccountNumber(),
"\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was UP ",
"\nBUY @ ",fb ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ,
" Risk/Reward Ratio : ", ra1 ," OK Trade ","\nTakeProit 2 ",tp2 ,
" Risk/Reward Ratio : ", ra2 ," OK Trade ","\nTakeProit 3 ",tp3,
" Risk/Reward Ratio : ", ra3 ," OK Trade ");
else
Comment("Owner : ", AccountName()," Account number : ", AccountNumber(),
"\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was UP ",
"\nBUY @ ",fb ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ,
" Risk/Reward Ratio : ", ra1 ," NO TRADE ","\nTakeProit 2 ",tp2 ,
" Risk/Reward Ratio : ", ra2 ," NO TRADE ","\nTakeProit 3 ",tp3,
" Risk/Reward Ratio : ", ra3 ," NO TRADE ");

}
// SELL
if(Bid < LastClose)
{
fs = (PrevDayHi - PrevDayLo)*0.382 + (PrevDayLo);
fe = (PrevDayHi - PrevDayLo)*0.618 + (PrevDayLo);
tp1 = ((PrevDayLo - PrevDayHi)*0.618) + fs;
tp2 = (PrevDayLo - PrevDayHi) + fs;
tp3 = 1.618*(PrevDayLo - PrevDayHi) + fs;
ri = MathRound((fs - fe)*10000) / 10000;
re1 = MathRound((tp1 - fs)*10000) / 10000;
re2 = MathRound((tp2 - fs)*10000) / 10000;
re3 = MathRound((tp3 - fs)*10000) / 10000;
ra1 = MathRound((re1 / ri)*10) / 10;
ra2 = MathRound((re2 / ri)*10) / 10;
ra3 = ((re3 / ri)*10) / 10;
//----
if(ObjectFind("fs") != 0)
{
ObjectCreate("fs", OBJ_TEXT, 0, Time[0], fs);
ObjectSetText("fs", " SELL LEVEL", 8, "Arial", EMPTY);
}
else
{
ObjectMove("fs",fs, Time[0], fs);
}
//----
if(ObjectFind("fs Line") != 0)
{
ObjectCreate("fs Line", OBJ_HLINE, 0, Time[0],fs);
ObjectSet("fs Line", OBJPROP_STYLE, STYLE_DASHDOT);
ObjectSet("fs Line", OBJPROP_COLOR, Red);
}
else
{
ObjectMove("fs Line",0, Time[0], fs);
}
//----
if((ra1 > 2) && (ra2 > 2) && (ra3 > 2))
Comment("Owner : ", AccountName(),"Account number : ", AccountNumber(),
"\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was Down ",
"\nSELL @ ",fs ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ,
" Risk/Reward Ratio : ", ra1 ," OK Trade ","\nTakeProit 2 ",tp2 ,
" Risk/Reward Ratio : ", ra2 ," OK Trade ","\nTakeProit 3 ",tp3,
" Risk/Reward Ratio : ", ra3 ," OK Trade ");
else
Comment("Owner : ", AccountName(),"Account number : ", AccountNumber(),
"\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was Down ",
"\nSELL @ ",fs ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ,
" Risk/Reward Ratio : ", ra1 ," NO TRADE ","\nTakeProit 2 ",tp2 ,
" Risk/Reward Ratio : ", ra2 ," NO TRADE ","\nTakeProit 3 ",tp3,
" Risk/Reward Ratio : ", ra3 ," NO TRADE ");
}
//----
if(ObjectFind("fe") != 0)
{
ObjectCreate("fe", OBJ_TEXT, 0, Time[0], fe);
ObjectSetText("fe", " STOPLOSS LEVEL", 8, "Arial", EMPTY);
}
else
{
ObjectMove("fe",fe, Time[0], fe);
}
//----
if(ObjectFind("fe Line") != 0)
{
ObjectCreate("fe Line", OBJ_HLINE, 0, Time[0],fe);
ObjectSet("fe Line", OBJPROP_STYLE, STYLE_DASHDOT);
ObjectSet("fe Line", OBJPROP_COLOR, OrangeRed );
}
else
{
ObjectMove("fe Line",0, Time[0], fe);
}
//----
if(ObjectFind("tp1") != 0)
{
ObjectCreate("tp1", OBJ_TEXT, 0, Time[0], tp1);
ObjectSetText("tp1", " PROFIT TARGET 1", 8, "Arial", EMPTY);
}
else
{
ObjectMove("tp1",tp1, Time[0],tp1 );
}
//----
if(ObjectFind("tp1 Line") != 0)
{
ObjectCreate("tp1 Line", OBJ_HLINE, 0, Time[0],tp1);
ObjectSet("tp1 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("tp1 Line", OBJPROP_COLOR, SpringGreen );
}
else
{
ObjectMove("tp1 Line",0, Time[0],tp1 );
}
//----
if(ObjectFind("tp2") != 0)
{
ObjectCreate("tp2", OBJ_TEXT, 0, Time[0], tp2);
ObjectSetText("tp2", " PROFIT TARGET 2", 8, "Arial", EMPTY);
}
else
{
ObjectMove("tp2",tp2, Time[0],tp2);
}
if(ObjectFind("tp2 Line") != 0)
{
ObjectCreate("tp2 Line", OBJ_HLINE, 0, Time[0],tp2);
ObjectSet("tp2 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("tp2 Line", OBJPROP_COLOR, SpringGreen );
}
else
{
ObjectMove("tp2 Line",0, Time[0],tp2);
}
//----
if(ObjectFind("tp3") != 0)
{
ObjectCreate("tp3", OBJ_TEXT, 0, Time[0], tp3);
ObjectSetText("tp3", " PROFIT TARGET 3", 8, "Arial", EMPTY);
}
else
{
ObjectMove("tp3",tp3, Time[0], tp3);
}
//----
if(ObjectFind("tp3 Line") != 0)
{
ObjectCreate("tp3 Line", OBJ_HLINE, 0, Time[0],tp3);
ObjectSet("tp3 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("tp3 Line", OBJPROP_COLOR, SpringGreen );
}
else
{
ObjectMove("tp3 Line",0, Time[0],tp3);
}
//----
return(0);
}
//+------------------------------------------------------------------+
Mon email est michael_angethebest@yahoo.fr