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

 
sting-igor:
Les DoCs ont-ils une limite sur le nombre de transactions ?

Certains ont non seulement une limite sur le nombre d'offres, mais même une limite sur le nombre de demandes.

Ils sont de tels inventeurs ! :-))

 
Bonjour !
La dernière fois, j'ai posé une question sur l'ouverture des commandes, maintenant j'ai une question sur leur fermeture).
Vous trouverez ci-dessous un morceau de code avec des fonctions qui ouvrent des ordres et les ferment.
Lorsque mon conseiller expert fonctionne, j'obtiens une "particularité" comme celle-ci : Par exemple, 10 ordres différents sont ouverts et 2 d'entre eux sont fermés dans le processus,

Les autres restent ouverts jusqu'à la fin du test, bien qu'une fermeture conditionnelle d'un ordre doive avoir lieu lorsqu'un autre est ouvert.

........................
magick=MathRand(); 
     
     if(NewBar())
 {     

  //---- Условие SELL
if(MAarrUP1[j]>0.35 && MAarrUP2[j]>1.8)
     {
 closeDnOrd();OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,magick,0,Blue);
     } 
  
  //---- Условие BUY
    if(MAarrDN1[j]<-0.35 && MAarrDN2[j]<-1.8)
    {
closeUpOrd();OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,magick,0,Red);
     }
}
............
//--------------------------------------------------------- Функции

//----- Функция закрытия селл

void closeUpOrd()
  {
  for(int i=0;i<=OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=magick || OrderSymbol()!=Symbol()) continue;

  if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
      } 
    }

//---- Функция закрытия бая

void closeDnOrd()
  {
  for(int i=0;i<=OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=magick || OrderSymbol()!=Symbol()) continue;

 if(OrderType()==OP_BUY)
{
 OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
}
      } 
  }

Une autre question concernant les erreurs 4051 et 134 lors de l'utilisation de OrderClose(), que signifient-elles ? J'ai copié les informations du journal.

02:54:37 2010.10.17 23:16  Ti&Pi_Speeder_Exp AUDUSD,M1: invalid ticket for OrderModify function
02:54:37 2010.10.17 23:16  Ti&Pi_Speeder_Exp AUDUSD,M1: OrderModify error 4051


02:54:37 2010.10.17 23:22  Ti&Pi_Speeder_Exp AUDUSD,M1: OrderSend error 134

 
Vinin:

La dernière option semble avoir plus ou moins bien fonctionné. Bien qu'il soit possible de simplifier les calculs
Dites-moi pourquoi vous avez la fonction iMAOnArray dans une boucle séparée ?
 

Veuillez me conseiller ! Comment puis-je fermer deux ordres en attente avec la même magie, mais avec un lot différent.


int start()

{
double MyLastBullOpenPrice=0 ;
for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
{
OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES) ;
if(OrderMagicNumber()==12345 && OrderType()==OP_BUY)
{
MyLastBullOpenPrice=OrderOpenPrice() ;
double Cena=OrderOpenPrice()+5*Point ;
double Totalcena= Bid ;

if (Totalcena>Cena)
{
if (OrdersTotal()>0)
{ for (int i=OrdersTotal()-1 ; i>=0 ; i--)
{ si (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{Si(OrderMagicNumber()==12345)

{ if(OrderDelete(OrderTicket())==true)
{
Print("Error = ",GetLastError()) ; return(0) ;
}
} } } }
}
}

return(MyLastBullOpenPrice) ;
}

 
Fox_RM:
Bonjour !
La dernière fois, j'ai posé une question sur l'ouverture des commandes, maintenant j'ai une question sur leur fermeture).
Vous trouverez ci-dessous un morceau de code avec des fonctions qui ouvrent des ordres et les ferment.
Lorsque mon conseiller expert fonctionne, j'obtiens une "particularité" comme celle-ci : Par exemple, 10 ordres différents sont ouverts et 2 d'entre eux sont fermés dans le processus,

Les autres restent jusqu'à la fin du test, bien qu'une fermeture conditionnelle d'un ordre doive avoir lieu lorsqu'un autre est ouvert.

Une autre question concernant les erreurs 4051 et 134 lors de l'utilisation de OrderClose(), que signifient-elles ? J'ai copié les informations du journal.

134 - pas d'argent, 4051 - mauvais paramètres passés à la fonction.

Quant au point - vérifiez que la variable magick n'est assignée qu'une seule fois, de préférence dans la fonction init(), sinon, chaque commande aura sa propre magick et le résultat sera quelque chose comme ce que vous décrivez.

 

Veuillez m'aider à ajouter (ou écrire) une fonction de substitution de caractères pour une chaîne de caractères à travers des tableaux.

Ayez deux tableaux de caractères :

string symbols1[] = {"a", "b", "c", "d"} ;
string symbols2[] = {"1", "2", "3", "4"} ;


J'ai essayé d'écrire une fonction qui remplacerait le texte badc par 2143, sur la base des tableaux, et j'ai obtenu ce résultat :

string ReplaceSymbolsInStr(string text){
string textMod[] ={""};
string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==OneSymbol) int PosSymbolIn1array=i2;
}
return(-1);

string OneSymbolMod = symbols2[PosSymbolIn1array];
int NewArraySize = ArraySize(textMod)+1;
ArrayResize(textMod,NewArraySize);
textMod[i1]=OneSymbolMod;
string textNew;
textNew=StringConcatenate(textMod[1],textMod[2]...);//собрать массив в строку вообще не могу :(
return (textNew);
}
}

Je sais que c'est faux et je n'arrive pas à assembler le tableau en une chaîne de caractères. Aidez-moi, s'il vous plaît.

 
Zhunko:

Certains ont non seulement une limite sur le nombre d'offres, mais même une limite sur le nombre de demandes.

Ils sont de tels inventeurs ! :-))

y a-t-il un empêchement à ce qu'ils se mêlent de vos affaires ?
 
Lians:

Veuillez m'aider à ajouter (ou écrire) une fonction de substitution de caractères dans une chaîne de caractères par le biais de tableaux.

Ayez deux tableaux de caractères :

string symbols1[] = {"a", "b", "c", "d"} ;
string symbols2[] = {"1", "2", "3", "4"}


J'ai essayé d'écrire une fonction qui remplacerait le texte badc par 2143, sur la base des tableaux, et j'ai obtenu ce résultat :

string ReplaceSymbolsInStr(string text){
string textMod[] ={""};
string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==OneSymbol) int PosSymbolIn1array=i2;
}
return(-1);

string OneSymbolMod = symbols2[PosSymbolIn1array];
int NewArraySize = ArraySize(textMod)+1;
ArrayResize(textMod,NewArraySize);
textMod[i1]=OneSymbolMod;
string textNew;
textNew=StringConcatenate(textMod[1],textMod[2]...);//собрать массив в строку вообще не могу :(
return (textNew);
}
}

Je sais que c'est faux et je n'arrive pas à assembler le tableau en une chaîne de caractères. Aidez-moi, s'il vous plaît.

Vous êtes censé avoir trouvé l'index du caractère dans le tableau de remplacement, alors pourquoi créer un autre tableau ?

Essayez de l'ajouter à une variable de texte brut dans la première boucle :

chaîne ReplaceSymbolsInStr(chaîne texte)

{


string symbols1[] = {"a", "b", "c", "d"} ;

string symbols2[] = {"1", "2", "3", "4"};

chaîne de caractères textNew="" ;

int textLen = StringLen(text) ;

for (int i1=0 ; i1<textLen ; i1++)
{
string OneSymbol = StringSubstr(text,i1,1) ;

for (int i2=0 ; i2<ArraySize(symbols1) ; i2++)

{
if (symbols1[i2]==OneSymbol) {textNew = textNew + symbols2[ i2 ]; i2=ArraySize(symbols1) ; }

}

}

return (textNew) ;

}

 


Ou c'est encore plus simple comme ça :

chaîne ReplaceSymbolsInStr(chaîne texte)

{


string symbols1[4] = {"a", "b", "c", "d"} ; // taille du tableau en fonction du nombre de symboles qu'il contient

chaîne de caractères textNew="" ;

for (int i1=0 ; i1< StringLen(text) ; i1++)

{
string OneSymbol = StringSubstr(text,i1,1) ;

for (int i2=0 ; i2<ArraySize(symbols1) ; i2++)

{
if (symbols1[i2]==OneSymbol )

{

textNew = textNew + (i2+1); // le numéro du symbole lui-même est ajouté au texte renvoyé

i2=ArraySize(symbols1) ; // a terminé la boucle de recherche

}

}

}

return (textNew) ;

}

 

Bonne journée !

Pourriez-vous me conseiller (ou me donner un lien d'exemple) sur la manière d'envoyer automatiquement des données au format csv par e-mail ?

Merci.