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

 
okidoki543:
Si quelqu'un veut m'aider (voir ci-dessus), je suis ouvert à la collaboration.
Sur une base commerciale, pas de problème, il y aura une file d'attente de personnes qui veulent aider. Sinon... commencez à écrire vous-même et l'aide viendra.
 
Ekburg:

mettre OrderStopLoss() à la place de sl


n'a pas fonctionné...

void VirtualTral(int Dist_Tral,int Start_Tral,int Magic,int SL)
{

double dist=Dist_Tral;
double start=Start_Tral;
double priceopen=OrderOpenPrice();
double sl=OrderStopLoss();
 
if(OrdersTotal()<=0)
ObjectDelete("Stop"); 

int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {  

       if ((NormalizeDouble(priceopen+start*Point,Digits)<=Bid)&&(NormalizeDouble(Bid-sl*Point,Digits)>NormalizeDouble(dist*Point,Digits)))
         {                    
                sl=NormalizeDouble(Bid-dist*Point,Digits);
                Print(+sl);
                ObjectCreate("Stop",OBJ_HLINE,0,D'2013.02.20 12:30',sl);                                                         
                ObjectSet("Stop",OBJPROP_STYLE,1);                                                                                         
                ObjectMove("Stop",0,D'2013.02.20 12:30',sl);                                                                                                 
                if (NormalizeDouble(sl*Point,Digits) >=Bid)
             {
                Print("Закрываем");
                OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue);
             }
         }               
      }
   }
}

Cela semble fonctionner, mais quelque chose n'est pas pris en compte...

 
alexey1979621:
Oui, maintenant il le fait, mais il ouvre un tas de transactions, et j'ai besoin de seulement deux transactions à ouvrir sur des paires données, disons pour EURAUD et AUDUSD.

L'algorithme est plus simple qu'un arbre de feutre :

1. S'il n'y a aucune position sur l'EuroAudi, ouvrez une position,

2. S'il n'y a pas de position sur AudiBucks - ouvrez une position.

 
vadynik:


n'a pas fonctionné...

ça devrait marcher, mais quelque chose n'est pas pris en compte...

Le prix d'ouverture ne devrait-il pas être pris dans la boucle déjà après que l'ordre ait été sélectionné ?
 
artmedia70:

L'algorithme est plus simple qu'un arbre de feutre :

1. S'il n'y a aucune position sur l'EuroAudi, ouvrez une position,

2. S'il n'y a pas de position sur AudiBucks - ouvrez une position.


Non, Artemis, ça ne marche pas comme ça dans ma situation.
extern double lotAU=1.3;
extern double lotEA=1.0;
extern double Profit=30;
extern int Operation=0;
extern string Сomment           = "KVAZ";
extern int Magic                = 1111;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}

 if(Operation==0)
 {
  OrderSend(symEA,OP_BUY,lotEA,askEA,3,0,0,"KVAZ",Magic,0,Blue);
  OrderSend(symAU,OP_BUY,lotAU,askAU,3,0,0,"KVAZ",Magic,0,Blue); 
 }
 if(Operation==1)
 {
  OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ",Magic,0,Red);
  OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ",Magic,0,Red);
 }
 
   return(0);
  }
 
alexey1979621:
Non, Artemida, ça ne marche pas pour ma situation.


Dans la boucle, recalculer les positions en fonction du symbole et du magicien.

Et qu'est-ce que c'est : OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0) ;


P.S. : Artemida pas Artemida a

Artmedia

 
evillive:


Dans la boucle, recalculer les positions en fonction du symbole et du magicien.

Et qu'est-ce que c'est : OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0) ;


P.S. : Artemida n'est pas Artemida a

Artmedia


Allez, j'ai l'habitude que tout le monde me traite de tous les noms... peu importe...

En fait, le prix de clôture dans cette fonction fonctionnait bien. Le compilateur introduirait lui-même le prix nécessaire. Quelqu'un ici a récemment eu une erreur à cause de ça.

 
artmedia70:

Allez, j'ai l'habitude que tout le monde me traite de tous les noms... peu importe...

Il est temps de changer de surnom ?
 
alexey1979621:
Non, Artemis, ça ne marche pas comme ça dans ma situation.


Ouais, eh bien... Dans votre situation, quand c'est si tordu, les propositions normales ne fonctionnent pas vraiment...
 
Zhunko:
Il est temps de changer de surnom ?

Ce surnom est vieux de 300 ans... Je m'y suis attaché.
Raison: