[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 276

 
BBSL:

Si nous parlons de ticks, vous pouvez écrire un code qui sauvegarde le fichier de données, mais vous devrez charger depuis un fichier dans ekspert. Serait-il judicieux de laisser l'ordinateur en marche ?
Je suppose que je devrais utiliser la deuxième option. Merci, BBSL.
 
artmedia70:

Ce que vous faites est étrange... Lors de l'ouverture d'une position, vous attribuez le numéro du ticket à une variable, mais vous en vérifiez une autre...

Et OrderSend() renvoie -1 (moins un) en cas d'échec, et vous vérifiez si la valeur est inférieure à un, lorsque vous avez besoin d'une valeur inférieure à zéro.

C'est la première chose qui attire votre attention. Mais je pense que vous avez beaucoup de choses intéressantes là... :)


Ooh-ha-ha, oui, c'est très amusant... Surtout quand on commence à vérifier))

Allez, encore une fois... C'est comme ça,

J'ouvre la commande :

order_id = OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0,"expert comment",255,0,Red);
   if(order_id<0)
     {
      error=GetLastError();
      Print("send_orders, error = ",ErrorDescription(error));
      return;
     }
     } 

Ordre de clôture :

if(OrderSelect(0, SELECT_BY_POS)==true){

OrderClose(OrderTicket(),1,Bid,3,Red);

}

Bon, avec une seule commande ?)

 
hedger:
Apparemment, la deuxième option devrait être utilisée. Merci, BBSL.

De rien, j'espère que cela vous aidera vraiment ;))
 
artmedia70:

Ce que vous faites est étrange... Lors de l'ouverture d'une position, vous attribuez le numéro du ticket à une variable, mais vous en vérifiez une autre...

Et OrderSend() renvoie -1 (moins un) en cas d'échec, et vous vérifiez si la valeur est inférieure à un, lorsque vous avez besoin d'une valeur inférieure à zéro.

C'est la première chose qui attire votre attention. Mais je pense que vous avez beaucoup de choses intéressantes là... :)


J'ai compris, le numéro de tikit devrait être obtenu comme ça :

nomer_ticketa = OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expert comment",255,0,Green);
   if(ticket<1)
 
artmedia70:

Ce que vous faites est étrange... Lors de l'ouverture d'une position, vous attribuez le numéro du ticket à une variable, mais vous en vérifiez une autre...

Et OrderSend() renvoie -1 (moins un) en cas d'échec, et vous vérifiez si la valeur est inférieure à un, lorsque vous avez besoin d'une valeur inférieure à zéro.

C'est la première chose qui attire votre attention. Mais je pense que vous avez beaucoup de choses intéressantes là... :)


Respect, merci !))
 
BBSL:


Je comprends, vous devez obtenir le numéro de tic-tac comme ça :

Vous savez, avec une seule commande, cela peut fonctionner, mais si vous l'ouvrez encore manuellement, ce ne sera pas pareil. Le numéro du ticket doit être sauvegardé dans une variable, et après la sélection de la commande, nous devons comparer son ticket avec celui qui est sauvegardé :

 if (OrderTicket()==number_ticket) {
   // ... код для работы с выбранным ордером при совпадении тикетов
   }

Et en général, la sélection des commandes doit se faire à l'aide de la fonction OrderSelect() dans la boucle :

for (i=0; i<OrdersTotal(); i++) {                    // цикл по всем рыночным ордерам терминала
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { // Если выбран любой рыночный ордер с индексом i
      if (OrderSymbol()!=Symbol())     continue;   // Если символ не текущего графика, переходим к выбору следующего ордера
      if (OrderMagicNumber()!=Magic)   continue;   // Если его магик не совпадает с магиком советника - переходим к выбору следующего
//... далее можно проверять другие параметры выбранного ордера, но в этом месте уже есть выбранный ордер текущего графика и номером магика советника
      if (OrderTicket()==number_ticket) {          // проверяем тикет выбранного ордера и, если есть совпадение, выполняем с ним дальнейшие действия
         // ... код, выполняющий дальнейшие действия с найденным нужным ордером ...
         }
      }
   else if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Иначе, если не удалось выбрать ордер
      Print ("Ошибка при выборе ордера из списка рыночных ордеров = ", GetLastError());  // Выведем сообщение об ошибке и её номер в журнал.
   }

Il s'agit juste d'un exemple pour la compréhension, pas d'un code fonctionnel fini, si tant est qu'il y en ait un... :)

 
artmedia70:

Vous savez, si vous n'avez qu'une seule commande, cela peut fonctionner, mais si vous l'ouvrez encore manuellement, ce ne sera pas pareil. Le numéro du ticket doit être enregistré dans une variable, et après avoir sélectionné une commande, il faut comparer son ticket avec celui qui est enregistré :

Et, en général, la sélection des ordres doit être effectuée à l'aide de la fonction OrderSelect() dans la boucle :

Il s'agit juste d'un exemple pour la compréhension, pas du code complet de travail, si quoi que ce soit... :)




Lors de la clôture des ordres, s'il y a plus d'un ordre, nous devons utiliser cette boucle :

int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) {
 //...
 
bolt:

Lors de la clôture des commandes, s'il y a plus d'une commande, un cycle comme celui-ci doit être utilisé :

Lisez la dernière ligne de mon message. Qui a dit que j'avais écrit un exemple pour conclure ?

Le reste est la pure vérité. Rédigez votre propre manuel scolaire.

 

Pouvez-vous me dire pourquoi OrderOpenPrice ne fonctionne pas ? La tâche consiste à rechercher dans le pool un ordre passé à un certain prix, et s'il n'y est pas, à passer l'ordre et à activer un drapeau indiquant qu'il est passé.


for(int i=1 ; i <= OrdersTotal() ; i++)
   {
   if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES))
      {
      if(OrderOpenPrice() == price) 
        {
        orderset = true;
        }
      }
   }
     
if((orderset==false)
   {
   OrderSend(Symbol(),OP_SELLLIMIT,baselot,price,3,NULL,price-10,"Comment",0001+i,0,White); 
   }
 
Pyro:

Pouvez-vous me dire pourquoi OrderOpenPrice ne fonctionne pas ? La tâche consiste à rechercher dans le pool un ordre passé à un certain prix, et s'il n'y est pas, à passer l'ordre et à activer un drapeau indiquant qu'il est passé.



Nous ne pouvons pas comparer des chiffres réels.
Raison: