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

 
Tretyakov Rostyslav #:

Se si verifica una condizione di chiusura

//-------------------------------------------------------------------+  Команда на закрытие сетки ордеров
   if((CountTrade(0) > 1 && CalculiteProfit() >= 0 && OrderGroupCloseSignal()==0)||(CountTrade(1) > 1 && CalculiteProfit() >= 0 && OrderGroupCloseSignal()==1))
     {
      flag_close=1;
     }

Qui la condizione è CalculiteProfit() >= 0. In questo caso possiamo calcolare a quale prezzo sarà il profitto necessario per queste posizioni e impostare lì il take profit o lo stop loss, a seconda dei prezzi e delle posizioni. E poiché le posizioni Buy e Sell sono chiuse a prezzi diversi, questo è appropriato solo se le posizioni sono dello stesso tipo.

 
Andrey Sokolov #:

La condizione qui è CalculiteProfit() >= 0, nel qual caso potete calcolare a quale prezzo sarà il profitto necessario per queste posizioni e impostare un take profit lì.

Non io)

EVGENII SHELIPOV è l'autore di condizioni.

 

Saluti. Puoi darmi un suggerimento?

Nel robot mt5 ho bisogno di mettere una curva come una media mobile sul grafico. C'è un modo più "civile" di scolpire dagli oggetti, e se sì, qual è?

 
Andrey Sokolov #:

Saluti. Puoi darmi un suggerimento?

Nel robot mt5 ho bisogno di mettere una curva come una media mobile sul grafico. C'è un modo più "civile" di scolpire dagli oggetti, e se sì, qual è?

Sì - visualizzalo
 
Artyom Trishkin #:
Sì - emettilo tu stesso

la parola chiave qui è "come". Lì ci sono i tuoi dati, non quelli di un indicatore terzo.

 
Andrey Sokolov #:

Saluti. Puoi darmi un suggerimento?

Nel robot mt5 ho bisogno di mettere una curva come una media mobile sul grafico. C'è un modo più "civile" di mostrarlo che disegnarlo dagli oggetti?

Disegnare valori su CCanvas.

 
Andrey Sokolov #:

la parola chiave qui è "come". Lì ci sono i tuoi dati, non quelli di un indicatore terzo.

Crea un indicatore e aggiungilo come #risorsa
 

Salve. Puoi darmi un suggerimento? Il terminale di trading ha un concetto come ALERT. Cioè, lo mettiamo sulla scala deiprezzi e stabiliamo le condizioni per raggiungere questo prezzo. Ma si scopre che è usa e getta. Il robot di trading non è un evento unico e l'allarme non è un evento unico.

 
valentin104 terminale di trading ha un concetto come ALERT. Cioè, lo mettiamo sulla scala deiprezzi e stabiliamo le condizioni per raggiungere questo prezzo. Ma si scopre che è usa e getta. L'ordine è simile a quello degli avvisi, ma sono riutilizzabili, cioè continuano a funzionare finché non vengono disattivati.

// использовать алерт
input bool alert = true;
// уровень срабатывания
input double trigLv = 0.0;
// отклонение от trigLv в пунктах
input int deviation = 30; 


// функция взята из https://www.mql5.com/ru/docs/basis/types/double
bool EqualDoubles(double d1,double d2,double epsilon)
  {
   if(epsilon<0) 
      epsilon=-epsilon;
//---
   if(d1-d2>epsilon) 
      return false;
   if(d1-d2<-epsilon) 
      return false;
//---
   return true;
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {
  return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[]
) {
  static bool triggered = false;
  static datetime time_ = 0;
  if (!alert)
    return rates_total;
  if (EqualDoubles(trigLv, close[0], deviation * SymbolInfoDouble(NULL, SYMBOL_POINT))) { // сравнение цены Close с trigLv
    if (time_ != time[rates_total - 1])
      time_ = time[rates_total - 1];
    else
      return rates_total;
    if (!triggered)
      Alert("Level ", NormalizeDouble(trigLv, (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " triggered!");
    triggered = true;
  }
  else
    triggered = false;
  
  return rates_total;
}

Il codice è per MQL5. La funzione si basa sul presupposto che l'indicatore ha la stessa funzione di MQL5 e in MQL5 si basa sulla stessa funzione di MQL5.

File:
Alert.mq5  5 kb
Motivazione: