MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 573

 
Merhaba!
Belki https://ru.investing.com/tools/correlation-calculator sitesinden
Bilgi grafiğe aktarılsın mı?
Bu nasıl yapılabilir?
Şimdiden teşekkür ederim.
 
Irina Dymura :
Merhaba!
Belki https://ru.investing.com/tools/correlation-calculator sitesinden
Bilgiyi grafiğe aktar?
Bu nasıl yapılabilir?
Şimdiden teşekkür ederim.
WebRequest()'i deneyin.
 
Ihor Herasko :

Evet. Zamanı bir dizgeye dönüştürmek anlamsızdır çünkü zaman, saniyelerin sayısıdır. Bu sayı ile çalışmak dizelere göre çok daha kolay ve daha hızlıdır.

Birini düzelttiniz ve diğerini mahvettiniz))

Bunun yerine ikinci bölümde:

dönüş:

Önceki denemede bu satır sizin için doğruydu.


Cevaplar için teşekkürler! Her iki seçeneği de denedim.

Yakalamanın ne olduğunu anlamıyorum - hepsi aynı, durarak kapanırken hemen giriyor:

lil_lil :

Durumunuzu yüksek sesle söyleyin ve sorunun ne olduğunu anlayın)

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

Ne demek istediğinizi doğru anladıysam, teoride her yerde bir koşul vardır, yani tam tersi > olması gerekir. Ama tüm seçenekleri koştum - hala geliyor.

 

Mantığı bulmama yardım et, hatayı bul

Kodu ayrıntılı olarak yorumladı.

Ayrıca, "zikzak" tipine göre bir noktalı fraktallar çizmek gerekir, böylece alt üst alt fraktallar sırayla gider vb.

Ancak sonuç olarak, yinelenen kesirler hala grafikte kayıp gidiyor.

Taban standart fraktal hindiden alınmıştır. 5. periyotta tekrarlanan fraktal ile aşağıdaki ekran görüntüsü

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

//+------------------------------------------------------------------+
Dosyalar:
6gvzow.JPG  149 kb
 
SYMBOL_SESSION_INTEREST desteklenmiyorsa, MQL4'te açık pozisyonların hacmini sembolle nasıl alacağımı söyleyin? Teşekkür ederim!
 
kotaries :
SYMBOL_SESSION_INTEREST desteklenmiyorsa, MQL4'te açık pozisyonların hacmini sembolle nasıl alacağımı söyleyin? Teşekkür ederim!

Tüm pozisyonlar arasında dolaşın ve toplam hacimlerini hesaplayın: 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...
 

Belirli bir prev_hesaplanan değerin neye göre döndürüldüğünü anlayamıyorum?

aslında nasıl hesaplanır

 
Roman Sharanov :

Belirli bir prev_hesaplanan değerin neye göre döndürüldüğünü anlayamıyorum?

aslında nasıl hesaplanır

Bunun arkasında sistem yavaşlayacaktır. Aslında, içeride nasıl hesaplandığıyla değil, yalnızca değeriyle ilgilenmelisiniz.
 
Roman Sharanov :

Belirli bir prev_hesaplanan değerin neye göre döndürüldüğünü anlayamıyorum?

aslında nasıl hesaplanır

Bu, son yinelemede OnCalculate() işlevi tarafından döndürülen değerdir. Bu doğrudan belgelerde belirtilmiştir:

OnCalculate() işlevi tarafından döndürülen değer ile ikinci giriş parametresi prev_calculated arasındaki ilişkiye dikkat edin. İşlev çağrılırken prev_calculated parametresi , önceki çağrıda OnCalculate() işlevi tarafından döndürülen değeri içerir . Bu, bu işlevin önceki başlatılmasından bu yana değişmeyen çubuklar için yeniden hesaplamalardan kaçınmak için özel bir göstergeyi hesaplamak için ekonomik algoritmalar uygulamanıza olanak tanır.

 

Görev, minimum kapanışa sahip bir bar bulmaktır.

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

{

sayaç++;

// Yazdır(Kapat[x],",,,",sayaç);

int h = DiziMinimum (Kapat[x]);

if(sayaç > 20) break;

}

Derleyici Kapat'a yemin ediyor