Bonjour. Je n'arrive pas à écrire un code qui ouvrirait une position dans un nombre n debarres après l'ouverture de la position précédente. J'ai essayé d'utiliser Time[i], iBarShift, iTime. Je n'ai pas eu de chance avec tout ça. Je suis novice en matière de programmation. La recherche n'a rien donné.
Dmitri Custurov: Здравствуйте. Не получается написать код, который открывал бы позицию через n-количество баров после открытия предыдущей позиции. Пробовал использовать Time[i], iBarShift, iTime. Все безуспешно. В программировании новичок. Поиск ничего не дал.
Salutations, pour que vous puissiez obtenir de l'aide pour trouver l'erreur - vous devez joindre le code au moins. Personne ici n'écrira à votre place - il est d'usage ici de vous aider à trouver l'erreur et à la corriger par des conseils. Ou - contactez un indépendant.
if ((TimerNull>=(Timer+2700))&&(z==1)) //à titre d'exemple ici, au lieu de n, j'ai mis 2700 secondes, ce qui dans les tests signifiait 3 bougies de 15 minutes) {int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red) ;
z=2;}
Et aussi comme ça :
si ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1)))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red) ; //Dans ce cas, lorsque j'ai retiré 2700, la deuxième transaction a été ouverte juste après la première dans la même barre, c'est logique. Et même lorsque j'ai mis n'importe quelle valeur jusqu'à 600 au lieu de 2700, la deuxième affaire a été ouverte dans la même barre. Avec une valeur supérieure à 600, la deuxième transaction ne s'est jamais ouverte. Je ne comprends pas quel est le problème. Je vous serais très reconnaissant de votre aide.
Les paramètres Timer et TimerNull sont au format date.
Je suis encore en train d'écrire un brouillon pour que la logique de base fonctionne. Après cela, je vais l'affiner. Dans ce cas, je me trompe peut-être, le problème se situe dans la deuxième partie du code.
Tout a un sens. J'ai fait une indulgence pour la suppression normale.
Quand tu fermeras le terminal, ce sera dur. Pas plus de 3 secondes.
Et je ne suis pas sûr que nous allons écrire cela dans la documentation, 1. pour ne pas se laisser aller à écrire des indicateurs aussi imprudents (avez-vous écrit cela pour vérifier ?) 2. Comme on l'a desserré, on le resserre.
Alors resserrez-le déjà, ou corrigez la référence. Se faire plaisir sans se faire plaisir n'est pas une conversation sérieuse. Ce que les programmeurs attendent de vous, ce n'est pas d'être "dorlotés", mais des logiciels clairs et bien documentés.
Bien sûr, ce code n'a pas d'autre but qu'une démonstration, que vous avez vous-même demandée. Et c'est tout à fait inoffensif, inoffensif de l'obtenir, si vous supprimez Sleep et remplacez Comment par Print. Il n'y a aucune protection contre le spamming de gigaoctets d'impression dans le journal, que ce soit dans Quartet ou Quartet 5.
if ((TimerNull>=(Timer+2700))&&(z==1)) //à titre d'exemple ici, j'ai mis 2700 secondes au lieu de n, ce qui dans les tests signifiait 3 bougies de 15 minutes) {int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red) ;
z=2;}
Et aussi comme ça :
si ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1)))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red) ; //Dans ce cas, lorsque j'ai retiré 2700, la deuxième transaction a été ouverte juste après la première dans la même barre, c'est logique. Et même lorsque j'ai mis n'importe quelle valeur jusqu'à 600 au lieu de 2700, la deuxième affaire a été ouverte dans la même barre. Avec une valeur supérieure à 600, la deuxième transaction ne s'est jamais ouverte. Je ne comprends pas quel est le problème. Je vous serais très reconnaissant de votre aide.
Les paramètres Timer et TimerNull sont au format date.
C'est l'une des implémentations possibles. Cet EA doit ouvrir un ordre après le nombre de barres spécifié. Et apprenez à insérer correctement le code EA, le bouton SRC sur la barre de message.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Une cause amusante de l'erreur interne du compilateur (fonction utilisée dans l'indicateur) :
...Le remède est évident, mais je suis d'accord - c'est un problème très drôle. :)))
Je vous ai écrit un message privé.
Dmitri Custurov:
Здравствуйте. Не получается написать код, который открывал бы позицию через n-количество баров после открытия предыдущей позиции. Пробовал использовать Time[i], iBarShift, iTime. Все безуспешно. В программировании новичок. Поиск ничего не дал.
Voici le code :
si((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1)))Timer=Time[0];}
TimerNull=iBarShift(NULL,0,Timer,false) ;
si ((TimerNull>=n)&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red) ;
z=2;}
J'ai aussi essayé de cette façon :
Timer=Time[0];}
TimerNull=Time[0] ;
if ((TimerNull>=(Timer+2700))&&(z==1)) //à titre d'exemple ici, au lieu de n, j'ai mis 2700 secondes, ce qui dans les tests signifiait 3 bougies de 15 minutes) {int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red) ;
z=2;}
Et aussi comme ça :
Timer=Time[0];}
TimerNull=Time[0] ;
si ((CurrentTime()>=(Timer+2700))&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red) ; //Dans ce cas, lorsque j'ai retiré 2700, la deuxième transaction a été ouverte juste après la première dans la même barre, c'est logique. Et même lorsque j'ai mis n'importe quelle valeur jusqu'à 600 au lieu de 2700, la deuxième affaire a été ouverte dans la même barre. Avec une valeur supérieure à 600, la deuxième transaction ne s'est jamais ouverte. Je ne comprends pas quel est le problème. Je vous serais très reconnaissant de votre aide.
Les paramètres Timer et TimerNull sont au format date.
dans votre exemple, il n'y a pas d'énumération de positions, par exemple.
si ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1)))
il sélectionne donc toujours la position 0.
Tout a un sens. J'ai fait une indulgence pour la suppression normale.
Quand tu fermeras le terminal, ce sera dur. Pas plus de 3 secondes.
Et je ne suis pas sûr que nous allons écrire cela dans la documentation, 1. pour ne pas se laisser aller à écrire des indicateurs aussi imprudents (avez-vous écrit cela pour vérifier ?) 2. Comme on l'a desserré, on le resserre.
Alors resserrez-le déjà, ou corrigez la référence. Se faire plaisir sans se faire plaisir n'est pas une conversation sérieuse. Ce que les programmeurs attendent de vous, ce n'est pas d'être "dorlotés", mais des logiciels clairs et bien documentés.
Bien sûr, ce code n'a pas d'autre but qu'une démonstration, que vous avez vous-même demandée. Et c'est tout à fait inoffensif, inoffensif de l'obtenir, si vous supprimez Sleep et remplacez Comment par Print. Il n'y a aucune protection contre le spamming de gigaoctets d'impression dans le journal, que ce soit dans Quartet ou Quartet 5.
Voici le code :
si ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1)))Timer=Time[0];}
TimerNull=iBarShift(NULL,0,Timer,false) ;
si ((TimerNull>=n)&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red) ;
z=2;}
J'ai aussi essayé de cette façon :
Timer=Time[0];}
TimerNull=Time[0] ;
if ((TimerNull>=(Timer+2700))&&(z==1)) //à titre d'exemple ici, j'ai mis 2700 secondes au lieu de n, ce qui dans les tests signifiait 3 bougies de 15 minutes) {int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red) ;
z=2;}
Et aussi comme ça :
Timer=Time[0];}
TimerNull=Time[0] ;
si ((CurrentTime()>=(Timer+2700))&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red) ; //Dans ce cas, lorsque j'ai retiré 2700, la deuxième transaction a été ouverte juste après la première dans la même barre, c'est logique. Et même lorsque j'ai mis n'importe quelle valeur jusqu'à 600 au lieu de 2700, la deuxième affaire a été ouverte dans la même barre. Avec une valeur supérieure à 600, la deuxième transaction ne s'est jamais ouverte. Je ne comprends pas quel est le problème. Je vous serais très reconnaissant de votre aide.
Les paramètres Timer et TimerNull sont au format date.
C'est l'une des implémentations possibles. Cet EA doit ouvrir un ordre après le nombre de barres spécifié. Et apprenez à insérer correctement le code EA, le bouton SRC sur la barre de message.
111
Cette question s'adresse probablement aux développeurs de sites Web ou aux administrateurs de services indépendants.
---
Auparavant : 568 travaux réalisés, 75% personnels
Ajouté 13 travaux (tous personnels) et devenu : complété 581, 75% personnel
---
D'où la question : déchiffrez s'il vous plaît, que signifie 75% ?
Je vous ai envoyé un message privé.