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

 
PapaYozh:


Non, ça ne l'est pas. C'est devenu encore pire :)

Comprenez que RefreshRates() met à jour les valeurs des variables Ask et Bid prédéfinies, vous utilisez la valeur une fois stockée dans la variable Price.


Je l'ai eu :-) Je pensais que le prix n'était accessible que lorsque l'exécution de cette fonction atteignait OrderSend.

 int OpenPosition(string AdvisorName,int Position,int Magic,double Lots,double StopLoss){ 
 int N; int Сount = 5; int Slippage = (CalculateSpread() * 2); double Price;
 string PeriodString = GetPeriod(Period());
 if(Position == OP_BUY){
 string OrderName = StringConcatenate(AdvisorName," - Покупка по рынку");
 string ErrorName = "Ошибка открытия ордера на покупку";
 string CriticalErrorName = "Невозможно открыть ордер на покупку";
 string MailCriticalErrorName = "Ошибка открытия"; color Arrow = Gold;}
 if(Position == OP_SELL){
 OrderName = StringConcatenate(AdvisorName," - Продажа по рынку"); ErrorName = "Ошибка открытия ордера на продажу";
 CriticalErrorName = "Невозможно открыть ордер на продажу";
 MailCriticalErrorName = "Ошибка открытия"; Arrow = YellowGreen;}
 
 while(IsTradeContextBusy() || !IsTradeAllowed()){int Interval = MathRand()+1000; 
 Print("Торговый поток занят. Повторная проверка через "+DoubleToStr((Interval/1000),0)+" сек"); 
 Sleep(Interval);} while(N < Сount){
 if(Position == OP_BUY){RefreshRates(); Price = NormalizeDouble(Ask,Digits);}
 if(Position == OP_SELL){RefreshRates(); Price = NormalizeDouble(Bid,Digits);}
 int Ticket = OrderSend(Symbol(),Position,Lots,Price,Slippage,StopLoss,0,OrderName,Magic,0,Arrow);
 if(Ticket > 0){if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)){int Flag = 1; 
 PlaySound("recharge.wav"); break;}}
 else{Flag = 0; int PRM = GetLastError(); string ERR = Error(PRM,"OrderSend()"); 
 ErrorProcessing(AdvisorName+" "+PeriodString,ErrorName+" "+PRM+" ("+
 Error(PRM,"OrderSend()")+")","","OrderSend()"); N++; Sleep(5000);}
 if(N == Сount){ErrorProcessing(AdvisorName+" "+PeriodString,CriticalErrorName,
 MailCriticalErrorName+" "+PRM+" ("+Error(PRM,"OrderSend()")+")","OrderSend()");}}
 return(Flag);}
Il semble que ce soit le cas maintenant, n'est-ce pas ?))
 
Dimoncheg:


Je l'ai eu :-) Je pensais que le prix n'était accessible que lorsque l'exécution de cette fonction atteignait OrderSend.

Il semble que ce soit le bon moment, n'est-ce pas ?))


Je pense que oui.
 
int BlackOrWhite(int countbar)
{
int result_=0;
 
if (iClose(NULL,0,countbar)-iOpen(NULL,0,countbar))
result_=1;
else
result_=-1;
 
if (iOpen(NULL,0,countbar)==iClose(NULL,0,countbar))
result_=0;
 
return(result_);
}

fonction, ne donne qu'une seule valeur pour une raison quelconque + le compilateur jure :

iClose' - expression de comparaison attendue

Je ne comprends pas ce qui ne va pas.

if(BlackOrWhite(1)>0)
      {
donc l'utiliser dans le programme.
 
nuan:

ne donne qu'une seule valeur pour une raison quelconque + le compilateur fronce les sourcils :

iClose' - expression de comparaison attendue

Je ne comprends pas ce qui ne va pas.

C'est ainsi que je l'utilise dans mon application.



if (iClose(NULL,0,countbar)-iOpen(NULL,0,countbar)>0)
   result_=1;
else
   result_=-1;

Ou alors c'est comme ça

if (iClose(NULL,0,countbar)>iOpen(NULL,0,countbar))
   result_=1;
else
   result_=-1;
 
PapaYozh:

Je pense que oui.

Tout semble fonctionner, merci.
 
Merci beaucoup.
 

Salut. J'ai besoin d'aide. La question est la suivante :

Après qu'un ordre a été déclenché, peu importe comment, tous les autres ordres doivent être fermés. Et encore par la condition que de nouveaux devraient s'ouvrir.

 
sergey_r:

Salut. J'ai besoin d'aide. La question est la suivante :

Après qu'un ordre a été déclenché, peu importe comment, tous les autres ordres doivent être fermés. Et encore par la condition que de nouveaux devraient s'ouvrir.


Avez-vous lu le manuel à ce stade ?
 

Jusqu'à présent, j'ai utilisé

statique bool order_opened = false ;

if(order_opened){return(0);}

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Blue) ;
Alert (GetLastError()) ; // Message d'erreur sur le placement de l'ordre
order_opened = true ; // si l'ordre a fonctionné, ne pas l'ouvrir à nouveau

Maintenant, nous devons ouvrir un nouvel ordre après que l'ordre a fonctionné.


 
sergey_r:

Jusqu'à présent, j'ai utilisé

statique bool order_opened = false ;

if(order_opened){return(0);}

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Blue) ;
Alert (GetLastError()) ; // Message d'erreur sur le placement de l'ordre
order_opened = true ; // si l'ordre a fonctionné, ne pas l'ouvrir à nouveau

Maintenant, il suffit d'ouvrir une nouvelle commande après que l'ordre ait été exécuté.



Lisez le tutoriel et la documentation, modifiez la logique d'ouverture, de fermeture par condition de pose, insérez du code via CTRL+ALT+M.
Raison: