Comment coder ? - page 291

 

détail de la dernière bougie

Bonjour,

J'ai besoin d'un indicateur qui montre la valeur haute, basse, ouverte et fermée de la dernière bougie...

 
mladen:
Pourquoi ne pas utiliser un stop suiveur alors ? Je veux dire qu'il ferait presque 100% (presque) de ce que votre idée originale est et il est beaucoup, beaucoup plus facile à coder.

Le problème est que (je ne pense pas l'avoir formulé correctement ou pas à 100%) les stops (pour l'instant en tout cas) resteront les mêmes tout au long de la transaction. Que diriez-vous d'une approche comme celle-ci : lorsque deux transactions sont ouvertes, un code peut vérifier le nombre d'ordres ouverts, s'il est supérieur à 1 (en gros 2), alors les deux transactions voient leurs take profits modifiés à un certain montant qui était plus élevé qu'avant. En fait, il s'agit d'une sorte de couverture.

Merci,

madmax3

 

[langtitle=pl]Proszę o pomoc w napisaniu EA działającego n[/langtitle]

[lang=pl]Witam czy bugł by ktoś mi to dopracować był rym wdzięczny : Chciałbym rzeby kupywał LevelRSIbuy=20 ; a sprzeawał jak dojdzie LevelRSIsell=80 ; i żeby dało się ustawiać pozostałe żeczy kt�re są pod extern int MagicNumber

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder" (Constructeur de conseillers experts)

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0 ;

extern bool SignalMail = False ;

extern bool EachTickMode = True ;

extern double Lots = 0.1 ;

extern int Slippage = 1 ;

extern bool UseStopLoss = True ;

extern int StopLoss = 10 ;

extern bool UseTakeProfit = True ;

extern int TakeProfit = 5 ;

extern bool UseTrailingStop = False ;

extern int TrailingStop = 30 ;

extern int LevelRSIbuy=20 ;

extern int LevelRSIsell=80 ;

int BarCount ;

int Current ;

bool TickCheck = False ;

//+------------------------------------------------------------------+

//| fonction d'initialisation de l'expert

//+------------------------------------------------------------------+

int init() {

BarCount = Bars ;

if (EachTickMode) Current = 0 ; sinon Current = 1 ;

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de désinitialisation experte |

//+------------------------------------------------------------------+

int deinit() {

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de démarrage de l'expert |

//+------------------------------------------------------------------+

int start() {

int Ordre = SIGNAL_NONE ;

int Total, Ticket ;

double StopLossLevel, TakeProfitLevel ;

if (EachTickMode && Bars != BarCount) TickCheck = False ;

Total = OrdersTotal() ;

Ordre = SIGNAL_NONE ;

//+------------------------------------------------------------------+

//| Début de la variable |

//+------------------------------------------------------------------+

double Var1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0) ;

double Buy1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0) ;

double Sell1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0) ;

//+------------------------------------------------------------------+

//| Fin de la variable |

//+------------------------------------------------------------------+

//Vérification de la position

bool IsTrade = False ;

for (int i = 0 ; i < Total ; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True ;

if(OrderType() == OP_BUY)) {

//Fermeture

//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy) |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Signal End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) | (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen) ;

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy") ;

if (!EachTickMode) BarCount = Bars ;

IsTrade = False ;

continuer ;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) ;

if (!EachTickMode) BarCount = Bars ;

continuer ;

}

}

}

} else {

//Fermeture

//+------------------------------------------------------------------+

//| Signal Begin(Exit Sell) |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Signal End(Exit Sell) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) | (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange) ;

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell") ;

if (!EachTickMode) BarCount = Bars ;

IsTrade = False ;

continuer ;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

si((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) ;

if (!EachTickMode) BarCount = Bars ;

continuer ;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Signal Begin(Entry) |

//+------------------------------------------------------------------+

if (False) Order = SIGNAL_BUY ;

if (False) Order = SIGNAL_SELL ;

//+------------------------------------------------------------------+

//| Fin du signal |

//+------------------------------------------------------------------+

//Acheter

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Contrôle de la marge libre

if (AccountFreeMargin() < (1000 * Lots)) {

Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin()) ;

return(0) ;

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point ; sinon StopLossLevel = 0.0 ;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point ; sinon TakeProfitLevel = 0.0 ;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue) ;

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Ordre BUY ouvert : ", OrderOpenPrice()) ;

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy") ;

} else {

Print("Erreur lors de l'ouverture de l'ordre BUY : ", GetLastError()) ;

}

}

if (EachTickMode) TickCheck = True ;

if (!EachTickMode) BarCount = Bars ;

return(0) ;

}

}

//Vente

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) | (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Contrôle de la marge libre

if (AccountFreeMargin() < (1000 * Lots)) {

Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin()) ;

return(0) ;

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point ; sinon StopLossLevel = 0.0 ;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point ; sinon TakeProfitLevel = 0.0 ;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink) ;

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Ordre SELL ouvert : ", OrderOpenPrice()) ;

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell") ;

} else {

Print("Erreur lors de l'ouverture d'un ordre de vente : ", GetLastError()) ;

}

}

if (EachTickMode) TickCheck = True ;

if (!EachTickMode) BarCount = Bars ;

return(0) ;

}

}

if (!EachTickMode) BarCount = Bars ;

return(0) ;

}

//+------------------------------------------------------------------+[/lang]

 

J'essaie d'utiliser ce code pour augmenter le take profit des trades ouverts (s'il y a deux trades ouverts).

if(total>2)

if(OrderType()==OP_BUY)

OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);

if(OrderType()==OP_SELL)

OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);

total=OrdersTotal() ; en fait.

Je n'arrive toujours pas à le faire fonctionner, des suggestions ?

Merci,

madmax3

 

Aide pour limiter le nombre de transactions quotidiennes à 1

Je suis novice en programmation et j'ai besoin d'aide pour MQL4. J'ai étudié quelques guides du codeur et j'ai compris comment ouvrir et fermer des transactions en fonction de ma stratégie de trading. Ma difficulté est de limiter le nombre de transactions quotidiennes à 1. Je ne veux pas ouvrir plus d'une transaction par jour (selon l'heure du serveur). J'aimerais donc vérifier les ordres ouverts et fermés pour voir si un ordre a été ouvert aujourd'hui. Si un ordre a été ouvert aujourd'hui, il ne faut pas ouvrir d'autres ordres pour la journée.

Veuillez m'aider.

 
Essayez quelque chose comme ceci :
bool uniqueOnDay()

{

datetime startTime = iTime(NULL,PERIOD_D1,Time[0]);

datetime endTime = startTime+24*60*PERIOD_D1;

for (int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != MagicNumber) continue;

if (OrderOpenTime()endTime) continue;

return(false);

}

return(true);

}
Il vérifie si l'un des ordres fermés pour le symbole actuel a été ouvert le jour même. S'il y a eu un ordre ouvert ce jour-là, il renvoie false (il y a déjà eu un ordre ouvert ce jour-là) sinon il renvoie true (il n'y a pas eu d'ordre ouvert ce jour-là). Il ne vérifie pas les ordres actuellement ouverts (juste l'historique) puisque je suppose que vous ne voulez pas plus d'un ordre ouvert et que cela est vérifié différemment. L'utilisation serait quelque chose comme ceci :

if (UniqueOnDay() && CurrentlyOpenedOrders==0) ...

PS : cela suppose que votre EA a un paramètre MagicNumber (ce nom exact).

PPS : cela fonctionnera sur les cadres temporels jusqu'au jour. Il ne fonctionnera pas sur les graphiques hebdomadaires et mensuels.

dresolo1:
Je suis nouveau dans la programmation et j'ai besoin d'aide avec MQL4. J'ai étudié quelques guides de codage et j'ai compris comment ouvrir et fermer des transactions en fonction de ma stratégie de trading. Ma difficulté est de limiter le nombre de transactions quotidiennes à 1. Je ne veux pas ouvrir plus d'une transaction par jour (selon l'heure du serveur). J'aimerais donc vérifier les ordres ouverts et fermés pour voir si un ordre a été ouvert aujourd'hui. Si un ordre a été ouvert aujourd'hui, il ne faut pas ouvrir d'autres ordres pour la journée. Veuillez m'aider.
 

[langtitle=pl]Convertir la fonction Tema en Tema(close,period)[/langtitle]

Witam

Vous ne pouvez pas vous tromper car vous n'avez pas le droit de vous tromper. Jak przekazac wartosc funkcji Tema do Var1. Jak robie tak jak w kodzie ponizej to Var1 jest puste.

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DarkBlue

#property indicator_width1 2

//---- input parameters

extern int EMA_period=4;

//---- buffers

string txt;

double TemaBuffer[];

double Ema[];

double EmaOfEma[];

double EmaOfEmaOfEma[];

double Var1;

int Var2;

int i,limit,limit2,limit3;

extern int Apply_To_Price=1;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

IndicatorBuffers(5);

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,Var1);

SetIndexBuffer(1,TemaBuffer);

SetIndexBuffer(2,Ema);

SetIndexBuffer(3,EmaOfEma);

SetIndexBuffer(4,EmaOfEmaOfEma);

IndicatorShortName("TEMA("+EMA_period+")");

switch(Apply_To_Price)

{

case 1:

{txt="Open";break;}

case 2:

{txt="High";break;}

case 3:

{txt="Low"; break;}

case 4:

{txt="Median"; break;}

case 5:

{txt="Typical"; break;}

case 6:

{txt="WghtdClose"; break;}

default:

{txt="Close";}

}

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

//----

int counted_bars=IndicatorCounted();

if (counted_bars==0)

{

limit=Bars-1;

limit2=limit-EMA_period;

limit3=limit2-EMA_period;

}

if (counted_bars>0)

{

limit=Bars-counted_bars-1;

limit2=limit;

limit3=limit2;

}

for (i=limit3;i>=0;i--)

{

Var1 = Tema(Apply_To_Price,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA. DLACZEGO?

// Alert(Var1);

}

Var2 = dodawanie (2,3);

return(0);

}

double Tema(int Cena, int cykl)

{

//----

for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i);

for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i);

for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i);

for (i=limit3;i>=0;i--)

{

TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEmaOfEma;

//Alert(TemaBuffer);

}

return(TemaBuffer);

}

int dodawanie (int a, int b)

{

int c;

c=a+b;

return(c);

}

 

Comme ceci (TEMA) ...

Si vous voulez que ce soit une fonction, il faut que ce soit quelque chose comme ça :
double workTema[][3];

#define _ema1 0

#define _ema2 1

#define _ema3 2

double iTema(double price, double period, int r, int instanceNo=0)

{

if (ArrayRange(workTema,0)!= Bars) ArrayResize(workTema,Bars); instanceNo*=3; r = Bars-r-1;

//

//

//

//

//

double alpha = 2.0 / (1.0+period);

workTema[r][_ema1+instanceNo] = workTema[r-1][_ema1+instanceNo]+alpha*(price -workTema[r-1][_ema1+instanceNo]);

workTema[r][_ema2+instanceNo] = workTema[r-1][_ema2+instanceNo]+alpha*(workTema[r][_ema1+instanceNo]-workTema[r-1][_ema2+instanceNo]);

workTema[r][_ema3+instanceNo] = workTema[r-1][_ema3+instanceNo]+alpha*(workTema[r][_ema2+instanceNo]-workTema[r-1][_ema3+instanceNo]);

return(workTema[r][_ema3+instanceNo]+3.0*(workTema[r][_ema1+instanceNo]-workTema[r][_ema2+instanceNo]));

}[/PHP]

Je joins également un exemple d'indicateur. L'avantage de passer une valeur au lieu du type de prix est que de cette façon vous pouvez appliquer le tema à n'importe quelle valeur (il n'est pas nécessaire que ce soit le tema d'un prix, il peut être le tema d'un autre indicateur par exemple).

lukibest:
Witam

Jeszcze raz bo cos sie zle wkleilo. Jak przekazac wartosc funkcji Tema do Var1. Jak robie tak jak w kodzie ponizej to Var1 jest puste.

[PHP]

#property indicator_chart_window

#property indicator_buffers 1

#property indicateur_color1 DarkBlue

#property indicator_width1 2

//---- paramètres d'entrée

extern int EMA_period=4 ;

//---- tampons

string txt ;

double TemaBuffer[] ;

double Ema[] ;

double EmaOfEma[] ;

double EmaOfEma[] ;

double Var1 ;

int Var2 ;

int i,limit,limit2,limit3 ;

extern int Apply_To_Price=1 ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'indicateur personnalisé |

//+------------------------------------------------------------------+

int init()

{

//---- indicateurs

IndicatorBuffers(5) ;

SetIndexStyle(0,DRAW_LINE) ;

SetIndexBuffer(0,Var1) ;

SetIndexBuffer(1,TemaBuffer) ;

SetIndexBuffer(2,Ema) ;

SetIndexBuffer(3,EmaOfEma) ;

SetIndexBuffer(4,EmaOfEmaOfEma) ;

IndicatorShortName("TEMA("+EMA_period+")") ;

switch(Apply_To_Price)

{

cas 1 :

{txt="Open";break;}

cas 2 :

{txt="High";break;}

cas 3 :

{txt="Low" ; break;}

cas 4 :

{txt="Median" ; break;}

cas 5 :

{txt="Typique" ; break;}

cas 6 :

{txt="WghtdClose" ; break;}

par défaut :

{txt="Close";}

}

//----

retour(0) ;

}

//+------------------------------------------------------------------+

//| Fonction personnalisée de désinitialisation de l'indicateur |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur personnalisée |

//+------------------------------------------------------------------+

int start()

{

//----

int counted_bars=IndicatorCounted() ;

si (counted_bars==0)

{

limit=Bars-1 ;

limit2=limit-EMA_period ;

limit3=limit2-EMA_period ;

}

if (counted_bars>0)

{

limit=Bars-counted_bars-1 ;

limit2=limit ;

limit3=limit2 ;

}

for (i=limit3;i>=0;i--)

{

Var1 = Tema(Apply_To_Price,4) ; //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA. DLACZEGO ?

// Alert(Var1) ;

}

Var2 = dodawanie (2,3) ;

return(0) ;

}

double Tema(int Cena, int cykl)

{

//----

for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i) ;

for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i) ;

for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i) ;

for (i=limit3;i>=0;i--)

{

TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEmaOfEma ;

//Alert(TemaBuffer) ;

}

return(TemaBuffer) ;

}

int dodawanie (int a, int b)

{

int c ;

c=a+b ;

return(c) ;

}

Dossiers :
tema.mq4  3 kb
 

Aide avec le code HAMMER s'il vous plaît

Bonjour,

Je suis un nouveau venu dans mql4. J'essaie de sélectionner les marteaux noirs et blancs dans les chandeliers avec l'indicateur suivant. Cependant, dans le graphique, parfois les chandeliers ont un texte d'identification erroné (la bougie marteau blanche est identifiée comme bougie marteau noire et vice versa). S'il vous plaît, aidez-moi dans cette situation, merci d'avance.

#property indicateur_chart_window

int limit ;

//---- tampons

string hammer[200000] ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'indicateur CuStom |

//+------------------------------------------------------------------+

int init()

{

retour(0) ;

}

//+------------------------------------------------------------------+

//| Fonction de désinitialisation de l'indicateur CuStor |

//+------------------------------------------------------------------+

int deinit()

{

//----

ObjectsDeleteAll(hammer,OBJ_TEXT) ;

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur CuStom |

//+------------------------------------------------------------------+

int start()

{

int N ;

int N1 ;

int N2 ;

texte de la chaîne de caractères ;

int counted_bars=IndicatorCounted() ;

limit=Bars_comptés ;

for(N = 1 ; N < limite ; N++) {

marteau[N]= CharToStr(N) ;

N1 = N + 1 ;

N2 = N + 2 ;

//----

//---- vérifier les erreurs éventuelles

if(counted_bars<0) {

Alert("NO Bars..") ;

retour(-1) ;

}

// Vérifier la présence d'un marteau blanc

si (((Close[N1]>Open[N1]) && ((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1])) && ((High[N1]-Close[N1])<=(Open[N1]-Low[N1])*0.10))) {

ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point) ;

ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen) ;

}

// Vérification du marteau noir

if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))) {

ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point) ;

ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen) ;

}

//----

} // Fin de la boucle for

retour(0) ;

}

//+------------------------------------------------------------------+

 
svezir:
Bonjour,

Je débute récemment dans mql4. J'essaie d'identifier les marteaux noirs et blancs dans les chandeliers avec l'indicateur suivant. Cependant, dans le graphique, les chandeliers ont parfois un texte d'identification erroné (la bougie marteau blanche est identifiée comme bougie marteau noire et vice versa). S'il vous plaît, aidez-moi dans cette situation, merci d'avance.

#property indicateur_chart_window

int limit ;

//---- tampons

string hammer[200000] ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'indicateur CuStom |

//+------------------------------------------------------------------+

int init()

{

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction de désinitialisation de l'indicateur CuStor |

//+------------------------------------------------------------------+

int deinit()

{

//----

ObjectsDeleteAll(hammer,OBJ_TEXT) ;

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur CuStom |

//+------------------------------------------------------------------+

int start()

{

int N ;

int N1 ;

int N2 ;

texte de la chaîne de caractères ;

int counted_bars=IndicatorCounted() ;

limit=Bars_comptés ;

for(N = 1 ; N < limite ; N++) {

marteau[N]= CharToStr(N) ;

N1 = N + 1 ;

N2 = N + 2 ;

//----

//---- vérifier les erreurs éventuelles

if(counted_bars<0) {

Alert("NO Bars..") ;

retour(-1) ;

}

// Vérifier la présence d'un marteau blanc

si (((Close[N1]>Open[N1]) && ((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1])) && ((High[N1]-Close[N1])<=(Open[N1]-Low[N1])*0.10))) {

ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point) ;

ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen) ;

}

// Vérifiez le marteau noir

if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))) {

ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point) ;

ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen) ;

}

//----

} // Fin de la boucle for

retour(0) ;

}

//+------------------------------------------------------------------+

Bonjour Svezir,

J'ai cet indicateur pour les modèles de bougies, peut-être qu'il vous aidera.

Raison: