[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 104

 
Mathemat :

Biraz daha spesifik olabilir misiniz? Biraz örnek verin lütfen.

Las-tochk gibi yeni başlayanlar için ve bu zekice mektuplarınız kesinlikle hiçbir şey söylemiyor.

Birinin başka birinin kodunu incelemesinin ilginç olacağını düşünmüyorum, böyle bir sınıf örneği:

 //+------------------------------------------------------------------+
//|                                                  WaveCounter.mq4 |
//|                                                             Паха |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Паха"

#define wC_SHADECOLOR   C '121,0,0'
#define wC_NAMEPART   "WaveCounter"
//#define NEW_LINE_COLOR  DarkKhaki
#define NEW_LINE_STILE   2
#define NEW_LINE_RAY 0
#define SCARP_LINE_STILE   1
//#define SCARP_LINE_COLOR White

#include <WaveCounterCore.mqh>
/// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// Var
string wC_sName = "" ;
int wC_iTimeframe;
int wC_iDirection;
bool wC_bFirst;
int iwC_iLockBar;
double wC_dSizePorog[][ 2 ];
//------------------------ rez
int wC_iMoveBar[ 2 ];
double wC_dMovePrice[ 2 ];
bool wC_bScarp;
int wC_iStop;
/// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// ///
/*
//-------------------------------------------------- private
bool wC_vn_getWaveSizeArray();
//-------------------------------------------------- public
string wC_Create(bool bSizeFilter,
                  bool bAddToExtr);
bool wC_Check(string &sName, 
               bool bFromBegin, 
               bool bFirst);
bool wC_IsScarp();
int wC_IsStop();
bool wC_Redraw();
*/
/// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// ///

string wC_Create( bool bSizeFilter,
                   bool bAddToExtr)
   {
   //----
   string sShadeName[ 2 ] = { "wC_Shade1" , "wC_Shade2" };
   
   //--//
       if (ObjectFind(sShadeName[ 0 ]) < 0 )
         {
         Shade_create( sShadeName[ 0 ], wC_SHADECOLOR );
         return ( "" );
         }
      
       if (ObjectFind(sShadeName[ 1 ]) < 0 )
         {
         Shade_create( sShadeName[ 1 ], wC_SHADECOLOR );
         return ( "" );
         }
   //--\\
   
   if ( ! Shade_attach(sShadeName, false ) ) 
       return ( "" );      
   if ( ! Shade_direction(wC_iDirection, 0 , 1 ) )
       return ( "" );
   if ( ! Shade_minTimeframe( 0 ) )
       return ( "" );
   wC_iTimeframe = Shade_getTimeframe();
   int iCorrectIndex[ 2 ] = { 0 , 1 };
   Shade_correctKoord(iCorrectIndex); 
   
   datetime datPoint0;
   double dPoint0, dPoint1;
   if (wC_iDirection == 2 )
      {
       if ( ! Shade_getPointTimePrice( 0 , CONTMOV1,   false , datPoint0, dPoint0) )
         return ( "" );
      }
   else
      {
       if ( ! Shade_getPointTimePrice( 0 , CONTMOV1,   true , datPoint0, dPoint0) )
         return ( "" );
      } 

   if (bSizeFilter)
      {
       if ( ! wC_vn_getWaveSizeArray() )
         return ( "" );
         
       int iIndexPoroga[ 1 ];
       if ( ! MyInputBox( "Индекс порога" , iIndexPoroga) )
         return ( "" );
       if ( iIndexPoroga[ 0 ] < 0   || iIndexPoroga[ 0 ] + 1 > ArrayRange(wC_dSizePorog, 0 ) )
         {
         Alert( "Недопустимый индекс" );
         return ( "" );
         }
         
       if (wC_iDirection == 2 )
         dPoint1 = dPoint0 + wC_dSizePorog[ iIndexPoroga[ 0 ] ][ 0 ] * dPoint0;
       else
         dPoint1 = dPoint0 - wC_dSizePorog[ iIndexPoroga[ 0 ] ][ 0 ] * dPoint0;
      iwC_iLockBar = MYEMPTY;
      }
   else
      {
       if (wC_iDirection == 2 )
         {
         if ( ! Shade_getPoint( 1 , CONTMOV2, true , iwC_iLockBar) )
             return ( false );
         dPoint1 = iHigh(NULL, wC_iTimeframe, iwC_iLockBar);
         }
       else
         {
         if ( ! Shade_getPoint( 1 , CONTMOV2, false , iwC_iLockBar) )
             return ( false );
         dPoint1 = iLow(NULL, wC_iTimeframe, iwC_iLockBar); 
         }
       if (dPoint1 == 0 )
         return ( false );
       if (bAddToExtr)
         iwC_iLockBar --;
      }

   if ( ! Fun_partOfName(wC_sName) )
       return ( "" );   
   wC_sName = StringConcatenate(wC_sName, wC_NAMEPART);
   
   if ( ! ObjectCreate(wC_sName, OBJ_TREND, 0 , datPoint0, dPoint0, datPoint0, dPoint1) )
       return ( "" );
   if ( ! ObjectSetText(wC_sName, "2" ) )
       return ( "" );
   if ( ! ObjectSet(wC_sName, OBJPROP_RAY, NEW_LINE_RAY) )
       return ( "" );
   if ( ! ObjectSet(wC_sName, OBJPROP_COLOR, Fun_ColorFromPanel()) )
       return ( "" );
   if ( ! ObjectSet(wC_sName, OBJPROP_STYLE, NEW_LINE_STILE) )
       return ( "" );
   
   Fun_deleteObjects(sShadeName);
   return (wC_sName); 
   }
//--------------------------------------------------

bool wC_vn_getWaveSizeArray()
   {
   static bool bSizePorogInit = false ;
   if (bSizePorogInit)
       return ( true );
   string sSymbol = Symbol();
   if ( sSymbol == "USDCHF" )
      {
       if (ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeUSDCHF, 0 )) < 0 )
         return ( false );
       if (ArrayCopy(wC_dSizePorog, prop_dWaveSizeUSDCHF) < 1 )
         return ( false );
      bSizePorogInit = true ;
       return ( true );
      }
         
   if ( sSymbol == "AUDJPY" )
      {
       if (ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeAUDJPY, 0 )) < 0 )
         return ( false );
       if (ArrayCopy(wC_dSizePorog, prop_dWaveSizeAUDJPY) < 1 )
         return ( false );
      bSizePorogInit = true ;
       return ( true );
      }
         
   if ( sSymbol == "EURUSD" )
      {
       if (ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeEURUSD, 0 )) < 0 )
         return ( false );
       if (ArrayCopy(wC_dSizePorog, prop_dWaveSizeEURUSD) < 1 )
         return ( false );
      bSizePorogInit = true ;
       return ( true );
      }
         
   if ( sSymbol == "EURGBP" )         
      {
       if (ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeEURGBP, 0 )) < 0 )
         return ( false );
       if (ArrayCopy(wC_dSizePorog, prop_dWaveSizeEURGBP) < 1 )
         return ( false );
      bSizePorogInit = true ;
       return ( true );
      }
     
   if ( sSymbol == "EURJPY" )           
      {
       if (ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeEURJPY, 0 )) < 0 )
         return ( false );
       if (ArrayCopy(wC_dSizePorog, prop_dWaveSizeEURJPY) < 1 )
         return ( false );
      bSizePorogInit = true ;
       return ( true );
      }
         
   if ( sSymbol == "GBPUSD" )            
      {
       if (ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeGBPUSD, 0 )) < 0 )
         return ( false );
       if (ArrayCopy(wC_dSizePorog, prop_dWaveSizeGBPUSD) < 1 )
         return ( false );
      bSizePorogInit = true ;
       return ( true );
      }
         
   if ( sSymbol == "USDCAD" )            
      {
       if (ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeUSDCAD, 0 )) < 0 )
         return ( false );
       if (ArrayCopy(wC_dSizePorog, prop_dWaveSizeUSDCAD) < 1 )
         return ( false );
      bSizePorogInit = true ;
       return ( true );
      }
         
   if ( sSymbol == "USDJPY" )            
      {
       if (ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeUSDJPY, 0 )) < 0 )
         return ( false );
       if (ArrayCopy(wC_dSizePorog, prop_dWaveSizeUSDJPY) < 1 )
         return ( false );
      bSizePorogInit = true ;
       return ( true );
      }
         
   if ( sSymbol == "AUDUSD" )            
      {
       if (ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeAUDUSD, 0 )) < 0 )
         return ( false );
       if (ArrayCopy(wC_dSizePorog, prop_dWaveSizeAUDUSD) < 1 )
         return ( false );
      bSizePorogInit = true ;
       return ( true );
      }
      
   Alert( "У символа нет размерного массива, или он не прописан в функции Tl_vn_getWaveSizeArray()" );
   return ( false );
   }
//--------------------------------------------------

bool wC_Check( string &sName, 
               bool bFromBegin, 
               bool bFirst)
   {
   if (StringFind(sName, wC_NAMEPART) == - 1 )
       return ( false );
   wC_bScarp = false ;
   wC_iStop = - 1 ;
   wC_sName = sName;
   string sDescrip = ObjectDescription(sName);
   int iID = StrToInteger(sName);
   if (iID == 0 )
       return ( false );
      
   datetime datLastTime;
   if (sDescrip == "1"   &&  ! bFirst)
      {
      datLastTime = FL_LastTime();
       if (datLastTime == - 1 )
         datLastTime = MYEMPTY;
       if ( ! tlC_Load(iID, datLastTime) )
         return ( false );
      wC_bFirst = false ;
       if (bFromBegin)
         if ( ! tlC_SeekToBegin())
             return ( false );
      }
   else
      {
       if (sDescrip == "2"   &&  bFirst)
         {
         int iBeginBar = iBarShift(NULL, wC_iTimeframe, ObjectGet(sName, OBJPROP_TIME1), true );
         if (iBeginBar == - 1 )
             return ( false );
         datLastTime = FL_LastTime();
         if (datLastTime == - 1 )
            datLastTime = MYEMPTY;
         if ( ! tlC_Attach(iID, wC_iDirection, wC_iTimeframe, iBeginBar, ObjectGet(sName, OBJPROP_PRICE2), iwC_iLockBar, datLastTime) )
             return ( false ); 
         if (iwC_iLockBar != MYEMPTY)
            tlC_SetStops( false , MYEMPTY);
         wC_bFirst = true ;
         }
       else
         return ( false );
      }
   
   if ( ! tlC_Check() )
       return ( false );
      
   wC_bScarp = tlC_IsScarp();
   wC_iStop = tlC_IsStop();
   tlC_GetCurView(wC_iMoveBar, wC_dMovePrice);
   if (wC_bScarp)
      {
       int iTempVar;
       double dTempVar;
      tlC_GetCurPos(iTempVar, dTempVar);
      wC_iMoveBar[ 1 ] = iTempVar;
      wC_dMovePrice[ 1 ] = dTempVar;
      }
   
   return ( true );
   }
//--------------------------------------------------

bool wC_IsScarp()
   {
   return (wC_bScarp);
   }
//--------------------------------------------------

int wC_IsStop()
   {
   return (wC_iStop);
   }
//--------------------------------------------------


  
 

Bir özellik sığmadı:

bool wC_Redraw()
   {
   if (wC_iStop != - 1 )
      {
      ObjectDelete(wC_sName);
       return ( true );
      }
   if (wC_bFirst)
       if ( ! ObjectSetText(wC_sName, "1" ))
         return ( false );
   int iTimeframe = tlC_GetTimeframe();
   double dLockPrice = tlC_GetPriceLock();
   datetime datMoveTime[ 2 ];
   datMoveTime[ 0 ] = iTime(NULL, iTimeframe, wC_iMoveBar[ 0 ]);
   if (datMoveTime[ 0 ] == 0 )
       return ( false );
   if ( ! ObjectMove(wC_sName, 0 , datMoveTime[ 0 ], wC_dMovePrice[ 0 ]) )
       return ( false );
   
   if (dLockPrice == MYEMPTY)
      {
      datMoveTime[ 1 ] = iTime(NULL, iTimeframe, wC_iMoveBar[ 1 ]);
       if (datMoveTime[ 1 ] == 0 )
         return ( false );
       if ( ! ObjectMove(wC_sName, 1 , datMoveTime[ 1 ], wC_dMovePrice[ 1 ]) )
         return ( false );
         
       if (wC_bScarp)
         {
         if ( ! ObjectSet(wC_sName, OBJPROP_RAY, false ) )
             return ( false );
         if ( ! ObjectSet(wC_sName, OBJPROP_STYLE, SCARP_LINE_STILE) )
             return ( false );
         if ( ! ObjectSetText(wC_sName, "0" ))
             return ( false );
         //ObjectSet(wC_sName, OBJPROP_COLOR, SCARP_LINE_COLOR);    
         return ( true );
         }
       else
         ObjectSet(wC_sName, OBJPROP_RAY, true );
      }
   else
       if ( ! ObjectMove(wC_sName, 1 , datMoveTime[ 0 ], dLockPrice) )
         return ( false );
      
   if ( ! tlC_Save())
       return ( false );
   
   return ( true );
   }
 
alsu :

Hayır, t3 zamanında. Buradaki nokta, t3'ün çubuğun ilk işareti olmasıdır, bu, üzerindeki hesaplamalar henüz yapılmadığından, IndicatorCounted() değerinin henüz değişmediği anlamına gelir - bu, yalnızca start() işlevinin bitiminden sonra olur. . Bu oldukça mantıklıdır - fonksiyon hesaplanan çubukların sayısını döndürür, bu nedenle, bu çubuğun en az bir işareti hesaplanana kadar değerini değiştirmenin bir anlamı yoktur. Bu nedenle, t3 anında hala 299 değerini görüyoruz, ancak bir sonraki tikte zaten 300 olacak.

Bu daha net mi?

Evet, bu daha mantıklı, teşekkürler.
 
danışman çalışırken, ekranın sol üst köşesinde yorumlar görüntülenir. nasıl 100-200 pip sağa kaydırılabilirler? çünkü o köşede genellikle karakterlerin üst üste bindirilmesi nedeniyle bir şeyler okumak imkansızdır .. ((((
 
w_ersoc :
danışman çalışırken, ekranın sol üst köşesinde yorumlar görüntülenir. nasıl 100-200 pip sağa kaydırılabilirler? çünkü o köşede karakterlerin üst üste bindirilmesi nedeniyle genellikle bir şey okumak imkansız .. ((((

yorum metninin başındaki boşluklar en kolayı

veya bunun gibi:

   ObjectCreate ( "label_object1" , OBJ_LABEL , 0 , 0 , 0 );  
   ObjectSet ( "label_object1" , OBJPROP_XDISTANCE , 720 );  
   ObjectSet ( "label_object1" , OBJPROP_YDISTANCE , 45 );
   ObjectSetText ( "label_object1" , StringConcatenate ( "Процент отрицательных %:     " , PercentMinus), 8 , "Lucida Console" , NavajoWhite );
   
 
moskitman :

yorum metninin başındaki boşluklar en kolayı

ya da böyle...

Teşekkür ederim!-)
 
Yukarıda yazdıklarımı biraz açıklamak istiyorum. Örneğin, MKL4 dilinde bir araba modeli yapma görevi ile karşı karşıyayız. Bir arabanın bazı özellikleri olduğunu biliyoruz: yağ basıncı, krank mili hızı, soğutma suyu sıcaklığı vb. . Ama biraz soyutlarsak, o zaman arabadan neye ihtiyacımız olduğunu anlayabiliriz: ileri git, geri git, sola, sağa. Bu nedenle, tüm özellikleri dahil ettiğimizde değişken olarak ilan ediyoruz ve bunların dışında onlara dokunmuyoruz. Dış çevre ile etkileşime geçmek için şu fonksiyonları bırakıyoruz: forward(), back(), left(), right(). Genel olarak, aslında, kapsülleme kokuyor. Bu , projeyi karmaşıklaştırırken oldukça yardımcı olacaktır.
 
arkadaşlar doğru ifade nasıl yazılır? 2 fiyatı karşılaştırmanız gerekir.
Close[ 2 ]>=Open[ 1 ]

ancak Open[1] için fiyatın 1 pp'den az olduğunu yazmanız gerekir.

5 ondalık basamağım var ben yazmadım

Close[ 2 ] >= (Open[ 1 ]- 10 * Point )

ama bu terimin doğru olmadığı, belki de işe yaramadığı ortaya çıktı.

Ama yazmanın doğru yolu nedir?

 
kilnart :

ama bu terimin doğru olmadığı, belki de işe yaramadığı ortaya çıktı.

tam olarak ne çalışmıyor?
 
kilnart : doğru yolu nedir?

şöyle deneyin:

 if ( Digits == 5 ){
   if (Close[ 2 ]-Open[ 1 ]>= 10 * Point ); // цена больше на 10 пп в 5-ти знаке
}
if ( Digits == 4 ){
   if (Close[ 2 ]-Open[ 1 ]>= Point ); // цена больше на 1 пп в 4-х знаке
}

//или так ...

switch ( Digits ){
   case 5 : if (Close[ 2 ]-Open[ 1 ]>= 10 * Point ); // цена больше на 10 пп в 5-ти знаке
   case 4 : if (Close[ 2 ]-Open[ 1 ]>= Point ); // цена больше на 1 пп в 4-х знаке
}