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

 

Veuillez me conseiller sur la meilleure façon de procéder pour optimiser un EA:

Il y a de nombreux paramètres qui sont responsables des réglages de l'indicateur et il y a un paramètre qui active/désactive ce même indicateur.


Cela n'a absolument aucun sens d'optimiser les paramètres de l'indicateur s'il est désactivé.

Question : Comment puis-je couper ces dépassements insignifiants ?

 
ANDREY:

Merci pour l'aide et les nouvelles informations pour moi. Mais cela m'a frappé et j'ai trouvé un moyen beaucoup plus simple : .....
En ouvrant le premier ordre sur un chandelier minute, je stocke dans la variable X le BAS de ce chandelier au moment de l'ouverture de ce premier ordre.
2. lorsqu'un chandelier zéro s'ouvre (le chandelier suivant celui sur lequel l'ordre s'est ouvert), j'obtiens LoY[1]
. Ensuite, je tourne la logique et je conclus
1. si X = LoY[1], alors l'ordre a été ouvert après le LoY du chandelier sur lequel il a été ouvert
2.Si LoY[1]< X, cela signifie que le prix a baissé une fois de plus après l'ouverture de l'ordre et qu'il était inférieur à X. Cela signifie que l'ordre a été ouvert avant que LoY[] ne soit formé sur le chandelier donné
Time LOW J'avais seulement besoin de savoir quand l'ordre a été ouvert . avant ou après la formation de LoY[].
Et tous les ordres sur une bougie d'une minute s'ouvrent l'un au-dessus de l'autre avec une différence de 2 pips. C'est-à-dire que lorsque la première s'est ouverte, les autres ont fait de même sur ce chandelier.
Merci pour votre aide.

Mais j'ai une autre question.
J'ai ouvert un ordre sur un chandelier d'une minute au prix X. Après quelques secondes sur le même chandelier, un autre ordre a été ouvert à un prix de X+2 pips. Entre X et X+2, il y a un prix bas.
Je dois trouver le bas. Si nous traitons des chandeliers différents, j'utiliserais les fonctions iLow et iLowest
mais ces fonctions doivent spécifier des barres comme limites d'intervalle. Mais mes bornes d'intervalle ne sont pas des barres, mais les prix X et X+2 car il n'y a qu'une seule barre.
Je sais comment trouver le minimum dont j'ai besoin. Mais pour le faire, je dois suivre la valeur du prix à chaque tick. Je sais aussi comment le faire avec un cycle au moment de X+2. Et comment le faire en une seule fois au moment de X+2 comme dans le cas de iLow etiLowest.
Je vous serais très reconnaissant si vous pouviez m'apprendre à le faire.
Merci

Écrire les ticks dans un fichier
 
MakarFX:
Écrire les ticks dans un fichier

Merci pour ces informations qui sont nouvelles pour moi. Je n'ai jamais écrit de ticks dans un fichier. Où puis-je en savoir plus sur ce sujet pour comprendre comment le faire ?

? Autre question : ..... Puis-je écrire les ticks avec les prix dans un tableau, pour trier le tableau avec les ticks et obtenir le tick avec la valeur de prix minimum ? Ou avec l'aide de

ArrayMinimum


Merci pour votre aide.

 
ANDREY:

Merci pour ces informations qui sont nouvelles pour moi. Je n'ai jamais écrit de ticks dans un fichier. Où puis-je en savoir plus sur ce sujet pour comprendre comment le faire ?

? Autre question : ..... Puis-je écrire les ticks avec les prix dans un tableau, pour trier le tableau avec les ticks et obtenir le tick avec la valeur de prix minimum ? Ou avec l'aide de

TableauMinimum


Merci pour votre aide.

Écriture dans le fichier FileWriteString

En général, il est difficile de comprendre ce dont vous avez besoin.

 
MakarFX:

FileWriteString

C'est difficile de savoir ce que vous cherchez.

Un ordre a été ouvert sur un chandelier d'une minute au prix X. Quelques secondes plus tard, sur le même chandelier, un autre ordre est ouvert à X+2. Entre X et X+2, il y a un prix bas.
Je dois trouver le bas. Si nous traitons des chandeliers différents, j'utiliserais les fonctions iLow et iLowest
mais ces fonctions doivent spécifier des barres comme limites d'intervalle. Mais mes bornes d'intervalle ne sont pas des barres, mais les prix X et X+2 car il n'y a qu'une seule barre.
Je sais comment trouver le minimum dont j'ai besoin. Mais pour le faire, je dois suivre la valeur du prix à chaque tick. Je sais aussi comment le faire avec un cycle au moment de X+2 . Et comment le faire en une seule fois au moment de X+2 comme dans le cas de iLow etiLowest.
Je vous serais très reconnaissant si vous pouviez m'apprendre à le faire.
Merci
 
ANDREY:

Merci pour ces informations qui sont nouvelles pour moi. Je n'ai jamais écrit de ticks dans un fichier. Où puis-je en savoir plus sur ce sujet pour comprendre comment le faire ?

? Autre question : ..... Puis-je écrire les ticks avec les prix dans un tableau, pour trier le tableau avec les ticks et obtenir le tick avec la valeur de prix minimum ? Ou avec l'aide de

ArrayMinimum


Merci pour votre aide.

C'est possible. Il est seulement nécessaire d'écrire dans le fichier .bin par la fonction

uint  FileWriteArray( 
   int          file_handle,         // handle файла 
   const void&  array[],             // массив 
   int          start=0,             // начальный индекс в массиве 
   int          count=WHOLE_ARRAY    // количество элементов 
   );

et lire

uint  FileReadArray( 
   int    file_handle,               // handle файла 
   void&  array[],                   // массив для записи 
   int    start=0,                   // стартовая позиция для записи в массив 
   int    count=WHOLE_ARRAY          // сколько читать 
   );
 
Alexey Viktorov:

Vous pouvez. Il suffit d'écrire dans le fichier .bin avec la fonction

et lire

Merci pour ces informations nouvelles pour moi .... et pas seulement sur le site .... oooooooooo nouveau ?:=) Je vais essayer de l'apprendre moi-même....

 
ANDREY:

Merci pour ces nouvelles informations pour moi .... et pas seulement sur le site .... Très nouveau ?:=) Je vais essayer de le digérer moi-même....

Quoi de neuf ici ? Vous ouvrez la documentation, lisez les titres, trouvez la section "File operations" où la description des différentes fonctions est donnée, y compris FileWriteArray()

Ce n'est pas la première fois que je vous rappelle que vous devriez lire la documentation plus souvent. Même si vous n'en avez pas besoin pour le moment. En lisant les titres des sections, vous comprendrez ce qui est décrit dans la documentation. Vous êtes celui qui en a le plus besoin.

 
Alexey Viktorov:

Quoi de neuf ici ? Ouvrez la documentation, lisez les en-têtes, trouvez la section "Opérations sur les fichiers" où diverses fonctions sont décrites, notamment FileWriteArray( ).

Ce n'est pas la première fois que je vous rappelle que vous devriez lire la documentation plus souvent. Même si vous n'avez besoin de rien pour le moment. En lisant les titres des sections, vous comprendrez ce qui est décrit dans la documentation. C'est vous qui en avez besoin.

Merci pour ces précieux conseils. Pour l'instant, je ne lis la documentation que lorsque j'écris du code et que je suis confronté à une question dont je ne connais pas la réponse. Je n'ai jamais rencontré le besoin d'écrire des données dans des fichiers lors de l'écriture de mes codes précédents, c'est donc un sujet totalement nouveau pour moi.
Dites-moi, mon idée ne peut-elle pas être réalisée d'une manière plus simple, sans l'écrire dans un fichier? Comme dans mon code. Il ne s'agit pas d'un code de travail mais d'illustrer mon idée de comment trouver le minimum entre deux ordres adjacents ouverts sur un chandelier d'une minute
Merci pour votre aide.

double P[60],Z;
int Tick,x,x1,G,G1,G2,T;

void OnTick()
{
Tick++;

if (OrdersTotal()==1&&Tick<2189)
{
P[x]=Bid;
Print("------------------------P[x]=Bid------------------------=", DoubleToString(P[x],5), "  x ",  x);
x++;
}
if (OrdersTotal()==2&&Tick==2189)
{
x1=x;
x=0;
ArraySort(P,WHOLE_ARRAY,0,MODE_ASCEND);
T=(60-x1);
Print("------------------------МИНИМУМ=------------------------=",DoubleToString(P[T],5), "  Tick ",  Tick, "  x1 ",  x);
}

if (Tick==2176||Tick==2188)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+300*Point,Ask-100*Point,"300",0);
G2=G;
G=Tick;
}
}

C'est-à-dire que j'ai écrit le prix de chaque tick directement dans le tableau, et non dans un fichier.

 
ANDREY:

Merci pour l'aide et les nouvelles informations. Mais cela m'a frappé et j'ai trouvé un moyen beaucoup plus simple : .....
En ouvrant le premier ordre sur un chandelier minute, je stocke dans la variable X le BAS de ce chandelier au moment de l'ouverture de ce premier ordre.
2. lorsqu'un chandelier zéro s'ouvre (le chandelier suivant celui sur lequel l'ordre s'est ouvert), j'obtiens LoY[1]
. Ensuite, je tourne la logique et je conclus
1. si X = LoY[1], alors l'ordre a été ouvert après le LoY du chandelier sur lequel il a été ouvert
2.Si LoY[1]< X, cela signifie que le prix a baissé une fois de plus après l'ouverture de l'ordre et était inférieur à X. Cela signifie que l'ordre a été ouvert avant la formation de LoY[] sur le chandelier donné
.

Vous pouvez vérifier l'heure mais vous attendez un nouvel ordre, puis demander le tick maximum ou minimum.

Raison: