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 ?))
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 :
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.
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.
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é.
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.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
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.
Il semble que ce soit le cas maintenant, n'est-ce pas ?))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 l'ai eu :-) Je pensais que le prix n'était accessible que lorsque l'exécution de cette fonction atteignait OrderSend.
Je pense que oui.
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.
donc l'utiliser dans le programme.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.Ou alors c'est comme ça
Je pense que oui.
Tout semble fonctionner, merci.
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.
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é.
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.