Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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...
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(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.
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.
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 :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).
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) ;
}
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) ;
}
//+------------------------------------------------------------------+
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.