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

 
mikhail12:

Mais si vous rouvrez, la position est réduite du montant de l'écart.

Eh bien, ce serait une perversion particulièrement soignée. Je ne pense pas.
 
tara:

Eh bien, ce serait une perversion particulièrement élégante. Je ne pense pas.

Oui, j'ai déjà vérifié, je pense... si ce n'était pas le cas, vous pourriez garder une vente autsraélienne dans un compte islamique, et un achat dans un compte spread. Il y aurait des bénéfices stables... plus que dans la banque.
 

1. Situation de fermeture partielle d'une commande - le ticket est changé, et écrit dans le commentaire à la nouvelle commande, il est clair, il peut être retiré.
2. La situation de certains courtiers qui transfèrent une position pendant la nuit/le week-end, ils ferment la position et l'ouvrent à nouveau au début de la journée, comment le ticket se comporte-t-il dans ce cas ? L'ancien ticket est écrit dans le commentaire de la nouvelle position, rien ne se passe ? Quels sont les moyens de garder la trace des commandes s'il y en a plus de 4-8 ?

 
Vladislav : vous auriez dû supprimer ce message, je pense.
 
artmedia70:


datetime est identique à int



J'ai réfléchi - j'étais sûr que datetime était un int non signé, j'ai vérifié et vous aviez raison. Il s'avère que MT4 ne vivra pas plus longtemps que 2038 ;). Il est encore temps )))))))))))))))))))))))).
 
tara:
Vladislav : vous n'auriez pas dû supprimer le message, je pense.


Non pas pour rien, IMHO, bien sûr : datetime est vraiment int. Bien que tout ce qui est écrit soit correct en général, mais pas dans ce cas. Ici, je ne peux pas comprendre la logique des développeurs d'ICL (((((((((((((. Peut-être le corrigeront-ils dans une nouvelle version de la langue.

HH le sens du message supprimé était que les types doivent être utilisés comme prévu, sinon vous pouvez rencontrer des erreurs d'exécution. Dans ce cas, pour la date, il est préférable de choisir datetime, et non int, car il y a un espoir que l'inadéquation des types soit corrigée.

 
VladislavVG:


Pas pour rien, IMHO, bien sûr : datetime est vraiment int. Bien que tout ce qui a été écrit soit correct en général, mais pas dans ce cas. Je ne comprends pas la logique des développeurs d'ICL ici (((((((((((((. Peut-être le corrigeront-ils dans une nouvelle version de la langue.

HH le sens du message supprimé était que les types doivent être utilisés comme prévu, sinon vous pouvez rencontrer des erreurs d'exécution. Dans ce cas, pour la date, il est préférable de choisir datetime, mais pas int, car on peut espérer que le décalage des types sera corrigé.


Je suis d'accord, nous ne devrions pas utiliser int au lieu de datetime, ou couleur. pas même à cause des erreurs d'exécution, mais de ce qui se passera quand les développeurs mettront les choses en ordre.
 
VladislavVG:


Non pour rien, IMHO, bien sûr : datetime est vraiment int. Bien que tout ce qui a été écrit soit correct en général, mais pas dans ce cas. Je ne comprends pas la logique des développeurs d'ICL ici (((((((((((((. Peut-être le corrigeront-ils dans une nouvelle version de la langue.

HH le sens du message supprimé était que les types doivent être utilisés comme prévu, sinon vous pouvez rencontrer des erreurs d'exécution. Dans ce cas, pour la date, il est préférable de choisir datetime, mais pas int, car on peut espérer que le décalage des types sera corrigé.

Oui. Ils ont promis 8 octets comme dans MQL5. Je suppose que ce sera le type __time64_t (UNIXTIME64).
 
solnce600:

Messieurs les professionnels.... je suis confus

TarasBY etartmedia70 disent que mon erreur est liée à la valeur de la variable stockant le numéro magique de la commande


Vinin dit que cen'est pas une question de nombre magique mais de mauvaise logique......... artmedia70 se dispute avec lui

.

Si les professionnels n'ont pas de consensus sur mon problème, que dois-je faire en tant que débutant pour résoudre mon problème ?
.


L'erreur avec le magicien fait que votre EA ne voit pas que sa position est fermée sur un stop lorsqu'elle se ferme sur un stop. Pourquoi ? La réponse est que vous ouvrez une position avec magic 123 et envoyez la variable Magic à la fonction qui vérifie la fermeture de la position au stop. Que pensez-vous qu'elle soit égale lorsqu'elle est initialisée implicitement ? Zéro. La fonction recherche naturellement les positions avec le numéro magique 0 et il est égal à 123 dans vos positions. Et nous ne sommes pas en train de nous disputer, juste... ...raisonnement... Vérifiez la réponse pour fermer sur l'arrêt :


double   Lot;
int      Magic=123;

int start() {

   double Price=iOpen(Symbol (),0,0);
          
   int last_order_bar=0; 
   int ot=OrdersTotal();
   if (ot>0) {
      if (OrderSelect(ot-1,SELECT_BY_POS))
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) last_order_bar=iBarShift(Symbol(),0,OrderOpenTime()); 
      }                                    

   int last_hist_order_bar=0;   
   int oht=OrdersHistoryTotal(); 

   if (oht>0) { 
      if (OrderSelect(oht-1,SELECT_BY_POS, MODE_HISTORY))    
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) last_hist_order_bar=iBarShift(Symbol(),0,OrderOpenTime());
      }

   if (ot==0)
      if (Bid==Price)
  //=============================================================== 
         if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
            if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
               if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))
  //============================================================
                  Lot=MarketInfo(Symbol(), MODE_MINLOT);   
                  if (isCloseLastPosByStop(Symbol(), OP_BUY, Magic, Lot)) {
                     Lot=Lot*2;
                     OrderSend(Symbol(),OP_SELL,Lot,Bid,1,Ask+1500*Point,Ask-300*Point,"jfh",123 );
                     }
                  else {
                     Lot=0.1;        
                     OrderSend(Symbol(),OP_SELL,1,Bid,Lot,Ask+1500*Point,Ask-300*Point,"jfh",123 );
                     }
   return(0);
}
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy, int op, int mn, double &ll) {
   double   pt;
   int      dg, i, j=-1, k=OrdersHistoryTotal()-1;
   datetime t=0;                                   // во избежание возможных ошибок после возможных будущих улучшений
   for (i=k; i>=0; i--) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderMagicNumber()!=mn)   continue;   // если магик не тот, переходим к следующему
         if (OrderSymbol()!=sy)        continue;   // если символ не тот, переходим к следующему
         if (OrderType()!=op)          continue;   // если тип не тот, переходим к следующему
         if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            j=i;
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      dg=MarketInfo(OrderSymbol(), MODE_DIGITS);      // количество знаков в цене символа ордера
      pt=MarketInfo(OrderSymbol(), MODE_POINT);       // размер пункта инструмента в валюте котировки ордера
      if (MathAbs(OrderClosePrice()-OrderStopLoss())<0.5*pt) { // Если закрыт по стопу
         ll=OrderLots();                              // записываем количество лотов в ордере, закрытом по стопу
         return(true);                                // возвращаем истину
         }
      }
   return(False);                                     // возвращаем ложь (позиции нету, либо не по стопу)
}
//+----------------------------------------------------------------------------+

Je n'ai pas regardé le reste de la logique de votre EA "mort" - je vous aidais à comprendre la fonction pour vérifier la fermeture sur le stop....

 
tara:

Vous êtes les bienvenus. Bonne chance !

Alexei ! Bonjour !

Notre communication ne sort pas de ma tête...... et voici pourquoi.....

En ce qui concerne mon codage, j'ai entendu à plusieurs reprises des commentaires sur le manque de logique.

Hier, vous m'avez expliqué l'algèbre booléenne, c'est un sujet vaste et profond.

Le fait est que je ne suis pas un mathématicien et certainement pas un esprit algébrique.

Certaines choses mathématiques pas très difficiles, je les comprends.... mais pas en même temps, et des choses complexes, mon cerveau ne les perçoit pas du tout.

Il y a plus de six mois, avant que je ne commence à étudier le manuel de programmation MCL, je me suis demandé

si je pouvais le comprendre sans compétences mathématiques.

Mais M. Kozlov, dans la préface de son manuel, affirme que c'est en fait beaucoup plus simple qu'il n'y paraît à première vue.

à première vue.

Et en effet, 60-70% de son tutoriel, je pense que je suis maintenant capable de comprendre (probablement pas la première fois) et par conséquent je peux déjà coder quelque chose.

Jusqu'à hier, il me semblait que tous les calculs mathématiques complexes (que je ne peux pas comprendre) font le programme, et que je n'ai besoin que de connaître les règles qui permettent de les réaliser.

le programme fonctionne et fait les calculs.

Mais notre conversation d'hier m'a amené à l'idée que si je n'apprends pas l'algèbre de Boole, mes codes seront dépourvus de logique.

Si mes codes manquent de logique booléenne, mes programmes ne fonctionneront pas correctement, ou ne fonctionneront pas du tout.

Mais j'ai jeté un coup d'œil à Wikipédia hier et j'ai réalisé que l'algèbre booléenne, et probablement la logique, ne sont pas faites pour mon esprit !

Hier, vous avez rapidement déduit d'un coup d'œil rapide sur un fragment de mon code qu'il manque de logique booléenne.

Si vous le voulez bien, pourriez-vous expliquer le cheminement de votre raisonnement, qui a précédé votre conclusion sur l'absence de logique dans ce fragment.

Si je vous comprends, je passerai à autre chose. Si je ne comprends pas..... je conclurai probablement que la programmation est quelque chose qui dépasse largement mes capacités.

Merci.

si (ot==0)
si (Bid==Prix)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))

Raison: