[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 102

 
Mathemat:

Können Sie das genauer erläutern? Bitte nennen Sie uns ein Beispiel.

Für einen Anfänger wie Las-tochk'i sagen diese klugen Briefe von Ihnen absolut nichts.

Ich glaube nicht, dass irgendjemand daran interessiert wäre, sich durch den Code eines anderen zu wühlen, der ein Beispiel für eine solche Klasse ist:

//+------------------------------------------------------------------+
//|                                                  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);
   }
//--------------------------------------------------


  
 

Eine Funktion hat nicht gepasst:

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:

Nein, zur Zeit t3. Der Punkt ist, dass t3 der erste Tick des Balkens ist, und das bedeutet, dass der Wert von IndicatorCounted() noch keine Zeit hatte, sich zu ändern, da noch keine Berechnungen durchgeführt wurden - dies geschieht erst, nachdem die Funktion start() ihre Arbeit beendet hat. Das ist ganz logisch - die Funktion gibt die Anzahl der berechneten Balken an, so dass es keinen Sinn macht, ihren Wert zu ändern, bevor nicht mindestens ein Tick des jeweiligen Balkens berechnet wurde. Im Moment t3 sehen wir also noch den Wert 299, aber beim nächsten Tick wird er 300 sein.

Ist das klarer?

Ja, das macht mehr Sinn, danke.
 
Wenn ein Berater arbeitet, werden die Kommentare auf dem Bildschirm in der oberen linken Ecke angezeigt. Wie können sie um 100-200 Pips nach rechts verschoben werden? weil es unmöglich ist, etwas in dieser Ecke zu lesen, weil sich die Zeichen normalerweise überschneiden... ((((
 
w_ersoc:
Wenn der EA läuft, werden die Kommentare in der oberen linken Ecke angezeigt. Wie können sie um 100-200 Pips nach rechts verschoben werden? in dieser Ecke ist es unmöglich, etwas zu lesen, da sich die Zeichen normalerweise überlappen... ((((

Leerzeichen am Anfang des Kommentartextes sind am einfachsten

oder so:

   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:

Leerzeichen am Anfang des Kommentartextes sind am einfachsten

oder so...

Danke!)
 
Ich möchte ein wenig erklären, was ich oben geschrieben habe. Wir haben zum Beispiel die Aufgabe, ein Automodell in MKL4 zu erstellen. Wir wissen, dass das Auto einige Eigenschaften hat: Öldruck, Kurbelwellendrehzahl, Kühlmitteltemperatur usw.. Aber wenn wir ein wenig abstrahieren, können wir verstehen, was wir vom Auto wollen: vorwärts fahren, rückwärts fahren, links fahren, rechts fahren. Deshalb werden in unserem Paket alle Eigenschaften als Variablen deklariert und bleiben unangetastet. Für die Interaktion mit der äußeren Umgebung bleiben die Funktionen: vorwärts(), rückwärts(), links(), rechts(). Im Grunde riecht es nach Verkapselung. Dies ist sehr hilfreich, wenn das Projekt komplizierter wird.
 
Leute, wie schreibe ich den Ausdruck richtig? Ich muss zwei Preise vergleichen.
Close[2]>=Open[1]

aber Open[1] muss schreiben, dass der Preis um 1 ppt niedriger ist.

Ich habe 5 Dezimalstellen, also habe ich geschrieben

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

aber es stellt sich heraus, dass dieser Begriff falsch ist, weil er nicht funktioniert.

Wie schreibe ich es richtig?

 
kilnart:

aber es stellt sich heraus, dass diese Frist falsch ist, weil sie nicht funktioniert.

Was genau funktioniert nicht?
 
kilnart: wie buchstabiert man es richtig?

versuchen Sie es so:

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-х знаке
}