[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 - 5. - page 256

 
alsu:

Pourquoi prendre des experts en malheur comme exemple ? Au minimum, ils sont uniquement destinés au testeur, au maximum, ils sont écrits avec des mains tordues, comme indiqué ci-dessus...

J'ai compris comment le mettre en œuvre, mais j'ai décidé de voir comment les autres le font.
 

Les gars, j'ai un problème vraiment horrible ! Mon graphique ne se déplace pas vers la gauche lorsque je sauvegarde le dessin ! La fonction "shift graph" est activée ! Comment puis-je le réparer ?


 

Bonjour !

Je veux que mon conseiller expert n'ouvre pas plus d'une transaction par jour. Pouvez-vous me dire comment faire ?

 

Bonjour, je me suis penché sur mql4 depuis un moment maintenant, peut-être qu'un des programmeurs expérimentés peut m'aider. Je veux savoir comment faire pour qu'il se verrouille lorsque l'ordre atteint -30 ou -40. Je dois ajouter quelques propriétés pour que ce script verrouille les ordres dès qu'ils passent en moins.

void start()
{
double StopLoss ;
double Lots=0 ;
for(int i=0;i<OrdersTotal();i++)
{
if( !OrderSelect(i,SELECT_BY_POS))
continue ;
if(OrderSymbol() !=Symbol())
continue ;
if(OrderType()==OP_BUY)
Lots+=OrderLots() ;
if(OrderType()==OP_SELL)
Lots-=OrderLots() ;
}
if(Lots>0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red) ;
if(Lots<0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue) ;

 
protey7:

Bonjour !

Je veux que mon conseiller expert n'ouvre pas plus d'une transaction par jour. Pouvez-vous me dire comment faire ?

extern int MagicNumber=555;
//---
if (OrdersTotal()>0) // Есть ли отложенные ордера или открытые позиции
{  for (i=OrdersTotal()-1; i>=0; i--) // Перебираем ордера
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Oрдер выбирается среди открытых и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue; // Если торговый символ не тот, на котором работает эксперт - игнорируется
         if (OrderMagicNumber()!=MagicNumber) continue; // Если магик номер не тот, что надо - игнорируется
         if (OrderOpenTime()>=iTime(NULL,PERIOD_D1,0)) // Если время открытия ордера больше или равен началу открытия данной свечи,
                                                       // то дальший код эксперта не работает. Вместо PERIOD_D1 можно вставить любой другой период.
            return(0);
}  }  }
 
Wild_Wolf:

Les gars, j'ai un problème vraiment horrible ! Mon graphique ne se déplace pas vers la gauche lorsque je sauvegarde le dessin ! La fonction "shift graph" est activée ! Comment puis-je le réparer ?

Remarque : sur le graphique, en haut à droite, il y a un petit triangle comme celui-ci. Lorsque vous passez votre curseur dessus, une info-bulle s'afficheindiquant "Chart shift". Accrochez-le et déplacez-le vers la gauche autant que nécessaire pour faire de la place à droite.
 
hoz:

J'ai compris comment le mettre en œuvre, mais j'ai décidé de voir comment les autres le font.
Et si les autres commencent à sauter par les fenêtres ?
 
paladin80:


Merci pour le conseil !

Seulement dans la variante suggérée l'expert ne travaille pas)))) Voici une variante fonctionnelle que j'ai obtenue :

if (OrdersTotal()==0) // S'il n'y a pas de positions ouvertes

{ for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--) // Recherche des commandes dans la liste de l'historique du compte

{ if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) // l'ordre est sélectionné parmi les ordres fermés

{

if (OrderCloseTime()>=iTime(NULL,PERIOD_D1,0)) // Si l'heure de clôture de l'ordre est supérieure ou égale au début de l'ouverture de la bougie en cours.

// Le conseiller expert ne fonctionne pas. Toute autre période peut être insérée à la place de PERIOD_D1.

retour(-1) ;

} } }

 
alsu:

Pourquoi prenez-vous des experts en malheur comme exemple ? Au minimum, ils sont conçus exclusivement pour le testeur, au maximum, ils sont écrits avec des mains tordues, comme il a été dit plus haut...


Je l'ai écrit à ma façon. Je n'ai pas particulièrement optimisé le code, je l'ai juste écrit pour le faire fonctionner et montrer la logique.

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_BUYSTOP,0.1,NormalizeDouble(Ask + (step*i) * pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_SELLSTOP,0.1,NormalizeDouble(Bid - (step*i)*pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Посылаем пачку ордеров на сервер                                                    |
//+-------------------------------------------------------------------------------------+
bool SendPackOfOrders(int lastPosTicket, int lastPosType, double initialOOP)
{
   if (lastPosTicket == -1)                        // Если нет рыночных ордеров, значит..
       return(false);                              //..сетку отложек не кидаем
       
  // if (lastPosType != g_lastPosType)               // Если тикет изменился, значит..
   {
      lastPosType = g_lastPosType;
      
      for (int i=1; i<=5; i++)
      {
         if (!OpenBuy(initialOOP, i))
             return(false);
         if (!OpenSell(initialOOP, i))
             return(false);
      }
   }
}

L'étape est l'espacement de la grille de commande.

Ma question est la suivante. Ma logique est-elle correcte ? Y a-t-il un moyen d'améliorer le code pour qu'il fonctionne plus rapidement ? Du point de vue des performances...

J'ai aussi l'idée que nous devrions peut-être faire des pauses après chaque message. Dans l'ensemble, ces points sont très intéressants pour moi.

 
artmedia70:
Et si les autres commencent à sauter par les fenêtres ?


Ce n'est pas une panacée !