[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 27

 
Code:


OK, essayons une autre façon de voir les choses.

vteor12 peut être écrit comme (dVolume+vback1)/k1 (facteur 1)

vrealUP12 peut être écrit comme (dVolume+vback1)/k2 (coefficient 2)

Comme j'ai essayé de décrire l'idéologie de l'indicateur, elle consiste à comparer certains niveaux théoriques et réels. Pour obtenir ces niveaux, je compare (c'est-à-dire je divise) la même valeur (dVolume+vback1) avec une valeur théorique (k1) et une valeur réelle (k2). Il est clair que k1 je suis en train d'inventer, pour mettre les choses dans leur nom propre. Ou, si vous voulez, faire une supposition. Maintenant, il faut le comparer à quelque chose. Rien n'est plus objectif et vrai que le graphique lui-même dans ce cas. Je prends donc les différences d'ouverture et de fermeture, en les considérant comme la ligne de fond d'une période donnée. Et la seule tâche ici est de l'amener au même chiffre, c'est pourquoi il est multiplié par 1000.

Essayez de calculer plusieurs variantes de chandeliers voisins sur une calculatrice et vous serez peut-être surpris par la variété des résultats selon cette formule très simple.

Et en termes de logique scolaire, vous avez raison. J'ajoute Volume + Volume/Prix, tu ne peux pas faire ça à l'école. :))

Je vais passer... :)))

N'aviez-vous pas initialement un problème avec l'affichage ? L'avez-vous résolu ?

 
MaxZ:

Je vais passer... :)))

N'aviez-vous pas initialement un problème avec l'affichage ? L'avez-vous résolu ?


Oui, je l'ai fait, d'ailleurs. Je n'ai pas pris en compte le fait que c'était une ligne, pas un histogramme. La ligne doit avoir 2 points. Comme le code ne décrit pas toutes les variantes, mais seulement 2 bougies montantes à la suite, dans le cas où après la deuxième bougie montante se trouvait une bougie descendante, l'indicateur n'a rien dessiné. Et c'était juste. Quand j'ai compris, je l'ai modifié en histogramme.

Au fait, ne prenez pas à cœur mon raisonnement sur les règles d'addition et de soustraction. :)))

Et je vous serais très reconnaissant si vous pouviez m'aider à poursuivre le code. C'était le tout début. Après deux chandeliers d'affilée, je voudrais compter 3, 4 etc. chandeliers d'affilée selon le même principe. Apparemment, le code devrait être bouclé, avec la recherche de chandeliers, non ? Je ne peux pas encore le faire. Mais ne vous attardez pas sur ce qui est divisé par quoi. :)))

 

Porté par

VladimirR 29.07.2011 23:02 am Correction | suppression

Bonjour. J'ai enfin écrit ma première évaluation environnementale ! Je ne comprends pas bien comment cela fonctionne. L'EA place 2 ordres en attente lorsque certaines conditions sont remplies. Le stop loss pour les deux ordres est égal au High[1] (Low[1]) pour l'ordre de vente (achat) en attente et le take profit est toujours égal aux pips du stop loss. J'ai remarqué dans le testeur de stratégie que le profit n'est pas toujours égal au stop loss en pips. Veuillez me dire comment cela peut se produire. C'est le code où les ordres stop sont calculés (il n'y a pas d'autre endroit dans le programme où les stops sont modifiés).

//-2-анализ на установку buystop---------------------------------------------------------------------------------+
  if(Close[1]>=MA_17 && MA_3<=MA_17)
   {
    deposit_order=true;
    type_order =4;
    open_price =High[1];
    stop_loss  =Low[1];
    take_profit=NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
    if(Lot==0) Lot=MarketInfo(symb,MODE_MINLOT);
   }
 //-3-анализ на установку sellstop-------------------------------------------------------------------------------+  
  if(Close[1]<=MA_17 && MA_3>=MA_17)
    {
     deposit_order=true;
     type_order   =5;
     open_price   =Low[1];
     stop_loss    =High[1];
     take_profit  =NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
     if(Lot==0)Lot=MarketInfo(symb,MODE_MINLOT);
    }

 
nadya:
Bonjour, pourriez-vous me dire s'il est possible d'attribuer des valeurs à plusieurs variables globales dans une fonction, et où ces variables doivent-elles être déclarées dans ce cas?

Vous pouvez.

Déclarez les variables de manière globale - avant la fonction start(). À l'intérieur des fonctions EA, changez leurs valeurs comme vous le souhaitez - après le retour de la fonction, ces variables auront les valeurs que vous leur avez attribuées à l'intérieur de vos fonctions jusqu'à ce que vous les changiez à nouveau quelque part.

 
nadya:
bonjour ! pourriez-vous me dire s'il est possible d'assigner une valeur à plusieurs variables globales dans une fonction, et où ces variables doivent-elles être déclarées dans ce cas ?

Exemple. À l'intérieur de la fonction myfunction, nous attribuons une valeur à deux variables globales. Vous pouvez également attribuer une valeur à trois, quatre ou n variables de cette manière.

int global1 = 1;
int global2 = 2;

void myfunction(int g1, int g2)
{
   global1 = g1;
   global2 = g2;
}

int start()
{
   // До выполнения функции:     global1=1, global2=2   <---  то что объявили в начале кода
   
   myfunction(3, 4);
   
   // После выполнения функции:  global1=3, global2=4   <---  то что присвоили в функции
}

Mais je pense qu'il y a un piège dans votre question...

 
Code:


Oui, d'ailleurs, je l'ai résolu moi-même. Je n'ai pas pris en compte le fait que c'est une ligne, pas un histogramme. Et la ligne nécessite 2 points. Comme le code ne décrit pas toutes les variantes, mais seulement 2 bougies montantes à la suite, dans le cas où après la deuxième bougie montante se trouvait une bougie descendante, l'indicateur n'a rien dessiné. Et c'était juste. Quand j'ai compris, je l'ai converti en histogramme.

Au fait, ne prenez pas à cœur mon raisonnement sur les règles d'addition et de soustraction, considérez-le comme une expérience. :)))

Et je vous serais très reconnaissant si vous pouviez m'aider à poursuivre le code. C'était le tout début. Après deux chandeliers d'affilée, je voudrais compter 3, 4 etc. chandeliers d'affilée selon le même principe. Apparemment, le code devrait être bouclé, avec la recherche de chandeliers, non ? Je ne peux pas encore le faire. Mais ne vous attardez pas sur ce qui est divisé par quoi. :)))

Oui, mais la meilleure façon de résoudre ce problème est d'utiliser une boucle avec post-condition "while" au lieu d'une boucle avec compteur "for". Parce que vous ne savez pas combien de chandeliers haussiers ou baissiers vous allez rencontrer à la suite.

Commencez par un problème plus simple, si vous le trouvez si difficile. Par exemple, affichez les nombres de a à b par incréments de s. Ou trouver la factorielle de n avec une boucle.

Et pour vous entraîner, résolvez ces problèmes en utilisant les deux types de boucles ("for" et "while"). Vous pourrez alors commencer à améliorer votre indicateur.

 

Il n'y a pas de boucles postwhile dans le langage, MaxZ.

Votre désir d'aider les autres est louable, mais vous devez quand même mieux connaître la langue vous-même.

 
Mathemat:
Il n'y a pas de boucles postwhile dans le langage.

Si vous organisez la boucle de la manière suivante, vous obtiendrez la bonne postcondition :

int i = 0;
while (True)
{
   i++;
   if (i == 10) break;
}

Mais j'accepte votre correction. Merci. Puisqu'il y a effectivement deux types de boucles dans MQL4 : "for" (avec un compteur) et "while" (avec une condition préalable). Le troisième type (avec une postcondition) ne peut être organisé que de manière intentionnelle.


Mathemat:

Votre désir d'aider les autres est louable, mais vous devez quand même mieux connaître la langue vous-même.

Ce que je ne sais pas, je ne le fais pas.

Et toutes les autres erreurs ont été faites par inadvertance. J'ai été distrait ces derniers temps... Je veux juste aider les gens.

 

MaxZ: Единственная проблема состоит в том, что если советник с данным кодом запустить в тестере, а переменной PERIOD присвоить значение PERIOD_M1, то обе функции iBarShift возвращают -1, т.е. функции не удалось найти в истории бар на ТФ M1 с таким временем... Почему так происходит, не знаю.

Il est fort probable que cette fonction ne soit pas modélisée dans le testeur (je n'ai pas vérifié). D'autant plus que exact (le quatrième paramètre de la fonction) est fixé à false par défaut.
 
Mathemat:
Il est fort probable que cette fonction ne soit pas modélisée dans le testeur (je n'ai pas vérifié). D'autant plus que exact (le quatrième paramètre de la fonction) est fixé à false par défaut.
J'ai déjà compris... Le problème était l'histoire. Il n'y a pas eu d'historique de barres M1 pour la période testée.