MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 544

 
if(TralProcent!=0)
 {
NewProfProc=Kar(-1)/(HesapBalance()/100);

if(NewProfProc>0 && (ProfitProcent==0 || ProfitProcent<YeniProfProc))
  {ProfitProcent=NormalizeDouble(NewProfProc, 2);}
if(ProfitProcent>0 && ProfitProcent>(TralProcent+TralStartProcent))
  {TrallingProcent=ProfitProcent-TralProcent;}
//+------------------------------------------- --------------------+
if(NewProfProc>0 && TrallingProcent!=0 && NewProfProc<=TrallingProcent)
{YaklaşanS();
 daha yakınB();
  KarProcent=0;
   TrallingProcent=0;}

 ------ robot % dengesinde takip kullanıyor, lütfen bana adım değişikliklerini buraya nasıl ekleyeceğimi söyleyin. Doğru anladıysam Tralingprocent için gerekli. Örneğin, adım = %2 ise, o zaman takip eden procent en az %2 artar.
 
khorosh :

Artyom Trishkin :

Nesneler - herhangi bir terminal penceresinde ve alt pencerelerinde görüntülenebilirler.

-------------------------------------------------- -------------------------------------------------- ----------------------------------

Bu şekilde denedim ama bir şey çalışmıyor.

Belki pencerelerin numaralandırılmasıyla ilgili bir şey. Grafikte ayrı bir pencere varsa, sayısı ==1?

wndNum pencere numarası nerede gösterilecek

 int wndNum= 1 ;

int OnInit ()
 {
 string short_name= MQLInfoString ( MQL_PROGRAM_NAME );
 short_name+= ": MyIndicator" ;
 IndicatorSetString ( INDICATOR_SHORTNAME ,short_name);
 wndNum = ChartWindowFind ( 0 ,short_name);
 //---
   return ( INIT_SUCCEEDED );
 }

// Функция создания объекта
void SetLabel( string nm, string text, long xd, long yd, int fs, string font, int cr, int an, color cl, string tooltip, bool sel) {
 if ( ObjectFind ( 0 ,nm)< 0 ) {
     ObjectCreate ( 0 ,nm, OBJ_LABEL , wndNum , 0 , 0 );
     ObjectSetInteger ( 0 ,nm, OBJPROP_CORNER ,cr);
     ObjectSetInteger ( 0 ,nm, OBJPROP_ANCHOR ,an);
     ObjectSetString ( 0 ,nm, OBJPROP_FONT ,font);
     ObjectSetInteger ( 0 ,nm, OBJPROP_FONTSIZE ,fs);
     ObjectSetInteger ( 0 ,nm, OBJPROP_BACK , false );
     ObjectSetInteger ( 0 ,nm, OBJPROP_HIDDEN , false );
     ObjectSetInteger ( 0 ,nm, OBJPROP_SELECTABLE ,sel);
     ObjectSetInteger ( 0 ,nm, OBJPROP_SELECTED ,sel);
     ObjectSetString ( 0 ,nm, OBJPROP_TOOLTIP ,tooltip);
  }
     ObjectSetInteger ( 0 ,nm, OBJPROP_YDISTANCE ,yd);
     ObjectSetInteger ( 0 ,nm, OBJPROP_XDISTANCE ,xd);
     ObjectSetString ( 0 ,nm, OBJPROP_TEXT ,text);
     ObjectSetInteger ( 0 ,nm, OBJPROP_COLOR ,cl); 
 }
PS khorosh , kişisel olarak cevap veremem - sohbet çalışmıyor!
 
Vitaly Muzichenko :

wndNum pencere numarası nerede gösterilecek

PS khorosh , kişisel olarak cevap veremem - sohbet çalışmıyor!

Teşekkürler Vitaly! Ve eğrinin ucuna ayrı bir pencerede bulunan bir gösterge nasıl eklenir? Sıfır çubuğundaki Zaman[0] koordinatlarını ve eğri arabelleğinin değerini koordinat olarak ayarlamaya çalıştım ama işe yaramadı.

 
khorosh :

Teşekkürler Vitaly! Ve eğrinin ucuna ayrı bir pencerede bulunan bir gösterge nasıl eklenir? Sıfır çubuğundaki Zaman[0] koordinatlarını ve eğri arabelleğinin değerini koordinat olarak ayarlamaya çalıştım ama işe yaramadı.

Neyse o soruyu yanıtladı. Sıklıkla ortaya çıkan tek nüans, wndNum değerinin kendisidir. wndNum değeri bir sabit değil. Sürekli izlenmesi gerekir. Sonuçta, kullanıcı mevcut alt pencereden önce gelen gösterge alt penceresini silebilir. Ayrıca, OnInit() içinde göstergenin kendisini aramayın. Bu tür kodlar OnCalculate() 'e taşınmalıdır. Her durumda, alt pencere indeksinin doğruluğunu sürekli kontrol etmeniz gerekir.

 
Ihor Herasko :

Böylece bu soruyu yanıtladı. Sıklıkla ortaya çıkan tek nüans, wndNum değerinin kendisidir. wndNum değeri bir sabit değil. Sürekli izlenmesi gerekir. Sonuçta, kullanıcı mevcut alt pencereden önce gelen gösterge alt penceresini silebilir. Ayrıca, OnInit() içinde göstergenin kendisini aramayın. Bu tür kodlar OnCalculate()'e taşınmalıdır. Her durumda, alt pencere indeksinin doğruluğunu sürekli kontrol etmeniz gerekir.

Bir nesnenin koordinatlarının başlangıçta piksel (statik bir nesne) olarak varsayıldığı bir örneği vardır. Ve gösterge eğrisine bağlanmam gerekiyor. Bu nedenle, önce bu koordinatları hesaplamanız gerekir. Göstermiyor. Böyle denedim ama bir şey çalışmıyor (LevLabelSpread değişkeninde ilk çubukta eğri arabelleğinin değeri var):

....
int X= 0 ,Y= 0 ;
   wndNum= ChartWindowFind ( 0 ,Shortname);  
   ChartTimePriceToXY ( 0 ,wndNum, Time [ 1 ],LevLabelSpread,X,Y); Print ( "X=" ,X, " Y=" ,Y);    
   if ( ObjectFind ( "_Spread" )< 0 ) 
     {
       ObjectCreate ( 0 , "_Spread" , OBJ_TEXT , wndNum, 0 , 0 );
       ObjectSetText ( "_Spread" , "                Spread" , 10 , "Arial" , clrYellow );
     }
   else
     {
       ObjectSetInteger ( 0 , "_Spread" , OBJPROP_YDISTANCE ,Y);
       ObjectSetInteger ( 0 , "_Spread" , OBJPROP_XDISTANCE ,X);
      ObjectSetString (0,"_Spread",OBJPROP_TEXT,"                Spread");
     } 

.... 
 
khorosh :

Bir nesnenin koordinatlarının başlangıçta piksel (statik bir nesne) olarak varsayıldığı bir örneği vardır. Ve gösterge eğrisine bağlanmam gerekiyor. Bu nedenle, önce bu koordinatları hesaplamanız gerekir. Göstermiyor. Böyle denedim ama bir şey çalışmıyor (LevLabelSpread değişkeninde ilk çubukta eğri arabelleğinin değeri var):

Neden TEXT türündeki bir nesne için fiyatı piksel cinsinden hesaplamalısınız? Sonuçta, bar zamanı ve fiyatına göre konumlanıyor. Ben böyle aldım:

 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 nWndIndex = ChartWindowFind ();
   if (nWndIndex < 0 )
       return 0 ;
      
   string sName = "MyText" ;
   if ( ObjectFind ( 0 , sName) < 0 )
       ObjectCreate ( 0 , sName, OBJ_TEXT , nWndIndex, time[rates_total - 1 ], <здесь значение индикатора>);
      
   ObjectSetInteger ( 0 , sName, OBJPROP_ANCHOR , ANCHOR_LEFT );
   ObjectSetString ( 0 , sName, OBJPROP_TEXT , "Sample text" );

   return (rates_total);
}

Sonuç:


 
Ihor Herasko :

Neden TEXT türündeki bir nesne için fiyatı piksel cinsinden hesaplamalısınız? Sonuçta, bar zamanı ve fiyatına göre konumlanıyor. Ben böyle aldım:

Sonuç:


Çok teşekkürler.

 
Ihor Herasko :


İyi çıktı:


 
Lütfen iki kavramın anlamını ve amacını açıklayın: çizelge tutamacı ve çizelge tanımlayıcı . Farkları nedir ve nasıl ve hangi durumlarda kullanılır.
 
khorosh :
Lütfen iki kavramın anlamını ve amacını açıklayın: çizelge tutamacı ve çizelge tanımlayıcı . Farkları nedir ve nasıl ve hangi durumlarda kullanılır.

İkisini de nasıl elde ettiğinizi gösterin. Buraya kadar aynı şeyden bahsediyoruz gibi görünüyor.