Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1930

 
Valeriy Yastremskiy #:

Je ne comprends pas du tout la logique. Les événements d'ouverture de position, de modification de SL, de fermeture de position sur plusieurs symboles sont surveillés. Ouverture de position - recherche si une fenêtre avec le symbole donné est ouverte (recherche de l'id de la fenêtre), si elle est ouverte, alors nous traçons des niveaux et surveillons ensuite le chalutage SL. Si ce n'est pas le cas, soit nous ouvrons une fenêtre avec le symbole et le délai requis et nous traçons des niveaux, soit nous ne l'ouvrons pas. L'événement de modification, trouver la fenêtre de symbole nécessaire, les niveaux ont déjà été dessinés et changer la couleur du niveau ou le supprimer et dessiner le niveau à nouveau.

En général, pour exclure l'influence du client, nous devons, au début du travail, analyser les positions et les fenêtres et ouvrir des fenêtres pour les symboles avec des positions ouvertes et non ouvertes.

L'important dans tout cela, c'est le bon fonctionnement de l'algorithme de chalutage, c'est-à-dire les opérations commerciales elles-mêmes.

Le dessin est en arrière-plan, il est informatif et n'a rien à voir avec la rentabilité du système.

Par conséquent, s'il existe une position mais que le graphique est fermé et qu'il ne s'est pas fermé tout seul, il n'est pas nécessaire d'ouvrir quoi que ce soit, l'algorithme de chalutage fonctionnera et les arrêts seront déplacés. Une situation bien pire est celle où le graphique est manifestement fermé, mais où le programme l'a rouvert littéralement pour dessiner le graphique - c'est déjà mauvais.

 

Collègues - j'ai exporté un fichier de cache d'optimisation vers le cloud, comment puis-je l'utiliser sur un autre ordinateur pour sélectionner une variante pour les enchères ?


Réponse :

Si quelqu'un en a besoin - ici.


Оптимизация стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Оптимизация стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
Vitaly Muzichenko #:

L'important dans tout cela est un algorithme de chalutage qui fonctionne correctement, c'est-à-dire les transactions elles-mêmes.

Le dessin est en arrière-plan, il est informatif et n'a rien à voir avec la rentabilité du système.

Par conséquent, s'il existe une position mais que le graphique est fermé et qu'il ne s'est pas fermé tout seul, il n'est pas nécessaire d'ouvrir quoi que ce soit, l'algorithme de chalutage fonctionnera et les arrêts seront déplacés. C'est encore pire lorsque le graphique est fermé, mais que le programme l'a rouvert littéralement pour dessiner le graphique - c'est déjà mauvais.

Nous pouvons aussi le faire de cette façon. Mais dans ce cas, s'il existe un graphique ouvert basé sur l'événement, il peut être dessiné. En général, nous pouvons redessiner les niveaux à chaque fois pour éviter toute confusion. Nous avons toutes les données pour cela. Le niveau de déclenchement du chalut, l'étape du chalut, le prix de la position. Le numéro de niveau et le nombre de niveaux déclenchés pour le poste sont facilement calculés.

 
Valeriy Yastremskiy #:

C'est également possible. Mais ensuite nous tirons au sort s'il y a une carte ouverte pour l'événement. En général, les niveaux peuvent être redessinés à chaque fois pour éviter toute confusion. Nous avons toutes les données pour cela. Niveau de déclenchement du chalut, étape du chalut, prix de la position. Le numéro de niveau et le nombre de niveaux déclenchés pour une position sont facilement calculés.

Je dirais que s'il y a une position, nous devrions établir à l'avance des niveaux qui déclencheront un chalutage. Si une position supplémentaire est apparue, redessinez les lignes vers les nouveaux niveaux également vers l'avant.

Je ne vois pas l'intérêt de changer la couleur après le passage/modification. Après la fermeture des positions, toutes les lignes peuvent être supprimées.

L'exemple montre comment cela devrait être

Les objets où les positions seront ouvertes sont dessinés ici, c'est juste informatif, c'est tout.


---

P.S. Pour le moment, je ne peux pas faire les calculs, malheureusement.

 

Question sur OnTimer

Si un événement de minuterie se produit avant l'exécution du programme, celui-ci attendra-t-il (le programme ignorera l'événement de minuterie), ou le programme s'interrompra et commencera à travailler sur un nouvel événement de minuterie ? Est-ce que ça va tourner en boucle sans fin, ou est-ce que ça va tourner en boucle à chaque seconde ?

int OnInit()
{
 EventSetTimer(1);
      
    }
//---
  return(INIT_SUCCEEDED);
}

void OnTimer()
{
  
  int i=0;
  while(i<1) {
   
  }
}

Il n'y a pas d'indication directe dans les docs sur la priorité de l'événement de la minuterie et le déroulement du programme, seulement sur l'ordre des événements.

Ou peut-être que je ne comprends pas bien. L'événement de la minuterie sur lequel l'action a commencé compte comme étant dans la file d'attente ?

Docks :

EventSetTimer

Il n'est pas possible de lancer plus d'un événement de minuterie pour chaque programme. Chaque programme mql4 et chaque graphe a sa propre file d'attente d'événements, où tous les événements nouvellement arrivés sont stockés. S'il y a déjà un événement Timer dans la file d'attente ou si cet événement est en cours de traitement, un nouvel événement Timer n'est pas placé dans la file d'attente de mql4-program.


 
Valeriy Yastremskiy exécution du programme, celui-ci attendra-t-il (le programme ignorera l'événement de minuterie), ou le programme s'interrompra et commencera à travailler sur un nouvel événement de minuterie ? Est-ce que ça va tourner en boucle sans fin, ou est-ce que ça va tourner en boucle à chaque seconde ?

Il n'y a pas d'indication directe dans les docs sur la priorité de l'événement de la minuterie et le déroulement du programme, seulement sur l'ordre des événements.

Ou peut-être que je ne comprends pas bien. L'événement de la minuterie sur lequel l'action a commencé compte comme étant dans la file d'attente ?

Docks :

EventSetTimer

Il n'est pas possible de lancer plus d'un événement de minuterie pour chaque programme. Chaque programme mql4 et chaque graphe a sa propre file d'attente d'événements, où tous les événements nouvellement arrivés sont stockés. S'il existe déjà un événement dans la file d'attente du Timer, ou si cet événement est en cours de traitement, un nouvel événement Timer n'est pas placé dans la file d'attente du programme mql4.


Les événements ne sont PAS des TEMPS. Ils sont traités dans OnXXX un par un, sans interrompre aucune des fonctions.

Jusqu'à ce que OnInit se termine, aucun autre handler OnTimer OnTick ne sera appelé par le terminal. (A moins que vous ne l'arrachiez vous-même en tant que fonction).

 
Maxim Kuznetsov #:

Les événements ne sont PAS des interruptions. Ils sont traités dans OnXXX un par un, sans interrompre les fonctions du texte.

Jusqu'à ce que OnInit se termine, aucun autre gestionnaire OnTimer OnTick ne sera appelé par le terminal. (A moins que vous ne l'arrachiez vous-même en tant que fonction).

Merci)

 
Vitaly Muzichenko #:

L'important dans tout cela est un algorithme de chalutage qui fonctionne correctement, c'est-à-dire les transactions elles-mêmes.

Le dessin est en arrière-plan, il est informatif et n'a rien à voir avec la rentabilité du système.

Par conséquent, s'il existe une position mais que le graphique est fermé et qu'il ne s'est pas fermé tout seul, il n'est pas nécessaire d'ouvrir quoi que ce soit, l'algorithme de chalutage fonctionnera et les arrêts seront déplacés. C'est bien pire, lorsqu'un graphique est fermé, mais que le programme l'a ouvert à nouveau littéralement pour dessiner un graphique - c'est mauvais.

Mon Dieu - pourquoi vous a-t-on envoyé au lavage de voitures ? Avez-vous écrit au mauvais endroit et dans les mauvaises variables : z ou v... ?

 
Bonjour, Si quelqu'un n'est pas trop difficile, veuillez écrire ou m'aider à écrire une fonction pour un EA MT4. L'idée est que si je modifie manuellement une position ouverte ou un ordre au marché, l'EA enverra un message à l'e-mail. Par exemple, si j'ai déplacé le seuil de déclenchement d'un ordre Limit ouvert, l'EA enverra un e-mail indiquant que le seuil de déclenchement de cet ordre est passé de untel à untel.
 
Vitaly Muzichenko #:


Il semble que ça devrait fonctionner. Je ne l'ai pas testé.

Logique de dessin. Je ne contrôle pas les niveaux, je dessine au-dessus et en dessous du prix, si en Achat je dessine en gris, au-dessus en bleu, en Vente, si au-dessus du niveau de prix, c'est gris, en dessous en rouge.

Oui, j'ai oublié de régler l'enlèvement des niveaux)))

Dossiers :
Raison: