[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 628
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
Vous n'avez pas d'ordre sélectionné dans la fonction Trade ().
Au fait. Quel est l'intérêt de sélectionner un ordre dans la fonction Trade()? J'appelle la fonction OrdersModifying() où l'ordre est sélectionné et où il est modifié. C'est-à-dire que la variante initiale était correcte !
Ça existe. Voici la solution.
Et la fonction de modification est ici :
Étrange Mais il n'y a pas d'arrêts et de prises sur la sortie à nouveau.
OrderSelect(g_ticket,SELECT_BY_TICKET) avant la ligne if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
History, History_Draw - ils fonctionnent comme des conseillers experts pendant les tests.
Vous avez besoin de quelque chose comme ceci pour surveiller les corrections dans l'historique par des paramètres donnés
Dans l'histoire ou sur la carte ? Voulez-vous voir les résultats dans une fenêtre graphique, dans une fenêtre séparée, imprimés dans un tableau, et si oui, quel type de données, sous forme de bougies de couleurs différentes, de lignes reliant le début et la fin du mouvement ?
OrderSelect(g_ticket,SELECT_BY_TICKET) avant la ligne if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
C'est ce que j'ai fait :
Il n'y a pas d'arrêts et de prises de contrôle. Le journal indique l'erreur 130, disant que les arrêts sont incorrects. Je ne vois pas la raison.
C'est ce que j'ai fait :
Il n'y a pas d'arrêts et de prises de contrôle. Le journal indique l'erreur 130, disant que les arrêts sont incorrects. Je ne vois pas la raison.
Sans ifs, il suffit deOrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) ;, et vous pouvez le laisser dans OrdersModifying()
//+------------------------------------------------------------------+
void OrdersModifying()
{
OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) ;
if(g_type == OP_BUY)
{
if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits) ; // Si le paramètre d'entrée stop loss n'est pas 0
// Obtenez la valeur du Stop Loss pour l'ordre sélectionné.
if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits) ; // Si le paramètre d'entrée TakeProfit n'est pas égal à 0, alors...
// obtenir la valeur TakeProfit pour l'ordre sélectionné
}
if(g_type == OP_SELL)
{
if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits) ; // Si le paramètre d'entrée du stop loss n'est pas 0
// Obtenez la valeur du Stop Loss pour l'ordre sélectionné.
if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits) ; // Si le paramètre d'entrée TakeProfit n'est pas égal à 0, alors...
// obtenir la valeur TakeProfit pour l'ordre sélectionné
}
si(sl != 0 || tp != 0) // Si les valeurs obtenues de sl et tp ne sont pas égales à 0, alors..
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime) ; // Modification de l'ordre
}
}
Problème avec Symbol() MT4 :
2 fonctions pour illustrer :
L'exécution du premier produit une chaîne vide :
Mais la deuxième fonction produit une chaîne ID "EURUSD" (enfin, cela dépend du graphique, mais produit, bien que selon la logique de la fonction, ce devrait être une chaîne vide) :
Aidez-moi à comprendre ce qui ne va pas. Merci.
Vous ne pouvez pas utiliser de noms réservés (valeur) lorsque vous déclarez vos variables, appelez _valeur
C'est ce que j'ai fait :
Il n'y a pas d'arrêts et de prises de contrôle. Le journal indique l'erreur 130, disant que les arrêts sont incorrects. Je ne vois pas la raison.
Et ils ne le feront pas !
Vitaly, j'ai fait comme vous l'avez dit, mais rien n'a changé. Apparemment le bug est enterré quelque part ailleurs.
Avant, j'avais tout (ouverture d'ordres - modification et transfert vers b.w. lorsque le niveau de prix fixé est atteint) et tout fonctionnait. C'était comme ça :
Maintenant, comme j'ai tout décomposé en fonctions spécifiques et spécialisées, tout a cessé de fonctionner. J'ai essayé les deux façons, rien ne fonctionne. Aucun arrêt n'est fixé.
Et ils ne le feront pas !
Où est la logique là-dedans ? J'aimerais comprendre... Voici la fonction :
Si les variables d'entrée i_sl et i_tp ne sont pas égales à zéro, nous obtenons les prix stop et take qui seront déjà dans l'ordre - sl ettp. Après cela, je vérifierai si nous avons calculé lessl ettp ici (si pour les shorts):
Si les valeurs sont obtenues, alors elles ne peuvent pas être nulles... car elles seront modifiées ! Ce sont des variables que l'on obtient séquentiellement par contexte de code.
Et ici, j'ai vérifié si nous avons trouvé les valeurs de stop et take. Comment peuvent-ils être nuls après toutes les conditions ?
Construisez d'abord votre logique au départ, puis les fonctions, les fichiers, etc.
Pourquoi se gratter la main gauche derrière l'oreille droite !