Questions d'un "mannequin - page 33

 
Renat:
i>=0
Merci. Honte à moi.)) J'ai utilisé tant de fois cette énumération dans mql4 et j'ai fait une erreur sur une chose aussi simple.
 

Il n'est pas possible de sélectionner une position. Par exemple :

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

Il y a une erreur dans le journal de bord :

Comment le faire correctement ?

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

Il n'est pas possible de sélectionner une position. Par exemple :

Corrigez d'abord l'erreur, ne confondez pas le type de commande et le type de position :

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

Il n'est pas possible de sélectionner une position. Par exemple :

Il y a une erreur dans le journal de bord :

Comment le faire correctement ?

Il serait plus facile pour vous de demander où vous vous êtes trompé...

Pour que cela fonctionne, la construction

if(PositionSelect(SymbolName(count,true))) doit être remplacé par :

if(PositionSelect(PositionGetSymbol(count))

et de plus, vous confondezENUM_ORDER_TYPE avec ENUM_POSITION_TYPE

 
Rosh:

Corrigez d'abord l'erreur, ne confondez pas le type d'ordre et le type de position:

Vladix :

Il serait plus facile pour vous de demander où vous ne vous trompez pas...

Merci et je m'excuse pour mes erreurs vraiment grossières. Il s'agit d'un phénomène temporaire et le malentendu passera bientôt).
 

Veuillez me conseiller sur la façon de résoudre ce problème :

Je développe des Expert Advisors, des bibliothèques et des indicateurs pour MT5 sur deux ordinateurs.

Quel est le moyen le plus simple d'organiser le transfert des développements d'un ordinateur à l'autre, de préférence avec une synchronisation automatique. C'est-à-dire prendre automatiquement le fichier le plus récent et le répliquer.

Les ordinateurs sont sur le même réseau. Il y a un dossier partagé qui est partagé sur l'internet.

 
utiliser VCS
 
TheXpert:
utiliser VCS
Je n'ai pas précisé les ordinateurs Windows7. Le plus difficile est de comprendre comment il empile les fichiers dans le système de fichiers. Avec XP, tout était clair, il y avait un répertoire où tout se trouvait, mais ici tout est éparpillé.
 
Andrian22:
Je n'ai pas précisé les ordinateurs Windows7. Le plus difficile est de comprendre comment il empile les fichiers dans le système de fichiers. Avec XP, tout était clair, il y avait un répertoire où tout se trouvait, mais ici tout est éparpillé.
Voir l'aide Démarrage - Lancement du terminal - "Mode invité" (avec le commutateur /portable)
 
Vladix:

Il aurait été plus facile pour vous de demander où vous avez eu raison...

Pour que cela fonctionne, la construction

if(PositionSelect(SymbolName(count,true))) doit être remplacé par :

if(PositionSelect(PositionGetSymbol(count))

J'ai examiné les différentes variantes et j'ai remarqué qu'elles sont toutes identiques en termes de résultat final. C'est-à-dire, chacune de ces options :

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

... retournera le même résultat.

Et dans mon cas, cela n'a en rien affecté le résultat)))) J'ai terminé le script :

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

Maintenant, tout fonctionne correctement. Les variantes mentionnées ci-dessus sont commentées et vous pouvez les comparer. Le résultat est toujours le même dans le journal :

Raison: