[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 303
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Il
existe de nombreuses options, par exemple l'enregistrement des temps d'ouverture dans un fichier, mais il est plus facile de faire défiler les ordres ouverts et de comparer les durées de vie.
En général, il faut reformuler .
"Il est nécessaire de fermer toutes les positions ouvertes après un intervalle de temps
Le script ne trouvera pas l'heure du testeur aussi facilement (mais l'indicateur le fera), vous pouvez joindre le conseiller de test au départ.
rapidement et de manière fiable ...
J'essaie d'écrire un inikator. Je ne comprends pas pourquoi il redessine. De plus, il ne fait que tirer sur le rendu. Aidez-moi, s'il vous plaît. Je suis novice en matière de programmation.
#property indicator_chart_window
#property indicator_buffers 2
#propriété indicator_color1 Magenta
#property indicator_color2 Red
//---- paramètres d'entrée
extern int N ;
datetime some_time=D'1971.01.11 00:00' ;
datetime some_time_1=D'1971.01.11 00:00' ;
//---- tampons
double RLB_Buffer[] ;
double RLB_Buffer_1[] ;
double Real_Line_Balanse=0,x=0,last_high,last_low,RLB, Real_Line_Balanse_1=0,x1=0,last_high_1,last_low_1,RLB_1 ;
bool dirlong,first ;
int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1 ;
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
string short_name ;
//---- ligne d'indicateurs
SetIndexStyle(0, DRAW_ARROW) ;
SetIndexArrow(0, 159) ;
SetIndexBuffer(0,RLB_Buffer) ;
//---- ;
SetIndexStyle(1, DRAW_ARROW) ;
SetIndexArrow(1,159) ;
SetIndexBuffer(1,RLB_Buffer_1) ;
retour(0) ;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted() ;
Commentaire(i," ",ii) ;
//----
si(Barres < 3)
retour(0) ;
//----------
first_t_bar=iBarShift(NULL,0,some_time,false) ; //les barres tendent vers le haut
now_bar=iBarShift(NULL,0,TimeCurrent(),false) ; //dernière barre, la plus à droite
i=counted_bars-first_t_bar+1 ;
//------------
first_t_bar_1=iBarShift(NULL,0,some_time_1,false) ; //barre de début de tendance
now_bar_1=iBarShift(NULL,0,TimeCurrent(),false) ; //dernière barre, la plus à droite
ii=counted_bars-first_t_bar_1+1 ;
// si(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1 ; //si(counted_bars), alors la barre de début de tendance
si(barres comptées == 0)
{
premier = faux ;
i=première_t_barre+1 ;
ii=première_t_barre_1+1 ;
}
//------------ //barres négatives comptées
dirlong = faux ;
if(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true ;
if(dirlong == true) //si la tendance est à la hausse
{
while(i>=0)
{
x++ ; //compte des barres depuis le début de la tendance
Real_Line_Balanse=Close[i+5] ; //compte de la somme des ralentissements de la tendance
RLB=Real_Line_Balanse ;
if(RLB<Low[1]) RLB_Buffer[i]=Real_Line_Balanse ; //affiche la ligne seulement si le prix est en hausse
//-------
if(RLB>Close[i]&& x>50) //si le prix a franchi la RLB de haut en bas
{
bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//puis déterminer HIGH entre
//dernière barre et début de la tendance
some_time_1=Time[bar_high] ; //nouveau début de la tendance à la baisse
x=0 ; //remise à zéro du compteur de barres depuis le début de la tendance
Real_Line_Balanse=0 ;
}
i-- ;
}//while
//-------
}//dirlong
//---------------------
//---------------------
if(dirlong == false) //si la tendance est à la baisse
{
while(ii>=0)
{
x1++ ; //compte des barres depuis le début de la tendance
Real_Line_Balanse_1=Close[ii+10] ; //compte le nombre de barres de la tendance
RLB_1=Real_Line_Balanse_1 ;
if(RLB_1>High[1]) RLB_Buffer_1[ii]=Real_Line_Balanse_1 ;
//-------
if(RLB_1<Close[ii]&& x1>50) //si le prix a franchi la RLB de haut en bas
{
bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//puis déterminer le LOW entre
//dernière barre et début de la tendance
some_time=Time[bar_low] ; //nouveau début de la tendance à la hausse
x1=0 ; //remise à zéro du compteur de barres depuis le début de la tendance
Ligne_réelle_Balanse_1=0 ;
}
ii-- ;
} //while
//-------
}//dirlong
//---------------------
retour(0) ;
}
//+------------------------------------------------------------------+
C'est absurde. Au lieu de
i=counted_bars-first_t_bar+1 ;
J'ai mis en place un design qui compte les barres qu'il compte lui-même. TOUT a commencé à fonctionner sans problème. IndicatorCounted() ; glitches ou je ne comprends pas...
comment informer une variable sur le statut d'un ordre clôturé ?
C'est absurde. Au lieu de
i=counted_bars-first_t_bar+1 ;
J'ai mis en place une construction qui compte les barres comptées elle-même. TOUT se passe bien. IndicatorCounted() ; glitches ou je ne comprends pas...
Vous utilisez while(i>=0), donc lorsqu'une nouvelle bougie apparaît, i=1 (pour s'assurer que les données de la bougie précédente sont comptées par les données enregistrées une fois).
Pourquoi entrer some_time=D'1971.01.11 00:00' ; utiliser Bars , IndicatorCounted ne fonctionne pas pour moi (enfin, l'erreur est probablement due à la first_t_bar).
Votre algorithme et vous devriez le réparer.
"Je suis nouveau dans la programmation."Depuis 2007).
comment informer une variable sur le statut d'un ordre clôturé ?
:)
+ ...
Pour Vitaluha :
https://docs.mql4.com/ru/trading/OrderStopLoss
https://docs.mql4.com/ru/trading/OrderTakeProfit
Le problème est que l'EA rouvre constamment des ordres, c'est-à-dire qu'il y a un signal d'achat - il ouvre un ordre, puis le ferme à profit, et les conditions sont toujours préservées il l'ouvre à nouveau.
Je pensais que cela pouvait être géré avec le traditionnel compteur d'achat et de vente - si un ordre d'achat a été ouvert, le compteur +1 et un nouvel achat ne peut être ouvert tant que le compteur n'est pas à 0 et le compteur n'est remis à zéro que lorsqu'il est fermé.