Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1902

 
Vitaly Muzichenko #:

Je ne sais pas par où commencer.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  int H=100;
  double b, a;
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
    ArrayInitialize(Buffer2,EMPTY_VALUE);
  }

  b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  a=SymbolInfoDouble(Symbol(),SYMBOL_ASK);

  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
    Buffer2[H+1]=EMPTY_VALUE;
  }
  else if (rates_total == prev_calculated) { // сдвигаем данные только когда количество баров не поменялось (в случае появления нового бара они сдвигаются системой терминала)
    ArrayCopy(Buffer1, Buffer1, 1, 0, H);
    ArrayCopy(Buffer2, Buffer2, 1, 0, H);
  }
  // записываем новые данные
  Buffer1[0]=b;
  Buffer2[0]=a;
  return(rates_total);
}

C'est censé fonctionner. Regardez ça.

P.S. Et s'il vous plaît, écrivez combien la variante de vitesse avec la fonction ArrayCopy change. J'aimerais le savoir moi-même.

 
Vitaly Muzichenko #:

Je ne sais pas par où commencer

Voici une variante de mql5. Mais seulement pour le prix de la demande. Pour le prix de Bid, vous devez le faire vous-même.

Il contient tout, y compris le travail avec le tampon de l'indicateur, le travail avec les ticks, et un exemple montrant qu'il n'est pas nécessaire d'inverser l'indexation du tampon de l'indicateur.

A 1000 bars, il s'affiche sans aucun retard.

Dossiers :
 
Alexey Viktorov #:

Voici une variante de mql5. Mais seulement pour le prix de la demande. Pour le prix de l'offre, finalisez-le vous-même.

Il contient tout, y compris le travail avec le tampon de l'indicateur, le travail avec les ticks, et un exemple de la manière dont l'indexation du tampon de l'indicateur ne doit pas être inversée.

A 1000 bars, il s'affiche sans aucun retard.

Je l'ai eu ! Merci !

 

Bonjour, j'ai récemment commencé à travailler avec MT4 et j'ai rencontré le problème suivant : il n'y a pas de fonction appropriée pour suivre un ordre fermé. Mon algorithme est simple : lorsqu'une nouvelle bougie apparaît, je place deux ordres en attente : un Sell Stop et un Bid Stop et je dois suivre l'ordre fermé (Sell Stop ou Bid Stop) lorsque l'un d'eux se ferme et placer un ordre à la place de celui qui est fermé. Les ordres sont placés - pas de problème avec cela, mais je n'arrive pas à comprendre comment suivre ceux qui sont fermés, j'ai mis le code, mais le message affiche seulement SellSTOP, et ne réagit pas à BAYSTOP :


if (OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY))
   {
   Print("OrderType", OrderType());//Тут всегда только только "1"
   }
   if(OrderType()==0)
    {
    Print("Закрылся  BUYSTOP:", OrderTicket());
    }
   if(OrderType()==1)
   {Print("Закрылся   SELLSTOP:",  OrderTicket());} //Тут сообщает корректно - номер ордера

Et je suis également tombé sur le fait que OnTrade ouOnTradeTransaction ne fonctionne pas, j'ai essayé ceci :

void OnTradeTransaction()
 {
 Print("status - "); 
 }  
 
MixanM #:

Bonjour, j'ai récemment commencé à travailler avec MT4 et j'ai rencontré le problème suivant : il n'y a pas de fonction appropriée pour suivre un ordre fermé. Mon algorithme est simple : lorsqu'une nouvelle bougie apparaît, je place deux ordres en attente : un Sell Stop et un Bid Stop et je dois suivre l'ordre fermé (Sell Stop ou Bid Stop) lorsque l'un d'eux se ferme et placer un ordre à la place de celui qui est fermé. Les ordres sont placés - pas de problème, mais je n'arrive pas à comprendre comment suivre ceux qui sont fermés, je mets le code, mais le message affiche seulement SellSTOP, BAYSTOP ne répond pas :

//+----------------------------------------------------------------------------+
int LastClose()
  {
   int result=-1;
   datetime t=0;
   int i=OrdersHistoryTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY||OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime())
                 {
                  t=OrderCloseTime(); result=OrderType();
                 }
              }
           }
        }
     }
   return(result);
  }
//+----------------------------------------------------------------------------+

MixanM OnTradeTransaction ne fonctionne pas, j'ai essayé ceci :

Il semble que ce soit pour MT5
 
Bonjour à tous, mes amis.
Voici une question.
Lacopie des offres de ce service n'a pas changé depuis tant d'années. Depuis longtemps, on a l'impression que les promoteurs n'ont pas du tout envie de penser à la commodité de leurs visiteurs.
Il a pris le besoin de leur propre projet.

Je ne sais pas si c'est possible ?

1) J'ai besoin du copieur d'affaires, (conseiller) Je ne sais pas ce que la charge et comment il est mesuré, vous avez besoin qu'il serait en mesure de copier à partir d'un et de distribuer plus d'une centaine de comptes.
La question de la copie. Mon objectif est d'obtenir un volume de transactions basé sur les pourcentages des transactions (c'est-à-dire que j'ai 100 sur mon compte ; mon suiveur a 1000 sur son compte ; j'ouvre une transaction avec 3% de mon dépôt et le volume du lot est recalculé par le pourcentage de ma transaction ; c'est-à-dire que ma transaction avec 3% est de 3$ ; le suiveur a une transaction ouverte avec 3% = 30$ ; c'est-à-dire que je ne sais pas si c'est vraiment important ou non).


2) Est-il possible de retirer les détails du compte d'un abonné ? C'est-à-dire le prénom, le nom de famille mais surtout le montant du solde ? S'il n'est pas possible de retirer toutes les informations, qu'est-ce qui est possible ?

3) Chers programmeurs, estimez le coût approximatif d'un tel travail, je ne veux pas être trompé et veux comprendre le prix adéquat.
Merci !
 
Roman Voloshchuk copie des transactions sur ce service n'a pas changé depuis tant d'années. Depuis longtemps, on a l'impression que les promoteurs n'ont pas du tout envie de penser à la commodité de leurs visiteurs.
Il a pris le besoin de leur propre projet.

Je ne sais pas si c'est possible ?

1) J'ai besoin du copieur d'affaires, (conseiller) Je ne sais pas ce que la charge et comment il est mesuré, vous avez besoin qu'il serait en mesure de copier à partir d'un et de distribuer plus d'une centaine de comptes.
La question de la copie. Mon objectif est d'obtenir un volume de transactions basé sur les pourcentages des transactions (c'est-à-dire que j'ai 100 sur mon compte ; mon suiveur a 1000 sur son compte ; j'ouvre une transaction avec 3% de mon dépôt et le volume du lot est recalculé par le pourcentage de ma transaction ; pour cette raison, ma transaction avec 3% est de 3$ alors que le suiveur a ouvert une transaction avec 3% = 30$.


2) Est-il possible de retirer les détails de son compte ? C'est-à-dire le prénom, le nom de famille mais surtout le montant du solde ? S'il n'est pas possible de retirer toutes les informations, qu'est-ce qui est possible ?

3) Chers programmeurs, estimez le coût approximatif d'un tel travail, je ne veux pas être trompé et veux comprendre le prix adéquat.
Merci !

Les données de l'abonné sont nuisibles à la suppression.

Encore une fois, vous avez 50 sur votre compte avec un effet de levier de 500 et un abonné a 5000 avec un effet de levier de 33.

Il y a comme un petit problème de calcul ici. Si on parle de ce service.

Si on parle d'auto-copie, alors :

vous avez 50 sur votre compte avec un effet de levier de 2000 et un souscripteur 5000 avec un effet de levier de 33.

Vous pourrez ouvrir 3 positions avec un petit effet de levier alors que l'abonné n'aura plus d'argent après la deuxième, car il s'exposera à la marge.

---

Ce n'est pas si simple.

 

Tretyakov Rostyslav #:
Это вроде для МТ5С

Merci pour le code, mais le vôtre ne renvoie que les ordres pairs (SELLSTOP) pour une raison que je ne comprends pas, peut-être que le tri est erroné/ (j'exécute le code dans le testeur - peut-être que c'est le problème ?).

 
MixanM #:

Merci pour le code, mais le vôtre ne renvoie que les ordres pairs (SELLSTOP) pour une raison que je ne comprends pas, peut-être que le tri est erroné/ (j'exécute le code dans le testeur - peut-être que c'est le problème ?).

mon code renvoie le type du dernier ordre fermé - "0-Buy" ou "1-Sell".
 
Tretyakov Rostyslav #:
mon code renvoie le type du dernier ordre fermé - "0-Buy" ou "1-Sell".

Eh bien oui, c'est ce que je voulais dire - qu'il ne renvoie des données que pour un ordre "sellstop". J'ai ajouté ceci au vôtre, juste pour vérifier visuellement :

...

si(t<OrderCloseTime())

{

t=OrderCloseTime() ; result=OrderType() ;

Print("Order TIP :", OrderTicket()) ;

}

....