Questions d'un "mannequin - page 56

 
Interesting:

Contrairement au gestionnaire de tic-tac, le timer sera exécuté après une certaine période de temps, définie par la période.

Dans le cas d'un traitement intensif de la minuterie, il est bien sûr préférable de la désactiver pour un certain temps par glissement ou au premier tic-tac (il existe de nombreuses variantes), mais si le traitement de la minuterie n'est pas très intensif et que la période est suffisamment longue, la minuterie peut être désactivée.

Dans le traitement de la minuterie, vous pouvez également vérifier s'il s'agit d'un jour ouvrable ou non.

Si nécessaire, vous pouvez programmer les calculs lourds pour le week-end (par exemple, l'auto-optimisationde l'EA) et exécuter ce processus à partir de la minuterie. A la fin des calculs (ou au début des calculs), la minuterie peut être correctement désactivée.

Quant aux tests dans le testeur, ils utilisent la fonction OnTimer() de l'EA multi-devises. Supposons que la minuterie soit réglée à des intervalles de 10 secondes. Sera-t-il en marche pendant tous les week-ends de la période d'essai ? Je pense que c'est ce que Vladimir voulait dire. Ainsi, si nous indiquons au chronomètre que le samedi et le dimanche sont ignorés, le test sera beaucoup plus rapide.
 
tol64:
Quant au test dans le testeur à travers la fonction OnTimer() de l'Expert Advisor multi-devises. Supposons que la minuterie soit réglée sur un intervalle de 10 secondes. Sera-t-il en train de cocher tous les week-ends pendant la période d'essai ? Je pense que c'est ce que Vladimir voulait dire. Ainsi, si nous indiquons au chronomètre que le samedi et le dimanche sont ignorés, le test sera beaucoup plus rapide.

1. J'ai essayé de désactiver le minuteur pendant les week-ends où les calculs n'étaient pas très compliqués, je n'ai pas senti de différence (bien qu'il y ait eu des différences bien sûr), maintenant j'ai décidé de ne pas désactiver le minuteur pour le moment.

2. Oui, si la minuterie est réglée, cela ne fait aucune différence dans le testeur ou en mode normal, le déclenchement se fera jusqu'à ce que la minuterie soit désactivée. Si nous parlons d'un testeur, alors à un intervalle de 10 secondes, il se déclenchera pendant toute la période de test - toutes les 10 secondes.

Pour arrêter le minuteur pour le week-end, il existe plusieurs solutions :

а. Arrêtez la minuterie en écrivant l'état dans une variable. Au premier tic-tac de l'outil principal (ou par un signal "espion"), la minuterie peut être redémarrée. Cette méthode présente des inconvénients liés à la probabilité de sauter des tics ou au décalage des tics dans un marché illiquide. Le saut de tic peut également être causé par un manque de connexion au serveur de négociation.

б. Freins à glissement, pendant une certaine période de temps. La bonne chose est que la période est spécifiée précisément, la mauvaise chose est que dans cette méthode, non seulement le minuteur, mais l'ensemble du Conseiller Expert sera inactif jusqu'à l'heure X.

Cependant, toutes les positions et les commandes seront traitées dans le testeur.

в. Il est possible de réaliser une pause en augmentant la période de la minuterie. Il est pratique de connaître à l'avance l'heure à laquelle la minuterie doit se "réveiller" et le travail de l'expert n'est pas interrompu. Vous n'êtes pas à l'aise avec le fait de devoir suivre le minuteur en état de marche ou en mode veille.

в. Divisez les bourrages du minuteur en deux groupes, le premier est exécuté tout le temps (par exemple, déterminer l'état de la connexion), et le second selon les conditions (jours ouvrables, connexion présente, négociation autorisée, etc.)

 
Interesting:


Si nécessaire, il est possible de programmer des calculs lourds pour le week-end (par exemple, l'auto-optimisation de l'EA) et d'exécuter ce processus à partir de la minuterie. A la fin (ou au début) des calculs, la minuterie peut être correctement désactivée.

Bonjour ! J'ai eu une idée similaire hier, mais je n'ai pas eu le temps d'écrire un post avec des questions à ce sujet :

1. est-il possible de faire cela ? Comment cela peut ressembler dans le code, en particulier l'ouverture et la fermeture de transactions.ou juste leur emplacement et le calcul des calculs.I.e. le week-end sur le chronomètre va à une fonction définie, qui cycliquement rembobine l'histoire, et détermine les meilleurs paramètres.Pour cela en ligne ticks ne sont pas nécessaires, et la fonction sera juste tourner dans le cycle ...

2. y a-t-il un endroit dans une branche où je peux lire quelque chose à ce sujet ?

3. si elle est appliquée au championnat, ne sera-t-elle pas chargée sur la voiture ? C'est probablement une question pour les organisateurs.

 
MetaDriver:
Ensuite, calculez tout dans le conseiller expert sur une période appropriée, et imprimez le résultat dans OnTester(). Vous n'êtes pas obligé de faire du commerce. Avez-vous des problèmes ?

Merci beaucoup.

J'ai une autre question, comment puis-jefermer une position en temps, si le prix n'a pas atteint le take ou le stop loss ?

Je lis les bibliothèques qui semblent avoir des bibliothèques pour travailler avec les commandes... Je l'ai branché... Le programme jure qu'il n'a pas une telle procédure...

Donc, ma question est de savoir quel type de code doit être utilisé pour fermer un ordre après un certain temps (par exemple 1 jour).

 

AccountInfoDouble(ACCOUNT_BALANCE) != AccountInfoDouble(ACCOUNT_EQUITY)

c'est ainsi que je dois vérifier si une transaction est ouverte...

OrdersTotal ()!=0 ne fonctionne pas )))) problème très intéressant )

 
papaklass:
Il existe PosirionTotal() pour les positions. OrdersTotal() uniquement pour les ordres en attente.

si ( PositionsTotal() == 1 )

même chose ... aucune réaction

// s'ouvre normalement

si ( TimeActivation ( 1 )

{

if ( _1_operation == 1 && Buy ( 0.10 ) == 1 ) { Sleep (600000) ; }

if ( _1_operation == -1 && Sell ( 0.10 ) == 1 ) { Sleep (600000) ; }

}

// ne peut pas fermer avant la prise ou l'arrêt

si ( TimeActivation ( 2 )

{

if ( PositionsTotal() == 1 ) /// NOT WORKING))

{

if ( _1_operation == 1 && Sell ( 0.10 ) == 1 ) { Sleep (600000) ; }

if ( _1_operation == -1 && Buy ( 0.10 ) == 1 ) { Sleep (600000) ; }

}

}

 
BaTTLeBLooM:

Merci beaucoup.

Donc question, quel code devrait être approximativement, pour fermer l'ordre après un certain temps (par exemple 1 jour).

S'il vous plaît.

A peu près comme ceci : vous économisez le temps d'ouverture dans une variable. Ajoutez-y immédiatement la période de temps souhaitée (par exemple, 1 jour = 60*60*24).

Ensuite, à chaque tick (ou heure), vérifiez si l'heure actuelle est plus longue que l'heure de contrôle. Si c'est le cas, fermez-la // if (TimeCurrent() > MyControlTime) CloseMyPosition();

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Дата и время / TimeCurrent - Документация по MQL5
 
BaTTLeBLooM:

si ( PositionsTotal() == 1 )

même chose ... aucune réaction

// s'ouvre normalement

si ( TimeActivation ( 1 )

{

if ( _1_operation == 1 && Buy ( 0.10 ) == 1 ) { Sleep (600000) ; }

if ( _1_operation == -1 && Sell ( 0.10 ) == 1 ) { Sleep (600000) ; }

}

// ne peut pas fermer avant la prise ou l'arrêt

si ( TimeActivation ( 2 )

{

if ( PositionsTotal() == 1 ) /// NOT WORKING))

{

if ( _1_operation == 1 && Sell ( 0.10 ) == 1 ) { Sleep (600000) ; }

if ( _1_operation == -1 && Buy ( 0.10 ) == 1 ) { Sleep (600000) ; }

}

}

En fait, ce que vous avez écrit ici n'est pas clair, mais PositionTotal() n'a clairement rien à voir avec cela.

Mettez Print() avant de vérifier, =1 ?

Print("PositionsTotal=",PositionsTotal());
if ( PositionsTotal() == 1 ) /// НЕ ХРЕНА НЕ РАБОТАЕТ )))
 
tol64:

Konstantin Gruzdev a proposé une méthode intéressante avec les "espions" et les "agents" dans son article. )) Mais son "agent" exSpy Control panel MCM ne veut pas travailler pour moi.

Je vais maintenant examiner la variante présentée dans l'article. Jusqu'à présent, j'ai fait plusieurs experts en espionnage, et ça marche très bien.

MetaDriver:

Je pense que cette technologie ne fonctionnera pas dans le testeur.

Ça marche.

 
MetaDriver:

S'il vous plaît.

Approximativement de cette manière : vous devez stocker l'heure d'ouverture dans une variable. Ajoutez-y immédiatement l'intervalle de temps nécessaire (par exemple 1 jour = 60*60*24).

Ensuite, à chaque tick (ou heure), vérifiez si l'heure actuelle est supérieure à l'heure de contrôle. Si c'est le cas, fermez-la // if (TimeCurrent() > MyControlTime) CloseMyPosition();

Entrer dans une variable est une option, mais si vous avez besoin d'une clôture plus fiable, même après avoir redémarré le terminal/conseiller, vous pouvez utiliser un medjic pour identifier l'ordre et vérifier l'heure de son ouverture.

//закрывает ордера с заданным меджиком по прошествию определенного периода(в сек)
void closeOrderByTime(int magic,int period) {
        MqlTradeRequest request;
        MqlTradeResult tradeResult;
        MqlTradeCheckResult checkResult;
        ulong ticket = -1;
        int cnt = OrdersTotal();
        for (int i=cnt-1; i>=0; i--) {  
                ticket = OrderGetTicket(i);
                if (OrderGetInteger(ORDER_MAGIC) == magic && ticket>0 && TimeCurrent() > OrderGetInteger(ORDER_TIME_SETUP)+period) {
                        request.action = TRADE_ACTION_REMOVE;
                        request.order = ticket;
                        if(OrderCheck(request,checkResult) ) {
                                OrderSend(request, tradeResult);
                        } else {
                                MessageBox("Ошибка");
                        }
                }
        }
}