Questions des débutants MQL5 MT5 MetaTrader 5 - page 860

 
Bonjour ! existe-t-il un robot basé sur l'indicateur alligator + EMA (233) + Stochastique ? Et quelle est votre opinion sur cette stratégie ?
 
Lizaku:
Bonjour ! Existe-t-il un robot basé sur l'indicateur Alligator + EMA (233) + Stochastique ? Si vous pouvez me donner un lien . Et quelle est votre opinion sur cette stratégie ?

La moyenne mobile est clairement inutile ici, car l'Alligator est déjà composé de trois moyennes mobiles. Il reste donc Alligator + Stochastic :

Alligator + Stochastique

 
Comment vérifier dans le script/conseiller le fait de la fin du calcul de l'indicateur, lequel d'entre eux est appelé ? Jusqu'à présent, j'ai dû mettre Sleep(), mais j'ai perdu une demi-journée à ne pas comprendre pourquoi les valeurs des tampons sont nulles...
 
Il est toujours minuit.
 
Aleksey Vyazmikin:
Comment puis-je vérifier dans le script/conseiller si le calcul de l'indicateur est terminé et lequel d'entre eux est appelé? Jusqu'à présent, j'ai dû mettre Sleep(), mais j'ai perdu une demi-journée à ne pas comprendre pourquoi les valeurs des tampons sont nulles...

J'utilise le cycle suivant

 int n = 0;
    do
     {
      // Пытаемся получить нужное значение;
      if(значение не получено)
       {
        n++;
        Sleep(100);
       }
     }
    while(значение не получено && n < 7 && !IsStopped());
 
Alexey Viktorov:

J'utilise un cycle comme celui-ci.

Merci. J'espérais qu'il y avait un outil standard pour cela, je ne comprends pas pourquoi les tampons devraient être remplis de zéros et ensuite les valeurs calculées y être placées - cela donnerait une erreur de copie de tampon et tout irait bien...

 
Aleksey Vyazmikin:

Merci. J'espérais qu'il y avait un outil interne pour cela, je ne vois pas pourquoi les tampons devraient être remplis de zéros et ensuite les valeurs calculées y être placées - cela donnerait une erreur de copie de tampon et ce serait bien...

J'ai des outils internes, j'ai essayé une fois de le comprendre, mais en vain. Je ne me souviens même plus maintenant dans quelle section de la documentation il est mentionné. Quelque chose à voir avec la synchronisation, si je me souviens bien.

 

Bonjour, je suis en train d'écrire un indicateur basé sur des lignes de Bollinger à 5 bandes, comme étape finale j'ai commencé à écrire des conditions pour former un motif par rapport aux lignes de l'indicateur, mais pendant le test j'obtiens 2 variantes : soit l'alerte se ferme d'elle-même, soit rien ne se passe. En voici un fragment :

Pouvez-vous me dire ce qui peut être corrigé ici, s'il y a quelque chose à corriger ?

int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const datetime& time[],     // Time
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[])         // Spread 
 {
 
//----     
//--- переменные
   int pos; // позиция
   static datetime prevtime = 0;
   int shift1;
   int shift2;
   int shift3;
   string pattern, period;
   int setPattern = 0;
   int alert = 0;
   double O, O1, O2, C, C1, C2, L, L1, L2, H, H1, H2;   
  
//----

//----   
//--- check for bars count - проверка колчества баров
   if(rates_total<ExtPlotBegin)
      return(0);
//--- начало вычисления
   if(prev_calculated>1) pos=prev_calculated-1;
   else pos=0;
//--- главный цикл
   for(int i = pos ; i < rates_total;i++)
    {
      int shift = 0;
      shift1 = shift + 1;
      shift2 = shift + 2;
      shift3 = shift + 3;      
      O = open[shift1];
      O1 = open[shift2];
      O2 = open[shift3];
      H = high[shift1];
      H1 = high[shift2];
      H2 = high[shift3];
      L = low[shift1];
      L1 = low[shift2];
      L2 = low[shift3];
      C = close[shift1];
      C1 = close[shift2];
      C2 = close[shift3]; 
      //--- middle line
      ExtMLBuffer[i]=SimpleMA(i,ExtBandsPeriod,close);
      //--- calculate and write down StdDev
      ExtStdDevBuffer[i]=StdDev_Func(i,close,ExtMLBuffer,ExtBandsPeriod);
      //--- upper line
      ExtTLBuffer[i]=ExtMLBuffer[i]+ExtBandsDeviations*ExtStdDevBuffer[i];
      //--- mediumH line
      ExtMDHBuffer[i]=ExtMLBuffer[i]+ExtBandsDeviationsM*ExtStdDevBuffer[i];
      //--- mediumL line
      ExtMDLBuffer[i]=ExtMLBuffer[i]-ExtBandsDeviationsM*ExtStdDevBuffer[i];  
      //--- lower line
      ExtBLBuffer[i]=ExtMLBuffer[i]-ExtBandsDeviations*ExtStdDevBuffer[i];
     
      // Импульсная свеча от нижней границы Боллинджера
        if(((O <= H) && (H <= ExtMDLBuffer[i])) && ((L >= C) && (C <= ExtBLBuffer[i])))
        {
            Alert("Pin up!");
            PlaySound ("UpperBandAlert.wav"); 
         }
            Sleep(5000);
    }                  
//---- OnCalculate done. Return new prev_calculated. Расчет закончен, возврат к новым предыдущим барам
   return(rates_total);
  }
//+-
 

Bonjour.

Volume de la première position =0.1, dernière =0.2, comment puis-je obtenir le volume de la dernière position =0.2 ?

C'est le cas dans le compte de couverture :

double Lot_pos_b()
  {
   int total=0;
   double lot=0;
   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               lot=m_position.Volume();
              }
//---
   return(lot);
  }
Sur un compte de compensation, comment puis-je obtenir le lot ? Cette fonction renvoie 0,3 au lieu de 0,2.
 
lil_lil:

Bonjour.

Volume de la première position =0.1, dernière =0.2, comment puis-je obtenir le volume de la dernière position =0.2 ?

Dans un compte de couverture, c'est comme ça :

Dans le compte de compensation, comment obtenir le volume du lot ? Cette fonction renvoie 0,3 au lieu de 0,2.

Visualisez les transactions appartenant à la position et voyez leur volume.

Il suffit de désimprimer toutes les transactions trouvées d'une position (propriétés de chaque position) et de trouver ce que l'on peut y chercher.