[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 211

 
Top2n:
Je ne comprends pas.

Apprenez à connaître les drapeaux.
 
quels pays) Veuillez écrire ce que sont les drapeaux. Quelles sont les clés pour entrer dans le moteur de recherche et les lire.
 
Si vous voulez dire faux vrai, je ne vois pas comment vous pouvez ouvrir un seul ordre à la fois.
 
Pouvez-vous me dire comment un EA ouvre une grille d'ordres ? J'ai écrit une fonction qui détecte l'ordre avec le prix le plus élevé et le plus bas. Mais j'ai également besoin d'informations sur la deuxième commande dont le prix est le plus bas ou le plus élevé.
 
Top2n:
Si vous voulez dire faux vrai, alors je ne comprends pas comment il est possible d'ouvrir exactement un ordre.
Pourquoi ne pas vérifier s'il existe déjà une position ouverte du type de celle qui devrait être ouverte par le signal ?
S'il existe déjà, ne l'ouvrez pas.

S'il n'y a pas de position de ce type sur le marché, alors ouvrez-la.

En plus de cette vérification, vous pouvez également vérifier d'autres conditions. Par exemple : s'il existe déjà une telle position, mais qu'un temps donné s'est écoulé après son ouverture, une autre position peut être ouverte... etc. etc. ...

 
DimaMA:
Pouvez-vous me dire comment un EA ouvre une grille d'ordres ? J'ai écrit une fonction qui détermine la commande avec le prix le plus élevé et le prix le plus bas. Mais j'ai besoin de plus d'informations sur la deuxième commande avec le prix le plus bas ou le plus élevé. ici en général la 2ème et non la dernière. dites-moi la fonction.

Passez en revue toutes les commandes et stockez-les dans un tableau à deux dimensions. Dans la première dimension du tableau, enregistrez l'heure à laquelle la commande a été passée, et dans la deuxième dimension, enregistrez son ticket. Trier le tableau par la date de classement (par la première dimension) dans l'ordre décroissant. Le deuxième élément du tableau dans la première dimension contiendra la date d'installation de l'avant-dernière commande (la deuxième en partant de la fin), et la deuxième dimension contiendra le ticket de la commande nécessaire. Vous sélectionnez la commande par ce billet et... Vous pouvez en faire ce que vous voulez.


Une fois j'ai écrit une fonction pour calculer le Breakeven pour le N-ième nombre de dernières positions pour un EA personnalisé. Le calcul doit être effectué pour les dernières positions, en commençant par l'avant-dernière. Vous pouvez regarder comment elle est mise en œuvre et en tirer quelque chose :

//+----------------------------------------------------------------------------+
// Уровень безубытка по символу для N последних позиций, начиная с предпоследней
double LevelPreWLforNpos(int op, int mn1, int mn2, int num) { 
   double lots=0;
   double sum=0;
   int n=0;
   int mass[1][2];
   ArrayInitialize(mass,0);
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)  continue;
         if (OrderType()!=op)    continue;
         if (OrderMagicNumber()==mn1 || (OrderMagicNumber()==mn2 || OrderMagicNumber()<0)) {
            n++;
            if (n>ArrayRange(mass,0)) ArrayResize(mass, n);
            mass[n-1][0]=OrderOpenTime();
            mass[n-1][1]=OrderTicket();
            }
         }
      }
   ArraySort(mass,WHOLE_ARRAY,0,MODE_DESCEND);
   if (ArrayRange(mass,0)>num+1)  ArrayResize(mass,num+1);
   for (i=1; i<ArrayRange(mass,0); i++) {
      if (OrderSelect(mass[i][1],SELECT_BY_TICKET)) {
         if (OrderCloseTime()==0) {
            if (OrderType()==OP_BUY) {
               lots+=OrderLots();
               sum+=OrderLots()*OrderOpenPrice();
               }
            if (OrderType()==OP_SELL) {
               lots-=OrderLots();
               sum-=OrderLots()*OrderOpenPrice();
               }
            }
         }
      }   
   double price=0;
   if (lots!=0) price=sum/lots;  
   return(NormalizeDouble(price,dg));
}
//+----------------------------------------------------------------------------+
 
Top2n:
Si vous voulez dire faux vrai, je ne vois pas comment vous pouvez ouvrir un seul ordre à la fois.


Oui. C'est ce que je veux dire. Voir le tutoriel ici. Vous aurez quelques conditions supplémentaires, comme vous écrivez : "Question d'attention !) Et comment le faire ouvrir une fois pour (sig1) il peut être ainsi sig1-open BAY, la commande suivante, sig0-admit inclusion. trall (pas important), la commande suivante encore, sig1-open second BAY." - n'est-ce pas beaucoup de fois ? Il semble que vous n'en ayez pas besoin... En général, jouez avec les drapeaux.

 
Roman.:


Oui. Je parle d'eux. Voir le tutoriel ici. Vous aurez quelques conditions supplémentaires, comme vous écrivez : "Attention question !) Et comment faire pour qu'il s'ouvre une fois pour (sig1) alors qu'il peut être ainsi sig1-ouvrir BAY, la commande suivante, sig0-admettre sur. chalut (il n'a pas d'importance), la commande suivante à nouveau, sig1-ouvrir deuxième BAY" - n'est-ce pas plusieurs fois ? Il semble que vous n'en ayez pas besoin... En général, jouez avec les drapeaux.

Est-ce que Kimi a une fonction appropriée, par hasard ? Afin de ne pas encombrer le programme. Il est nécessaire qu'il ouvre l'ordre et se calme, mais "mille" en une seconde.
 
Top2n:
Est-ce que Kim I.V. a une fonction appropriée ? Afin de ne pas encombrer le programme. Je veux qu'il ouvre une commande et qu'il se détende, car il en "ouvre mille" en une seconde.
Faites votre choix.
 

Je veux écrire les résultats des tests (transactions) dans un fichier après les avoir testés.

J'ai mis la fonction tofile () dans le bloc deinit() (elle écrit après que le travail soit terminé)

mais la fonction elle-même

// Запись профитов в файл
void toFile( )
{
int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
  if(handle<0) return(0);
  // запишем заголовок в файл
  FileWrite(handle,"#","проф");
 
  int total=OrdersTotal();
  // записываем в файл только закрытые ордера
  for(int pos=0;pos<total-1;pos++)
    {
     //FileSeek(handle, 0, SEEK_END);
     if(OrderSelect(pos,SELECT_BY_POS, MODE_HISTORY)==false) continue;
     FileWrite(handle,OrderTicket(),OrderProfit());
    }
  FileClose(handle);
  return;
ne fonctionne pas, il enregistre uniquement l'en-tête
Raison: