Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1830

 
Tretyakov Rostyslav #:

Capisco, grazie.

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

Ho solo una piccola cosa di cui preoccuparmi. Tutti gli ordini si chiudono ogni tanto (cioè tutti e sempre!), ma a volte, se apro 3-4 ordini, solo 2 o 1 di essi possono chiudersi. Ho un i-check speciale per questo, forse avete un indizio.

Non trascurare le parentesi, prova questo

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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");
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
Come ottenere gli estremi di ZZ nel formato D' 2021.01.05
per diversi anni?
 
Vladimir Baskakov #:
Come ottenere gli estremi di ZZ nel formato D' 2021.01.05
in pochi anni?
if(ZZ[i]!=EMPTY_VALUE) string iDate=TimeToString(time[i],TIME_DATE|TIME_MINUTES);
 
Tretyakov Rostyslav #:
Nessun copione?
 
Vladimir Baskakov #:
Nessun copione?
No
 
Ciao a tutti. Qualcuno può aiutare a modificare l'EA. Ho bisogno di rimuovere la funzione di apertura degli ordini, così l'EA non aprirà gli ordini da solo, ma lavorerà solo con gli ordini aperti manualmente. Molte grazie in anticipo.
File:
 
Vladimir Baskakov #:
Nessun copione?

Prendiamo uno zig-zag e in OnCalculace controlliamo il suo buffer per valori solitamente maggiori di 0 (significa che il buffer memorizza un valore estremo, basso o alto). Eseguiamo un ciclo attraverso il buffer usando la funzione

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);
}

il ciclo qui sopra (da destra a sinistra) è destinato a MQL5

per MQL4 il ciclo sarà da sinistra a destra

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

Gli esempi precedenti danno prima i nuovi valori di tempo. Per ottenere prima i valori più alti nel tempo, usate ArraySetAsSeries o invertite la direzione del ciclo.

I dati possono essere recuperati dallo script usando iCustom, CopyTime o iTime e iBars (invece di rates_total).

 
Tretyakov Rostyslav #:

Devo aver frainteso qualcosa.

se cambio la funzione in

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();
  }

poi stop e takeaway sono istantaneamente spostati un numero infinito di volte

Senon usate TrailingOrders(); allora niente si sposta.

Il mio compito non era quello di creare un trailing move, ma di spostare stop e takeout una/due volte.

Ho "inventato" cose per tutto il giorno oggi, finora non funziona niente.

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

Devo aver frainteso qualcosa.

se cambio la funzione in

allora stop e takeaway sono istantaneamente spostati un numero infinito di volte

Senon usate TrailingOrders(); allora niente si sposta.

Il mio compito non era quello di creare un trailing move, ma di spostare stop e takeout una/due volte.

Ho "inventato" cose per tutto il giorno, ma finora non funziona niente.

Il trailing stop dovrebbe funzionare se il prezzo si è mosso nella direzione del TP, e non dovrebbe fare nulla se il prezzo torna indietro. Il livello SL dovrebbe andare solo nella direzione del TP e non tornare indietro.

Motivazione: