[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 332

 
Stepan241 >> :

J'essaie d'écrire un indicateur. L'idée est simple : nous allons faire la moyenne (force des haussiers - force des baissiers). Naturellement, pour une certaine période de temps.



int start()
{
int i=Bars-IndicatorCounted()-1 ;
while(i>=0)
{
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i) ;
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i) ;
MA_Ours[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_EMA,i) ;
MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i) ;
Buf_0[i]=MA_Bulls[i];
i-- ;
}
retour ;
}

Je n'affiche que les bulls lissés Buf_0[i]=MA_Bears[i] ; cela est fait pour contrôler à un certain stade le tracé des indices. Pas même EXACTEMENT. Si je les lisse avec une période de 1, ils doivent en fait répéter des taureaux intégrés. J'en ai donc conclu que quelque chose ne va pas dans la ligne MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i) ; Je ne comprends pas quoi exactement...AIDEZ-MOI !!!! Cela fait trois jours que je cherche dans les manuels et la documentation. MERCI !


Vous devriez d'abord former les tableaux de données des haussiers et des baissiers, puis les lisser avec le prochain cycle, car vous ne l'avez pas encore formé et utilisez déjà le lissage, et il n'y a pas de données à lisser ?

 
Urain писал(а) >>

Former d'abord les tableaux de données des haussiers et des baissiers, puis utiliser le prochain cycle pour les repasser, parce que vous ne l'avez pas encore formé et que vous utilisez déjà le lissage, et qu'il n'y a pas de données à lisser ?

Traduction de

int start()
{
  int i, limit=Bars-IndicatorCounted()-1;
  for ( i= limit; i>=0; i--){
    Bears_array[ i]=iBearsPower(NULL,0, PeriodPower,PRICE_CLOSE, i);
    Bulls_array[ i]=iBullsPower(NULL,0, PeriodPower,PRICE_CLOSE, i);
  }
  for ( i= limit; i>=0; i--){
    MA_Bears[ i]=iMAOnArray( Bears_array,0, MA_Period,0,MODE_EMA, i); 
    MA_Bulls[ i]=iMAOnArray( Bulls_array,100, MA_Period,0,MODE_SMA, i); 
  }
  return;
}
 

costy_ писал(а) >>

extern string xxxxxxxxxxxxx="x=0 сегодня х=1 вчера итд";
extern int х=0;
int середина=(iHigh(0,PERIOD_D1, х)-iLow(0,PERIOD_D1, х))/2;
if(Bid> середина)...;
if(Ask< середина)...;


extern datetime some_time=D'14:56';
int середина_some_time=(iHigh(0,0,iBarShift(0,0, some_time))-iLow(0,0,iBarShift(0,0, some_time)))/2;
if(Bid> середина_some_time)...;
if(Ask< середина_some_time)...;

Merci beaucoup, je me rapproche. Un point n'est pas tout à fait clair.

14:56' - La chaîne de caractères de la date est incomplète. C'est l'avertissement que j'ai reçu de l'ordinateur.

D'après ce que j'ai compris, il veut toujours la date, mais je n'ai pas besoin d'une date spécifique, ce que je veux c'est comparer le prix actuel chaque jour avec le prix d'une certaine heure le même jour. Veuillez clarifier ce point.

 
alsu >> :

Pourquoi avez-vous besoin de les appeler via iCast ? Est-ce pour l'unification ? Ecrivez un indicateur-wrapper séparé pour chacun d'entre eux et appelez-les via iCustom...

Le problème est que j'ai modifié ces deux indicateurs (AO et AC) et je veux maintenant que les barres soient colorées en fonction des indicateurs modifiés. Ou y a-t-il un autre moyen de le faire ? Je viens de commencer le MQL récemment...

 
Necron >> :

Le problème est que j'ai refait les deux indicateurs (AO et AC), et maintenant je veux que les barres soient colorées en fonction des indicateurs modifiés. Ou y a-t-il un autre moyen de le faire ? J'ai commencé à apprendre le MQL récemment...

Donc, ce que vous avez refait et que vous appelez, quel est le problème ? Par exemple, si vous avez modifié des indicateurs appelés AO, AC, l'appel sera le suivant

iCustom(0,0,"AO",0,shift);
iCustom(0,0,"AС",0,shift);

ou vous pouvez ajouter vos propres paramètres

 
future >> :

Merci beaucoup, je me rapproche. Un point n'est pas tout à fait clair.

14:56' - la chaîne littérale de la date est incomplète. Cet avertissement m'a été donné par l'ordinateur.

D'après ce que je comprends, il veut toujours la date, mais je n'ai pas besoin d'une date spécifique, ce que je veux c'est comparer le prix actuel chaque jour avec le prix d'une certaine heure le même jour. Veuillez clarifier ce point.


string час="15";
string мин="15";
datetime some_time=D'Year().Month().Day() час:мин';//попробуй так ____ но на тестере не будет работать, так как текущие год месяц и день 
привяжитесь к барам так проще вместо iBarShift(0,0, some_time) номер бара
 

costy_ писал(а) >>

futur >>:

Merci beaucoup, je me rapproche

.

Un point n'est pas tout à fait clair.

Je

comprends qu'il veut toujours la date, mais je n'ai pas besoin d'une date spécifique, j'ai besoin du prix actuel chaque jour par rapport au prix d'une certaine heure du même jour

.

Veuillez clarifier ce point.


string час="15";
string мин="15";
datetime some_time=D'Year().Month().Day() час:мин';//попробуй так ____ но на тестере не будет работать, так как текущие год месяц и день 
привяжитесь к барам так проще вместо iBarShift(0,0, some_time) номер бара

Cependant, je veux savoir s'il est possible de maintenir la liaison jusqu'à une certaine heure. Dans MQL4, comment dire le cours acheteur à 14h00 de chaque jour de bourse ?

 

skifodessa 05.12.2009 14:07


Bonjour à tous.

Veuillez me dire comment calculer le nombre de franchissements de prix d'un certain niveau. Je veux que mon ordre s'ouvre après 3 (4,5...), mais pas après le premier croisement.

Merci.
------------------------------------------------------------

Vous pouvez essayer l'algorithme


Si (Prix de la barre actuelle>Prix de la barre précédente<niveau)alors {compteur incrémenté de un}.

Si (compteur>3) alors {ouvrir la commande ; remettre le compteur à zéro}

Maintenant, écrivons la même chose en langage courant (je n'écris que des blocs, vous pouvez les insérer aux endroits nécessaires).

Extern int Chet=10 ; // après combien de croisements un ordre doit être ouvert.

Extern double Uroven=1.6566 ; // après que le prix ait franchi quel niveau commencer à compter.

Dans la fonction de démarrage, les conditions seront approximativement les suivantes

int k ;

if(Open[0]>Uroven && Open[1]<Uroven)k=k+1;// ici nous considérons un franchissement UP

si(k>Chet){OrderSend(.......);k=0} ;

En général, la question n'est pas très difficile. Le livre sur le MCL explique les bases de l'ALGORITHMIE.

 

FOR Vinin a écrit >>.

Merci pour le conseil, mais ça ne servira à rien. Parce que vous venez de remplacer la boucle While par une boucle FOR.

FOR Urain écrit(a) >>

Les deux lignes suivantes forment juste le bon tableau.

Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i) ;
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i) ;

Urain Vous avez dû penser que la fonction iMAOnArray devait passer un tableau déjà formé. Le former avec la boucle FOR n'a pas aidé. C'est parce que ce n'est pas le tableau passé à cette fonction (iMAOnArray) mais son NOM. Et le tableau est traité PERSONNELLEMENT.

en changeant i dans la chaîne MA_Ours[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMA,i) ;

J'ai résolu le problème. C'est beaucoup plus profond qu'il n'y paraît. Si vous appliquez ce traitement uniquement dans le conseiller expert, il n'y a aucun problème, mais si vous l'utilisez pour construire un graphique, vous aurez de toute façon un problème. Le fait est que les tableaux sont indexés inversement. La fonction iMAOnArray a une indexation directe (de gauche à droite), alors que le graphique est indexé de droite à gauche. Merci à Garfich pour cette explication.



 
Stepan241 >> :

FOR Vinin a écrit >>.

Merci pour le conseil, mais ça ne servira à rien. Parce que vous venez de remplacer la boucle While par une boucle FOR.

FOR Urain écrit(a) >>

Les deux lignes suivantes forment juste le bon tableau.

Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i) ;
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i) ;

Urain Vous avez dû penser que la fonction iMAOnArray devait passer un tableau déjà formé. Le former avec la boucle FOR n'a pas aidé. Parce que ce n'est pas le tableau que vous passez à cette fonction (iMAOnArray), mais son NOM. Et le tableau est traité PERSONNELLEMENT.

en changeant i dans la chaîne MA_Ours[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMA,i) ;

J'ai résolu le problème. C'est beaucoup plus profond qu'il n'y paraît. Si vous appliquez ce traitement uniquement dans le conseiller expert, il n'y a aucun problème, mais si vous l'utilisez pour construire un graphique, vous aurez de toute façon un problème. Le fait est que les tableaux sont indexés inversement. La fonction iMAOnArray a une indexation directe (de gauche à droite), alors que le graphique est indexé de droite à gauche. Merci à Garfich pour cette explication.

Je ne sais pas quel était le problème, mais Vinin l'a écrit correctement (cela n'a pas d'importance pour ou pendant), la chose principale est que d'abord la boucle forme un tableau de données et ensuite la boucle suivante forme un iMA à partir de celui-ci,

et la chaîne Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i) ; remplit seulement une i-ième valeur du tableau

sans boucle, le tableau ne sera pas généré.