Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 452

 
Profitov:
La question s'est posée, est-il possible d'écrire un Expert Advisor ou un script, qui serait d'atteindre par exemple une perte de 2% sur le jour fermerait toutes les transactions ?

C'est possible.
 
Aide -- J'ai acheté un nouvel ordinateur portable avec vin.8 installé -- J'ai téléchargé le terminal d'alpari dernière mise à jour -- Je charge les indicateurs que j'ai travaillé avec avant, dans le dossier MQL4-indicateurs, ils apparaissent là -- mais dans le terminal lui-même dans les utilisateurs ne les voient pas, le service client ne dit rien de droit - que faire ?
 
galinka:
Aide -- J'ai acheté un nouvel ordinateur portable avec vin.8 installé -- J'ai téléchargé le terminal d'alpari dernière mise à jour -- Je charge les indicateurs que j'ai travaillé avec avant, dans le dossier MQL4-indicateurs, ils apparaissent là -- mais dans le terminal lui-même dans les utilisateurs ne les voient pas, le support client ne dit rien de droit - que faire ?

Le menu système "Fichier" a un nouvel élément "Ouvrir le dossier de données". C'est là que tu dois le mettre maintenant.
 
Impossible - ils ne sont pas dans le terminal.
 

J'ai dû mal comprendre ce qu'il faut faire - fichiers de programme - j'ai Alpari - ouvrir ---- il y a des dossiers ---- MQL4- indikateurs - je les mets dedans - ils apparaissent - je ferme - j'ouvre le terminal - ils ne sont pas dans les fichiers utilisateurs

 
Peut-être qu'il y a quelque chose dans mes indicateurs qui doit être changé.
 

Merci, ça m'a aidé.

 
1mql:

Sous le dernier extern :
extern int slippage = 2 ; // glissement de prix lors de la fermeture des positions de marché

insérer un autre :
extern bool total_symb = true ; // sur toutes les paires

et chaque ligne :
if ((OrderSymbol() == Symbol()))
et
if(OrderSymbol() == Symbol())

remplacer ceci :
if(OrderSymbol() == Symbol() || total_symb)

en théorie devrait fonctionner, vérifier.


Il ne ferme que quelques graphiques où la position est activée. Sur les autres, une erreur 4107 se ferme. J'ai essayé de changer en externe bool Buy = false ; //supprimer/clôturer la direction des ordres d'achat
extern bool Sell = false ; //supprime/clôture la direction de l'ordre de vente. à true . cela n'a pas fonctionné. mais si par exemple nous le mettons sur un graphique sans position ouverte, aucun d'eux ne se ferme et l'erreur 4107 est vue.
 
Profitov:
La question s'est posée, est-il possible d'écrire un Expert Advisor ou un script, qui serait d'atteindre par exemple une perte de 2% sur le jour fermerait toutes les transactions ?
Déjà écrit.
 
alsu:

Ainsi, Ticket est toujours utilisé quelque part dans l'ancienne version. Nous devons nettoyer le code...

Fait comme suit :

 Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   int order[7];//буффер для семи ордеров
   int ord;//количество ордеров
   ArrayInitialize(order,0);//обнуляем количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1){Alert("Обнаружен отложенный ордер. Эксперт не работает.");return;}
         Total++;                               // Счётчик рыночн. орд
         if (Total>7){Alert("Более 7 ордеров. Эксперт не работает.");return;}
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         order  [OrderType()]++;                    // ПОЛУЧАЕМ КОЛИЧЕСТВО ОРДЕРОВ         
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
     ord=order  [OrderType()];

 while(true)                                  // Цикл закрытия орд.
     {
      if (Tip==0 && Cls_B==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         Ans=OrderClose(Ticket,Lot,Bid,2);      // Закрытие Buy
         if (Ans==true){Alert ("Закрыт ордер Buy ",Ticket);if (ord ==0){Alert ("Закрыты все ордера ",ord);break;}}
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }

Les positions sont complètement fermées. Il est vrai que l'erreur zéro sort, mais les docks disent que cela signifie aucune erreur. Et je ne trouve pas le message"All orders closed" dans le journal.

J'ai mis en gras les lignes que j'ai modifiées. Cela semble fonctionner, mais je n'ai pas encore vérifié en détail.

Je ne comprends pas bien le fonctionnement des boucles. Supposons que j'ai du code au-dessus et en dessous et au milieu de la boucle. Si les conditions de la boucle coïncident, le code est exécuté uniquement à l'intérieur de la boucle et ne laisse pas les lignes de code situées sous la boucle être exécutées ? Dans cet exemple, l'opérateurbreak interrompt-il la boucle ? Permet-il d'exécuter les lignes situées sous la boucle, ou le programme commence-t-il à calculer depuis le début ?

Corrigez-moi si je me trompe : break interrompt la boucle dans laquelle il se trouve, tandis quecontinue effectue l'évaluation de l'opérateur qui se trouve au-dessus de lui, donc ce n'est pas clair s'il y a un deuxième opérateur - son évaluation sera-t-elle interrompue ou est-ce quecontinue interrompt tout le code et envoie le programme l'exécuter en premier ?