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

 
Rustam Bikbulatov :

Merhaba. Bana neden ima= iMA ( NULL , 60 , 24 , 0 , 1 , 0 ,k) görmediğini söyle. Yorum yoluyla, satırın kendisinden çok daha yüksek bir alıntı gösterir. Bu nedenle, minimum ve maksimum hiç hesaplanmaz

Sayıları değil, numaralandırmalardan tanımlayıcıları kullanın. Çok daha net:

 for (i=pos; i<rates_total && ! IsStopped (); i++)
     {
       double dmin= DBL_MAX ;
       double dmax=- DBL_MAX ;
       for (k=i-InpKPeriod+ 1 ; k<=i; k++)
        { double ima= iMA ( NULL , PERIOD_M1 , 60 , 0 , MODE_EMA , PRICE_CLOSE ,k);
         if (ima<dmin)  dmin=ima;
         if (ima>dmax)  dmax=ima;
         Comment ("pos="+( string )pos+", k="+( string )k+", iMA ="+ DoubleToString (ima, Digits ()));
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }

iMA()'yı sorduğun hemen anlaşılıyor. Örneğin:

iMA'nız var(NULL,60,24,0,1,0,k)

ve böylece iMA(NULL, PERIOD_H1,24,0 ,MODE_EMA,PRICE_CLOSE,k)

Daha net olan nedir?

Mashka verilerini saatlik grafikten alırsınız. Program saatlik bir grafikte çalışıyorsa, ne tür veriler almayı ve görmeyi bekliyorsunuz?

 
Artyom Trishkin :

Sayıları değil, numaralandırmalardan tanımlayıcıları kullanın. Çok daha net:

iMA()'yı sorduğun hemen anlaşılıyor. Örneğin:

iMA'nız var(NULL,60,24,0,1,0,k)

ve böylece iMA(NULL, PERIOD_H1,24,0 ,MODE_EMA,PRICE_CLOSE,k)

Daha net olan nedir?

Mashka verilerini saatlik grafikten alırsınız. Program saatlik bir grafikte çalışıyorsa, ne tür veriler almayı ve görmeyi bekliyorsunuz?

Bunu dakika çizelgesine koydum
   for (i=pos; i<rates_total && ! IsStopped (); i++)
     {
       double dmin= 1000000.0 ;
       double dmax=- 1000000.0 ;
       for (k=i-InpKPeriod+ 1 ; k<=i; k++)
        { double ima= iMA ( Symbol (), 1 , 60 , 0 , 1 , 0 ,k);
         if (dmin>ima)  dmin=ima;
         if (dmax<ima)  dmax=ima;
         Comment (dmax);
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }

k ile hiçbir şey çıkmaz

 
Rustam Bikbulatov :

Yanlışlıkla ayarlanmış. Bunu hiçbir şey değiştirmez. K ile yanlış olanı gösteren şeyin özü!

yarı uykulu ve bulanık olmasına rağmen, MA değerleriniz açıkça yanlış taraftan alınmış :-) zaman dilimleriyle karışıklığa ek olarak

   // основной цикл
   // перебираем бары от последнего нерасчитанного к актуальному
   // (просто пример - поэтому инициализация и заполнение буферов пропущенны!!)
   for ( int bar=prev_calculated;bar<rates_total && ! IsStopped ();bar++) {
       // bar использовать для обращения к массивам, i - к таймсериям
       int i=rates_total-bar- 1 ;
       // считаем min,max от некой MA за DEPTH баров
       double min= DBL_MAX ;
       double max= DBL_MIN ;
       if (bar<DEPTH) {
         // данных ещё недостаточно
         continue ;
      }
       for ( int t= 0 ;t<DEPTH;t++) {
         double ma= iMA ( _Symbol , _Period ,MA_PERIOD, 0 ,MA_METHOD,MA_PRICE,i+t); // берём значение MA (! как в таймсериях 0-последнее)
         if (ma> 0 ) {
             if (min<ma) min=ma;
             if (max>ma) max=ma;
         }
      }
       if (min!= DBL_MAX && max!= DBL_MIN ) {
         // что-то делаем с полученными максимум/минимум MA
      }
   }
 
Maxim Kuznetsov :

yarı uykulu ve bulanık olmasına rağmen, MA değerleriniz açıkça yanlış taraftan alınmış :-) zaman dilimleri ile karışıklığa ek olarak


İlginç bir fikir. Deneyeceğim. Herhangi bir şey varsa, bu normal bir stokastik göstergedir . Fikir, herhangi bir dönem için barların uç noktalarını ve MA çizgisinin uç noktalarını üstleniyor gibi görünüyordu. 100-113 hatta. Bunun göstergeyi iyileştireceğini düşünüyorum

 //+------------------------------------------------------------------+
///+------------------------------------------------------------------+
//|                                                   Stochastic.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright    "2005-2014, MetaQuotes Software Corp."
#property link          "http://www.mql4.com"
#property description "Stochastic Oscillator"
#property strict

#property indicator_separate_window
#property indicator_minimum      0
#property indicator_maximum      100
#property indicator_buffers      2
#property indicator_color1      LightSeaGreen
#property indicator_color2      Red
#property indicator_level1      20.0
#property indicator_level2      80.0
#property indicator_levelcolor clrSilver
#property indicator_levelstyle STYLE_DOT
//--- input parameters
input int InpKPeriod= 60 ; // K Period
input int InpDPeriod= 60 ; // D Period
input int InpSlowing= 1 ; // Slowing
//--- buffers
double ExtMainBuffer[];
double ExtSignalBuffer[];
double ExtHighesBuffer[];
double ExtLowesBuffer[];
//---
int draw_begin1= 0 ;
int draw_begin2= 0 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ( void )
  {
   string short_name;
//--- 2 additional buffers are used for counting.
   IndicatorBuffers ( 4 );
   SetIndexBuffer ( 2 , ExtHighesBuffer);
   SetIndexBuffer ( 3 , ExtLowesBuffer);
//--- indicator lines
   SetIndexStyle ( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 , ExtMainBuffer);
   SetIndexStyle ( 1 , DRAW_LINE );
   SetIndexBuffer ( 1 , ExtSignalBuffer);
//--- name for DataWindow and indicator subwindow label
   short_name= "Sto(" + IntegerToString (InpKPeriod)+ "," + IntegerToString (InpDPeriod)+ "," + IntegerToString (InpSlowing)+ ")" ;
   IndicatorShortName (short_name);
   SetIndexLabel ( 0 ,short_name);
   SetIndexLabel ( 1 , "Signal" );
//---
   draw_begin1=InpKPeriod+InpSlowing;
   draw_begin2=draw_begin1+InpDPeriod;
   SetIndexDrawBegin ( 0 ,draw_begin1);
   SetIndexDrawBegin ( 1 ,draw_begin2);
//--- initialization done
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Stochastic oscillator                                            |
//+------------------------------------------------------------------+
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,k,pos;
//--- check for bars count
   if (rates_total<=InpKPeriod+InpDPeriod+InpSlowing)
       return ( 0 );
//--- counting from 0 to rates_total
   ArraySetAsSeries (ExtMainBuffer, false );
   ArraySetAsSeries (ExtSignalBuffer, false );
   ArraySetAsSeries (ExtHighesBuffer, false );
   ArraySetAsSeries (ExtLowesBuffer, false );
   ArraySetAsSeries (low, false );
   ArraySetAsSeries (high, false );
   ArraySetAsSeries (close, false );
//---
   pos=InpKPeriod- 1 ;
   if (pos+ 1 <prev_calculated)
      pos=prev_calculated- 2 ;
   else
     {
       for (i= 0 ; i<pos; i++)
        {
         ExtLowesBuffer[i]= 0.0 ;
         ExtHighesBuffer[i]= 0.0 ;
        }
     }
//--- calculate HighesBuffer[] and ExtHighesBuffer[]
   for (i=pos; i<rates_total && ! IsStopped (); i++)
     {
       double dmin= 1000000.0 ;
       double dmax=- 1000000.0 ;
       for (k=i-InpKPeriod+ 1 ; k<=i; k++)
        { double ima= iMA ( Symbol (), 1 , 60 , 0 , 1 , 0 ,k);
         if (dmin>ima)  dmin=ima;
         if (dmax<ima)  dmax=ima;
         Comment (ima);
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }
//--- %K line
   pos=InpKPeriod- 1 +InpSlowing- 1 ;
   if (pos+ 1 <prev_calculated)
      pos=prev_calculated- 2 ;
   else
     {
       for (i= 0 ; i<pos; i++)
         ExtMainBuffer[i]= 0.0 ;
     }
//--- main cycle
   for (i=pos; i<rates_total && ! IsStopped (); i++)
     {
       double sumlow= 0.0 ;
       double sumhigh= 0.0 ;
       for (k=(i-InpSlowing+ 1 ); k<=i; k++)
        {
         sumlow +=(close[k]-ExtLowesBuffer[k]);
         sumhigh+=(ExtHighesBuffer[k]-ExtLowesBuffer[k]);
        }
       if (sumhigh== 0.0 )
         ExtMainBuffer[i]= 100.0 ;
       else
         ExtMainBuffer[i]=sumlow/sumhigh* 100.0 ;
     }
//--- signal
   pos=InpDPeriod- 1 ;
   if (pos+ 1 <prev_calculated)
      pos=prev_calculated- 2 ;
   else
     {
       for (i= 0 ; i<pos; i++)
         ExtSignalBuffer[i]= 0.0 ;
     }
   for (i=pos; i<rates_total && ! IsStopped (); i++)
     {
       double sum= 0.0 ;
       for (k= 0 ; k<InpDPeriod; k++)
         sum+=ExtMainBuffer[i-k];
      ExtSignalBuffer[i]=sum/InpDPeriod;
     }
//--- OnCalculate done. Return new prev_calculated.
   return (rates_total);
  }
//+------------------------------------------------------------------+
 

Hepinize iyi günler!

Lütfen bana ne yapacağımı söyleyin, örneğin, bugün Expert Advisor'da ayarları yaparsam, ertesi gün bazı ayarlar boş mu?

Ve böylece her gün.

 
Valerius :

Hepinize iyi günler!

Lütfen bana ne yapacağımı söyleyin, örneğin, bugün Expert Advisor'da ayarları yaparsam, ertesi gün bazı ayarlar boş mu?

Ve böylece her gün.

Bir kaynak kodu varsa, koddaki girişi (veya harici) kaldırın ve parametreleri kod aracılığıyla değiştirin.

 
Valerius :

Hepinize iyi günler!

Lütfen bana ne yapacağımı söyleyin, örneğin, bugün Expert Advisor'da ayarları yaparsam, ertesi gün bazı ayarlar boş mu?

Ve böylece her gün.

Sorun hakkında mümkün olduğunca fazla bilgi sağlayarak hizmet masasına yazın.

 
Nauris Zukas :

Bir kaynak kodu varsa, koddaki girişi (veya harici) kaldırın ve parametreleri kod aracılığıyla değiştirin.


Bu ciddi değil... Neden (giriş ve dış) o zaman gerekli ....

 
Artyom Trishkin :

Sorun hakkında mümkün olduğunca fazla bilgi sağlayarak hizmet masasına yazın.


Neden bana bir bağlantı vermiyorsun?

 
Valerius :

Neden bana bir bağlantı vermiyorsun?

Ve profilinize bir göz atın ... Çok ilginç şeyler var.