Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 824

 
lil_lil :

Teşekkürler!

/

.


Aha, diziler aracılığıyla değil aynı şekilde karar verdiniz.

Not: diziler aracılığıyla çözüm (göstergelerden SON ÜÇ değerin Birinci[], İkinci[] ve Üçüncü[] dizilere kopyalanması) - İki iMA'nın çaprazlanması - OnTick():

 //--- We look for crossing of two indicators
   double    First[];
   double    Second[];
   double    Third[];
   ArraySetAsSeries (First, true );     // index [0] - the most right bar on a charts
   ArraySetAsSeries (Second, true );   // index [0] - the most right bar on a charts
   ArraySetAsSeries (Third, true );     // index [0] - the most right bar on a charts
   int       buffer_num= 0 ;           // indicator buffer number 
   int       start_pos= 0 ;             // start position 
   int       count= 3 ;                 // amount to copy 
   if (!iMAGet(handle_iMA_First,buffer_num,start_pos,count,First))
       return ;
   if (!iMAGet(handle_iMA_Second,buffer_num,start_pos,count,Second))
       return ;
   if (InpFilterMA)
       if (!iMAGet(handle_iMA_Third,buffer_num,start_pos,count,Third))
         return ;
//--- step 1: check in the arrays bars [0] and [1]
   if (First[ 0 ]>Second[ 0 ] && First[ 1 ]<Second[ 1 ]) // buy
     {
       if (InpFilterMA)
         if (Third[ 0 ]>=First[ 0 ])
             return ;
       if (! RefreshRates ())
        {
         PrevBars= iTime ( 1 );
         return ;
        }
       double sl=m_symbol. Bid ()-InpStopLoss*m_adjusted_point;
       double tp=m_symbol. Ask ()+InpTakeProfit*m_adjusted_point;
      OpenBuy(sl,tp);
       return ;
     }
   else if (First[ 0 ]<Second[ 0 ] && First[ 1 ]>Second[ 1 ]) // sell
     {
       if (InpFilterMA)
         if (Third[ 0 ]<=First[ 0 ])
             return ;
       if (! RefreshRates ())
        {
         PrevBars= iTime ( 1 );
         return ;
        }
       double sl=m_symbol. Ask ()+InpStopLoss*m_adjusted_point;
       double tp=m_symbol. Bid ()-InpTakeProfit*m_adjusted_point;
      OpenSell(sl,tp);
       return ;
     }
//--- step 2: on a step of 1 crossing haven't found. check in the arrays bars [0] and [2]
   if (First[ 0 ]>Second[ 0 ] && First[ 2 ]<Second[ 2 ]) // buy
     {
       //--- search in history
       if (SearchPositions( iTime (start_pos+ 3 ), iTime (start_pos)))
         return ;
       if (! RefreshRates ())
        {
         PrevBars= iTime ( 1 );
         return ;
        }
       double sl=m_symbol. Bid ()-InpStopLoss*m_adjusted_point;
       double tp=m_symbol. Ask ()+InpTakeProfit*m_adjusted_point;
      OpenBuy(sl,tp);
       return ;
     }
   else if (First[ 0 ]<Second[ 2 ] && First[ 1 ]>Second[ 2 ]) // sell
     {
       //--- search in history
       if (SearchPositions( iTime (start_pos+ 3 ), iTime (start_pos)))
         return ;
       if (! RefreshRates ())
        {
         PrevBars= iTime ( 1 );
         return ;
        }
       double sl=m_symbol. Ask ()+InpStopLoss*m_adjusted_point;
       double tp=m_symbol. Bid ()-InpTakeProfit*m_adjusted_point;
      OpenSell(sl,tp);
       return ;
     }


Sizin durumunuzda (bir seferde bir değer almak), döngü şöyle görünecektir:

   int       signal= 0 ;                                 // "-1" -> Sell; "0" -> Not signal; "1" -> Buy
   double    MA1_curr=iMAGet(handle_iMA_1, 0 );           // the value of the 1st MA on i bar
   double    MA2_curr=iMAGet(handle_iMA_2, 0 );           // the value of the 1st MA on i bar
   for ( int i= 0 ;i< 100 ;i++)
     {
       double    MA1_prev=iMAGet(handle_iMA_1,i+ 1 );     // the value of the 1st MA on i+1 th bar
       double    MA2_prev=iMAGet(handle_iMA_2,i+ 1 );     // the value of the 1st MA on i+1 th bar
       //---
      signal= 0 ;                                       // "-1" -> Sell; "0" -> Not signal; "1" -> Buy
       if (MA1_prev<MA2_prev && MA1_curr>MA2_curr)
         signal= 1 ;
       else if (MA1_prev>MA2_prev && MA1_curr<MA2_curr)
         signal=- 1 ;
       //---
      MA1_curr=MA1_prev;
      MA2_curr=MA2_prev;
     }

MA1_curr - #i çubuğundaki MA1 göstergesinin değeri, MA1_prev - #i+1 çubuğundaki MA1 göstergesinin değeri
MA2_curr - #i çubuğundaki MA2 göstergesinin değeri, MA2_prev - #i+1 çubuğundaki MA2 göstergesinin değeri

Bir geçiş elde ettiğinizde (sinyal değişkeni "-1" veya "1"e eşittir) - i'nin değeri, geçişin meydana geldiği çubuğun sayısı olacaktır.

Bu, en basit kavşak arama algoritmasıdır, ancak en doğru olanı değildir.

 
Vladimir Karputov :

Evet, diziler aracılığıyla değil, aynı şekilde karar verdiniz ...


Teşekkürler, diğer Uzman Danışmanınız MA Cross örnek alındı

İçinde, geçtikten sonra üçüncü veya beşinci veya ... n çubuğuna bir giriş yapmak istiyorum

Vladimir Karputov :

Sizin durumunuzda (bir seferde bir değer almak), döngü şöyle görünecektir:

Bir kesişme bulunduğunda neden döngüden çıkış yok?

Bu koşullar döngünün dışına yerleştirilebilir mi?

 if (signal==- 1 )num_bar_b=i;
 if (signal== 1 )num_bar_s=i;

.

 

Tünaydın. Tekliflerin geçmişini içe aktarmak için Finam sunucusundan veya MFD.ru'dan geçmiş verileri hangi formatta indireceğimi söyleyin? Hiç yapamıyorum.. Sadece txt'den csv'ye kaydedebiliyorum ve bu kadar.

 
Eol :

Tünaydın. Tekliflerin geçmişini içe aktarmak için Finam sunucusundan veya MFD.ru'dan geçmiş verileri hangi formatta indireceğimi söyleyin? Hiç yapamıyorum.. Sadece txt'den csv'ye kaydedebiliyorum ve bu kadar.


MetaTrader 5'te herhangi bir şey indirmenize gerek yok :) - ticaret sunucusuna bağlanır bağlanmaz gerçek tik geçmişine anında erişebileceksiniz. CopyTicks'e bakın

 
Vladimir Karputov :

MetaTrader 5'te herhangi bir şey indirmenize gerek yok :) - ticaret sunucusuna bağlanır bağlanmaz gerçek tik geçmişine anında erişebileceksiniz. CopyTicks'e bakın


Sadece 10 yıl boyunca Rus hisse senetlerinde dakikalara ihtiyacım var .. Brokerim bana o kadarını vermiyor ve bir tane olması muhtemel değil.

 
5.0 Yapı 1755

problemin tanımı

İyi akşamlar, MQL5 ile ilgili bir sorum var, yardımcı olabilirseniz minnettar olurum.
Ve sonra henüz 5 için ders kitabı yok.
Soru.


#property Indicator_level1 30 - Bir parametre ayarlayın. Grafikteki göstergeyi yüklerken . Beni sıfırlıyor.
Programın kodunda ColorBuffer[] fonksiyonunu kullanarak satır bu parametrenin altına düşerse satırı farklı bir renge değiştiriyorum.

Ve sonra bir sorun doğdu. İndikatöre girip bu parametreyi başka bir parametre ile değiştirirsem, indikatörü yüklerken dahi seviye çizgisi gerektiği yerde yeniden çizilir ve indikatörün kendisi daha önce ayarlanmış olan parametreye göre her şeyi hesaplar tobizh #property gösterge_seviye1 30

Programın yürütülmesi sırasında değiştirebilmem için bu seviyeye nasıl erişmeliyim?

- Zaten parametreyi kontrol etmeye çalıştım. Ve tüm gösterge devresini yeniden hesaplayın.
Vseravno, ihtiyacım olduğu gibi yeniden çizmek istemiyor!

Yardım!
:)

sıralama

RSI.mqh

#özellik göstergesi_level1 30

#özellik göstergesi_level2 70


Calculaite açıklama kodunda. Sonunda, For Added'in tamamını çalıştırdığımızda, çizgi bu seviyenin altındaysa çizginin rengini değiştirmek için bir fonksiyon.
ExtColorsBuffer[i]=0;
if (ExtRSIBffer [i]> gösterge_düzey2&& gösterge_düzeyrenk!=NULL) {
ExtColorsBuffer[i]=1;
}
if (ExtRSIBffer [i]< gösterge_düzey1&& gösterge_düzeyrenk!=NULL) {
ExtColorsBuffer[i]=2;

Beklenen Sonuç


Aynısı resimdeki gibi bekleniyor, ancak göstergenin kullanımı sırasında ayarlara girip gösterge_seviye1 / 2 seviyesini değiştirdiğimde, gösterge yeniden çizilir, böylece çizgi seviyeyi geçerse renk değiştirir. Ve hala başlangıç seviyesindeyim :(

ek bilgi

...

Dosyalar:
rrgpusgf5g.png  69 kb
 
Ivan Stepanenko :
5.0 Yapı 1755

problemin tanımı

İyi akşamlar, MQL5 ile ilgili bir sorum var, yardımcı olabilirseniz minnettar olurum.
Ve sonra henüz 5 için ders kitabı yok.
Soru.


#property Indicator_level1 30 - Bir parametre ayarlayın. Grafikteki göstergeyi yüklerken . Beni sıfırlıyor.
Programın kodunda ColorBuffer[] fonksiyonunu kullanarak satır bu parametrenin altına düşerse satırı farklı bir renge değiştiriyorum.

Ve sonra bir sorun doğdu. İndikatöre girip bu parametreyi başka bir parametre ile değiştirirsem, indikatörü yüklerken dahi seviye çizgisi gerektiği yerde yeniden çizilir ve indikatörün kendisi daha önce ayarlanmış olan parametreye göre her şeyi hesaplar tobizh #property gösterge_seviye1 30

Programın yürütülmesi sırasında değiştirebilmem için bu seviyeye nasıl erişmeliyim?

- Zaten parametreyi kontrol etmeye çalıştım. Ve tüm gösterge devresini yeniden hesaplayın.
Vseravno, ihtiyacım olduğu gibi yeniden çizmek istemiyor!

Yardım!
:)

sıralama

RSI.mqh

#özellik göstergesi_level1 30

#özellik göstergesi_level2 70


Calculaite açıklama kodunda. Sonunda, For Added'in tamamını çalıştırdığımızda, çizgi bu seviyenin altındaysa çizginin rengini değiştirmek için bir fonksiyon.
ExtColorsBuffer[i]=0;
if (ExtRSIBffer [i]> gösterge_düzey2&& gösterge_düzeyrenk!=NULL) {
ExtColorsBuffer[i]=1;
}
if (ExtRSIBffer [i]< gösterge_düzey1&& gösterge_düzeyrenk!=NULL) {
ExtColorsBuffer[i]=2;

Beklenen Sonuç


Aynısı resimdeki gibi bekleniyor, ancak göstergenin kullanımı sırasında ayarlara girip gösterge_seviye1 / 2 seviyesini değiştirdiğimde, gösterge yeniden çizilir, böylece çizgi seviyeyi geçerse renk değiştirir. Ve hala başlangıç seviyesindeyim :(

ek bilgi

...

 IndicatorSetInteger ( INDICATOR_LEVELCOLOR , 0 , clrCrimson );       // Поменяет цвет самого первого по счёту уровня на цвет Crimson
IndicatorSetInteger ( INDICATOR_LEVELCOLOR , 1 , clrDeepSkyBlue );   // Поменяет цвет второго по счёту уровня на цвет DeepSkyBlue
 
Ivan Stepanenko :
5.0 Yapı 1755

problemin tanımı

İyi akşamlar, MQL5 ile ilgili bir sorum var, yardımcı olabilirseniz minnettar olurum.
Ve sonra henüz 5 için ders kitabı yok.
Soru.

Ve ayrı bir konudaki cevabı sevmeyen neydi?

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

Yardıma ihtiyacınız var MQL5 #özellik göstergesi_düzeyi

Alexey Viktorov , 2018.01.31 09:06

Igor, ikimiz de yanılıyoruz. Sorunu hemen anlamadım ...

#property yönergesine ek olarak, işlevi kullanarak gösterge seviyesini ayarlayabilirsiniz.

 IndicatorSetDouble ( INDICATOR_LEVELVALUE , 0 , 20 );

Buna göre, bu seviye göstergenin giriş parametrelerinde ayarlanmalıdır. Bu durumda verilen değere göre seviye çekilecektir ve bu değere göre de değişmesi gerekir.

Test seçeneği

 #property indicator_separate_window
#property indicator_buffers      1
#property indicator_type1        DRAW_LINE
#property indicator_plots        1
#property indicator_color1        clrGreenYellow
#property indicator_level1        0
#property indicator_levelcolor    clrPurple

input double level = 0.6 ;
double buf[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 , buf, INDICATOR_DATA );
   IndicatorSetDouble ( INDICATOR_LEVELVALUE , 0 , level);
//---
   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 = 0 , limit = prev_calculated == 0 ? 0 : rates_total- 1 ;
     for (i = limit; i < rates_total; i++)
     {
      buf[i] = i% 2 ;
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

Umarım giriş parametrelerinde belirtilen seviyeye göre rengi değiştirmek zor değildir.
 

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

Hatalar, hatalar, sorular

Aleksey Rodionov , 2018.02.06 16:31

Burada ilginç bir şey buldum:

 Print ("Баланс на счёте = ", AccountInfoDouble ( ACCOUNT_BALANCE ));
printf (" ACCOUNT_BALANCE =  %G", AccountInfoDouble ( ACCOUNT_BALANCE ));


pintf'de % G'yi kaldırırsanız, değer görüntülenmez, ancak Yazdır'da % G olmadan görüntülenir

Print'te bakiye değeri 10000.0'dır ve printf'de sadece 10000 tamsayıdır

Print ve printf arasındaki farkın ne olduğu ve en önemlisi neden % G olmadan görüntülenmediği sorusuyla daha çok ilgileniyorum. Kılavuzdan hiçbir şey anlamadım.


 

Selamlar meslektaşlarım! Böyle bir soru var, "forex money" forumundaki imzalara sinyal widget'ımı eklemeye çalışıyorum, ancak orada devre dışı bırakmışlar veya HTML engellenmiş, onu bir URL'ye dönüştürmenin herhangi bir yolu var mı? çünkü normalde takılırlar ve görüntülenirler.

İşte kod <iframe frameborder="0" width="220" height="140" src="https://www.mql5.com/ru/signals/widget/signal/328l?t=green&quot;>< / iframe>