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

 
Seric29 :
2 sonuç döndürmenin mümkün olduğu hangi operatör kullanılabilir? Bu koşulu bulmak için if deyimini kullanıyorum ama bu durumda birden fazla sonuç döndüremiyor, aynı koşulu 2 kez yazmam gerekiyor o yüzden böyle bir soruyla yazıyorum.  

Hangi koşulların kontrol edildiği tam olarak belli değil, ama belki geçiş size uyacaktır. Ve DOĞRU olduğunda, ihtiyacınız olan değerleri atayın.

 
İki değişkenin değerlerini değiştirmek için bir fonksiyon var mı?
 
pivomoe :
İki değişkenin değerlerini değiştirmek için bir fonksiyon var mı?

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

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

fxsaber , 2018.08.26 19:02

Forumun İngilizce kısmında gösterdi
 // Обмен значениями между двумя числовыми переменными
#define SWAP(A, B) { A += B; B = A - B; A -= B; }

 
Artyom Trishkin :

Teşekkür ederim. Bu tanımlara hakim olmalısınız.

 
Merhaba! Bars() işlevi bir göstergeden ve bir EA'dan çağrıldığında neden farklı değerlere sahiptir VE UYUMLULUK NASIL GERÇEKLEŞTİRİLİR?
 
Tango_X :
Merhaba! Bars() işlevi bir göstergeden ve bir EA'dan çağrıldığında neden farklı değerlere sahiptir VE UYUMLULUK NASIL GERÇEKLEŞTİRİLİR?

Danışmandan ve göstergeden gelen kodu gösterin.

 
Alexey Viktorov :

Danışmandan ve göstergeden gelen kodu gösterin.

Yalnızcabir işlev çağrısı Bars(_Symbol,_Period)

 
Tango_X :

Yalnızcabir işlev çağrısı Bars(_Symbol,_Period)

Sonucun bir çıktısını talep etmem gerekiyor mu?

benim bir farkım yok Bu seçenek, hakkında çok az şey bildiğim bir hikayenin mevcudiyeti nedeniyle test cihazında hariç tutulmasa da, bir zamanlar okuduklarıma dair sadece belirsiz anılar. Sonuçta, bu mevcut toplam çubuk sayısıdır. Ama zaman zaman sorarsanız, hiçbir fark olamaz.

 
Alexey Viktorov :
if ifadesi herhangi bir değer döndürmez.

Ayrı bir fonksiyonda belirli değişkenlere değer atamak için iki seçenek vardır:

1. Değişkenler programın tüm bölümlerinde görünür olmalıdır. Yani, global değişkenler düzeyinde (kodun başında) bildirilirler.

2. Yerel olarak bildirilen değişkenleri, başvuru yoluyla özel bir işleve iletin. Yani, değişken adından önce &

Bunun anlamı, eğer koşul doğruysa, örneğin 2 özdeş eylem yapın

         if
        (Bar_Op[qt+ 2 ]>=Bar_Lo[qt+ 1 ]&&Bar_Cl[qt+ 2 ]<=Bar_Hi[qt+ 1 ]&& 
        Bar_Cl[qt+ 2 ]>=Bar_Lo[qt+ 1 ]&&Bar_Op[qt+ 2 ]<=Bar_Hi[qt+ 1 ]&&
        Bar_Op[qt+ 3 ]>=Bar_Lo[qt+ 1 ]&&Bar_Cl[qt+ 3 ]<=Bar_Hi[qt+ 1 ]&&
        Bar_Cl[qt+ 3 ]>=Bar_Lo[qt+ 1 ]&&Bar_Op[qt+ 3 ]<=Bar_Hi[qt+ 1 ]&&
        Bar_Op[qt+ 4 ]>=Bar_Lo[qt+ 1 ]&&Bar_Cl[qt+ 4 ]<=Bar_Hi[qt+ 1 ]&&
        Bar_Cl[qt+ 4 ]>=Bar_Lo[qt+ 1 ]&&Bar_Op[qt+ 4 ]<=Bar_Hi[qt+ 1 ])
         {
           int iHgCL= iHighest ( _Symbol , PERIOD_D1 , MODE_CLOSE , 4 ,qt+ 1 ); int iHgOP= iHighest ( _Symbol , PERIOD_D1 , MODE_OPEN , 4 ,qt+ 1 );
         Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP]; //провести нижний уровень
         int iLwCL= iLowest ( _Symbol , PERIOD_D1 , MODE_CLOSE , 3 ,qt+ 1 ); int iLwOP= iLowest ( _Symbol , PERIOD_D1 , MODE_OPEN , 3 ,qt+ 1 );
         Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP]; //провести верхний уровень я перепутал записи местами и условие перевёрнуто задом на перёд но для примера вопроса пойдёт

         string Line_TR= "Ln_TRUr" + DoubleToString (qt, 0 );
         vs_Line_TR( Line_TR, iTime ( _Symbol , PERIOD_D1 ,qt+ 2 ),  Price_UrNij, iTime ( _Symbol , PERIOD_D1 ,qt), Price_UrNij, clrGreen , DRAW_LINE , 2 , false , false );
}

Değişkenleri bildirdim ve Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP]; yoksa bu eylem Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] mı? Bar_Cl[iLwCL]:Bar_Op[iLwOP]; 2 özdeş eylemi gerçekleştirecek ve duruma göre hem üst hem de alt seviyeleri yürütecek şekilde nasıl yapılır. Biri bana bunu nasıl yazacağımı söyleyebilir mi?

 
Konstantin Nikitin :

Hangi koşulların kontrol edildiği tam olarak belli değil, ama belki geçiş size uyacaktır. Ve DOĞRU olduğunda, ihtiyacınız olan değerleri atayın.

  if
        (Bar_Op[qt+ 2 ]>=Bar_Lo[qt+ 1 ]&&Bar_Cl[qt+ 2 ]<=Bar_Hi[qt+ 1 ]&& 
        Bar_Cl[qt+ 2 ]>=Bar_Lo[qt+ 1 ]&&Bar_Op[qt+ 2 ]<=Bar_Hi[qt+ 1 ]&&
        Bar_Op[qt+ 3 ]>=Bar_Lo[qt+ 1 ]&&Bar_Cl[qt+ 3 ]<=Bar_Hi[qt+ 1 ]&&
        Bar_Cl[qt+ 3 ]>=Bar_Lo[qt+ 1 ]&&Bar_Op[qt+ 3 ]<=Bar_Hi[qt+ 1 ]&&
        Bar_Op[qt+ 4 ]>=Bar_Lo[qt+ 1 ]&&Bar_Cl[qt+ 4 ]<=Bar_Hi[qt+ 1 ]&&
        Bar_Cl[qt+ 4 ]>=Bar_Lo[qt+ 1 ]&&Bar_Op[qt+ 4 ]<=Bar_Hi[qt+ 1 ])
         {
           int iHgCL= iHighest ( _Symbol , PERIOD_D1 , MODE_CLOSE , 4 ,qt+ 1 ); int iHgOP= iHighest ( _Symbol , PERIOD_D1 , MODE_OPEN , 4 ,qt+ 1 );
         Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP]; //провести нижний уровень
         int iLwCL= iLowest ( _Symbol , PERIOD_D1 , MODE_CLOSE , 3 ,qt+ 1 ); int iLwOP= iLowest ( _Symbol , PERIOD_D1 , MODE_OPEN , 3 ,qt+ 1 );
         Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP]; //провести верхний уровень я перепутал записи местами и условие перевёрнуто задом на перёд но для примера вопроса пойдёт

         string Line_TR= "Ln_TRUr" + DoubleToString (qt, 0 );
         vs_Line_TR( Line_TR, iTime ( _Symbol , PERIOD_D1 ,qt+ 2 ),  Price_UrNij, iTime ( _Symbol , PERIOD_D1 ,qt), Price_UrNij, clrGreen , DRAW_LINE , 2 , false , false );

Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] çalıştırmanız mı gerekiyor? Bar_Cl[iHgCL]:Bar_Op[iHgOP]; ve Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];.