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

 
denis77515:

Bonjour Mr. les professionnels.Ne refusez pas un débutant en programmation, regardez le code, pour voir s'il est écrit correctement. Qui n'est pas trop paresseux pour s'en occuper. Je ne peux pas la tester dans le testeur de stratégie car elle est multidevise. Fichier avec le code et les indicateurs joint à l'archive.


J'ai élaboré une fonction unique pour vous permettre de créer des tableaux liés de symboles et de nombre d'ordres (positions ouvertes) d'achat et de vente. Testez le script en ouvrant quelques positions sur un site de démonstration
.
string Smbl[];
int CntBuy[],CntSell[];
void OnStart()
 {
    if(CountBuySell(Smbl, CntSell, CntBuy))
       for(int i=0; i<ArraySize(Smbl); i++) PrintFormat(" Symbol %s CntBuy %d CntSell %d", Smbl[i], CntBuy[i], CntSell[i]);
 }
//-------------------
bool CountBuySell(string &symb[], int &cnt_sell[], int &cnt_buy[])
{
   int ot,n,N=0,f=0,cb=0,cs=0;
   string symbol;
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         
         ot=OrderType()+1; if(ot>2)  continue;                       // пропускаем лимит ордера
         symbol=""; symbol=OrderSymbol(); if (symbol=="") continue;  // убедились что символ выбран
         f=0; cb=0; cs=0;                                            // обнулили счетчики и флаг символа
         for (n=0; n<N; n++) if (symbol==symb[n]) f=1;               // если в массиве символ OrderSymbol() уже есть, то не будем увеличивать размерность массивов, просто допишем в нижнем цикле еще 1 позицию
         if (f==0)                                                   // такого символа symbol=OrderSymbol() еще не было, увеличим размерность массивов под новый символ и запишем этот символ
         {
            N++; 
            ArrayResize(symb,N); ArrayResize(cnt_buy,N); ArrayResize(cnt_sell,N);
            symb[N-1]=symbol; cnt_buy[N-1]=0.0; cnt_sell[N-1]=0;
         }
         
         if(ot==1) cb++;  // OP_BUY   для выбранного символа
         else      cs++;  // OP_SELL
         
        // перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций
        // такоим образом для каждого индекса всех 3 массивов будет соответствовать  конкретный символ и количество позиций покупки и продажи для него
         for (n=0; n<N; n++) if (symbol==symb[n]) { cnt_buy[n]+=cb; cnt_sell[n]+=cs;  }
         
      }
   }
   if(N>0) return(1);   // есть открытые позиции
   return(0);           // позиций нет
}
 
evillive:

J'essaie d'écrire un EA simple qui ferme toutes les positions sur mon compte lorsqu'il atteint les valeurs de profit ou de perte spécifiées dans la devise de dépôt (j'ouvre par plusieurs symboles), mais il ferme les positions dès qu'elles apparaissent ((()

Je ne comprends pas ce qui ne va pas :



Regarde ça.


extern int profit = 30 ;

extern int Magic=0 ;

int CurProfit ;

extern bool CurSymbolOnly = false ;


int start() // Démarrage de la fonction spéciale

{

//compteur de profit de tous les ordres

double p1 ;

int i1, kk1=OrdersTotal(), pr1=0 ;

pour (i1=0 ; i1<kk1 ; i1++)

{

si(OrderSelect(i1, SELECT_BY_POS, MODE_TRADES))

{

if (!CurSymbolOnly || OrderSymbol()==Symbol())

{

p1=MarketInfo(OrderSymbol(), MODE_POINT) ;

si (p1==0) si (StringFind(OrderSymbol(), Symbol())<0) p1=0.0001 ; sinon p1=0.01 ;

si (OrderType()==OP_BUY)

{

pr1+=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/p1, 0) ;

}

si (OrderType()==OP_SELL)

{

pr1+=NormalizeDouble((OrderOpenPrice()-OrderClosePrice())/p1, 0) ;

}

}

}

}

CurProfit=pr1 ;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

si (profit<=pr1)

{

ClosePosWithMaxProfitInCurrency() ;

}

retour(0) ;

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///ferme du plus cher au moins cher

void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1)

{

double pr=0 ;

int i5, k=OrdersTotal(), np=-1 ;

si (sy=="0") sy=Symbole() ;

pour (i5=k-1 ; i5>=0 ; i5--)

{

si (OrderSelect(i5, SELECT_BY_POS, MODE_TRADES))

{

si ((OrderSymbol()==sy || sy==") && (op<0 || OrderType()==op))

{

si (mn<0 || OrderMagicNumber()==mn)

{

si (pr<OrderProfit()+OrderSwap())

{

pr=OrderProfit()+OrderSwap() ;

np=i5 ;

}

}

}

}

}

si (np>=0)

{

si (OrderSelect(np, SELECT_BY_POS, MODE_TRADES))

{

{for (int i=OrdersTotal()-1 ; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break ;

if (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),9) ;

si (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),9) ;

}

}

}

}

closeotlojnie() ;

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//closeotlojnie

void closeotlojnie()

{

for (int i=OrdersTotal()-1 ; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break ;

si (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket()) ;

si (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket()) ;

si (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket()) ;

si (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket()) ;

}

}

 
GSB:
J'ai élaboré une fonction unique pour vous permettre de créer des tableaux liés de symboles et de nombre d'ordres (positions ouvertes) d'achat et de vente. Testez le script en ouvrant plusieurs positions sur une démo.


Merci pour votre temps, mais c'est un peu compliqué pour moi, désolé pour l'intrusion. Expliquez-moi quoi, où, comment ? Comme ils disent sur les doigts.


Je n'ai jamais eu l'habitude de négocier sur ce genre de scripts.

 
GSB, pako, merci, cela fait un moment que je suis distrait et que je ne remarque pas ce genre de choses...
 
denis77515:

Merci pour votre temps, mais c'est un peu compliqué pour moi, désolé pour l'intrusion. Expliquez-moi quoi, où, comment ? Comme ils disent sur les doigts.


Je l'ai essayé et l'ai négocié manuellement sur un compte de démonstration.


Comment l'avez-vous testé sur un compte de démonstration s'il n'y a que des erreurs ? Le code qui a été présenté ne pouvait pas être échangé. J'ai ajouté des commentaires au code. Vous devez faire tout le travail vous-même, sans connaissance et sans travail... Il n'est pas possible de faire du commerce sur les marchés boursiers, notamment sur le marché des changes. Le résultat sera sans ambiguïté. En plus des problèmes mentionnés ci-dessus, vous devez utiliser le système de trading que vous avez choisi. Après 2 ou 3 mois, les résultats apparaîtront, et vous déciderez alors si ce système vous convient personnellement et s'il est adapté au trading en principe.
 
Merci, nous allons travailler dur !
 
Question aux modérateurs ou aux administrateurs : Puis-je changer mon surnom ? J'ai essayé de m'inscrire à MQL5, mais il s'est avéré que mon pseudo y était déjà utilisé, j'ai donc dû m'inscrire sous un autre. Je veux avoir le même surnom là-bas et ici. Bien sûr, je peux me réinscrire ici aussi, mais j'ai commencé à poster quelque chose dans Code Base et je veux garder la paternité de mes œuvres (et de mes posts) simplement en "changeant de nom". Est-ce possible ?
 
Spy:
Question aux modérateurs ou aux administrateurs : Puis-je changer mon surnom ? J'ai essayé de m'inscrire à MQL5, mais il s'est avéré que mon pseudo y était déjà utilisé, j'ai donc dû m'inscrire sous un autre. Je veux avoir le même surnom là-bas et ici. Bien sûr, je peux me réinscrire ici aussi, mais j'ai commencé à poster quelque chose dans Code Base et je veux garder la paternité de mes œuvres (et de mes posts) simplement en "changeant de nom". Est-ce possible ?

Écrivez à Rosha dans un message privé. J'espère que vous la trouverez. Exposez le problème
 

OK, merci.

 

Bonjour, ayant des EAs sur une version précédente de MetaTrader, j'ai mis à jour le terminal. Après ça, je suis retourné au 509. Donc les EAs ont "été" dans 60... Bild, ils sont revenus à la version du terminal sur laquelle ils avaient été écrits.

La question est la suivante : que faire avec les EA qui ne s'ouvrent plus dans le Strategy Tester après leur "retour" et ceux qui ne peuvent plus être testés (le bouton de démarrage dans le Strategy Tester ne répond tout simplement pas à un clic) ?