Qu'est-ce qu'il y a de mal à ça ? - page 5

 
sss2019:


Wow merci, je pense que cette méthode est plus polyvalente.

Au fait, comment déclarer dans l'EA que l'ordre a été ouvert, OrderSend si je comprends bien n'envoie que le ticket d'ordre. Peut-être que cela peut être mis en œuvre en utilisant OrderSelect ?


Avant le bloc d'initialisation, déclarons une variable qui portera le ticket de commande. Par exemple :

int Ticket ;

Dans la fonction start (), avant d'appeler OrderSend(), nous écrivons :

Ticket=-1 ;

Puisque la fonction OrderSend() renvoie un ticket de la commande, nous vérifions si la variable Ticket est supérieure à zéro, alors la commande a été passée. Sinon, nous n'avons pas d'ordre - voir l'aide de OrderSend() - il y est écrit que si l'ordre n'a pas été défini, la fonction retournera la valeur = (-1), et non le tick. Au tick suivant, comme la variable est d'abord initialisée avec la valeur = -1 et qu'aucun ordre n'est fixé, la variable restera négative jusqu'à la fin du code. Et cela continue jusqu'à ce qu'une nouvelle commande soit passée.

 
Pourriez-vous me montrer un exemple, car j'ai du mal.
 
sss2019:
Pourriez-vous me montrer un exemple, car j'ai du mal.
#property copyright ""
#property link      ""

int Ticket;
//+------------------------------------------------------------------+
//|                  Блок инициализации                              |
//+------------------------------------------------------------------+
int init(){
        return(0);
}
//+------------------------------------------------------------------+
//|                  Блок деинициализации                            |
//+------------------------------------------------------------------+
int deinit(){
        return(0);
}
//+------------------------------------------------------------------+
//|                  Старт работы советника                          |
//+------------------------------------------------------------------+
int start(){
        Ticket=(-1);
        
        if(если есть торговый сигнал){
                Ticket=OrderSend();
        }
        if(Ticket>0){// тикет более нуля - ордер встал
                // выполняем какие-то действия
        }
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+
 

Pourquoi Ticket=(-1) ; est entre parenthèses ?

C'est quoi cette absurdité, la commande est ouverte et le ticket est toujours -1.

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern int MaFastPeriod = 30;
extern int MaSlowPeriod = 90;
extern int StopLoss = 25;
extern int TakeProfit = 50;

int Ticket;
int init()
  {

  }



int deinit()
  {

  }

int start()
  {
  Ticket=(-1);
  double MyPoint = Point;
   if(Digits == 3 || Digits == 5)
      {
      MyPoint = Point * 10;
      }
      
double MaFast0 = iMA(Symbol(),0,MaFastPeriod,0,MODE_EMA,PRICE_CLOSE,0);
double MaSlow0 = iMA(Symbol(),0,MaSlowPeriod,0,MODE_EMA,PRICE_CLOSE,0);
   
   if(OrdersTotal() == 0 && MaFast0 > MaSlow0 && Ticket==(-1))
      {
      Ticket=OrderSend(Symbol(),0,0.1,Ask,30,Ask-StopLoss*MyPoint,Ask+TakeProfit*MyPoint,"CommentA",0,0,Green);
      return(Ticket);
      }
  Alert("Ticket = ",Ticket); 
   return(0);
  }
 
Pourquoi écrivez-vous Le programme ne va pas plus loin, et vous ne recevrez pas d'alerte.
return(Ticket);?
 
Il s'avère que la fenêtre d'alerte n'apparaîtra que s'il n'y a pas eu de signal pour ouvrir une position et qu'elle affichera nécessairement -1.
 
Donc, une fois qu'un ordre a assigné son numéro à la variable Ticket, il n'est pas nécessaire de le sortir avec le retour, la variable ne sera plus supprimée au prochain tick ?
 

Est-il possible d'ouvrir plusieurs ordres en même temps ? Par exemple, comme ceci

if(условие выполнено)
{
OrderSend()
OrderSend()
OrderSend()
}
 
sss2019:

Est-il possible d'ouvrir plusieurs ordres en même temps ? Par exemple, comme ceci

Il se peut que cela ne fonctionne pas ainsi, car la première demande sera traitée par le serveur et les suivantes recevront une erreur. Il serait préférable d'utiliser vos propres commandes avec gestion des erreurs.
 
sss2019:

Est-il possible d'ouvrir plusieurs ordres en même temps ? Par exemple, comme ceci ?


Vous ne pouvez pas tout faire en même temps.

Seulement consécutivement.