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
#Ordre des objets
J'ai créé 3 objets et ces objets se croisent les uns les autres.
#1 Ligne Horizontale, #2 Ligne Verticale, #3 Ligne de Tendance
J'ai besoin de définir leurs positions z.
Alors comment puis-je leur donner une valeur de position z?
Merci.
Vous pouvez dessiner toutes les lignes dans OnInit() et ensuite en dessiner de nouvelles dès que le temps d'ouverture de la dernière barre change, vous saurez qu'il y a eu une nouvelle barre.
Mais je ne suis pas sûr de ce que vous voulez faire exactement.
OK ! Je vais essayer quelque chose. Puis je reviendrai ici.
Merci.
@Marco vd Heijden
Avant de commencer mes recherches sur ce sujet. J'ai vraiment besoin de demander, est-ce que la fonction start() ralentit le graphique (/ Plateformes MT4) ?
p.s J'ai mis tous les codes dans la fonction spéciale start() , ce code fonctionne pour les lignes de période- H1, H4, D1, W1, MN1.
Je vous souhaite un bon week-end et vous remercie d'avance.
Merci pour votre commentaire. (après votre commentaire, j'ai décidé de changer quelque chose dans tous mes indicateurs - parce que presque j'ai fait tous mes indicateurs dans lafonction start() ).
J'ai mis le code ci-dessous dans la fonction start(), alors pouvez-vous m'aider à savoir quelle est la meilleure façon pour mon indicateur ?
En fait, je n'ai aucune idée de la façon dont je peux modifier le code ci-dessous pour arrêter la mise à jour continue (sans tous les codes start() mis dans la fonction init()).
int _cnt_MN1 = 11; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ )
{
if ( _Period < PERIOD_MN1 )
{
//---time convert
datetime _tltpMN1 = TimeToString( iTime( Symbol(), PERIOD_MN1, i_MN ), TIME_DATE );
datetime _time = iTime( Symbol(), PERIOD_MN1, i_MN );// + PeriodSeconds( PERIOD_MN1 );
//---name
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
ObjectCreate ( 0, _vlineName_MN, OBJ_VLINE , 0, _time, 0 );
ObjectSetString ( 0, _vlineName_MN, OBJPROP_TOOLTIP , _tltpMN1 );
ObjectSetInteger ( 0, _vlineName_MN, OBJPROP_COLOR , C'180,160,080' );
ObjectSet ( _vlineName_MN, OBJPROP_BACK , true );
ObjectSet ( _vlineName_MN, OBJPROP_HIDDEN , true );
ObjectSet ( _vlineName_MN, OBJPROP_SELECTABLE , false );
ObjectSet ( _vlineName_MN, OBJPROP_STYLE , STYLE_SOLID );
} //---if Close
} //---for Close
Merci !
J'ai vraiment besoin d'aide, s'il vous plaît, que quelqu'un réponde à ma question.
Merci.
Je ne suis pas d'accord pour faire une nouvelle fonction de barre, car elle ne peut être appelée qu'une fois par tick. Une variable peut être testée plusieurs fois.
static datetime BOMcur=0; dateTime BOMpre = BOMcur;
BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool isNewMonth = BOMcur != BOMpre;
if(isNewMonth){
DO_UPDATE(); ...
}
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
Veuillez le mettre dans un expert au lieu d'un indicateur, cela permet une utilisation plus facile à l'avenir lorsque vous voulez ajouter votre stratégie de trading.
Pour le problème des barres, stockez l'heure d'ouverture de la barre dans une variable datetime et comparez simplement l'heure enregistrée avec l'heure réelle, puis chaque fois qu'une nouvelle barre apparaît, elle se déclenchera.
Voici un exemple :
int OnInit()
{
//--- create timer
EventSetMillisecondTimer(250);
//--- create some things
CreateLines(); // Function that creates time lines
//--- load open times
M1=iTime(Symbol(),PERIOD_M1,0);
M5=iTime(Symbol(),PERIOD_M5,0);
M15=iTime(Symbol(),PERIOD_M15,0);
M30=iTime(Symbol(),PERIOD_M30,0);
H1=iTime(Symbol(),PERIOD_H1,0);
H4=iTime(Symbol(),PERIOD_H4,0);
D1=iTime(Symbol(),PERIOD_D1,0);
W1=iTime(Symbol(),PERIOD_W1,0);
MN1=iTime(Symbol(),PERIOD_MN1,0);
//--- set timelines
ObjectMove(0,"Time-M1",0,M1,0);
ObjectMove(0,"Time-M5",0,M5,0);
ObjectMove(0,"Time-M15",0,M15,0);
ObjectMove(0,"Time-M30",0,M30,0);
ObjectMove(0,"Time-H1",0,H1,0);
ObjectMove(0,"Time-H4",0,H4,0);
ObjectMove(0,"Time-D1",0,D1,0);
ObjectMove(0,"Time-W1",0,W1,0);
ObjectMove(0,"Time-MN1",0,MN1,0);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
if(M1!=iTime(Symbol(),PERIOD_M1,0))
{
M1=iTime(Symbol(),PERIOD_M1,0); // overwrite old value with new value
//Alert("New Bar on M1! ",TimeToString(M1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M1",0,M1,0);
}
if(M5!=iTime(Symbol(),PERIOD_M5,0))
{
M5=iTime(Symbol(),PERIOD_M5,0);
//Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M5",0,M5,0);
}
if(M15!=iTime(Symbol(),PERIOD_M15,0))
{
M15=iTime(Symbol(),PERIOD_M15,0);
//Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M15",0,M15,0);
}
if(M30!=iTime(Symbol(),PERIOD_M30,0))
{
M30=iTime(Symbol(),PERIOD_M30,0);
//Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M30",0,M30,0);
}
if(H1!=iTime(Symbol(),PERIOD_H1,0))
{
H1=iTime(Symbol(),PERIOD_H1,0);
//Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-H1",0,H1,0);
}
if(H4!=iTime(Symbol(),PERIOD_H4,0))
{
H4=iTime(Symbol(),PERIOD_H4,0);
//Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-H4",0,H4,0);
}
if(D1!=iTime(Symbol(),PERIOD_D1,0))
{
D1=iTime(Symbol(),PERIOD_D1,0);
//Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-D1",0,D1,0);
}
if(W1!=iTime(Symbol(),PERIOD_W1,0))
{
W1=iTime(Symbol(),PERIOD_W1,0);
//Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-W1",0,W1,0);
}
if(MN1!=iTime(Symbol(),PERIOD_MN1,0))
{
MN1=iTime(Symbol(),PERIOD_MN1,0);
//Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-MN1",0,MN1,0);
}
}
//+------------------------------------------------------------------+
static datetime BOMcur=0; dateTime BOMpre = BOMcur;
BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool isNewMonth = BOMcur != BOMpre;
if(isNewMonth){
DO_UPDATE(); ...
}
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
Merci pour votre commentaire.
Depuis votre commentaire, j'ai commencé à essayer de faire des recherches sur votre commentaire. (parce que je n'ai jamais utilisé la fonction 'Void OnTick()').
Quoi qu'il en soit, M. William, votre commentaire m'a vraiment donné une idée et m'a aussi appris quelque chose.
(p.s. si je pense mal, dites-le moi s'il vous plaît).
Avant la construction 600 (3 février2014), il n'y avait que start(). Maintenant il y a OnTick (EAs,) OnCalculate (indicateurs,) et OnStart (scripts.) J'ai oublié que vous parliez d'un indicateur.
Commencez à utiliser les nouvelles fonctions de gestion des événements - Fonctions - Notions de base du langage - Référence MQL4. Voir Comment faire vos lookbacks correctement.