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

 
Vitalii Ananev :
Seviye , gösterge ayarlarında manuel olarak ayarlanmalıdır. Varsayılan olarak seviye 50 yoktur. Yukarıdaki resimde gösterdim.

Bunu yaptım ama gözükmüyor. galiba yine anlamadım

 extern double RSI          = 10 ;
extern double RSI_uroven_1 = 70 ;
extern double RSI_uroven_2 = 30 ;
extern double RSI_uroven_3 = 50 ;
extern double Lots         = 0.01 ;
extern int     Slip         = 30 ;
extern int     Magic        = 125 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   int kolpos= 0 ;
   double rsi= 0 ,uroven70= 70 ,uroven30= 30 ,uroven50= 50 ;
   rsi= iRSI ( Symbol (), 0 , 10 , PRICE_CLOSE , 1 );
   for ( int pos= 0 ; pos< OrdersTotal (); pos++) 
     {
       OrderSelect (pos, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
         kolpos++;
     }
   if (kolpos== 0 )
     {
       if (rsi>uroven70) 
         OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 30 , 0 , 0 , "" ,Magic, 0 , clrGreen );
       if (rsi<uroven30) 
         OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 30 , 0 , 0 , "" ,Magic, 0 , clrRed );
     }
 }
 
Vitalii Ananev :

RSI bir osilatördür ve bir eğilim göstermez.

Örneğin MA gibi başka bir eğilim göstergesi ekleyin

Ne hakkında konuştuğunu anlıyorum, ama hareketli bir ortalama olmadan hala kafam karıştı.

Benim için asıl şey, mantıklı ve teknik olarak doğru bir algoritma oluşturmaktır.

Sadece açacağım: 30'un altında - Sat, 70'in üzerinde - Satın al.

 
edutak :

Ne hakkında konuştuğunu anlıyorum, ama hareketli bir ortalama olmadan hala kafam karıştı.

Benim için asıl şey, mantıklı ve teknik olarak doğru bir algoritma oluşturmaktır.

Sadece açacağım: 30'un altında - Sat, 70'in üzerinde - Satın al.

O zaman, rsi 50'yi aşağıdan yukarıya alıma, yukarıdan aşağıya satışa geçerse daha iyisini yapın.

 void OnTick ()
  {
   int kolpos= 0 ;
   double rsi= 0 ,uroven70= 70 ,uroven30= 30 ,uroven50= 50 ;
   rsi= iRSI ( Symbol (), 0 , 10 , PRICE_CLOSE , 1 );
   rsi2= iRSI ( Symbol (), 0 , 10 , PRICE_CLOSE , 2 );
   for ( int pos= 0 ; pos< OrdersTotal (); pos++) 
     {
       OrderSelect (pos, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
         kolpos++;
     }
   if (kolpos== 0 )
     {
       if (rsi>=uroven50 && rsi2<uroven50) 
         OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 30 , 0 , 0 , "" ,Magic, 0 , clrGreen );
       if (rsi<=uroven50 && rsi2>uroven50) 
         OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 30 , 0 , 0 , "" ,Magic, 0 , clrRed );
     }
 }
 

Öyle de oldu. Doğru şekilde?

 extern double RSI          = 10 ;
extern double RSI_uroven_1 = 70 ;
extern double RSI_uroven_2 = 30 ;
extern double RSI_uroven_3 = 50 ;
extern double Lots         = 0.01 ;
extern int     Slip         = 30 ;
extern int     Magic        = 125 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   int kolpos= 0 ;
   double rsi= 0 ,uroven70=RSI_uroven_1,uroven30=RSI_uroven_2,uroven50=RSI_uroven_3;
   rsi= iRSI ( Symbol (), 0 , 10 , PRICE_CLOSE , 1 );
   for ( int pos= 0 ; pos< OrdersTotal (); pos++) 
     {
       OrderSelect (pos, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
         kolpos++;
     }
   if (kolpos== 0 )
     {
       if (rsi>RSI_uroven_1) 
         OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 30 , 0 , 0 , "" ,Magic, 0 , clrGreen );
       if (rsi<RSI_uroven_2) 
         OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 30 , 0 , 0 , "" ,Magic, 0 , clrRed );
     }
 }
 
Vitalii Ananev :

O zaman, rsi 50'yi aşağıdan yukarıya alıma, yukarıdan aşağıya satışa geçerse daha iyisini yapın.

Hayır, başka bir fikrim var.
 
edutak :

Öyle de oldu. Doğru şekilde?

Mantık hatası yok.

...

uroven70=RSI_uroven_1,uroven30=RSI_uroven_2,uroven50=RSI_uroven_3;

Bu giriş daha sonra gereksiz olacaktır.

 
Vitalii Ananev :

Mantık hatası yok.

...

Bu giriş daha sonra gereksiz olacaktır.

Teşekkürler, değiştirip yapmaya devam edeceğim.
 
edutak :
Teşekkürler, değiştirip yapmaya devam edeceğim.
Benim için zevkti. İyi şanlar.
 
Bekle, ama o zaman harici ayarlar nasıl çıkar?
 
edutak :
Bekle, ama o zaman harici ayarlar nasıl çıkar?

Harici ayarlarda ne çıkarmalı?

Optimizasyon olasılığı ve kullanıcı tarafından değiştirilmesi için seviye ayarlarını kastediyorsanız, zaten bunlara sahipsiniz.

 extern double RSI_uroven_1 = 70 ;
extern double RSI_uroven_2 = 30 ;
extern double RSI_uroven_3 = 50 ;