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

 
Tretyakov Rostyslav #:

Je vois. Merci.

 
Порт-моне тв #:

Je n'ai qu'un seul petit souci : toutes les commandes se ferment de temps en temps (c'est-à-dire toutes et toujours !), mais parfois, si j'ouvre 3-4 commandes, seules 2 ou 1 d'entre elles se ferment. J'ai un i-check spécial pour ça, peut-être que vous avez un indice.

Ne négligez pas les parenthèses, essayez ceci

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {
   int pos=OrdersTotal()-1;
   for(int i=pos; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Bid, 0, NULL))
              {
               Print("Order Close");
              }
           }
        }
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseSellPositions2()
  {
   int pos=OrdersTotal()-1;
   for(int i=pos; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Ask, 0, NULL))
              {
               Print("Order Close");
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
Comment obtenir les extrêmes de ZZ au format D' 2021.01.05
sur plusieurs années ?
 
Vladimir Baskakov #:
Comment obtenir les extrêmes de ZZ au format D' 2021.01.05
dans quelques années ?
if(ZZ[i]!=EMPTY_VALUE) string iDate=TimeToString(time[i],TIME_DATE|TIME_MINUTES);
 
Tretyakov Rostyslav #:
Pas de script ?
 
Vladimir Baskakov #:
Pas de script ?
Non
 
Bonjour à tous. Quelqu'un peut-il m'aider à modifier l'EA ? J'ai besoin de supprimer la fonction d'ouverture des ordres, de sorte que l'EA n'ouvre pas les ordres par lui-même, mais fonctionne uniquement avec des ordres ouverts manuellement. Merci d'avance.
Dossiers :
 
Vladimir Baskakov #:
Pas de script ?

Nous prenons un zig-zag et, dans OnCalculace, nous vérifions dans son tampon les valeurs généralement supérieures à 0 (cela signifie que le tampon stocke une valeur extrême, basse ou haute). Nous bouclons dans le tampon en utilisant la fonction

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 
) {
 // код зиг-зага
 ...
 if (prev_calculated > 0) // дальнейший код сработает только один раз
   return (rates_total);
 // обработка значений зиг-зага
 for (int i = rates_total - 1; i >= 0; i--) {
   if (zigZag[i] > 0) { // найден экстремум
     // сохраняем time[i] в любую удобную форму для дальнейшей работы
   }
 }
 return (rates_total);
}

la boucle ci-dessus (de droite à gauche) est destinée à MQL5

pour MQL4 la boucle sera de gauche à droite

for (int i = 0; i < rates_total; i++)

Les exemples ci-dessus donnent d'abord de nouvelles valeurs temporelles. Pour obtenir d'abord les valeurs supérieures dans le temps, utilisez ArraySetAsSeries ou inversez le sens de la boucle.

Les données peuvent être récupérées dans le script en utilisant iCustom, CopyTime ou iTime ainsi que iBars (au lieu de rates_total).

 
Tretyakov Rostyslav #:

Je dois mal comprendre quelque chose.

si je change la fonction dans

void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.
   
// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     } 
       DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
       DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2)));
       TrailingOrders();
  }

alors l'arrêt et la prise en charge sont instantanément décalés un nombre infini de fois

Sivous n'utilisez pas TrailingOrders() ; alors rien ne se déplace.

Ma tâche n'était pas de créer un mouvement de suivi, mais de déplacer le stop et le takeout une/deux fois.

J'ai "inventé" des choses toute la journée aujourd'hui, jusqu'à présent rien ne fonctionne.

 
законопослушный гражданин #:

Je dois mal comprendre quelque chose.

si je change la fonction dans

alors l'arrêt et la prise en charge sont instantanément décalés un nombre infini de fois

Sivous n'utilisez pas TrailingOrders() ; alors rien ne se déplace.

Ma tâche n'était pas de créer un mouvement de suivi, mais de déplacer le stop et le takeout une/deux fois.

J'ai "inventé" des choses toute la journée, jusqu'à présent rien ne fonctionne.

Le stop suiveur doit fonctionner si le prix a évolué dans la direction du TP, et il ne doit rien faire si le prix recule. Le niveau SL ne doit aller que dans la direction du TP et ne pas revenir en arrière.

Raison: