Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 54

 
Mein älterer Bruder ist hier. Ich denke, ich werde morgen gehen.
 
Merkulovv_Artem:

Ich erhalte den exakten Wert, aber ich kann den "Obem_Pozic"-Wert nicht auf 1,00 setzen, so dass ich die Menge für die Anzeige berechnen kann, ich möchte ihn nicht normalisieren, sondern nur 4 Dezimalstellen ausgeben.

Ich schreibe in MQL4.

Ich frage nach MQL4 in dem entsprechenden Forum, hier ist es ein A.


Sie sollten DoubleToStr() verwenden, um genauere Werte auf dem Bildschirm anzuzeigen.

DoubleToStr - Документация на MQL4
  • docs.mql4.com
DoubleToStr - Документация на MQL4
 
Yedelkin:

Dieses Paar wird wahrscheinlich vom Terminal bereitgestellt und muss nur noch angeschlossen werden. Wenn manuell, dann in Market Watch. Und wenn es ein erwachsenes ist, sollte es manuell mit SymbolSelect() gemacht werden.

Sobald Sie einen Fehler haben, werden andere folgen. Die ersten Fehler befinden sich am unteren Ende des Terminals. Wir sollten also versuchen, die ersten Fehler zu beseitigen und dann werden wir sehen :)

Danke!!! Sehr gut verstanden und schön geschrieben. Ich habe SymbolSelect() in meinem EA. Ich habe es mit dem Code auf pg. 53, wenn Sie es brauchen, können Sie es sehen. Ich habe es mit der Hilfe überprüft - es ist korrekt!!! Wenn dieses Paar also vom Terminal bereitgestellt wird, was soll ich dann denken?

Außerdem, wenn die First in line-Fehler am unteren Ende des Terminals sind. Warum wechseln sich die Fehlermeldungen des Druckers und des Terminals nicht ab - nein, sie sind zusammengefaßt?

Vielleicht meldet das Terminal den Fehler bei dieser Funktion nicht?

 
Offensichtlich nicht diese!!! Oder das hier, aber nicht so. Erst wechseln sich die Programmmeldungen (Drucker) und die Meldungen des Terminals wirklich ab, und dann kommt plötzlich - und zwar 10-12 mal auf einmal - genau der Fehler 4002!!!
 
Ich sollte wahrscheinlich noch in den Code schauen... wo ich sonst noch einen Indikator haben könnte
 
Dimka-novitsek: Ich habe SymbolSelect() in meinem EA. Ich habe es mit dem Code auf Seite 53 gepostet. 53, wenn Sie es brauchen, können Sie es sehen.

Ja, das kann ich sehen. Versuchen wir es auf diese Weise:

ResetLastError();
if(SymbolSelect(a_symbol,true)) Print("Символ ",a_symbol," успешно выбран");
else Print("Неудача с выбором символа ",a_symbol,", error = ",_LastError);
 

Ich danke Ihnen!!! !!

Könnten Sie mir bitte sagen, wie der Druck mit variablem Zeitrahmen aussehen soll, kann er digital sein? Ich sehe eine, ich meine, die Nummer eins wird angezeigt.

///////////////////////////////////////////////////////////////////////////////////////////////////////
 
 double  iMAf( string symbol, ENUM_TIMEFRAMES timeframe, int period, int mama_shift, ENUM_MA_METHOD mama_method, int applied_pricece, int shift){
 
    Print ( " iMAfsymbol  ",symbol,"    iMAftimeframe ",timeframe,"  iMAfperiod  ",period," iMAfmama_shift  ",mama_shift ,"  iMAfmama_method ",mama_method,
    "  iMAfapplied_pricece ", applied_pricece,"  iMAfshift ",shift);
 
                     MA_handle=iMA(symbol,timeframe,periodd(period),mama_shift, mama_method,applied_pricece);Sleep(2000);
                     //--- если не удалось создать хэндл
   if(MA_handle==INVALID_HANDLE)
     {
      //--- сообщим о неудаче и выведем номер ошибки
     PrintFormat("Не удалось создать хэндл индикатора iMA для пары %s/%s, код ошибки %d",
                 symbol,
                  EnumToString(timeframe),
                  GetLastError()); ResetLastError();return (0.0);} 
                     
                    CopyBuffer( MA_handle,0,0,100,MA);
                    ArraySetAsSeries(MA,true);
                     if(shift>99) return(0);
    return( (MA[shift])); } 
                   
///////////////////////////////////////////////////////////////////////////////////////////////////////

Ich frage warum. Dies ist eine Funktion, sie hat eine Zeile mit den Ausdrucken. Die zweite von oben entsprechend.

Hier ist der Funktionsaufruf.

/////////////////////////////////////////////////////////////////////
int Distance_from_MA(string symbb)
{
 double MAMA = iMAf( symbb, periodd(TFMA), periodMA, ma_shift, ma_method, applied_price, 0);
 
 int spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD));
 double point = SymbolInfoDouble(symbb,SYMBOL_POINT);
 
if(SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 3 || SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 5)
{spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)/10);
point = SymbolInfoDouble(symbb,SYMBOL_POINT)*10;}
 
 if(iClose(symb,TF_Price,0)+(spread*point)+(Min_Distance_from_MA*point)<=MAMA) return(-1);
 if(iClose(symb,TF_Price,0)-(Min_Distance_from_MA*point)>=MAMA) return (1);
 
 
 return(0);
} 

////////////////////////////////////////////////////////////////////

Beachten Sie, dass ich eine andere Funktion in der Aufrufzeile verwende. Sie wird zur Verurteilung des Zeitrahmens verwendet. Es ist so, weil mein Expert Advisor von 4 pyrivided worden ist. Ich habe darinFallöffner verwendet.Später fügte ich vorsichtshalber F zu F4 Zeitrahmen hinzu, um sie weiter zu verwenden.

///////////////////////////////////////////////////////////////////////////////////////////////  
    
   ENUM_TIMEFRAMES  periodd(int per)
  {
   switch(per)
     {
      case 0: return(PERIOD_CURRENT);
      case 1: return(PERIOD_M1);
      case 5: return(PERIOD_M5);
      case 15: return(PERIOD_M15);
      case 30: return(PERIOD_M30);
      case 60: return(PERIOD_H1);
      case 240: return(PERIOD_H4);
      case 1440: return(PERIOD_D1);
      case 10080: return(PERIOD_W1);
      case 43200: return(PERIOD_MN1);
      
      case 2: return(PERIOD_M2);
      case 3: return(PERIOD_M3);
      case 4: return(PERIOD_M4);      
      case 6: return(PERIOD_M6);
      case 10: return(PERIOD_M10);
      case 12: return(PERIOD_M12);
      case 16385: return(PERIOD_H1);
      case 16386: return(PERIOD_H2);
      case 16387: return(PERIOD_H3);
      case 16388: return(PERIOD_H4);
      case 16390: return(PERIOD_H6);
      case 16392: return(PERIOD_H8);
      case 16396: return(PERIOD_H12);
      case 16408: return(PERIOD_D1);
      case 32769: return(PERIOD_W1);
      case 49153: return(PERIOD_MN1);      
      default: return(PERIOD_CURRENT);
     }
  }  
  
  
  ///////////////////////////////////////////////////////////////////////////

Und das ist, was ich sehe

 
Dimka-novitsek: Bitte sagen Sie mir, wie der variable Druck des Zeitrahmens aussehen soll, kann er numerisch sein? Ich sehe eine, ich meine, die Nummer eins wird angezeigt.

Nun, gerade unten in diesem Code wird verwendet

EnumToString(timeframe), 
 
Ich danke Ihnen! Ich werde es mir noch einmal ansehen.
 
Dimka-novitsek: Ich danke Ihnen! Lassen Sie mich das noch einmal betrachten.

Ich glaube, ich habe herausgefunden, wo das Problem liegen könnte. Ich werde es jetzt beschreiben.

Aus dem Bild können Sie ersehen, dass der EA auf M1, Timeframe==1, Period==140 läuft. Ist das richtig?

Der Wert timeframe==1 bedeutet höchstwahrscheinlich, dass timeframe==M1 ist. Gleichzeitig bedeutet der Eintrag periodd(period) periodd(140). Laut Code muss die Funktion periodd(140) den Wert PERIOD_CURRENT zurückgeben. Es stellt sich also heraus, dass periodd(140)==M1.
Und das bedeutet, dass der iMA-Aufruf wie folgt aussieht: iMA(Symbol,M1,M1...) Ich weiß nicht, ob es bei der Berechnung von iMA akzeptabel ist, dass der Wert des zweiten Arguments mit dem Wert des dritten Arguments übereinstimmt (d.h. dass die Periode mit der Mittelungsperiode übereinstimmt), aber irgendetwas sagt mir, dass das falsch ist.

Grund der Beschwerde: