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

 
Valeriy Yastremskiy:

La logique est boiteuse, tout est là, les deux tableaux pour les tickets et les types de commande. Seulement, il n'est pas rempli lorsque les ordres sont ouverts, et le tableau est mis à zéro dans la fonction TicketLimit pour une raison quelconque. À première vue, ça y ressemble.

C'est comme les échecs ? Il nous manque un coup. Je vais essayer de l'analyser. Merci, Valery.

 

Comment faire pour que les statistiques de la barre soient correctes ?

Je l'ai fait, le nombre compte correctement, mais lorsque j'essaie d'utiliser les données, j'obtiens "0".

//---
   int i,limit;
   datetime Start=0;
   if((rates_total-prev_calculated-1)<=0)return(0);
   limit=rates_total-prev_calculated-1;
   for(i=limit; i>=0; i--) 
     {
      Label1Buffer[i]=open[i];
      Label2Buffer[i]=close[i];
      if(Start!=time[i])
        {
         a+=1;                                        // кол-во баров
         if(Label1Buffer[i] <Label2Buffer[i]) u+=1;   // восходящие бары
         if(Label1Buffer[i] >Label2Buffer[i]) d+=1;   // нисходящие бары
         if(Label1Buffer[i]==Label2Buffer[i]) b+=1;   // Дожи
         Start=time[i];
        }
      if(Start==time[i]&&a<=limit)
        {
         Print(i," / ",u," / ",d," / ",b," / ",a," / ",limit);//
        }
      if(a==limit) 
        {
         ObjectCreate(0,"STAT1",OBJ_TEXT,0,time[0],high[0]+750*Point);
         ObjectSetText("STAT1",d,8,"Arial",clrBlack);
         ObjectCreate(0,"STAT2",OBJ_TEXT,0,time[0],low[0]-250*Point);
         ObjectSetText("STAT2",u,8,"Arial",clrBlack);
         Print(d/u);
        }
     }
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 0
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 1 / 3041 / 2971 / 41 / 6053 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 2 / 3041 / 2970 / 41 / 6052 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 3 / 3041 / 2969 / 41 / 6051 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 4 / 3041 / 2968 / 41 / 6050 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 5 / 3041 / 2967 / 41 / 6049 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 6 / 3041 / 2966 / 41 / 6048 / 6053

Il existe peut-être un moyen normal, mais je "réinvente la roue").

Veuillez me conseiller.

 
MakarFX:

Comment faire pour que les statistiques de la barre soient correctes ?

Je l'ai fait, le nombre compte correctement, mais lorsque j'essaie d'utiliser les données, j'obtiens "0".

Il existe peut-être un moyen normal, mais je "réinvente la roue").

Veuillez me conseiller.

Il semble que vous ayez toutes les variables int et que le résultat de la division soit inférieur à 0. Par conséquent, 0 ;

Essayez-le :

Print((double)d/u);
 
Galim_V:

Comme aux échecs ? Il manque un mouvement. Je vais essayer de donner un sens à tout ça. Merci, Valery.

в глобальной области
int ind=0, Ind=0;
......

 if(ParSar>MaxClose&&chekt==1){

    ticket=_OrderSend(NULL,OP_BUYSTOP,0.01,MaxClose+(spread*Point()),0);
ind++;
_Tacket[ind]=ticket; Ind=ind;
  }
    }
    if(MinClose!=0){
   if(ParSar<MinClose&&chekt==1){
    _price= NormalizeDouble( MinClose-(spread*Point()),Digits);
    ticket=_OrderSend(NULL,OP_SELLSTOP,0.01,_price,0);
ind++;
_Tacket[ind]=ticket; Ind=ind;
........

for(i=Ind,i<1,Ind--) // вместо Ind OrderTotal правильнее, если есть и другие ордера в терминале
{OrderSelect( _Tacket[i], SELECT_BY_TICKET )
проверки и действия
}
// Здесь запомнить тикет в массив _тикет и тип ордера тоже и запомнить последний индекс массива!!!

 //А потом в Ордер селект подставлять значение массива _тикет) Цикл по индексу массива _тикет от 1 до последнего индекса.
 
Mihail Matkovskij:

Il semble que vous ayez toutes les variables int et que le résultat de la division soit inférieur à 0. Par conséquent, 0 ;

Essayez-le :

Merci.
 
Merci encore pour toute votre aide sur mon précédent projet.

Voici une autre idée pour le prochain EA, peut-être quelqu'un est-il déjà familier avec la stratégie ORBO (open Range Brake out) ?

 

Pouvez-vous me dire s'il existe une fonction qui simplifie cette définition pour l'ouverture d'une commande ?

if(Bid < OpenPrice && Bid > OpenPrice-10*Point)
if(Ask > OpenPrice && Ask < OpenPrice+10*Point)
L'idée est qu'un ordre n'est pas ouvert si le prix n'est pas compris dans cette fourchette.
 
MakarFX:

Pouvez-vous me dire s'il existe une fonction qui simplifie cette définition pour l'ouverture d'une commande ?

L'idée est qu'un ordre n'est pas ouvert si le prix ne tombe pas dans cette fourchette.

Dessinez-le sur le papier.

OpenPrice _________________________

Offre _________________________

OpenPrice-10*_Point________________________


Sur l'image, vous pouvez voir que le rapport OpenPrice - Bid ne doit pas être supérieur à 10*_Point.

 
Alexey Viktorov:

Eh bien, dessine-le sur papier.

OpenPrice _________________________

Offre _________________________

OpenPrice-10*_Point________________________


Sur l'image, vous pouvez voir que le rapport OpenPrice - Bid ne doit pas être supérieur à 10*_Point.

différence entre les modules. Sans module, seule la zone supérieure entre dans la condition. | OpenPrice - Bid |> 10*_Point condition d'ouverture

 
Alexey Viktorov:

Eh bien, dessine-le sur le papier.

OpenPrice _________________________

Offre _________________________

OpenPrice-10*_Point________________________


Sur l'image, vous pouvez voir que le rapport OpenPrice - Bid ne doit pas être supérieur à 10*_Point.

Vous me surprenez.