Fragen von einem "Dummy" - Seite 33

 
Renat:
i>=0
Ich danke Ihnen. Schande über mich.)) So viele Male habe ich diese Aufzählung in mql4 verwendet und einen Fehler bei einer so einfachen Sache gemacht.
 

Es ist nicht möglich, eine Position zu wählen. Zum Beispiel:

   double Stop_Loss   = NormalizeDouble(OrderGetDouble(ORDER_SL),_Digits);
   double Open_Price  = NormalizeDouble(OrderGetDouble(ORDER_PRICE_OPEN),_Digits);
   
   double Amount_Risk = 0.0;
         
   for(count = PositionsTotal()-1; count >= 0; count--)
      {
       if(PositionSelect(SymbolName(count,true)))
         {
          int tp_pos;
          tp_pos = (ENUM_ORDER_TYPE)PositionGetInteger(POSITION_TYPE);
          if(tp_pos == ORDER_TYPE_BUY || tp_pos == ORDER_TYPE_SELL) 
            {
             Amount_Risk = MathAbs(Open_Price - Stop_Loss);
             Print("PositionTotal(): ",PositionsTotal(), " Amount_Risk: ",Amount_Risk);
            }
          if(GetLastError() != 0) Print(ErrorDescription(GetLastError()),", ",GetLastError());
         }
      }

Es gibt einen Fehler im Logbuch:

Wie macht man es richtig?

Документация по MQL5: Торговые функции / PositionSelect
Документация по MQL5: Торговые функции / PositionSelect
  • www.mql5.com
Торговые функции / PositionSelect - Документация по MQL5
 
tol64:

Es ist nicht möglich, eine Position zu wählen. Zum Beispiel:

Korrigieren Sie zuerst den Fehler, verwechseln Sie nicht Auftragsart und Positionsart:

 tp_pos = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
 
tol64:

Es ist nicht möglich, eine Position zu wählen. Zum Beispiel:

Es gibt einen Fehler im Logbuch:

Wie macht man es richtig?

Es wäre einfacher für Sie, zu fragen, wo Sie sich geirrt haben...

Damit das funktioniert, muss das Konstrukt

if(PositionSelect(SymbolName(count,true))) sollte ersetzt werden durch:

if(PositionSelect(PositionGetSymbol(count))

und außerdem verwechseln SieENUM_ORDER_TYPE mit ENUM_POSITION_TYPE

 
Rosh:

Korrigieren Sie zuerst den Fehler, verwechseln Sie nicht Auftragsart und Positionsart:

Vladix:

Es wäre einfacher für Sie zu fragen, wo Sie sich nicht irren...

Ich danke Ihnen und entschuldige mich für meine wirklich groben Fehler. Dies ist ein vorübergehendes Phänomen, und das Missverständnis wird bald verschwinden).
 

Bitte beraten Sie mich, wie ich dieses Problem lösen kann:

Ich entwickle Expert Advisors, Bibliotheken und Indikatoren für MT5 auf zwei Computern.

Wie lässt sich die Übertragung von Entwicklungen von einem Computer zum anderen am einfachsten organisieren, vorzugsweise mit automatischer Synchronisierung? D. h., es wird automatisch die frischeste Datei genommen und repliziert.

Die Computer befinden sich im selben Netzwerk. Es gibt einen gemeinsamen Ordner, der über das Internet freigegeben wird.

 
VCS verwenden
 
TheXpert:
VCS verwenden
Ich habe keine Windows7-Computer angegeben. Der schwierigste Teil ist herauszufinden, wie die Dateien im Dateisystem gestapelt werden. Bei XP war alles klar, es gab ein Verzeichnis, in dem alles drin war, aber hier ist alles verstreut.
 
Andrian22:
Ich habe keine Windows7-Computer angegeben. Der schwierigste Teil ist herauszufinden, wie die Dateien im Dateisystem gestapelt werden. Bei XP war alles klar, es gab ein Verzeichnis, in dem alles war, aber hier ist alles verstreut.
Siehe Hilfe - Erste Schritte - Terminal Startup - "Gastmodus" (mit dem Schalter /portable)
 
Vladix:

Es wäre einfacher für Sie gewesen, zu fragen, wo Sie Recht haben...

Damit das funktioniert, muss das Konstrukt

if(PositionSelect(SymbolName(count,true))) sollte ersetzt werden durch:

if(PositionSelect(PositionGetSymbol(count))

Ich habe mir die verschiedenen Varianten angeschaut und festgestellt, dass sie im Endergebnis alle gleich sind. Das heißt, jede dieser Optionen:

 if(PositionSelect(Symbol()))
 if(PositionSelect(PositionGetSymbol(count)))
 if(PositionSelect(SymbolName(count,true)))

... wird das gleiche Ergebnis liefern.

Und in meinem Fall hat es das Ergebnis in keiner Weise beeinflusst))) Das Drehbuch ist fertig:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
 for(int count = 0; count < PositionsTotal(); count++)
   {
    double Amount_Risk = 0.0;
    string Type_pos;
    
    if(PositionSelect(Symbol()))
    //if(PositionSelect(PositionGetSymbol(count)))
    //if(PositionSelect(SymbolName(count,true)))
      {
       int tp_pos = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
       string Symbol_pos = PositionGetSymbol(count);
       double Acc_Blnc   = AccountInfoDouble(ACCOUNT_BALANCE);
       double Order_Lots = PositionGetDouble(POSITION_VOLUME);
       double Stop_Loss  = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
       double Open_Price = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);
       
       switch(tp_pos)
         {
          case 0 : Type_pos = "LONG";  break;
          case 1 : Type_pos = "SHORT"; break;
         }
       
       Amount_Risk += MathAbs(((((Open_Price - Stop_Loss)*10000)*(Order_Lots*10))/Acc_Blnc)*100);
       
       Print("PositionTotal(): ",PositionsTotal(),", Symbol: ",Symbol_pos,", Position: ",Type_pos,", Amount_Risk: ",DoubleToString(Amount_Risk,2),"%");

       if(GetLastError() != 0) Print(ErrorDescription(GetLastError()),", ",GetLastError()); ResetLastError();
      }
   }
}

Jetzt funktioniert alles richtig. Die oben genannten Varianten sind auskommentiert und Sie können sie vergleichen. Das Ergebnis ist im Protokoll immer das gleiche: