[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 280
Et cet ordre des choses est normal (ce sont les principes du terminal).
Si vous voulez que l'indicateur B change ses indications quand les paramètres de l'indicateur A changent, faites un échange d'informations entre les indicateurs (il peut s'agir d'un fichier, de variables globales du terminal, de la RAM de l'ordinateur) : l'indicateur A passe ses paramètres initialisables pendant l'initialisation et l'indicateur B vérifie périodiquement les éventuels changements de paramètres de l'indicateur A. Quand il détecte des changements, l'indicateur B doit aussi se périnitialiser avec de nouveaux paramètres (init() forcé).
Merci pour votre réponse, mais je ne peux pas l'utiliser car je ne comprends pas tout et je ne suis pas très doué en programmation, pourriez-vous s'il vous plaît apporter les modifications nécessaires à mes codes indicateurs.
Bonne journée à tous. J'ai un problème avec l'indicateur "CurrencyPowerMeter" et je ne peux pas le déplacer vers une autre position dans la fenêtre du terminal. Si vous pouvez m'aider, je serai très heureux de le faire.
J'ai décidé de vous poser une question, vous pourrez peut-être me donner un conseil. J'écris un indicateur, dans l'indicateur je traite les ticks sur le timeframe tick (qui s'ouvre indépendamment,celui-ci). Mon tableau tampon ne traite PAS CHAQUE tick, mais de manière sélective (par exemple, un tick toutes les 60 secondes, mais ce n'est pas nécessaire). Au lieu de
int counted_bars=IndicatorCounted();
Je comprends la construction suivante :
externint sec=60;//объявляем количество секундint i;//будет индексом текущей "свечи" (тика)int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назадdouble MyBuffer[];//этот будет на чартеdouble MyTemp[];//этот только для подсчётовint init(){
IndicatorBuffers(2);
SetIndexBuffer(0,MyBuffer)
SetIndexBuffer(1,MyTemp)
SetIndexDrawBegin(0,14);
i=Bars-1;
while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()return(0);
}
int start(){
double deltaHigh,deltaLow;
int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)if(counted_bars>=i) i=Bars-counted_bars-1;//аналогичноwhile(i>=0){//цикл обработчика
deltaHigh=High[i]-High[i_prev];//к примеру
deltaLow=Low[i_prev]-Low[i];
//и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тикаwhile(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
i--;
}
}
...
Maintenant la question. Dans la version pure M1, la chose suivante est standard.
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2for(i=0; i<=limit; i++){
MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);
Avec quoi remplacer la limite et counted_bars ? D'après ce que j'ai compris,
int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while
(parce que le nombre de ticks en 60 secondes n'est pas constant, c'est-à-dire qu'écrire simplement int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_ ne fonctionnera pas).
Ou ai-je tort sur tout ?
p.s. en prévision d'une éventuelle question, je vais répondre : je sais que sur le forex sec!=60 n'est pas applicable, et sec=60 n'a aucun sens, mais je ne trade pas sur le forex non plus.
MK07: Merci pour votre réponse, mais je ne peux pas l'utiliser car je ne comprends pas tout et je ne suis pas bon en programmation, pourriez-vous s'il vous plaît faire les changements nécessaires à mes codes indicateurs.
Excusez-moi, vous avez une voiture ? Si vous en avez un, vous ne le considérez pas comme un luxe, juste comme une nécessité, n'est-ce pas ? Si ce n'est pas le cas, vous n'allez pas le laisser comme ça pour le reste de votre vie, n'est-ce pas ? C'est l'âge, vous devez savoir comment conduire une voiture. Je ne suis qu'un agriculteur, mais je fais ce que je fais, pour moi la programmation n'est pas différente du travail de jardinage, comme le travail de serrurier, le même travail avec mes mains (je vis à la campagne). Une brouette ou le MQL4 ne sont que des outils pour moi. Peut-être que c'est perçu différemment pour les citadins, je ne sais pas. Variables globales dans le manuel ici, fonctions de fichier standard ici, plus rapides celles-là, mais via WinAPI. Je voulais répondre hier, mais je ne l'ai pas fait.
#include <MASSIV.mqh> int start()
{
double Price=iOpen (Symbol (),0,0);
double SL=NormalizeDouble (Price+3000*Point, Digits);
double TP=NormalizeDouble (Price-100*Point, Digits);
double value = Bid ;//параметру value функции ArrayBsearch присваивается значение цены последнего тикаdouble ld_Delta = 0.0010;
int S = ArrayBsearch( mass, value, WHOLE_ARRAY, 0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он не изменился)
Il n'y a que 2 entrées dans le journal.
2013.04.12 16:14:44 XXX test démarré
2013.04.12 16:14:36 XXX EURUSD,H1 : chargé avec succès
QUESTION.POURQUOI LE PROGRAMME NE LIT-IL PAS UN TABLEAU INITIALISÉ EN UNE SEULE COLONNE.
Il lit tout. Enlever les points-virgules dans la déclaration du tableau, mettre des virgules. Et le nombre d'espaces ou de tabulations dans le tableau n'a pas d'importance. Ou peut-être que je me trompe.
Je ne trouve pas la commande qui redessine l'indicateur personnalisé. Si quelqu'un le sait, qu'il me le dise. Merci d'avance =)
Je l'ai déjà trouvé. Merci à tous =)
Bon après-midi.
Pouvez-vous m'aider à trouver une formule ?
J'ai une étape de recharge SD=100 ;
si le prix est de 25, alors pour lui le niveau de dépassement sera DE=100
si le prix est de 102, son taux d'unités sera de UD=200
si le prix est de 215, alors le taux de rechargement est BP=300
le prix a chuté à 135 de nouveau, le niveau de dépassement sera UD=200
Et cet ordre des choses est normal (ce sont les principes du terminal).
Si vous voulez que l'indicateur B change ses indications quand les paramètres de l'indicateur A changent, faites un échange d'informations entre les indicateurs (il peut s'agir d'un fichier, de variables globales du terminal, de la RAM de l'ordinateur) : l'indicateur A passe ses paramètres initialisables pendant l'initialisation et l'indicateur B vérifie périodiquement les éventuels changements de paramètres de l'indicateur A. Quand il détecte des changements, l'indicateur B doit aussi se périnitialiser avec de nouveaux paramètres (init() forcé).
Le premier code est l'indicateur A.
Deuxième code-indicateur B.
La dernière question a été résolue, la nouvelle est la suivante
Je fais recalculer le niveau de recharge sur chaque barre.
Comment se souvenir du niveau de la dernière barre ?
et l'utiliser pour ouvrir une transaction
Merci pour votre réponse, mais je ne peux pas l'utiliser car je ne comprends pas tout et je ne suis pas très doué en programmation.
Vous me proposez de faire pour vous ce avec quoi vous jouez. Désolé, je ne suis pas intéressé.
Et, si vous apprenez à programmer, c'est une tâche intéressante pour vous.
int counted_bars=IndicatorCounted();Je comprends la construction suivante :
Maintenant la question. Dans la version pure M1, la chose suivante est standard.
Avec quoi remplacer la limite et counted_bars ? D'après ce que j'ai compris,
(parce que le nombre de ticks en 60 secondes n'est pas constant, c'est-à-dire qu'écrire simplement int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_ ne fonctionnera pas).
Ou ai-je tort sur tout ?
p.s. en prévision d'une éventuelle question, je vais répondre : je sais que sur le forex sec!=60 n'est pas applicable, et sec=60 n'a aucun sens, mais je ne trade pas sur le forex non plus.
Merci pour votre réponse, mais je ne peux pas l'utiliser car je ne comprends pas tout et je ne suis pas bon en programmation, pourriez-vous s'il vous plaît faire les changements nécessaires à mes codes indicateurs.
Bonjour à tous !
J'apprends à utiliser les tableaux.
J'ai un tableau que j'ai initialisé avec des chaînes de caractères, c'est-à-dire une double masse [3567]={0.85374 , 0.85694 , 0.85974 , .... } ;
Et le programme a lu le tableau et l'a exécuté.
Maintenant j'ai initialisé le même tableau dans une colonne
double massif [3567]
{
masse [ 0] = 0.85374 ;
masse [ 1] = 0.85694 ;
masse [ 2] = 0. 85974 ;
masse [ 3] = 0.86174 ;
masse [ 4] = 0.86474 ;
masse [ 5] = 0.86494 ;
masse [ 6] = 0.86504 ;
masse [ 7] = 0,86524 ;
}
Le compilateur ne génère pas d'erreur mais un avertissement.
'{' - expression sur la portée globale non autorisée C:\Program Files\Alpari NZ MT4(2)\experts\include\MASSIV.mqh (4, 2)
Le tableau est déclaré globalement comme auparavant (lorsqu'il était initialisé avec des chaînes de caractères et fonctionnait bien).
Il n'y a que 2 entrées dans le journal.
2013.04.12 16:14:44 XXX test démarré
2013.04.12 16:14:36 XXX EURUSD,H1 : chargé avec succès
QUESTION.POURQUOI LE PROGRAMME NE LIT-IL PAS UN TABLEAU INITIALISÉ EN UNE SEULE COLONNE.
Merci.
QUESTION.POURQUOI LE PROGRAMME NE LIT-IL PAS UN TABLEAU INITIALISÉ DANS UNE COLONNE.