Si je comprends bien, il est responsable du fait que l'EA retarde le recalcul jusqu'à ce qu'une nouvelle barre apparaisse. Jusqu'à ce que l'heure d'ouverture de la barre de zéro change, le recalcul s'arrête.
Par conséquent, si j'ouvre un EA sur les minutes, il sera recalculé à chaque nouvelle minute. Et si je l'ouvre sur H4, il sera recalculé toutes les 4 heures.
Comment écrire cette ligne correctement, pour que l'EA ne prenne pas l'heure d'ouverture de la barre courante, c'est-à-dire la barre à laquelle le terminal est ouvert, mais celle que je spécifierai dans les paramètres ? C'est-à-dire que je place l'EA sur H4, par exemple, et il recalculera toutes les 5 minutes, parce que je l'ai réglé ainsi. Ou chaque minute.
evillive: De quoi se plaint-il dans le journal des modifications ? "Ouvre stupidement de nouveaux ordres en attente" car il n'y a pas de limite, mais il y a un OrderSend.
1) Toute stratégie doit être définie par le nombre d'ordres ouverts en même temps. Par conséquent, avant d'ouvrir la prochaine commande, nous devons vérifier combien sont déjà ouvertes.
2) Sur une barre, il ne peut pas y avoir de fractales UPPER et LOWER en même temps, respectivement, le contrôle est classé comme étant
appartient à la catégorie des idioties de programmeurs.
3) Avant d'écrire les conditions de retour des valeurs de l'indicateur de tampon, vous devez savoir exactement quelle valeur est "vide" pour celui-ci ? Avez-vous vérifié qu'il est à zéro ?
4) La construction.
Bien qu'elle fonctionne (dans la plupart des cas), elle n'est pas naturelle, car il s'agit d'une idée de "libre arbitre" du développeur, et elle est peu informative pour l'opérateur. Une alternative - le suivi d'un nouveau bar.
5) Vous devez commencer par les bases, car ceci :
Cela indique que vous ne comprenez pas du tout ce que vous écrivez.
La meilleure façon de comprendre est d'étudier le fonctionnement des codes d'autres personnes et de les modifier pour vos propres besoins. Bonne chance.
Il les affiche tels qu'ils sont écrits, point par point. Il ne les modifie pas, ce dont vous n'avez pas dit un mot. Voici le code complet :
//+------------------------------------------------------------------+//| Strategy 3.mq4 |//| |//| |//+------------------------------------------------------------------+#property copyright""#property link""#include <Library1.mqh>
externint Magic=111;
externint TP=20;
externint SL=30;
externint Trall_dist=10;
externint Shag=10;
externbool Isp_shag=false;
externbool Isp_bezubitok=false;
externdouble Lot=0.1;
double SS=0,BS=0;
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
double tp,sl;
if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
elseif(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака
double Up=iFractals(Symbol(),0,MODE_UPPER,3); //верхний фрактал,формируется на третьей свече
double Down=iFractals(Symbol(),0,MODE_LOWER,3); //нижний фрактал,формируется на третьей свече
//----if(Up>0&&Down==0&&Volume[0]<2) //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
{
if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
{
for (int pos=0;pos==OrdersTotal();pos++)
OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
{
OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
}
}
}
elseif(Up==0&&Down>0&&Volume[0]<2)
{
if((Bid-Low[3]-5*Point)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
OrderSend(Symbol(),OP_SELLSTOP,Lot,Low[3]-5*Point,20,Low[3]+sl,Low[3]-tp,NULL,Magic,0,Red);
else {SS=Low[3]-5*Point; Print("Виртуальный SS:",SS);}
{
for (pos=1;pos==OrdersTotal();pos++)
{
OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
{
OrderModify(OrderTicket(),Down-5*Point,Low[3]+sl,Low[3]-tp,0,CLR_NONE);
}
}
}
if(OrdersTotal()>0)
Trailing_stop(Magic,Symbol(),Trall_dist,Shag,Isp_shag,Isp_bezubitok);
return(0);
}}
//+------------------------------------------------------------------+
J'essaie d'écrire comme j'ai lu, regardé, compris. Votre critique me fait penser à un manuel MQL4 - je ne le comprends que si quelqu'un me l'explique.
if(Up>0&&Down==0&&Volume[0]<2) //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
{
if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупкуelse {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка){ // К чему относится эта скобка???
for (int pos=0;pos==OrdersTotal();pos++)
OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
{
OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
}
} // это пара к той...
}
Et ce code
if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнакаelseif(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака
il est préférable d'écrire dans init() et mieux encore pas comme ceci
double point; // на уровне глобальных переменныхintOnInit()
{
point = Digits%2 == 0 ? _Point : _Point * 10;
}
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.
2) Il ne peut pas y avoir de fractales UPPER et LOWER sur la même barre au même moment, respectivement, vérifiez
appartient à la catégorie des idioties de programmeurs.
Donc ces citations sont seulement pour les idiots.
2) Il ne peut pas y avoir de fractales UPPER et LOWER sur la même barre au même moment, respectivement, vérifiez
appartient à la catégorie des idioties de programmeurs.
Les deux fractales peuvent être sur la même barre.
il voulait dire les minutes, mais a oublié les mois
Quelle est la différence entre les minutes et les mois ?
De quoi se plaint-il dans le journal des modifications ? "Ouvre stupidement de nouveaux ordres en attente" car il n'y a pas de limite, mais il y a un OrderSend.
Quelle est la différence entre les minutes et les mois ?
1) Toute stratégie doit être définie par le nombre d'ordres ouverts en même temps. Par conséquent, avant d'ouvrir la prochaine commande, nous devons vérifier combien sont déjà ouvertes.
2) Sur une barre, il ne peut pas y avoir de fractales UPPER et LOWER en même temps, respectivement, le contrôle est classé comme étant
appartient à la catégorie des idioties de programmeurs.
3) Avant d'écrire les conditions de retour des valeurs de l'indicateur de tampon, vous devez savoir exactement quelle valeur est "vide" pour celui-ci ? Avez-vous vérifié qu'il est à zéro ?
4) La construction.
Bien qu'elle fonctionne (dans la plupart des cas), elle n'est pas naturelle, car il s'agit d'une idée de "libre arbitre" du développeur, et elle est peu informative pour l'opérateur. Une alternative - le suivi d'un nouveau bar.
5) Vous devez commencer par les bases, car ceci :
Cela indique que vous ne comprenez pas du tout ce que vous écrivez.
La meilleure façon de comprendre est d'étudier le fonctionnement des codes d'autres personnes et de les modifier pour vos propres besoins. Bonne chance.
Et ce code
il est préférable d'écrire dans init() et mieux encore pas comme ceci
et ensuite dans start()
tp = High[3]+TP*point;