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

 
inter78 :

Aslında bunu yaptım ama uzun tepki süresini sevmiyorum.

işlem uzun değil, tik ile ... ama genel olarak. yardımı okumaya başlayın, “poke yöntemini” kullanarak MQL çalışamazsınız, MQL C ++ tabanlıdır, ancak buna bağlıdır MT platformu, yardımı incelemeden hiçbir yolu yoktur

kodunuzda ve dosyalarla çalışın ve terminalin global değişkenleriyle çalışın ve grafiklerle çalışın ve ... ve orada her şey bir kerede birçok kez yapılır, gerçekten çok fazla gereksiz işlem var

hızlı yanıt istiyorsanız, OnChartEvent() kullanın, ancak test cihazında oluşturulmaz, ancak önce MQL4 yardımını incelemeye başlayın

 
Igor Makanu :

işlem uzun değil, tik ile ... ama genel olarak. yardımı okumaya başlayın, “poke yöntemini” kullanarak MQL çalışamazsınız, MQL C ++ tabanlıdır, ancak buna bağlıdır MT platformu, yardımı incelemeden hiçbir yolu yoktur

kodunuzda ve dosyalarla çalışın ve terminalin global değişkenleriyle çalışın ve grafiklerle çalışın ve ... ve orada her şey bir kerede birçok kez yapılır, gerçekten çok fazla gereksiz işlem var

hızlı yanıt istiyorsanız, OnChartEvent() kullanın, ancak test cihazında oluşturulmaz, ancak önce MQL4 yardımını incelemeye başlayın

Muhtemelen uzmanlardan bunu akla getirmelerini istememiz gerekecek. Yapamayacağım. Sınırsız sayıda açık çizelgeyle çalışmak için acı verici bir şekilde uygun bir bilgi ve kontrol göstergesi olduğu ortaya çıktı. Düğmeler ayrıca enstrümanın mevcut kârını ve alış ve satış emirlerinin sayısını gösterir.
 

Herkese selam.

Kod kitaplığında yararlı bir Ind-Fractals göstergesi buldum. Ancak, düzgün hesaplamak yerine her çubukta fraktallar çizer. Göstergeyi kullanmak istiyorum ama "bozuk" (((Bir hata bulmama yardım edin, yazarla iletişime geçmeye çalıştım ama mesajlara cevap vermiyor. Kolaylık olması için kodu buraya kopyaladım.

#property telif hakkı "Telif hakkı © 2005, MetaQuotes Software Corp."

#özellik bağlantısı "http://www.metaquotes.net"

//----

#özellik göstergesi_chart_window

#özellik göstergesi_tamponları 8

#özellik göstergesi_renk1 Kırmızı

#özellik göstergesi_renk2 Kırmızı

#özellik göstergesi_renk3 Mavi

#özellik göstergesi_color4 Mavi

#özellik göstergesi_color5 Kireç

#özellik göstergesi_color6 Kireç

#özellik göstergesi_color7 Sienna

#özellik göstergesi_color8 Sienna

//---- giriş parametreleri

harici bool Comm=true;

//---- arabellekler

çift ExtMapBuffer1[];

çift ExtMapBuffer2[];

çift ExtMapBuffer3[];

çift ExtMapBuffer4[];

çift ExtMapBuffer5[];

çift ExtMapBuffer6[];

çift ExtMapBuffer7[];

çift ExtMapBuffer8[];

//+------------------------------------------- --------------------+

//| özel gösterge başlatma işlevi |

//+------------------------------------------- --------------------+

int init()

{

//---- göstergeler

SetIndexStyle(0,DRAW_ARROW);//gösterge çizgi stili

SetIndexArrow(0.217); // ok türünü ayarlar

SetIndexBuffer(0,ExtMapBuffer1);//Belirtilen gösterge arabelleğini çift tipte tek boyutlu dinamik diziyle bağlar. İşlev için 2 seçenek vardır.

SetIndexEmptyValue(0,0.0);//Gösterge satırı için boş değeri ayarlar.

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1.218);

SetIndexBuffer(1,ExtMapBuffer2);

SetIndexEmptyValue(1,0.0);

SetIndexStyle(2,DRAW_OK);

SetIndexArrow(2.217);

SetIndexBuffer(2,ExtMapBuffer3);

SetIndexEmptyValue(2,0.0);

SetIndexStyle(3,DRAW_OK);

SetIndexArrow(3.218);

SetIndexBuffer(3,ExtMapBuffer4);

SetIndexEmptyValue(3,0.0);

SetIndexStyle(4,DRAW_ARROW);

SetIndexArrow(4.217);

SetIndexBuffer(4,ExtMapBuffer5);

SetIndexEmptyValue(4,0.0);

SetIndexStyle(5,DRAW_OK);

SetIndexArrow(5,218);

SetIndexBuffer(5,ExtMapBuffer6);

SetIndexEmptyValue(5,0.0);

SetIndexStyle(6,DRAW_OK);

SetIndexArrow(6.217);

SetIndexBuffer(6,ExtMapBuffer7);

SetIndexEmptyValue(6,0.0);

SetIndexStyle(7,DRAW_OK);

SetIndexArrow(7.218);

SetIndexBuffer(7,ExtMapBuffer8);

SetIndexEmptyValue(7,0.0);

dönüş(0); }

//+------------------------------------------- --------------------+

//| Müşteri göstergesi sıfırlama işlevi |

//+------------------------------------------- --------------------+

int deinit() {dönüş(0); }

//------------------------------------------------ ------------------

bool Fraktal(string F,int Per,int shift) {

if(Period()>Per) return(-1);

Per=Per/Period()*2+MathCeil(Per/Period()/2);

if(shift<Per)dönüş(-1);

if(shift>bars-per)return(-1);

for(int i=1;i<=Per;i++) {

if(shift+i>=Barlar || shift-i<0) return(-1);

if(F=="U") {

if(Yüksek[shift+i]>Yüksek[shift])dönüş(-1);

if(Yüksek[shift-i]>=Yüksek[shift])dönüş(-1); }

if(F=="L") {

if(Low[shift+i]<Low[shift])dönüş(-1);

if(Low[shift-i]<=Düşük[shift])dönüş(-1); } }

dönüş(1); }

//------------------------------------------------ ------------------

int başlangıç()

{

int D1=1440,H4=240,H1=60,M15=15,B;

çift P;

int counted_bars=IndicatorCounted();// göstergenin son çağrısından bu yana değişmeyen çubuk sayısı

B=Barlar-sayılan_barlar;

if(counted_bars==0) B--;

if(Period()==D1)P=150*Point;// period mevcut grafik dönemini döndürür

if(Period()==H4)P=70*Nokta;

if(Period()==H1)P=40*Nokta;

if(Period()==30)P=30*Nokta;

if(Period()==M15)P=20*Nokta;

if(Period()==5)P=10*Nokta;

if(Period()==1)P=5*Nokta;

for(int shift=B;shift>0;shift--)

{

if(Fractal("U",M15,shift)==1) ExtMapBuffer1[shift]=Yüksek[shift]+P;

başka ExtMapBuffer1[shift]=0;

if(Fractal("L",M15,shift)==1) ExtMapBuffer2[shift]=Düşük[shift]-P;

başka ExtMapBuffer2[shift]=0;

if(Fractal("U",H1,shift)==1) ExtMapBuffer3[shift]=Yüksek[shift]+P;

başka ExtMapBuffer3[shift]=0;

if(Fractal("L",H1,shift)==1) ExtMapBuffer4[shift]=Düşük[shift]-P;

başka ExtMapBuffer4[shift]=0;

if(Fractal("U",H4,shift)==1) ExtMapBuffer5[shift]=Yüksek[shift]+P;

başka ExtMapBuffer5[shift]=0;

if(Fractal("L",H4,shift)==1) ExtMapBuffer6[shift]=Düşük[shift]-P;

başka ExtMapBuffer6[shift]=0;

if(Fractal("U",D1,shift)==1) ExtMapBuffer7[shift]=Yüksek[shift]+P;

başka ExtMapBuffer7[shift]=0;

if(Fractal("L",D1,shift)==1) ExtMapBuffer8[shift]=Düşük[shift]-P;

başka ExtMapBuffer8[shift]=0;

}

if(İletişim) Yorum(" D1 - kahverengi\n H4 - yeşil\n H1 - mavi\nM15 - kırmızı ");


dönüş(0);

}

MetaQuotes Software Corp.
MetaQuotes Software Corp.
  • www.metaquotes.net
Миллионы трейдеров и сотни брокеров не могут ошибаться — они выбрали MetaTrader 5 для торговли на Форексе и финансовых рынках! Узнать больше
 

Böyle bir kod kaynağı için burada azarladılar, ilk defa aynısını aldım :-)

Alt + S ile açılan forma kodu girmeniz gerekiyor.

 
psyman :

Böyle bir kod kaynağı için burada azarladılar, ilk defa aynısını aldım :-)

Alt + S ile açılan forma kodu girmeniz gerekiyor.

Azarlamak? Hiçbir durumda. Kodu istediğiniz gibi yazın. Ama ... sorunuza bir cevap almak istiyorsanız, o zaman yardım istediğiniz kişilere saygı duymaya çalışın. Her şey basit.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

Artyom Trishkin , 2018.10.18 08:07

Şunu yapalım: düzenleyicide bir gösterge şablonu oluşturun, oluştururken gerekli sayıda giriş değişkeni ve çizilebilir arabellek ekleyin.

Ardından, belirli bir görevden ne yapılması gerektiğini analiz edeceğiz.

En son bunu yaptığımda, yalnızca değişkenin ve dizinin adını değiştirdim.

iMA kullanırken, i-p yalnızca mumda 100'den fazla noktanın olduğu haftalarda ve günlerde çalıştı, daha küçük zaman dilimlerinde hiçbir şey çizmez. Yuvarlama meselesi gibi görünüyor.




iMAOnArray kullanılırsa, tüm TF'lerde i-ra penceresi boştur. Günlükte herhangi bir hata yok.




 //+------------------------------------------------------------------+
//|                                                        _null.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot OC
#property indicator_label1    "O-C"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrSteelBlue
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- indicator buffers
double          ip1Buf[];

input int ip1= 100 ;
double tmp1[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
  
IndicatorBuffers ( 2 );
string s_name1;

s_name1= "O-C (" + IntegerToString (ip1) + ")" ;

IndicatorShortName (s_name1);
SetIndexLabel ( 0 , s_name1);
SetIndexBuffer ( 1 , tmp1);


//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,ip1Buf);
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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;

       Print ( "rates_total = " ,rates_total);
       for (i= 1 ; i<rates_total- 1 ; i++)
      {
       //Print("i = ",i);
      tmp1[i]= MathMax (open[i],close[i])- MathMin (open[i],close[i]);      
     // tmp1[i]=close[i];      
       //ip1Buf[i]=iMA(NULL,0,1,0,0,tmp1[i],0);
      ip1Buf[i]= iMAOnArray (tmp1, 1 , 1 , 0 , 0 , 0 );
      
      }
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+


 
psyman :

iMAOnArray kullanılırsa, tüm TF'lerde i-ra penceresi boştur. Günlükte herhangi bir hata yok.

yine de, iMAOnArray() öğesini 1 periyotla kullanıyorsunuz, yani. iMAOnArray() değeri, esasen tmp1 dizisinin değeri olacaktır.

Ne düşündüğünüzü anlamak istiyorsanız, (i= 1 ; i<10 ; i++) için döngüyü kısaltın

ve hesaplamak istediğiniz tüm verileri yazdırın, ancak bir tür karmaşık formülü hesaplamak değil, Mashka'yı iMAOnArray() kullanarak almak ve oluşturmak daha kolay olsa da - bu iMA, bu iMAOnArray() aynı hesaplamalardır .. .. ne yazık ki, eğer teknik bir soru bu forumda cevaplanabiliyorsa, o zaman sadece kendiniz saymayı ve bilgi ile uğraşmayı öğrenmelisiniz.

 
psyman :

En son bunu yaptığımda, yalnızca değişkenin ve dizinin adını değiştirdim.

iMA kullanırken, i-p yalnızca mumda 100'den fazla noktanın olduğu haftalarda ve günlerde çalıştı, daha küçük zaman dilimlerinde hiçbir şey çizmez. Yuvarlama meselesi gibi görünüyor.




iMAOnArray kullanılırsa, tüm TF'lerde i-ra penceresi boştur. Günlükte herhangi bir hata yok.





İlk döngü, ilk tamponun değerlerini hesaplar;

ikinci döngüde, ilk döngüde hesaplanan değerleri kullanarak MA'yı hesaplayın.

iMAOnArray()'in ne anlama geldiğini düşünün. Dizi üzerinde ayrı MA yazın. Bu nasıl tercüme edilir? Herkesin elinde bir Google çevirmeni vardır. Diziye in-translate-get: MA getiriyoruz.

Onlar. - Hazır, önceden hesaplanmış ve doldurulmuş bir dizi üzerine inşa edilmiş hareketli ortalama.

Buna göre: ilk döngü, gerekli dizinin hazırlanması, ikinci döngü, ilk döngüde hazırlanan diziye dayalı hareketli bir ortalamanın oluşturulmasıdır.

Ne yapıyorsun? İlk dizideki değeri girin (geri kalan değerler henüz hazırlanmamıştır) ve hemen MA'yı bu değer üzerinde oluşturmaya çalışın.

İşte verdiğim şablon:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

Artyom Trishkin , 2018.10.18 09:39

Gösterge:

 //+------------------------------------------------------------------+
//|                                                       TestMA.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                             https://mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://mql5.com/ru/users/artmedia70"
#property version    "1.00"
#property indicator_chart_window
#ifdef __MQL4__
#property strict
#property indicator_buffers 2
#else 
#property indicator_buffers 3
#property indicator_plots    2
#endif 
//--- plot MAstd
#property indicator_label1    "Calculation MA"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrBlue
#property indicator_style1    STYLE_SOLID
#property indicator_width1    4
//--- plot MAcalc
#property indicator_label2    "Standart MA"
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrDarkOrange
#property indicator_style2    STYLE_DOT
#property indicator_width2    2
//--- input parameters
input int       InpPeriod                     =   10 ;             // Period
input ENUM_MA_METHOD        InpMethod         =   MODE_EMA ;       // Method
input ENUM_APPLIED_PRICE    InpAppliedPrice   =   PRICE_CLOSE ;   // Applied price  
//--- indicator buffers
double          BufferMAcalc[];
double          BufferMAstd[];
double          BufferPrice[];
//---
int             digits;
int             period_ma;
int             handle_ma;
CAvg           avg();
//--- includes

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
#ifdef __MQL4__
   IndicatorBuffers ( 3 );
#endif 
   period_ma=(InpPeriod< 1 ? 1 : InpPeriod);
   digits= Digits ()+ 1 ;
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,BufferMAcalc, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,BufferMAstd, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,BufferPrice, INDICATOR_CALCULATIONS );
//---
   ArraySetAsSeries (BufferMAcalc, true );
   ArraySetAsSeries (BufferMAstd, true );
   ArraySetAsSeries (BufferPrice, true );
//---
#ifdef __MQL5__
   ResetLastError ();
   handle_ma= iMA ( NULL , PERIOD_CURRENT ,period_ma, 0 ,InpMethod,InpAppliedPrice);
   if (handle_ma== INVALID_HANDLE )
     {
       Print ( "Error creation iMA(" ,( string )period_ma, "): " , GetLastError ());
       return INIT_FAILED ;
     }
#endif 
//---
   Comment ( "\nMA type: " ,avg.MethodToString(InpMethod), ", price: " ,avg.PriceToString(InpAppliedPrice), ", period: " ,( string )period_ma);
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//--- Установка массивов буферов как таймсерий
#ifdef __MQL5__
   ArraySetAsSeries (open, true );
   ArraySetAsSeries (high, true );
   ArraySetAsSeries (low, true );
   ArraySetAsSeries (close, true );
#endif 
//--- Проверка количества доступных баров
   if (rates_total< fmax (period_ma, 4 )) return 0 ;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if (limit> 1 )
     {
      limit=rates_total- 1 ;
       ArrayInitialize (BufferMAcalc, EMPTY_VALUE );
       ArrayInitialize (BufferMAstd, EMPTY_VALUE );
       ArrayInitialize (BufferPrice,0);
     }
//--- Подготовка данных
#ifdef __MQL5__
   int count=(limit> 1 ? rates_total : 1 ),copied= 0 ;
   copied= CopyBuffer (handle_ma, 0 , 0 ,count,BufferMAstd);
   if (copied!=count) return 0 ;
#endif 
//--- Расчёт индикатора
   for ( int i=limit; i>= 0 && ! IsStopped (); i--)
     {
       #ifdef __MQL4__ BufferMAstd[i]= iMA ( NULL , PERIOD_CURRENT ,period_ma, 0 ,InpMethod,InpAppliedPrice,i); #endif 
       BufferPrice[i]=avg.AppliedPrice(InpAppliedPrice, NULL , PERIOD_CURRENT ,i);
      BufferMAcalc[i]=avg.GetMA(rates_total,InpMethod,period_ma,i,BufferPrice);
     }

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

Ondan beşle ilgili her şeyi atabilir ve dördü için bir şablon alabilirsiniz. Bu şablon çok platformlu olmasına rağmen - aynı anda her iki terminal için de kullanılabilir - sadece kendi arabelleklerinizi ve numaralarını ayarlayın. Bu şablonda, buradan görülebilecek şekilde iki tane çizilmiş ve bir tane hesaplanmıştır:

 //--- indicator buffers mapping
   SetIndexBuffer ( 0 ,BufferMAcalc, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,BufferMAstd, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,BufferPrice, INDICATOR_CALCULATIONS );
//---
 

= yine de, iMAOnArray()'i 1 periyotla kullanıyorsunuz, yani. iMAOnArray() değeri, esasen tmp1 dizisinin değeri olacaktır.


Kullanmak için farklı değerler denedim, bu deneylerin son seçeneği olarak 1 kaldı.

Nedense tüm TF'lerde i-ra tamponuna aynı sayı yazılır, örneğin ip1Buf[4] = 2147483647.0, dizi değerlerinin hepsi farklı iken tmp1[4] = 0.1300000000000097 vb.

Ancak bu durumda bile düz bir çizgi çizilmelidir ve i-ra şemasında kesinlikle hiçbir şey yoktur, skala 0'dan 0'a işaretlenmiştir.



 
psyman :

= yine de, iMAOnArray()'i 1 periyotla kullanıyorsunuz, yani. iMAOnArray() değeri, esasen tmp1 dizisinin değeri olacaktır.


Kullanmak için farklı değerler denedim, bu deneylerin son seçeneği olarak 1 kaldı.

Nedense tüm TF'lerde i-ra tamponuna aynı sayı yazılır, örneğin ip1Buf[4] = 2147483647.0 dizi değerlerinin tamamı farklı iken tmp1[4] = 0.1300000000000097 vb.

Ancak bu durumda bile düz bir çizgi çizilmelidir ve i-ra şemasında kesinlikle hiçbir şey yoktur, skala 0'dan 0'a işaretlenmiştir.



2147483647.0 Peki, aramayı kullanmaya başlayın! https://www.mql5.com/ru/forum/224831

bir kez daha yazdım Artem az önce yazdım, kendi başına okumalısın, basit bir tane ile başla... ikinci döngüde, içinde yakın olduğu önceden hesaplanmış arabellek için MA'yı hesaplayın

2147483647 в буфере
2147483647 в буфере
  • 2018.01.15
  • www.mql5.com
День Добрый! Подскажите, пожалуйста, что это за хрень. Не первый раз сталкиваюсь...