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

 

MakarFX , quelle est la fonction de ce lien : quelle fonction exécute-t-il ?


input int BarTrade = 5 ; // Je comprends que c'est le nombre de périodes suivies de 5.

int TimeBarTrade=BarTrade*Period()*60 ; // comment je comprends ? pourquoi c'est multiplié par 60 ?

 
Alexey Belyakov:

MakarFX , quelle est la fonction de ce lien : quelle fonction exécute-t-il ?


input int BarTrade = 5 ; // Je comprends que c'est le nombre de périodes suivies de 5.

int TimeBarTrade=BarTrade*Period()*60 ; // comment comprendre ? Pourquoi est-il multiplié par 60 ?

BarTrade*Période()*60

nombre de barres * cadre temporel actuel * 60 secondes

c'est-à-dire la quantité de barres convertie en secondes

 
MakarFX:

BarTrade*Période()*60

nombre de barres * cadre temporel actuel * 60 secondes

c'est-à-dire le nombre de barres converties en secondes

Vous pouvez le faire de cette façon.

int TimeBarTrade = PeriodSeconds()*BarTrade;
 
MakarFX:

Si vous excluez les erreurs liées à

MODE_STOPLEVEL, MODE_TRADEALLOWED, MODE_MINLOT, MODE_LOTSTEP, MODE_MAXLOT

alors les hiboux ne frapperont pas le serveur.

Makar, merci beaucoup d'avoir indiqué les vérifications à effectuer pour éviter d'affliger le serveur et de bannir l'EAJ.

Contrôles effectués comme ceci

mod stop level for stop

         //ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА 
         if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          sl= MarketInfo(Symbol(),MODE_STOPLEVEL);//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }

niveau d'arrêt modéré pour le profit

      // ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
      
  if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          tp= MarketInfo(Symbol(),MODE_STOPLEVEL);// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
         


Vérifier l'autorisation de commerce

//---- ПРОВЕРКА НА РАЗРЕШЕНИЕ ТОРГОВ ПЕРЕД ОТКРЫТИЕМ ОРДЕРОВ
   if(MarketInfo(Symbol(),MODE_TRADEALLOWED)==true)
   {// начало есл торговля разрешена
  /*
куча проверок на условия открытия и само открытие ордеров
*/
} // КОЕНЦ ПРОВЕРКИ НА РАЗРЕШЕНИЕ ТОРГОВЛИ
          
          else //ИНАЧЕ ЕСЛИ ТОРГОВЛЯ НЕ РАЗРЕШЕНА 
          
          { // НАЧАЛО ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ 
          
          Print("ТОРГИ НЕ РАЗРЕШЕНЫ- ПЫТАТЬСЯ ОТКРЫТЬ ОРДЕРА НЕ БУДЕМ");
          }  // КОЕНЦ ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ

Vérification du lot maximum et minimum

D'abord, j'ai obtenu les valeurs de lot maximum et de lot minimum dans les variables comme ceci

  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ

Et ensuite je vérifie quelque part en dessous en écrivant le Graal

  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

Est-ce correct ou ai-je tort ?

Je n'ai pas vérifié le changement d'échelon du lot parce que le lot est calculé comme un pourcentage du dépôt et que cette valeur est multipliée par un point et normalisée - cette vérification peut être omise - n'est-ce pas, ou dois-je le faire quand même ? Si nous avons encore besoin de vérifier comment écrire ce chèque ?

Le point principal de toutes ces vérifications est de toujours avoir la valeur correcte du stop, du profit et de la taille du lot, de sorte que nous pouvons généralement commencer à ouvrir des ordres. Si tous ces paramètres sont corrects, l'Expert Advisor ne dérange pas le serveur ; est-ce que je comprends bien ?

 
DanilaMactep:

Merci beaucoup, Makar, de m'indiquer les contrôles à effectuer pour éviter le serveur et le bannissement de l'EAJ.


//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ

Il peut y avoir ici une erreur de 130 due à un glissement.

Je ferais ça

         //ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА 
         if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
      // ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
      
  if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
         
 

Bonjour à tous, est-ce que quelqu'un a eu un problème avec les points qui pendent sur le graphique trouvé par iHighest/iLowest?

Préhistoire : J'ai une expérience minimale en programmation, j'écris un indicateur en mql4 qui devrait afficher les points sur le graphique, trouvés par les conditions de if et les connecter avec des lignes. Logiquement, il recherche correctement les points, mais les dessine avec un décalage, puis pour 2 barres, puis pour 3 barres. J'ai joint le fichier avec le code également.


int start()
  {
   int counted_bars=IndicatorCounted(); //хранит количество посчитанных индикатором баров. Функция IndicatorCounted() возвращает количество неизмененных баров после прошлого вызова функции start().
   int n,limit;
   int val_index;
   
  if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars; //количество последних баров, которые нужно пересчитать.
   if(limit>barsToProcess)
      limit=barsToProcess;

   for(n=0; n<=limit; n++)
     {
      if((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3]))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
        }
      else
         if((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3]))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
           }
     }
   return (0);
  }
Dossiers :
AZforum.mq4  8 kb
 
azolotta:

Bonjour à tous, est-ce que quelqu'un a eu un problème avec les points qui pendent sur le graphique trouvé par iHighest/iLowest ?

Préhistoire : J'ai une expérience minimale en programmation, j'écris un indicateur en mql4 qui devrait afficher les points sur le graphique, trouvés par les conditions de if et les connecter avec des lignes. Logiquement, il recherche correctement les points, mais les dessine avec un décalage, puis pour 2 barres, puis pour 3 barres. J'ai également joint le fichier avec le code.


Les points sont dessinés correctement, sans décalage.

Si la condition est remplie et que iHighest/iLowest sont plus grands ou plus petits que le High/Low actuel.

il dessine


 
MakarFX:

les points sont dessinés correctement, sans décalage

si la condition est remplie et que iHighest/iLowest est supérieur ou inférieur au High / Low actuel.

puis il tire


Donc, je pense que je commence à réaliser mon erreur) Donc, afin d'afficher visuellement ces points au bon endroit, j'ai besoin d'entrer un compteur séparé au lieu de n pour myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? mais comment faire cela ?
 
azolotta:
Je pense que je commence à réaliser mon erreur) Il s'avère que pour afficher visuellement ces points au bon endroit, je dois entrer un compteur séparé au lieu de n pour myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? mais comment faire ?

Non, vous avez bien compris.

la condition utilise deux ou trois mesures de l'histoire,

c'est pourquoi il tire après 2-3 barres quand la condition est remplie.

 
MakarFX:

Non, vous avez bien compris.

la condition utilise deux ou trois mesures de l'histoire,

c'est pourquoi il tire après 2-3 barres quand la condition est remplie.

OK, alors comment puis-je retravailler le code si j'ai besoin, par exemple, de choisir le plus haut sommet des 3 dernières barres (qui remplissent les conditions dans if) et de placer un point dessus (juste sur ce haut !), puis de trouver également le point bas.