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

 
zfs:
La transaction rentable moyenne ne couvrira pas le slippage et la rentabilité est faible, et elle pourrait aussi être un ajustement).

J'ai écrit le conseiller expert moi-même. Il n'y a pas de stop loss.

 
PetrovichV:

J'ai écrit l'expert moi-même. Il n'a pas de stoploss.

C'est encore pire).
 
zfs:
C'est encore pire).
Merci.
 

Je vais probablement répondre à ma propre question, maintenant que la solution a été trouvée - on ne sait jamais qui va faire des recherches sur Google...

La question était de savoir comment obtenir le prix d'ouverture de la dernière commande à partir de l'historique. Il s'est avéré (du moins, pas pour moi) qu'il était correct - je devais obtenir le prix d'une transaction plutôt que celui d'une commande. Dans le testeur, la variante initiale a également fonctionné (je ne l'ai pas écrite) - je soupçonne que la différence réside dans le fait que dans la version de démonstration, il est simplement indiqué "prix du marché" au lieu de prix et que lorsque l'on essaie de le demander en tant que double, des zéros sont renvoyés pour une raison quelconque. Au diable tout ça, maintenant la fonction ressemble à ça :

PositionID = PositionGetInteger(POSITION_IDENTIFIER);

double FindLastPrice(long PositionID) {
   int  i = 0, DealsTotal;
   ENUM_DEAL_TYPE CheckType;
   long Ticket, OldTicket = 0, PosID, Magic, Type;
   double OrderPrice = 0;
   
   DealsTotal = HistoryDealsTotal();
   
   for (i = 0; i < DealsTotal; i++) {
      Ticket = (int)HistoryDealGetTicket(i);
      PosID  = HistoryDealGetInteger(Ticket, DEAL_POSITION_ID);
      Magic  = HistoryDealGetInteger(Ticket, DEAL_MAGIC);
      Type   = HistoryDealGetInteger(Ticket, DEAL_TYPE);
      
      if (Sell) CheckType = DEAL_TYPE_SELL; 
      else CheckType = DEAL_TYPE_BUY;
      
      if ((PosID == PositionID) && (Magic == MagicNumber) && (Type == CheckType)) {
         if (Ticket > OldTicket) {
            OrderPrice = HistoryDealGetDouble(Ticket, DEAL_PRICE);
            OldTicket = Ticket;
         }
      }
   }
   if(!OrderPrice) Print("Ошибка получения цены открытия предыдущей сделки! Error ",GetLastError());
   return(OrderPrice);
}

J'ai dû tuer quelques heures pour cette absurdité, mais au moins tout cela a ses avantages : à cause de cette fonction qui ne fonctionnait pas, j'ai dû inventer une solution de contournement, tout en maîtrisant le travail de base avec les fichiers pour écrire bêtement chaque nouveau prix de commande dans un fichier et le lire quand c'est nécessaire...

 
Lone_Irbis:

Je vais probablement répondre à ma propre question, puisque la solution a été trouvée - juste au cas où quelqu'un ferait une recherche sur Internet...

La question était de savoir comment obtenir le prix d'ouverture de la dernière commande à partir de l'historique. ....

Et si vous pouviez juste utiliser la recherche sur le site web ou regarder les articles qui ont déjà quelque chose.

>>> Recettes MQL5 - Historique des échanges et bibliothèque des fonctions permettant d'obtenir les propriétés des positions

 
tol64:

Et vous pouvez simplement utiliser la recherche sur le site ou regarder les articles où il n'y a rien d'autre.

>>> Recettes MQL5 - Historique des échanges et bibliothèque des fonctions permettant d'obtenir les propriétés des positions

J'ai cherché ce site pendant une semaine (notamment par le biais de Google, car la recherche intégrée est quelque peu étrange : soit elle donne des choses totalement inexactes dans un ordre aléatoire et non par pertinence, soit elle dit "rien trouvé" même pour des demandes copiées de la même documentation)... Mais pour trouver quelque chose d'utile, vous devez savoir exactement comment s'appelle cette chose utile et en quoi elle diffère de la version non fonctionnelle déjà existante :) Il est facile de parler de recherche depuis la position de quelqu'un qui connaît la langue à un niveau décent, mais c'est plus difficile à faire, si vous connaissez le nom mql5 seulement depuis une semaine et que vous essayez déjà de faire quelque chose dedans...

Et puis, je n'aime pas vraiment les solutions toutes faites et les manuels détaillés, en tant que concept, ils ne font que me décourager de le faire moi-même. :) Ma méthode d'auto-apprentissage n'est peut-être pas très efficace, mais il est plus important qu'elle soit intéressante - sinon l'enthousiasme pour investir du temps personnel dans ce sujet ne sera pas suffisant pendant longtemps.

Néanmoins, merci pour le lien, je vais le lire.

 

Bon après-midi.

Existe-t-il un moyen de télécharger des données historiques pour les devises sur 20-30 ans ?

Chez Alfa-Forex, cela ne concerne que les 12 dernières années, mais avant cela, c'est par bribes.

 
PetrovichV:

Bon après-midi.

Existe-t-il un moyen de télécharger des données historiques pour les devises sur 20-30 ans ?

Chez Alfa-Forex, cela ne concerne que les 12 dernières années, mais avant cela, c'est par bribes.

Votre courtier vous donne l'historique, la qualité diminue lorsque vous augmentez la période.
 

Voici le code où l'ordre d'achat est placé et ensuite son SL et TP sont modifiés.

J'obtiens l'erreur suivante : 2013.09.06 00:03:39 Trades '10022332' : failed modify order #0 buy 0.00 GBPUSD at market sl : 0.00000 tp : 0.00000 -> 1.56255, sl : 1.55787 tp : 1.56787 [Invalid request].
Quel est le problème avec la demande de changement de niveau ?

int Positions;
double delta=0.00500;

MqlTradeRequest  Request;
MqlTradeResult   Result;
MqlTick         InfoTick;


void OnTick()

{
//---

 if(PositionsTotal()==0) // если открытых позиций нет, покупаем
   { 
      
    SymbolInfoTick(_Symbol, InfoTick);
                              
    Request.action=TRADE_ACTION_DEAL;
    Request.symbol=_Symbol;
    Request.volume=1;
    Request.price=InfoTick.bid;
    Request.sl=InfoTick.bid - delta;
    Request.tp=InfoTick.bid + delta;
    Request.deviation=50;
    Request.type=ORDER_TYPE_BUY;
    Request.type_filling=ORDER_FILLING_FOK;
               
    OrderSend(Request, Result);
   
  }else{                                     // меняем уровни
        SymbolInfoTick(_Symbol, InfoTick); 
        
        Request.action=TRADE_ACTION_MODIFY;
        Request.symbol=_Symbol;
        Request.sl=InfoTick.last - delta;
        Request.tp=InfoTick.last + delta;
                          
        OrderSend(Request, Result);
       }
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
agvozdezkiy:

Voici le code où l'ordre d'achat est placé et ensuite son SL et TP sont modifiés.

J'obtiens l'erreur suivante : 2013.09.06 00:03:39 Trades '10022332' : failed modify order #0 buy 0.00 GBPUSD at market sl : 0.00000 tp : 0.00000 -> 1.56255, sl : 1.55787 tp : 1.56787 [Invalid request].
Quel est le problème avec la demande de changement de niveau ?

Obtenez le code d'erreur pour commencer.