Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 886

 
evillive :

Neden fazladan bir değişken olsun ki? Doğrudan kontrol iyi çalışıyor:

Bir fonksiyonun değerini programda farklı noktalardan görmeniz gerektiğinde, onu birkaç kez çağırmamak için bir değişken başlatmanız gerekir.
Yeni başlayanlar için daha anlaşılır kılmak için değişken. Şimdi neden belli?
 
Vinin :
Daha sık bakın. Daha az soru olacak. Bilgi daha iyi olacak.
aldırmamak.
 

Güzel gün. Günün sonunda pozisyonu bir şekilde kapatmanız gerekiyor (tamamen uzman; günlük barlar). Modelleme, açıklıklar veya keneler yoluyla gerçekleşir. Onlar. ya açılışlarla yetiniyoruz ya da başımızın üstünde takla atarak önceki günleri 15 dakikalık bir zaman diliminde analiz etmeye ve şimdiki zamanın başlangıcını ve sonunu yakalamaya çalışıyoruz. Bu soruna herhangi bir çözüm var mı? Birkaç sanal varsayımsal seçenek görüyorum:

1) Herhangi bir fiyatta ve herhangi bir zamanda bir pozisyonun Hacker-hile kapanışı . Dürüst olmamakla birlikte, pozisyonu doğru fiyattan geriye dönük olarak kapatmak, sapkınlıklar olmadan mümkün olacaktır.

2) Bir çubuk içinde açılıp kapanmalara dayalı modelleme. Onlar. önce tik-açma, sonra tik-kapama.

3) Belirli bir saatte (yani gün sonunda) otomatik olarak kapanan bir sipariş vermek.

Yardımınız için minnettar olurum. Teşekkür ederim.

 

Böcek?

 int OnInit ()
  {
   int subwindow = ChartWindowFind ( ChartID (),WindowExpertName());
   Print ( "Подокно запрашиваемого индикатора: " ,subwindow);
   
   return ( INIT_SUCCEEDED );
  }

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[])
  {
   return (rates_total);
  }


2015.04.13 20:51:10.710 indi AUDJPY,H1: İstenen gösterge alt penceresi: -1


 
tuner :

Böcek?


2015.04.13 20:51:10.710 indi AUDJPY,H1: İstenen gösterge alt penceresi: -1


Hayır, böcek değil.

Geri dönüş değeri

Başarılıysa alt pencere numarası. Sıfır, ana grafik penceresi anlamına gelir. Başarısızlık durumunda -1 döndürür .

 
AlexeyVik :

Hayır, böcek değil.


Ve fonksiyon, göstergenin çalıştığı mevcut grafiğin kimliği ve mevcut grafikte çalışan mevcut göstergenin adı iletilirse başarısızlık nedir?
 
tuner :
Ve fonksiyon, göstergenin çalıştığı mevcut grafiğin kimliği ve mevcut grafikte çalışan mevcut göstergenin adı iletilirse başarısızlık nedir?

Sizi doğru anlarsam ve eklediğiniz gösterge test kodunun çalıştığı alt pencerenin numarasına ihtiyacınız varsa, o zaman, işlevin açıklamasına göre ikinci varyantını uygulamak daha iyidir.

Test kodu (sizinkine birkaç satır eklendi):

 #define LINE     __LINE__ , ": "
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   int subwindow= ChartWindowFind ( ChartID (),WindowExpertName());
   Print (LINE, "Подокно запрашиваемого индикатора: " ,subwindow);
   
   int subwindow1= ChartWindowFind ();
   Print (LINE, "Подокно запрашиваемого индикатора: " ,subwindow1);

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
  {
   return (rates_total);
  }
//+------------------------------------------------------------------+

ChartWindowFind() işlevine yönelik yardımın bu konuyla ilgili iyi bir örneği vardır (buradaki yorumlar dahil olmak üzere):

 //+------------------------------------------------------------------+
//| Сообщает номер окна графика с указанным индикатором              |
//+------------------------------------------------------------------+
int GetIndicatorSubWindowNumber( long chartID= 0 , string short_name= "" )
  {
   int window=- 1 ;
//--- 
   if (( ENUM_PROGRAM_TYPE ) MQLInfoInteger ( MQL_PROGRAM_TYPE )== PROGRAM_INDICATOR )
     {
       //--- функция вызвана из индикатора,имя не требуется
      window= ChartWindowFind ();
     }
   else
     {
       //--- функция вызвана из эксперта или скрипта
      window= ChartWindowFind ( 0 ,short_name);
       if (window==- 1 ) Print ( __FUNCTION__ + "(): Error = " , GetLastError ());
     }
//---
   return (window);
  }
 
DiPach :

Sizi doğru anladıysam ve eklediğiniz gösterge test kodunun çalıştığı alt pencerenin numarasına ihtiyacınız varsa, o zaman işlevin açıklamasına göre ikinci varyantını uygulamak daha iyidir.

Test kodu (sizinkine birkaç satır eklendi):

ChartWindowFind() işlevine yönelik yardımın bu konuyla ilgili iyi bir örneği vardır (buradaki yorumlar dahil olmak üzere):

İpucu için teşekkürler, ancak biraz farklı bir görevim var, bu yüzden işlevin 2. sürümünü kullanmak mantıklı değil: Tüm açık terminal çizelgelerinde belirtilen ada sahip göstergelerin sayısını saymak istiyorum. Sorun zaten çözüldü, ancak ilk seçeneğin ChartWindowFind() işlevini kullanarak ortaya çıkan kodu basitleştirmek istedim, ancak bu işlevin sadece diğer pencerelerle değil, mevcut olanla bile çalışmadığı ortaya çıktı, bu yüzden soruyorum bu bir bug mı, servis masasına yazmak mantıklı mı yoksa bir şeyi hesaba katmadım ve her şey istendiği gibi mi çalışıyor?
 

İyi akşamlar!

Bunu çözemiyorum: başlat işlevinde derleyici "dönüş" gerektiriyor - işlev bir değer döndürmeli".

Bu durumda hangi değeri döndürmeliyim?:

int başlangıç()
{
if (Siparişler!=0||Sipariş > 0)
{
CritCloseBuy();
CritCloseSell();
}
başka
{
CritOpen();
}
dönüş;
}

Belki bu OrderClose() nedeniyle açık bir pozisyon görmüyor?

 
rapid_minus :

İyi akşamlar!

Bunu çözemiyorum: başlat işlevinde derleyici "dönüş" gerektiriyor - işlev bir değer döndürmeli".

Bu durumda hangi değeri döndürmeliyim?:

int başlangıç()

Belki bu nedenle OrderClose() açık bir pozisyon görmüyor?

void start() yapın ve hata olmayacak