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

 
sile :

Merhaba.

Lütfen yardım et.

Gösterge çizgileri ilk çubukta kesiştiğinde sinyal verir.

Pozisyon doğru açılır, birinci çubukta ma_shiftT = 0 ve ma_shiftD=0 ise, ma_shiftT = -1 ve ma_shiftD= 1 ise pozisyon üçüncü veya dördüncü çubukta açılır.

İlk barı geçerken pozisyon açmak için ne yapmalıyım?


input int       ma_shiftT=- 1 ;
input int       ma_shiftD= 1 ;
int iTEMAHandle;   // хэндл индикатора iTEMA
int iDEMAHandle;     // хэндл индикатора
double ma1Val[]; // динамические массивы для хранения численных значений  для каждого бара
double maVal[];   // 

//+------------------------------------------------------------------+
int OnInit ()
  {
//---
m_symbol.Name( Symbol ());  
//--- Получить хэндл индикатора iTEMA
iTEMAHandle= iTEMA ( _Symbol , PERIOD_CURRENT , 30 ,ma_shiftT, PRICE_CLOSE );;
//---Получить хэндл индикатора
iDEMAHandle= iDEMA ( _Symbol , PERIOD_CURRENT , 30 ,ma_shiftD, PRICE_CLOSE );;
  
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- освобождаем хэндлы индикаторов
   IndicatorRelease (iTEMAHandle);

   IndicatorRelease (iDEMAHandle);
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
  
   //--- массив значений индикатора
   ArraySetAsSeries (ma1Val, true );

//--- массив значений индикатора
   ArraySetAsSeries (maVal, true );
  
   if ( CopyRates ( _Symbol , _Period , 0 , 5 ,mrate)< 0 )
     {
       Alert ( "Ошибка копирования исторических данных - ошибка:" , GetLastError (), "!!" );
       return ;
     }
//====
   if ( CopyBuffer (iTEMAHandle, 0 , 0 , 5 ,ma1Val)< 0 )
     {
       Alert ( "Ошибка копирования буферов индикатора TEMA - номер ошибки:" , GetLastError (), "!!" );
       return ;
     }
   if ( CopyBuffer (iDEMAHandle, 0 , 0 , 5 ,maVal)< 0 )
     {
       Alert ( "Ошибка копирования буферов индикатора DEMA - номер ошибки:" , GetLastError ());
       return ;
     }

   bool Sell_Condition_3=(maVal[ 2 ]<=ma1Val[ 2 ]);
   bool Sell_Condition_4=(maVal[ 1 ]>ma1Val[ 1 ]);
  
   if (Sell_Condition_3 && Sell_Condition_4)
   {
   // открываю позицию SELL
   }
  }

Birincisi: Yalnızca bir tane kullanılıyorsa neden 5 gösterge değerini kopyalayasınız?

İkincisi: Gösterge çizgilerinin konumu kesişimlerini göstermez.

İlkinden başlayarak 2 değeri kopyalamanız yeterlidir.

CopyBuffer (iTEMAHandle, 0 , 1 , 2 , ma1Val)

CopyBuffer (iDEMAHandle, 0 , 1 , 2 , maVal)

Kesişme gerçeğini ancak ikinci çubuktaki ve birinci çubuktaki çizgilerin konumunu karşılaştırarak belirleyebilirsiniz. BU SORUN İÇİN.

Dizi indekslemenin yönünü hesaba katmak gerekir. Sonra ortaya çıkacak

if (maVal[ 0 ] <= ma1Val[ 0 ] && maVal[ 1 ] > ma1Val[ 1 ])

Koşul yerine getirilirse, kesişme gerçeği açıktır. Kavşağın yönü size kalmış.


not; Ah, peki, evet... Kavşak olgusunun tanımına dikkatsizce baktım. Her durumda, ekstra değerlere gerek yoktur. Kafanızı karıştırmış olmalılar.

 
sile :

Merhaba.

Lütfen yardım et.

Gösterge çizgileri ilk çubukta kesiştiğinde sinyal verir.

Pozisyon doğru açılır, birinci çubukta ma_shiftT = 0 ve ma_shiftD=0 ise, ma_shiftT = -1 ve ma_shiftD= 1 ise pozisyon üçüncü veya dördüncü çubukta açılır.

İlk barı geçerken pozisyon açmak için ne yapmalıyım?


input int       ma_shiftT=- 1 ;
input int       ma_shiftD= 1 ;
int iTEMAHandle;   // хэндл индикатора iTEMA
int iDEMAHandle;     // хэндл индикатора
double ma1Val[]; // динамические массивы для хранения численных значений  для каждого бара
double maVal[];   // 

//+------------------------------------------------------------------+
int OnInit ()
  {
//---
m_symbol.Name( Symbol ());  
//--- Получить хэндл индикатора iTEMA
iTEMAHandle= iTEMA ( _Symbol , PERIOD_CURRENT , 30 ,ma_shiftT, PRICE_CLOSE );;
//---Получить хэндл индикатора
iDEMAHandle= iDEMA ( _Symbol , PERIOD_CURRENT , 30 ,ma_shiftD, PRICE_CLOSE );;
  
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- освобождаем хэндлы индикаторов
   IndicatorRelease (iTEMAHandle);

   IndicatorRelease (iDEMAHandle);
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
  
   //--- массив значений индикатора
   ArraySetAsSeries (ma1Val, true );

//--- массив значений индикатора
   ArraySetAsSeries (maVal, true );
  
   if ( CopyRates ( _Symbol , _Period , 0 , 5 ,mrate)< 0 )
     {
       Alert ( "Ошибка копирования исторических данных - ошибка:" , GetLastError (), "!!" );
       return ;
     }
//====
   if ( CopyBuffer (iTEMAHandle, 0 , 0 , 5 ,ma1Val)< 0 )
     {
       Alert ( "Ошибка копирования буферов индикатора TEMA - номер ошибки:" , GetLastError (), "!!" );
       return ;
     }
   if ( CopyBuffer (iDEMAHandle, 0 , 0 , 5 ,maVal)< 0 )
     {
       Alert ( "Ошибка копирования буферов индикатора DEMA - номер ошибки:" , GetLastError ());
       return ;
     }

   bool Sell_Condition_3=(maVal[ 2 ]<=ma1Val[ 2 ]);
   bool Sell_Condition_4=(maVal[ 1 ]>ma1Val[ 1 ]);
  
   if (Sell_Condition_3 && Sell_Condition_4)
   {
   // открываю позицию SELL
   }
  }

Size yardımcı olması için bir örnek ekledim - bu örnekte birden fazla değeri değil, birer birer kopyalıyorum. Adım adım benim ve örneğinizin ne döndürdüğünü karşılaştırarak, örneğinizdeki dizilerde indekslemenin nasıl gerçekleştiğini görmelisiniz (yani, 1. çubuktaki öğenin dizide nerede ve çubuk 2'den nerede saklandığını anlamalısınız).

Örneğimle nasıl çalışılır:

özellikle örnek ayarlar için, örnek adla eşleşen bir ada sahip bir grafik şablonu oluşturdum ve kaydettim - "İki iMA Shift eksi shift plus.tpl". Bu şablonu terminalinizin \MQL5\Profiles\Templates klasörüne kaydedin. Şimdi, test cihazını başlatırken, test cihazı bu şablonu alacak ve test cihazında çok güzel bir resim olacak:

İsimsiz

Bir kavşak algılandığında, test cihazı direktifte duracaktır.

//---
   if (ma_one_1<ma_two_1 && ma_one_2>ma_two_2)
     {
       string text= "ma_one_1 = " + DoubleToString (ma_one_1, Digits ()+ 1 )+ "\n" +
                   "ma_two_1 = " + DoubleToString (ma_two_1, Digits ()+ 1 )+ "\n" +
                   "ma_one_2 = " + DoubleToString (ma_one_2, Digits ()+ 1 )+ "\n" +
                   "ma_two_2 = " + DoubleToString (ma_two_2, Digits ()+ 1 );
       Comment (text);
       DebugBreak ();
     }

ve test cihazındaki "Artı işareti"ni kullanarak çubuklar arasında gezinebilecek ve 1. ve 2. çubuktaki göstergelerin değerlerini görebileceksiniz (önce "Veri Penceresi" penceresini açın).

 

Merhaba!

FOREX'te yayılma hakkında bir sorum var.

Yayılım genişlediğinde, ASK yükselir mi, BID düşer mi, yoksa ikisi de farklı yönlerde simetrik olarak mı hareket eder?

 
Sergey Zhukov :

Merhaba!

FOREX'te yayılma hakkında bir sorum var.

Yayılım genişlediğinde, ASK yükselir mi, BID düşer mi, yoksa ikisi de farklı yönlerde simetrik olarak mı hareket eder?

Her şey olabilir. Değişmeyen bir şey var - spread, Satış fiyatı ile Alış fiyatı arasındaki farktır.
 
Vladimir Karputov :
Her şey olabilir. Değişmeyen bir şey var - spread, Satış fiyatı ile Alış fiyatı arasındaki farktır.
Yayılma daralmaya başladığında aynı anda birbirlerine doğru hareket edebileceklerini doğru anladım mı?
 
Sergey Zhukov :
Yayılma daralmaya başladığında aynı anda birbirlerine doğru hareket edebileceklerini doğru anladım mı?

" Aynı kalan bir şey var - spread, Satış fiyatı ile Alış fiyatı arasındaki farktır."

Başka kanun yok.

 
Vladimir Karputov :

" Aynı kalan bir şey var - spread, Satış fiyatı ile Alış fiyatı arasındaki farktır."

Başka kanun yok.

Diyelim ki, bir alışım var ve spread genişlemeye başladıysa, Ask yükseldi ve Bid düştüyse , pozisyonu kapatmalı mıyım yoksa Ask düşene kadar beklemeli miyim?
 
Sergey Zhukov :
Diyelim ki, bir alışım var ve spread genişlemeye başladıysa, Ask yükseldi ve Bid düştüyse , pozisyonu kapatmalı mıyım yoksa Ask düşene kadar beklemeli miyim?

Alış (ALMA pozisyonu) Alış fiyatından kapatılır.

Başka bir şey de muhtemelen şu soruyu soracaksınız: "Ultra yüksek oynaklık dönemlerinde ne yapmalı?". Cevap veriyorum - herkes kendi yolunda karar verir.

 
Vladimir Karputov :

Alış (ALMA pozisyonu) Alış fiyatından kapatılır.

Başka bir şey de muhtemelen şu soruyu soracaksınız: "Ultra yüksek oynaklık dönemlerinde ne yapmalı?". Cevap veriyorum - herkes kendi yolunda karar verir.

Evet, aynen, ultra yüksek volatilite demek istedim, forumda arama yapmaya çalışacağım, teşekkürler.
 
Vladimir Karputov :

Alış (ALMA pozisyonu) Alış fiyatından kapatılır.

Başka bir şey de muhtemelen şu soruyu soracaksınız: "Ultra yüksek oynaklık dönemlerinde ne yapmalı?". Cevap veriyorum - herkes kendi yolunda karar verir.

Evet, gerçekten... Böyle bir komisyoncuyu nerede bulabilirim... Bağlantıyı paylaşır mısınız?