Preguntas de un "tonto" - página 33

 
Renat:
i>=0
Gracias. Qué vergüenza)). Tantas veces usé esta enumeración en mql4 y me equivoqué en algo tan simple.
 

No es posible seleccionar una posición. Por ejemplo:

   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());
         }
      }

Hay un error en el cuaderno de bitácora:

¿Cómo hacerlo correctamente?

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

No es posible seleccionar una posición. Por ejemplo:

Corrija primero el error, no confunda el tipo de orden y el tipo de posición:

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

No es posible seleccionar una posición. Por ejemplo:

Hay un error en el cuaderno de bitácora:

¿Cómo hacerlo correctamente?

Sería más fácil para ti preguntar dónde te equivocaste...

Para que funcione, la construcción

if(PositionSelect(SymbolName(count,true)) debe sustituirse por:

if(PositionSelect(PositionGetSymbol(count))

y además confundesENUM_ORDER_TYPE con ENUM_POSITION_TYPE

 
Rosh:

Corrija primero el error, no confunda el tipo de orden y el tipo de posición:

Vladix:

Sería más fácil para ti preguntar dónde no te equivocas...

Gracias y me disculpo por mis errores realmente graves. Se trata de un fenómeno temporal y el malentendido pasará pronto).
 

Por favor, aconséjeme cómo resolver este problema:

Estoy desarrollando Asesores Expertos, bibliotecas e indicadores para MT5 en dos ordenadores.

Cuál es la forma más fácil de organizar la transferencia de desarrollos de un ordenador a otro, preferiblemente con sincronización automática. Es decir, tomar automáticamente el archivo más reciente y replicarlo.

Los ordenadores están en la misma red. Hay una carpeta compartida que se comparte a través de Internet.

 
utilizar VCS
 
TheXpert:
utilizar VCS
No he especificado los ordenadores con Windows7. Lo más difícil es averiguar cómo se apilan los archivos en el sistema de archivos. Con XP estaba todo claro, había un directorio donde estaba todo, pero aquí está todo disperso.
 
Andrian22:
No he especificado los ordenadores con Windows7. Lo más difícil es averiguar cómo se apilan los archivos en el sistema de archivos. Con XP estaba todo claro, había un directorio donde estaba todo, pero aquí todo está disperso.
Véase la Ayuda para empezar - Iniciar el terminal - "Modo invitado" (con el conmutador /portable)
 
Vladix:

Hubiera sido más fácil para ti preguntar dónde lo has conseguido bien...

Para que funcione, la construcción

if(PositionSelect(SymbolName(count,true)) debe sustituirse por:

if(PositionSelect(PositionGetSymbol(count))

He mirado las diferentes variantes y me he dado cuenta de que todas son idénticas en cuanto al resultado final. Es decir, cada una de estas opciones:

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

... devolverá el mismo resultado.

Y en mi caso no afectó el resultado de ninguna manera))) Terminé el guión:

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

Ahora todo funciona correctamente. Las variantes mencionadas anteriormente se comentan y se pueden comparar. El resultado es siempre el mismo en el registro:

Razón de la queja: