[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 289

 

Eh bien en fait la stratégie elle-même est très longue et complexe, et il n'y a aucun intérêt à la décrire, c'est 1 point pour créer une boucle c'est à dire que je dois trouver quelque chose à la place de total==1 qui n'ouvre pas une position ne correspondant pas à la demande, c'est à dire si elle ferme sur st alors .........open 1, si fermé à ......... тп ouvrir 2, la condition manque d'un ordre dans le marché, c'est tout,

 
FoxUA:

Eh bien, fondamentalement, la stratégie elle-même est très long et complexe, et il n'y a pas de point dans la décrire, c'est 1 point pour créer une boucle ie je dois trouver quelque chose au lieu de total==1, qui n'ouvre pas les positions qui ne correspondent pas à la demande, c'est-à-dire si elle ferme sur st alors .........open 1, si fermé à ......... тп ouvrir 2, la condition abscence ordres dans le marché, c'est tout,


Alors vous ne voulez pas utiliser la fonction d'Igor. Vous avez besoin d'une fonction qui renvoie le type du dernier ordre fermé et la raison pour laquelle il a été fermé. Elle ne renvoie pas la raison du dernier ordre fermé d'un certain type. Je vais essayer de penser à quelque chose maintenant...

 
Figar0:


Alors vous ne correspondez pas à la fonction d'Igor que vous utilisez. Vous avez besoin d'une fonction qui renvoie le type du dernier ordre fermé et la raison pour laquelle il a été fermé (tap ou sl). Elle ne renvoie pas la raison du dernier ordre fermé d'un certain type. Je vais essayer de penser à quelque chose maintenant...


Si vous avez quelque chose de similaire à Klimovskoe qui renvoie une valeur pour la dernière fermeture de commande uniquement, je vous en serais très reconnaissant.
 

Essayez une telle fonction en conjonction avec la fonction d'Igor :

//+----------------------------------------------------------------------------+
//|  Версия   : 30.03.2011                                                     |
//|  Описание : Возвращает тип последней закрытой позиции                      |
//|  если Buy 1 , если Sell -1                                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    symbol - наименование инструмента                                       |
//|    magic - MagicNumber                                                     |
//+----------------------------------------------------------------------------+
int LastCloseDeal(string symbol, int magic) 
{
  int lastclosetime=-1;
  int lastcloseticket=-1;
  int lastdealtype=0;

  for (int i=0; i<OrdersHistoryTotal(); i++) 
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; 
    if (OrderSymbol()==symbol || OrderMagicNumber()==magic) 
    {
      if (lastclosetime<OrderCloseTime()) 
      {
        lastclosetime=OrderCloseTime();
        lastcloseticket=OrderTicket();
      }
    }
  }

  if (OrderSelect(lastcloseticket, SELECT_BY_TICKET, MODE_HISTORY)) 
  {
    if (OrderType()==OP_BUY) lastdealtype=1;
    if (OrderType()==OP_SELL) lastdealtype=-1;   
  }
  return(lastdealtype);
}
 

Votre morceau de code devrait alors ressembler à ceci

bool Buystop=isCloseLastPosByStop(NULL,OP_BUY,MagBuy);
bool BuyTake=isCloseLastPosByTake(NULL,OP_BUY,MagBuy);
bool Sellstop=isCloseLastPosByStop(NULL,OP_SELL,MagBuy);
bool SellTake=isCloseLastPosByTake(NULL,OP_SELL,MagBuy);

//--------------------------------------------------------------------------------+
if(total==1) 
 {

   if (LastCloseDeal(Symbol(), MagBuy)==1)

  {
      if(Buystop==True)    OpenPosition(NULL, OP_SELL, Lot,Bid+Sl3*Point, Bid-Tp3*Point,MagBuy);
      if(BuyTake==True)   OpenPosition(NULL, OP_BUY,  Lot, Ask-Sl*Point, Ask+Tp*Point,MagBuy);      
   }

   if (LastCloseDeal(Symbol(), MagBuy)==-1)

   { 
      if(Sellstop==True)   OpenPosition(NULL, OP_BUY,  Lot, 0, Ask+Tp*Point,MagBuy);
      if(SellTake==True)    OpenPosition(NULL, OP_BUY,  Lot, Ask-Sl*Point, Ask+Tp*Point,MagBuy); 
   }  

}

 
Figar0:

Votre morceau de code devrait alors ressembler à ceci


Merci. Je vais essayer.
 
Pour être plus précis : au lieu d'envoyer des données sur les nouveaux SL, EA devrait juste les stocker dans des variables (ou ailleurs), et continuer à traîner, traîner, et quand le prix atteint un certain niveau (prix), envoyer un signal au DC pour fermer l'ordre, (une sorte de trailing stop virtuel avec un stoploss virtuel). En d'autres termes, le conseiller expert comprend un stop suiveur sur un niveau invisible de 1 pip au serveur DC... Est-ce réaliste ?
 
Centuriy:
Pour être plus précis : au lieu d'envoyer des données sur un nouveau SL, l'EA doit simplement les stocker dans des variables (ou ailleurs), et suivre, suivre, suivre, et lorsque le prix atteint un certain niveau, il envoie un signal aux sociétés de courtage sur la fermeture d'un ordre, (une sorte de trailing stop virtuel avec un stoploss virtuel). En d'autres termes, le conseiller expert comprend un stop suiveur sur un niveau invisible de 1 pip au serveur DC... Est-ce réaliste ?


Oui, c'est réel, bien sûr. Vous regardez les ordres ouverts, ils ont un prix ouvert, par exemple, nous avons un ordre d'achat ouvert au prix de X, un stop-loss virtuel de Y points, donc si le prix actuel Z < = X-Y*Point l'ordre doit être fermé. Bien entendu, il faut également tenir compte des spreads et si le stop loss n'est pas fixe mais calculé, la valeur calculée doit être stockée en lieu sûr, etc.

Recherchez "virtual stop", "virtual stoploss", etc.

 
Figar0:


C'est réaliste, bien sûr. Si nous regardons les ordres ouverts, leur prix ouvert sera fixé, par exemple, nous avons un ordre d'achat ouvert au prix X et le stoploss virtuel est de Y points donc si le prix actuel Z <=X-Y*Point l'ordre sera fermé. Bien sûr, il faut tenir compte des spreads, et si le stop loss n'est pas fixe mais calculé, alors la valeur calculée doit être stockée en toute sécurité quelque part, etc.

Recherchez "virtual stop", "virtual stoploss", etc.

Je pense que nous ne pouvons pas nous passer d'une sorte de comptabilité des commandes.

Créez votre propre tableau d'ordres et stockez-y toutes les données d'arrêt virtuel nécessaires.

 
Figar0:


Oui, c'est réel, bien sûr. Vous regardez les ordres ouverts, ils ont un prix ouvert, par exemple, nous avons un ordre d'achat ouvert au prix de X, un stop-loss virtuel de Y points, donc si le prix actuel Z < = X-Y*Point l'ordre doit être fermé. Bien entendu, il faut également tenir compte des spreads et si le stop loss n'est pas fixe mais calculé, la valeur calculée doit être stockée en lieu sûr, etc.

Recherchez "virtual stop", "virtual stoploss", etc.

Merci pour la réponse, c'est juste le trailing stop (stop suiveur) qui est le problème, je veux traîner 1 pip min, et je veux envoyer orderModify à la société de courtage avec chaque tick - c'est juste du hooliganisme IMHO ;))

"Si le stop loss n'est pas fixé mais calculé, la valeur calculée doit être stockée en toute sécurité quelque part".

où le stocker et comment l'appeler... Je pense que ça doit être une variable, ou je me trompe...