[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 572

 

J'ai essayé de l'écrire, ça a presque marché, mais il ouvre les positions de la manière dont j'en ai besoin si le prix évolue dans une direction.

Par exemple, il a fermé un achat, puis a ouvert un nouvel achat et une nouvelle vente, puis a de nouveau fermé un achat, puis a de nouveau ouvert un achat et une vente, mais s'il n'a PAS fermé d'achat et de vente, il n'a pas ouvert de nouveau (((((.

Jetez-y un coup d'œil et voyez si je peux vous aider...

quel tas de conneries j'ai écrites ))) . Mais c'est comme ça que ça marche. J'ai ces conditions d'ouverture...

J'ai besoin d'une autre condition pour qu'il ouvre une position si le prix change ...

Dossiers :
 
Est-ce que j'ai bien compris ? NumberOfPositions(Symbol(),OP_BUY,Magic) ; est-ce le nombre de positions d' achat ouvertes?
 
Frostr:
Est-ce que j'ai bien compris ? NumberOfPositions(Symbol(),OP_BUY,Magic) ; est-ce le nombre de positions d'achat ouvertes ?


Votre Expert Advisor ne définit pas de conditions d'ouverture, il ouvre simplement dans la direction que vous avez spécifiée (variables BUY et SELL). Vous pouvez ajouter une condition pour vérifier si la dernière transaction a été clôturée avec un profit ou une perte dans cet EA ou dans le vôtre. Mais à mon avis, il s'acquitte déjà de sa tâche - il montre très clairement la non-rentabilité de cette stratégie. En fait, nous n'avons même pas besoin d'un conseiller expert pour cela, il peut être calculé en une demi-heure sur l'historique, même sans calculatrice. Si le Stop Loss est égal au Take Profit, la perte est égale au spread multiplié par le nombre de trades, dans tous les autres cas - spread plus la moitié de la différence entre le Stop Loss et le Take Profit.

P.S. En général, bien que le code du hibou soit différent, il fait exactement ce que votre EA fera, si vous y ajoutez la condition que vous voulez. C'est-à-dire que si le prix a changé et est allé dans l'autre sens, il ouvrira deux transactions opposées à chaque clôture. Il était simplement plus facile pour moi de supprimer toutes les choses "inutiles" du code qui ne sont pas liées à la tâche à accomplir.

P.P.S.Vous avez raison au sujet deNumberOfPositions(Symbol(),OP_BUY,Magic).

 
gheka:
quel bureau de poste peut envoyer un texte sur le courrier entrant et son contenu ?

Par exemple, mail.ru
 
rigonich:

Votre conseiller expert n'a pas de conditions d'ouverture, il ouvre simplement dans la direction que vous avez définie (les variables BUY et SELL). Vous pouvez ajouter une condition pour vérifier si la dernière transaction a été clôturée avec un profit ou une perte dans cet EA ou dans le vôtre. Mais à mon avis, il s'acquitte déjà de sa tâche - il montre très clairement la non-rentabilité de cette stratégie. En fait, nous n'avons même pas besoin d'un conseiller expert pour cela, il peut être calculé en une demi-heure sur l'historique, même sans calculatrice. Dès que vous ajoutez votre condition à n'importe quel Expert Advisor (ouvrir deux trades opposés et les fermer uniquement par Stop Loss ou Take Profit), le montant de la perte devient fixe et ne dépend que du nombre de trades.



Pour une raison quelconque, j'ouvre 500-800 positions à la fois lorsque je teste l'EA, je ne comprends pas de quoi dépend le nombre de positions ouvertes et je ne peux pas le réguler( !).

La seule façon de réduire le nombre de positions ouvertes est d'augmenter le lot. Si vous fixez le lot au maximum, 1 à 3 positions seront ouvertes en même temps.

Si vous fixez le lot à un minimum, il ouvrira 500 à 1500 positions à la fois.

 
Frostr:



Pour une raison quelconque, j'ouvre 500-800 positions à la fois lorsque je teste l'EA, je ne comprends pas pourquoi le nombre de positions ouvertes en dépend et que je ne peux pas l'ajuster( !).

La seule façon de réduire le nombre de positions ouvertes est d'augmenter le lot. Si vous fixez le lot au maximum, 1 à 3 positions seront ouvertes en même temps.

Si vous fixez le lot à un minimum, il ouvrira 500 à 1500 positions à la fois.

1. Seul un nombre limité de commandes peut être ouvert à la fois.

2. Si le lot est augmenté de manière significative, des postes supplémentaires ne peuvent être ouverts par manque de fonds.

 
Frostr:



Mon conseiller expert, que vous m'avez donné lors des tests, pour une raison quelconque, j'ouvre 500-800 positions à la fois, je ne comprends pas ce qui détermine le nombre de positions ouvertes et je ne peux pas l'ajuster (

La seule façon de réduire le nombre de positions ouvertes est d'augmenter le lot. Si vous réglez le lot au maximum, il ouvrira 1 à 3 positions à la fois.

Si vous fixez le lot à un minimum, il ouvrira 500 à 1500 positions à la fois.

Dossiers :
 
rigonich:


 

J'ai écrit quelque chose comme le trailing pour mon EA, mais cela ne fonctionne pas, selon ce que j'essaie de changer pour le faire fonctionner, il génère l'erreur 1 lors de la modification, ou simplement ne va pas plus loin que le premier print (Print("Leading Buy position") ; )... quelle pourrait être la raison, je serais heureux d'entendre toute suggestion, merci d'avance !

bool TrailingStop()
   {
   int MD0=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if ((OrderMagicNumber()==11111)==true)
      {
      Print("Ведём позицию Buy");
      while(OrderCloseTime()==0)
         {
         if ((NormalizeDouble(Bid-OrderStopLoss()+StepStop*Point,Digits)>NormalizeDouble(StopLevel*Point,Digits))&&(NormalizeDouble(MD0,Digits)<NormalizeDouble(StopLevel*Point,Digits)))
               {
               RefreshRates();
               Print("текущий бид-",Bid,", текущий стоп-",OrderStopLoss(),", текуйщий тейк-",OrderTakeProfit(),", цена открытия-",OrderOpenPrice(),", расстояние от текущего стопа до текущего бида-",NormalizeDouble(Bid-OrderStopLoss(),Digits),", новый стоп-",NormalizeDouble(Bid-StopLevel*Point,Digits));
               if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-StopLevel*Point,Digits),OrderTakeProfit(),0)==true)
                  Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
               else Print("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
               }
         Sleep(1000);
         }
      if (OrderCloseTime()>0)
         {
         Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
         return(true);
         }
      }
   else
      {
      if ((OrderMagicNumber()==22222)==true)
         {
         Print("Ведём позицию Sell");
         while(OrderCloseTime()==0)
            {
            if ((NormalizeDouble(OrderStopLoss()+StepStop*Point-Ask,Digits)>NormalizeDouble(StopLevel*Point,Digits))&&(NormalizeDouble(MD0,Digits)<NormalizeDouble(StopLevel*Point,Digits)))
               {
               RefreshRates();
               Print("текущий бид-",Ask,", текущий стоп-",OrderStopLoss(),", текуйщий тейк-",OrderTakeProfit(),", цена открытия-",OrderOpenPrice(),", расстояние от текущего стопа до текущего бида-",NormalizeDouble(OrderStopLoss()-Ask,Digits),", новый стоп-",NormalizeDouble(Ask+StopLevel*Point,Digits));
               if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+StopLevel*Point,Digits),OrderTakeProfit(),0)==true)
                  Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
               else Print("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
               }
            Sleep(1000);
            }
         if (OrderCloseTime()>0)
            {
            Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
            return(true);
            }
         }
      else return(false);
      }
   }
 
Ekburg:

J'ai écrit quelque chose comme le trailing pour mon EA, mais cela ne fonctionne pas, selon ce que j'essaie de changer pour le faire fonctionner, il génère l'erreur 1 lors de la modification, ou simplement ne va pas plus loin que le premier print (Print("Leading Buy position") ; )... quelle pourrait être la raison, je serais heureux d'entendre toute suggestion, merci d'avance !


Votre conditionwhile(OrderCloseTime()==0). Si vous entrez dans cette boucle, les tentatives de modification seront répétées jusqu'à ce que l'ordre se ferme ou que l'opérateur brek ou return soit rencontré, ce que vous n'avez pas dans la boucle.

Désolé, j'ai merdé. Ils sont là, mais je ne les ai pas remarqués tout de suite sans lunettes. J'ai supprimé les crochets superflus et ajouté la sortie. Essayez, ça peut marcher.

Dossiers :
0101.mq4  3 kb
Raison: