Questions des débutants MQL5 MT5 MetaTrader 5 - page 302

 
mavar:

A la vôtre ! Aujourd'hui, j'ai lancé mon premier EA sur MT5 !

La bonne situation sur le marché est arrivée et le conseiller expert a commencé à acheter et à acheter ! !! C'est bien qu'il ait réagi à temps. Pouvez-vous me dire ce qui ne va pas dans ce code ? Je pensais qu'il devait acheter un seul lot et définir immédiatement un Stop Loss et un Take Profit. Dès qu'il a acheté quelque chose, la variable Bye_opened doit devenir vraie et ne doit pas lui permettre d'effectuer une transaction ultérieure tant que les stops ne sont pas déclenchés. De même, comment puis-je connaître le prix de la dernière transaction pour y placer des stops ?


Mais il semble que j'ai fait quelque chose de mal. Veuillez signaler mon erreur.

Les ticks peuvent arriver plus vite que la position ne figure dans la liste des positions ouvertes. Donc, votre chèque

if(PositionSelect(_Symbol)==true)

ne fonctionnera pas pendant un certain temps, et pendant ce temps, plusieurs entrées passeront. On suppose que le morceau de code ci-dessus se trouve dans le gestionnaire de tick.

 
pako:

mettez ce script dans le dossier des scripts, ouvrez ce script dans un unitor, compilez-le

Lorsque la bourse s'ouvre, faites glisser ce script sur le graphique

Merci pour l'aide, j'ai trouvé moi-même, tout a fonctionné.
 
Bonsoir à tous, merci de partager le code pour le chalutage. Merci.
 
PokrovMT5:
Bonsoir à tous, merci de partager le code pour le chalutage. Merci.

Veuillez utiliser la recherche sur le site - ce n'est pas difficile: https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

 
barabashkakvn:

Veuillez utiliser la recherche sur le site - ce n'est pas difficile: https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

Merci !
 
Dima_S:

Les ticks peuvent arriver plus vite que la position est dans la liste des ouverts. Donc, votre chèque

ne fonctionnera pas pendant un certain temps, et pendant ce temps, il y aura plusieurs entrées. On suppose que le morceau de code ci-dessus se trouve dans le gestionnaire de tick.

Dima, le code se trouve dans le bloc de traitement des tics. Quelle est la bonne façon de résoudre ce problème ? J'avais le même problème dans QuickBooks, le robot achète souvent plus qu'il ne devrait. Je l'ai mis sur le compte de son deuxième retard et j'ai simplement ajouté une variable séparée qui change lorsque les conditions sont remplies, mais il a eu quelques problèmes là aussi. Parfois, l'ordre a été rejeté par la bourse et la variable avait déjà la valeur "deal" et le robot n'a pas négocié.


Comment résoudre correctement le problème dans MQL5 de sorte que le robot achète un nombre spécifié de lots à une condition donnée et n'achète pas plus que le nombre spécifié de lots jusqu'à ce qu'il ait vendu tous les lots qu'il a achetés ?

 

Doit-on faire une pause après l'achat pour attendre une réponse de l'échange à coup sûr ?

Sleep(1000) ; //Avez-vous fait une pause ?

 

Le stop loss ne bouge pas

écrit :

--Modifier l'ordre -> prix ouvert:1.3111 BID :1.3121 sl 1.3109
failed modify order #3 buy limit 1.00 at 1.31110 sl : 1.31080 tp : 0.00000 -> 1.31110, sl : 1.31090 tp : 0.00000 [Invalid stops]

--Modifier l'ordre <- résultat:10016

Pourquoi ?

void MoveStopLoss()
{
   ulong  ticket     = OrderGetTicket(0);
   double price      = OrderGetDouble(ORDER_PRICE_OPEN);
   double slossPrev  = OrderGetDouble(ORDER_SL);
   double sloss      = SymbolInfoDouble(_SYMBOL, SYMBOL_ASK) - SymbolInfoDouble(_SYMBOL, SYMBOL_POINT)*15;

      if (slossPrev < sloss)
      {
         MqlTradeRequest request={0};
         MqlTradeResult  result={0};
         request.action       = TRADE_ACTION_MODIFY;        // Тип выполняемого действия
         request.order        = ticket;                     // Тикет ордера (для модификации ордеров)
         request.price        = price;                      // Цена 
         request.sl           = sloss;                      // Уровень Stop Loss ордера
         request.tp           = 0;                          // Уровень Stop Loss ордера
         request.type_time    = ORDER_TIME_DAY;             // Тип ордера по времени действия
   
         Print ("--Modify order -> ", " price open:", price, " BID :", SymbolInfoDouble(_SYMBOL, SYMBOL_BID), " sl ", request.sl);
         bool ret = OrderSend (request, result);
         Print ("--Modify order <- результат:", result.retcode);      
      }
}
 
mq35:

Le stop loss ne bouge pas

écrit :

--Modifier l'ordre -> prix ouvert:1.3111 BID :1.3121 sl 1.3109
failed modify order #3 buy limit 1.00 at 1.31110 sl : 1.31080 tp : 0.00000 -> 1.31110, sl : 1.31090 tp : 0.00000 [Invalid stops]

--Modifier l'ordre <- résultat:10016

Pourquoi ?

Essayez de normaliser le SL.
 

Normaliser n'aide pas. La même chose, sop-loss n'est pas remonté.

--Créer un ordre -> ASK:1.3121 prix:1.3111 sl 1.3106

achat limite 1.00 EURUSD à 1.3111 (1.3121) sl : 1.3106 (1.3118 / 1.3121 / 1.3118)
--Créer une commande <- résultat:10009

--Modifier l'ordre -> prix ouvert:1.3111 BID :1.3119 sl 1.3107
ordre modifié [#3 limite d'achat 1.00 EURUSD à 1.3111].

--Modifier l'ordre <- résultat:10009

--Modifier l'ordre -> prix ouvert:1.3111 BID :1.312 sl 1.3108
ordre modifié [#3 limite d'achat 1.00 EURUSD à 1.3111].

--Modifier l'ordre <- résultat:10009

--Modifier l'ordre -> prix ouvert:1.3111 BID :1.3121 sl 1.3109
failed modify order #3 buy limit 1.00 at 1.31110 sl : 1.31080 tp : 0.00000 -> 1.31110, sl : 1.31090 tp : 0.00000 [Invalid stops]
--Modifier l'ordre <- result:10016