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

 
Ciao!
Possibilmente da https://ru.investing.com/tools/correlation-calculator
È possibile trasferire le informazioni all'orario?
Come si può fare?
Grazie in anticipo.
 
Irina Dymura:
Ciao!
Possibilmente da https://ru.investing.com/tools/correlation-calculator
È possibile trasferire le informazioni all'orario?
Come si può fare?
Grazie in anticipo.
ProvaWebRequest().
 
Ihor Herasko:

Sì. Non c'è motivo di tradurre il tempo in stringa, poiché il tempo è un numero di secondi. Questo numero è molto più facile e veloce da lavorare rispetto alle stringhe.

Avete corretto una cosa e rovinato un'altra).

Nella seconda parte invece di:

ritorno:

Avevi questa linea corretta nel tuo precedente tentativo.


Grazie per le risposte! Ho provato entrambe le opzioni.

Non vedo quale sia la fregatura - va ancora dritto dentro quando si chiude su uno stop:

lil_lil:

Dite la vostra condizione ad alta voce e vedrete cosa sta succedendo)

if ( TimeSeconds(TimeCurrent()) - TimeSeconds(OrderCloseTime()) > TimeSeconds(30*60) )
if ( TimeCurrent() -OrderCloseTime() > 30*60 )

Infatti, c'è != condizione ovunque, cioè il contrario > dovrebbe esserci, se ho capito bene quello che vuoi dire. Ma tutte le varianti hanno funzionato - funziona ancora.

 

Aiutare a capire la logica, trovare l'errore

Commentato il codice in dettaglio.

Ho bisogno che disegni frattali con un periodo, con un tipo "zigzag", in modo che i frattali inferiori superiori inferiori vadano in sequenza e così via.

Ma come risultato, i frattali ripetuti appaiono comunque sul grafico

La base è presa dall'indicatore frattale standard. Screenshot qui sotto con frattale ripetuto sul periodo 5

//+------------------------------------------------------------------+
//|                                                     Fractals.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_ARROW
#property indicator_type2   DRAW_ARROW
#property indicator_color1  Gray
#property indicator_color2  Gray
#property indicator_label1  "Fractal Up"
#property indicator_label2  "Fractal Down"
bool high_f, low_f, lastIsUpper = true, lastIsLower = true;
int lastLowerIndex, lastUpperIndex;
//---- input data
input int period = 5;
int per = period;
//---- indicator buffers
double ExtUpperBuffer[];
double ExtLowerBuffer[];
//--- 10 pixels upper from high price
int    ExtArrowShift=-10;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
  if(per % 2 == 0) per++; //период фракталов только нечетный
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtUpperBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
//---- arrow shifts when drawing
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ExtArrowShift);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ExtArrowShift);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
  }

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[])
  {
   int i,limit;
//---
   if(rates_total < per)
      return(0);
//---
   if(prev_calculated < per + (per - 1) / 2)
     {
      limit = (per - 1) / 2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit = rates_total - per;
   for(i = limit; i < rates_total - (per + 1) / 2 && !IsStopped(); i++)
     {
      high_f = true; low_f = true;//с самого начала считаем что есть фрактал в i свече
      for(int g = 1; g < (per+1)/2; g++){//проверка на наличие фрактала (одновременной справа и слева от свечи с возможным фракталом)
         //---- Upper Fractal
         if(high[i-g] >= high[i] || high[i+g] > high[i]){//если одно из условий выполнено (high какой либо свечи справа или слева выше чем исследуемый), то фрактала сверху нет
            ExtUpperBuffer[i] = EMPTY_VALUE;
            high_f = false;            
         }        
         //---- Lower Fractal
         if(low[i-g] <= low[i] || low[i+g] < low[i]){ //если одно из условий выполнено, то фрактала снизу нет        
            ExtLowerBuffer[i] = EMPTY_VALUE;
            low_f = false;   
         }  
      }  
       //устанавливаем верхний
      if(high_f){//если фрактал все таки есть (из цикла-проверки выше)
         if(lastIsLower){//еси последний фрактал был нижний
            ExtUpperBuffer[i] = high[i];//устанавливаем сверху
            lastUpperIndex = i;//записываем индекс в буффере установленного
            lastIsLower = false;//говорим что последний - не нижний
            lastIsUpper = true;//а верхний
         }else{
            if(lastIsUpper){//если последний верхний (а мы пытаемся установить верхний)
               if(high[i] > ExtUpperBuffer[lastUpperIndex]){//если устанавливаем выше предыдущего
                  ExtUpperBuffer[lastUpperIndex] = EMPTY_VALUE;//удаляем предыдущий
                  ExtUpperBuffer[i] = high[i];//устанавливаем новый
                  lastUpperIndex = i;//записываем индекс нового
               }
            }
         }
      }
      //аналогично для фрактала снизу
      if(low_f){
         if(lastIsUpper){
            ExtLowerBuffer[i] = low[i];
            lastLowerIndex = i;
            lastIsLower = true;
            lastIsUpper = false;
         }else{
            if(lastIsLower){
               if(low[i] < ExtLowerBuffer[lastLowerIndex]){
                  ExtLowerBuffer[lastLowerIndex] = EMPTY_VALUE;
                  ExtLowerBuffer[i] = low[i];
                  lastLowerIndex = i;
               }
            }
         }
      }   
    }
  
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

//+------------------------------------------------------------------+
File:
6gvzow.JPG  149 kb
 
Potete consigliarmi come ottenere il volume delle posizioni aperte in MQL4, se SYMBOL_SESSION_INTEREST non è supportato? Grazie!
 
kotaries:
Potete per favore consigliare come ottenere il volume delle posizioni aperte in MQL4, se SYMBOL_SESSION_INTEREST non è supportato? Grazie!

Esamina tutte le posizioni e calcola il loro volume totale:OrderLots()

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

Non riesco a capire perché viene restituito un certo valore di prev_calculated?

Come si calcola in primo luogo?

 
Roman Sharanov:

Non riesco a capire perché viene restituito un certo valore di prev_calculated?

Come si calcola in primo luogo?

Il sistema ne terrà traccia. In effetti, dovreste essere interessati solo al suo valore, non a come viene calcolato internamente.
 
Roman Sharanov:

Non riesco a capire perché viene restituito un certo valore di prev_calculated?

Come si calcola?

Questo è il valore restituito da OnCalculate() all'ultima iterazione. Questo è esplicitamente dichiarato nella documentazione:

La relazione tra il valore restituito da OnCalculate() e il secondo parametro di input prev_calculated dovrebbe essere notato. Ilparametro prev_calculated, quando la funzione viene chiamata, contiene il valorerestituito da OnCalculate() nella chiamataprecedente. Questo permette algoritmi economici per il calcolo dell'indicatore personalizzato al fine di evitare calcoli ripetuti per quelle barre che non sono cambiate dalla precedente chiamata di questa funzione.

 

Il compito è trovare la barra con la chiusura minima

for(int x=0; x<=xBars -1; x++)

{

contro++;

// Print(Close[x],",",counter);

int h = ArrayMinimum(Close[x]);

se(contatore > 20) pausa;

}

Il compilatore giura su Close