[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 615
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
Quel est le code ?
Au fait, j'ai longtemps réfléchi à cette question, mais je ne l'ai jamais trouvée, j'ai simplement oublié. Où le testeur obtient-il les valeurs d'arrêt ? Si les valeurs réelles peuvent être modifiées par le serveur, alors le résultat du test devrait dépendre de l'heure du test, ce qui n'est pas le cas, j'ai vérifié. Ou bien la valeur stockée dans les propriétés du symbole et la valeur donnée par le serveur à la demande ne sont pas les mêmes ?
rigonich
C'est une sorte de blague ou quoi ? Où est-ce que vous riez ?
TarasBY
Vous ne pouvez pas ? Alors ne le faites pas.
TarasBY
ne bouge pas, connard. C'est toi le monstre. Parce que tu ne peux même pas articuler deux mots correctement en russe.
Tu es un connard ? Eh bien, je n'ai pas besoin de vous torturer. Reposez-vous.
Les variables de l'environnement de marché se trouvent dans le fichier de service symbols.raw (vraisemblablement), qui se trouve dans le dossier historique du serveur. Lorsqu'il n'y a pas de connexion au serveur ou pendant les week-ends, le terminal extrait les dernières données de ce fichier.
Merci.
rigonich
C'est une sorte de blague ou quoi ? Où est-ce que vous riez ?
TarasBY
Vous ne pouvez pas ? Eh bien, tu n'aurais pas dû.
J'ai écrit en russe - il n'y a presque rien sur la déclaration des variables globales dans le manuel. Par exemple, je ne sais pas ce qu'est fGet_MineGV() ;
Est-ce une fonction ? Si c'est le cas, que fait-il ? La recherche de fGet dans le manuel ne donne aucun résultat.
Que dois-je déclarer dans int init() ? Vous avez écrit :
{
fGet_MineGV() ;
}
Ici, dans mon EA, l'initialisation de l'init ressemble à ceci :
int init()
{
ArrayInitialize(buf3,0) ;
ArrayInitialize(b1,0) ;
ArrayInitialize(b2,0) ;
ArrayInitialize(b3,0) ;
ArrayInitialize(b4,0) ;
Comment("Calculer la valeur moyenne "+ind) ;
m1=NormalizeDouble(iCustom(NULL,tf,ind+"_a",0,0),2) ;
string d="Valeur moyenne "+ind+"+DoubleToStr(m1,2) ;
tm=TimeCurrent() ;
int q=0,ticket=-1 ;
double opr=0,lot1=0 ;
for(q=0;q<OrdersTotal();q++)
{
et ainsi de suite, 100 lignes supplémentaires. Où aller, à quel endroit, et surtout, que dois-je déclarer exactement ici ? Est-ce vraiment si difficile d'écrire en russe ? Penchons nous sur nos doigts, oui.
Est-ce une fonction ? Si oui, que fait-il ? La recherche de fGet dans les manuels scolaires ne donne aucun résultat.
Oui, cette fonction, et il ne peut rien y avoir à ce sujet dans le tutoriel, elle n'était pas disponible au moment où le tutoriel a été écrit. Il s'agit d'une fonction définie par l'utilisateur, qui a été écrite spécialement pour vous.
{
rigonich
Je l'ai fait au début. J'ai inséré ce morceau de code dans la fonction init, je l'ai compilé et j'ai obtenu une note :
Lafonction "fGet_MineGV" n'est pas référencée et sera supprimée du fichier exp.
Cet avertissement est clair pour moi car il n'y a pas encore d'enregistrement, donc il ne peut rien lire, n'est-ce pas ?
Après cela, j'écris la deuxième partie du code à l'intérieur de la fonction start. Ce fragment ressemble à ceci
void fSave_MineGV (string fs_PrefName = "") // préfixe du nom de la variable
{
static datetime ldt_NewBar ;
datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
//---- sauvegarde au début de chaque minute
if (ldt_NewBar == ldaTeginBar) return ;
ldt_NewBar = ldaTBeginBar ;
//---- enregistrer les valeurs de chaque variable à tour de rôle
string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1") ;
GlobalVariableSet (ls_Name, SUA) ;
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2") ;
GlobalVariableSet (ls_Name, SUA1) ;
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3")
GlobalVariableSet (ls_Name, BUA) ;
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4") ;
GlobalVariableSet (ls_Name, BUA1) ;
}
Est-ce que tout va bien ici ?
J'insère cette partie du code juste après le calcul de SUA, SUA1, BUA, BUA1.
Mais lors de la compilation, le conseiller expert donne le résultat suivant :
27 erreur(s), 64 avertissement(s)
rigonich
Je l'ai fait au début. J'ai inséré ce morceau de code dans la fonction init, je l'ai compilé et j'ai obtenu une note :
La fonction "fGet_MineGV" n'est pas référencée et sera supprimée du fichier exp.
Cet avertissement est clair pour moi car il n'y a pas encore d'enregistrement, donc il ne peut rien lire, n'est-ce pas ?
Après cela, j'écris la deuxième partie du code à l'intérieur de la fonction start. Ce fragment ressemble à ceci
void fSave_MineGV (string fs_PrefName = "") // préfixe du nom de la variable
{
static datetime ldt_NewBar ;
datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
//---- sauvegarde au début de chaque minute
if (ldt_NewBar == ldaTeginBar) return ;
ldt_NewBar = ldaTBeginBar ;
//---- enregistrer les valeurs de chaque variable à tour de rôle
string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1") ;
GlobalVariableSet (ls_Name, SUA) ;
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2") ;
GlobalVariableSet (ls_Name, SUA1) ;
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3")
GlobalVariableSet (ls_Name, BUA) ;
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4") ;
GlobalVariableSet (ls_Name, BUA1) ;
}
Est-ce que tout est correct ici ?
Les descriptions de fonctions ne peuvent être placées ni dans start, ni dans inite, ni dans aucune autre fonction. Elles doivent être placées séparément. Vous pouvez les placer au milieu, au début ou à la fin de votre EA, mais pas dans d'autres fonctions. Vous ne devez mettre l'appel de fonction que dans l'init, vous pouvez le mettre au tout début.
Cette remarque est claire pour moi, puisque l'enregistrement n'a pas encore été créé, il ne peut rien compter, n'est-ce pas ? Exactement, il n'y a pas de description de fonction, que le compilateur cherche là où elle devrait être - en dehors des fonctions pragmatiques.
{
fGet_MineGV() ;
}
Il en va de même pour la deuxième fonction. Il s'agit d'une "introduction", et il est difficile de supposer que quelqu'un qui fait de la programmation, même un débutant, ne puisse pas savoir cela.
Bonsoir, le trailing stop fonctionne immédiatement après la passation de l'ordre. Et cela ne devrait fonctionner que lorsque l'ordre avec le ticket sera déplacé vers l'historique, et il sera déplacé strictement par TakeProfit.
Mais, si votre historique n'est pas vide, vous y trouverez presque certainement un ordre déclenché exactement à Take Profit ? Apparemment, vous ne recherchez pas dans l'historique un ordre clôturé au TP, mais vous vérifiez dans l'historique comment l'ordre dont vous avez besoin a été clôturé, et s'il a été clôturé tout court. C'est ce que vous devez vérifier, pourquoi vérifiez-vous exactement le prix de clôture de votre ordre ? Trois options - 1. Prix de clôture==0 - si l'ordre est au marché, il n'est pas dans l'historique (OrderSelect() retournera false) 2. Prix de clôture est égal à