Donc, avec un peu de chance, la forme finale de la fonction.
double ATR_Max() {
int i;
double m;
datetime tim;
iATR_H1_PER = 15;// периодif ( tim != Time[0] ) {
while( i < WindowBarsPerChart() ) {
double a = iATR( NULL, 0, iATR_H1_PER, i );
if ( m < a ) {
m = a;
}
i++;
tim = Time[0];
}
}
Alert( " Максимальное значение ATR для видимого количества баров равно - ", m );
return(m);
}
Donc, avec un peu de chance, la forme finale de la fonction.
Dr.Vasgenich :
Donc, avec un peu de chance, la forme finale de la fonction.
Je pense que tim = Time[0] serait mieux placé après la boucle ...parce que demander Time[0] est fait sur toutes les barres visibles - ce n'est pas rationnel.
Boeing747 : Je pense que tim = Time[0] serait mieux placé après la boucle ...parce que demander Time[0] est fait sur tout le nombre de barres visibles - ce n'est pas rationnel.
Bon après-midi. Savez-vous s'il est possible de modifier les paramètres des indicateurs à la volée dans mql4 ? L'idée est simple : l'indicateur ZigZag est installé sur le graphique. Le script doit être écrit et la touche de raccourci doit y être attachée. En appuyant sur cette touche, les paramètres du zigzag seront modifiés sur le graphique.
Ainsi, la fonction vérifie les valeurs des deux barres précédentes et si elles sont trop grandes, elle renvoie VRAI. La question est de savoir comment l'améliorer joliment : faire en sorte que cette fonction recherche les grandes bougies sur un plus grand nombre de bougies. Par exemple 24.
satorifx : Bon après-midi. Savez-vous s'il est possible de modifier les paramètres des indicateurs à la volée dans mql4 ? L'idée est simple : l'indicateur ZigZag est installé sur le graphique. Le script doit être écrit et la touche de raccourci doit y être attachée. Dès que j'appuie sur cette touche, les paramètres ZigZag changent sur le graphique.
J'ai créé un conseiller expert maison pour tester le trading, mais je n'arrive pas à comprendre une chose...
La vente est ouverte en utilisant les MA maximales et minimales
// Condition pour l'ouverture de la position BUY if(MA_L1<MA_L0&&Ask<=MA_L0&MA_0>MA_1&&HA_up>HA_dw)
// Condition pour ouvrir une position SELL if(MA_H1>MA_H0&&Bid>=MA_H0&MA_0<MA_1&HA_up<HA_dw)
#include <b-Lots.mqh>externdouble TrailingStop = 30;
externdouble Sploss = 15;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start() {
double HA_up,HA_dw;
double MA_H0,MA_H1,MA_L0,MA_L1,MA_0,MA_1;
int i, cnt, ticket, total;
bool flag=true;
if(Bars<100) {
Print("bars less than 100");
return(0);
}
// Проверяем стоит ли открываться
cnt=OrdersHistoryTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) continue;
if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
flag=false;
break;
}
}
cnt=OrdersTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
flag=false;
break;
}
}
if(!flag) return(0);
//-----------------------------------------------
MA_H0=iMA(0,0,3,0,MODE_SMA,PRICE_HIGH,0);
MA_H1=iMA(0,0,3,0,MODE_SMA,PRICE_HIGH,1);
MA_0=iMA(0,0,3,0,MODE_EMA,PRICE_MEDIAN,0);
MA_1=iMA(0,0,3,0,MODE_EMA,PRICE_MEDIAN,1);
MA_L0=iMA(0,0,3,0,MODE_SMA,PRICE_LOW,0);
MA_L1=iMA(0,0,3,0,MODE_SMA,PRICE_LOW,1);
HA_up=iCustom(0,0,"Heiken Ashi",3,0);
HA_dw=iCustom(0,0,"Heiken Ashi",2,0);
//задали все данные
total=OrdersTotal();
if(total<1)
{
// Проверка свободной маржиif(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// Условие открытие позиции BUYif(MA_L1<MA_L0&&Ask<=MA_L0&&MA_0>MA_1&&HA_up>HA_dw)
{
Lots=GetSizeLot();
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-Sploss*Point,0,"",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
elsePrint("Error opening BUY order : ",GetLastError());
return(0);
}
// Условие открытие позиции SELLif(MA_H1>MA_H0&&Bid>=MA_H0&&MA_0<MA_1&&HA_up<HA_dw)
{
Lots=GetSizeLot();
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Ask+Sploss*Point,0,"",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
elsePrint("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) // длинная позиция открыта
{
if(NormalizeDouble (MathAbs(MA_H0-Bid),Digits)<Point)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
return(0);
}
// трейлинг-стоп для длинной позицииif(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if(NormalizeDouble (MathAbs(MA_L0-Ask),Digits)<Point)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
return(0);
}
// трейлинг-стоп для короткой позицииif(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
Question : Si la position sur la bougie actuelle n'est pas fermée (les conditions ne sont pas réunies), comment la fermer sur la bougie suivante, lorsqu'elle correspond à MA_0= iMA ( 0, 0, 3, 0, MODE_EMA, PRICE_MEDIAN, 0 ) ;
Nous avons une condition de fermeture : franchissement du haut ou du bas de la bougie actuelle, mais nous avons besoin que la position soit fermée sur la bougie suivante après son ouverture.
Nous pouvons écrire if ( NormalizeDouble ( MathAbs (MA_0-Ask), Digits )< Point ), mais comment remplir la condition de la deuxième bougie ouverte.
Si vous pouvez répondre par un code, l'exemple est plus clair.
Merci pour cette réponse incroyablement détaillée.
Faut-il vraiment être un petit malin pour comprendre que si une nouvelle personne vient sur le forum avec une question, elle a besoin d'une solution spécifique ou d'un lien vers quelque chose de similaire, et non d'une excuse débile du type "tout est possible" ?
Merci pour cette réponse incroyablement détaillée.
Faut-il vraiment être un petit malin pour comprendre que si une nouvelle personne vient sur le forum avec une question, elle a besoin d'une solution spécifique ou d'un lien vers quelque chose de similaire, et non d'une excuse débile du type "tout est possible" ?
Les personnes qui essaient de faire quelque chose par elles-mêmes sont aidées ici. Ils vous guident dans la bonne direction, vous expliquent, etc ...
Vous avez posé une question et vous avez obtenu une réponse. Avez-vous essayé de commencer à écrire quelque chose vous-même ?
Lorsque vous posez une question dans un certain format, pensez d'abord au type de réponse que vous obtiendrez au format de la question...
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Donc, avec un peu de chance, la forme finale de la fonction.
Donc, avec un peu de chance, la forme finale de la fonction.
Donc, avec un peu de chance, la forme finale de la fonction.
Je pense que tim = Time[0] serait mieux placé après la boucle ...parce que demander Time[0] est fait sur tout le nombre de barres visibles - ce n'est pas rationnel.
Merci pour la correction. Le nombre d'erreurs croît de manière exponentielle à la nuit)))).
L'idée est simple : l'indicateur ZigZag est installé sur le graphique. Le script doit être écrit et la touche de raccourci doit y être attachée. En appuyant sur cette touche, les paramètres du zigzag seront modifiés sur le graphique.
Poursuivre le sujet actuel de la recherche d'un filtre à haute volatilité. Voici le code d'un filtre existant de WSR
int init()
Voici la fonction elle-même :
Ainsi, la fonction vérifie les valeurs des deux barres précédentes et si elles sont trop grandes, elle renvoie VRAI. La question est de savoir comment l'améliorer joliment : faire en sorte que cette fonction recherche les grandes bougies sur un plus grand nombre de bougies. Par exemple 24.
Bon après-midi. Savez-vous s'il est possible de modifier les paramètres des indicateurs à la volée dans mql4 ?
L'idée est simple : l'indicateur ZigZag est installé sur le graphique. Le script doit être écrit et la touche de raccourci doit y être attachée. Dès que j'appuie sur cette touche, les paramètres ZigZag changent sur le graphique.
J'ai créé un conseiller expert maison pour tester le trading, mais je n'arrive pas à comprendre une chose...
Question : Si la position sur la bougie actuelle n'est pas fermée (les conditions ne sont pas réunies), comment la fermer sur la bougie suivante, lorsqu'elle correspond à MA_0= iMA ( 0, 0, 3, 0, MODE_EMA, PRICE_MEDIAN, 0 ) ;La vente est ouverte en utilisant les MA maximales et minimales
// Condition pour l'ouverture de la position BUY
if(MA_L1<MA_L0&&Ask<=MA_L0&MA_0>MA_1&&HA_up>HA_dw)
// Condition pour ouvrir une position SELL
if(MA_H1>MA_H0&&Bid>=MA_H0&MA_0<MA_1&HA_up<HA_dw)
Nous avons une condition de fermeture : franchissement du haut ou du bas de la bougie actuelle, mais nous avons besoin que la position soit fermée sur la bougie suivante après son ouverture.
Nous pouvons écrire if ( NormalizeDouble ( MathAbs (MA_0-Ask), Digits )< Point ), mais comment remplir la condition de la deuxième bougie ouverte.
Si vous pouvez répondre par un code, l'exemple est plus clair.
Il y a une telle possibilité.
Merci pour cette réponse incroyablement détaillée.
Faut-il vraiment être un petit malin pour comprendre que si une nouvelle personne vient sur le forum avec une question, elle a besoin d'une solution spécifique ou d'un lien vers quelque chose de similaire, et non d'une excuse débile du type "tout est possible" ?
Merci pour cette réponse incroyablement détaillée.
Faut-il vraiment être un petit malin pour comprendre que si une nouvelle personne vient sur le forum avec une question, elle a besoin d'une solution spécifique ou d'un lien vers quelque chose de similaire, et non d'une excuse débile du type "tout est possible" ?
Les personnes qui essaient de faire quelque chose par elles-mêmes sont aidées ici. Ils vous guident dans la bonne direction, vous expliquent, etc ...
Vous avez posé une question et vous avez obtenu une réponse. Avez-vous essayé de commencer à écrire quelque chose vous-même ?
Lorsque vous posez une question dans un certain format, pensez d'abord au type de réponse que vous obtiendrez au format de la question...