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

 
Artyom Trishkin:
Décrivez maintenant en mots ce que vous avez décrit graphiquement. Utilisez high, low, open, close.
Dès que vous le décrivez en mots, vous avez déjà écrit vos TdR :)
Il ne reste plus qu'à remplacer les constructions verbales par du code.
OK, je vais le faire maintenant)
 

Taille de la bougie = haut[i] - bas[i]

Ombre supérieure = high[i] - open[i]

Corps de bougie = ouvert[i] - fermé[i]

Ombre inférieure = close[i] - low[i]

Le rapport entre le corps du chandelier et sa taille - (high[i] - low[i]) / (open[i] - close[i])

La taille de l'ombre courte ne doit pas dépasser un certain seuil - ( close[i] - low[i]) <= close[i]

Orientation de la bougie - high[i] > open[i] > close[i] > low[i]

 
Artyom Trishkin:

Je parie avec la souris.

  • Cliquez au-dessus du prix+Ctrl - Limite de vente
  • Cliquez sur le prix inférieur+Ctrl -Buy Limit
  • Cliquez au-dessus du prix+Ctrl+Shift - Stop à l'achat
  • Cliquez en dessous du prix+Ctrl+Shift - Stop de vente
On peut aussi mettre BuyStopLimit et SellStopLimit avec le shifft.

Est-ce ainsi que vous passez des ordres dans le testeur de MT5, en mode visuel ? Comment les événements sont-ils gérés? OnChartEvent() ne fonctionne pas, n'est-ce pas ?

 
Vladimir Karputov:

Le testeur fonctionne correctement. L'erreur se situe dans la logique du programme : deux symboles sont comme deux vies de personnes différentes (ici "personne" est analogue à "symbole"). Et la deuxième personne ne doit pas nécessairement se réveiller en même temps que la première ("se réveiller" est analogue à " apparition d'une nouvelle barre").

Vous devez donc attendre qu'une nouvelle barre apparaisse ET sur le premier symbole ET sur le second.


Ajouté :gestionnaire de l'événement "nouvelle barre" de l'article

Merci pour cette réponse rapide. Je vais réfléchir à la manière de mettre en œuvre tout cela en mode multidevises.
 

Une telle question : l'ordre dans lequel les conditions sont énumérées est-il important pour trouver une combinaison de chandeliers ?

Exemple :

    if(((high[i-1]-low[i-1]) < (high[i]-low[i])) && (open[i-1] >= Lower1[i]) && ((close[i-1]-open[i-1]) >= 3*(close[i]-open[i])) &&
      (close[i-1 <= Base[i]]) && (high[i-1] <= 0.5*(high[i]-close[i])) && (close[i-1] <= open[i]) && ((close[i]-open[i])<= 0.33*(high[i]-close[i])) &&
      ((close[i]-open[i]) >= (open[i]-low[i])) && (close[i] <= Base[i])) // когда пин-бар ниже, либо равен линии Base
 

Bonjour. Compte de compensation, je veux compter combien d'ordres limités de même sens sont devenus des positions.

La fonction ne calcule pas correctement, pourquoi ?

int CurrentPos_sell_nettin()
  {
  string symb=_Symbol;
   int    total       =0;  // Всего сделок в списке выбранной истории
   int    count       =0;  // Счетчик сделок по символу позиции
//--- Если история позиции получена
   for(int i=0; i<PositionsTotal(); i++)
     {
      ulong pt=PositionGetTicket(i);
      long ID=PositionGetInteger(POSITION_IDENTIFIER);
      if(PositionGetString(POSITION_SYMBOL)==symb && HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))
        {
         //--- Получим количество сделок в полученном списке
         total=HistoryDealsTotal();
         //--- Пройдем по всем сделкам в полученном списке
         for(int i=0; i<total; i++)
           {
            ulong dt = HistoryDealGetTicket(i);
            long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);
            ENUM_DEAL_ENTRY in_out=HistoryDealGetInteger(dt,DEAL_ENTRY);
            if(did==pt && in_out==DEAL_ENTRY_IN)
              {
               if(m_position.PositionType()==POSITION_TYPE_SELL)
                 {
                  count++;
                 }
              }
           }
        }
     }
//---
   return(count);
  }
 
lil_lil:

Bonjour. Compte de compensation, je veux compter combien d'ordres limités de même sens sont devenus des positions.

La fonction ne compte pas correctement, pourquoi ?

Commencez par HistorySelectByPosition. Vous n'obtiendrez alors que les transactions liées à cette position.

 
clickaider:

Une telle question : l'ordre dans lequel les conditions sont énumérées est-il important pour trouver une combinaison de chandeliers ?

Exemple :

Regardez l'exemple: il y a trente motifs différents.

 
Artyom Trishkin:

Artyom, je vais répéter la question, répondez s'il vous plaît :

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Questions des débutants MQL5 MT5 MetaTrader 5

Alexey Kozitsyn, 2018.06.03 15:39

Est-ce ainsi que vous passez vos ordres dans le testeur MT5, en mode visuel ? Et comment traitez-vous les événements? OnChartEvent() ne fonctionne pas, n'est-ce pas ?


 
Alexey Viktorov:

Commencez par HistorySelectByPosition. Vous n'obtiendrez alors que les transactions liées à cette position.

Merci.

Qu'est-ce qui ne va pas maintenant ?

int CurrentPos_sell_nettin()
  {
   string symb=_Symbol;
   int    total       =0;  // Всего сделок в списке выбранной истории
   int    count       =0;  // Счетчик сделок по символу позиции
//--- Если история позиции получена

   for(int i=0; i<PositionsTotal(); i++)
     {
      ulong pt=PositionGetTicket(i);
      long ID=PositionGetInteger(POSITION_IDENTIFIER);
      if(PositionGetString(POSITION_SYMBOL)==symb && HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))
        {
         if(PositionSelect(symb))
           {
            long pos_id=long(PositionGetInteger(POSITION_IDENTIFIER));

            if(pos_id>0)
              {
               if(HistorySelectByPosition(ulong(pos_id)))
                  total=HistoryDealsTotal();
               //--- Пройдем по всем сделкам в полученном списке
               for(int i=0; i<total; i++)
                 {
                  ulong dt = HistoryDealGetTicket(i);
                  long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);
                  ENUM_DEAL_ENTRY in_out=HistoryDealGetInteger(dt,DEAL_ENTRY);
                  if(did==pt && in_out==DEAL_ENTRY_IN)
                    {
                     if(m_position.PositionType()==POSITION_TYPE_SELL)
                       {
                        count++;
                       }
                    }
                 }
              }
           }
        }
     }
//---
   return(count);
  }
Raison: