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

 
OK les gars, merci beaucoup, très utile, désolé pour les "tripes" ;))
 
Parn25:

Aidez-moi, les gars !

J'essaie de développer un conseiller expert basé sur la stratégie du canal du matin. L'essentiel est le suivant : à 6h01 sur la paire EURGBP, déterminez le canal du mouvement des prix de 0 heure à 6 heures. Nous définissons deux ordres en attente et si l'ordre en attente déclenché est fermé par un stoppeur, nous ouvrons un ordre dans la direction opposée. C'est la deuxième partie de la stratégie qui ne fonctionne pas. C'est-à-dire que si un stop s'est déclenché, nous ne pouvons pas ouvrir un ordre dans la direction opposée.

Vous devez mettre un terme à l'arrêt tout de suite ! Ça va le déclencher automatiquement.

J'ai trouvé ça dans la poubelle, ça peut être utile.

void OrderCloseAll(){
   for (int i=0;i<OrdersTotal();i++)
     if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderType()==OP_BUY)
       OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE);
      else
      if(OrderType() == OP_SELL)
       OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE);
}

void OrderDeleteAll(int lots){
     for (int i=0;i<OrdersTotal();i++)
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if (OrderType()>1&&OrderType()<6)
         if(OrderLots()==lots){
          OrderDelete(OrderTicket());
          i=0;
         }
}
 //----------------------------------------------------
// покупка
void OpenBuyLIMIT(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) - Loss*Point;
   double TP = NormalizeDouble(price,Digits) + Target*Point-MarketInfo(Symbol(),MODE_SPREAD)*Point;
    OrderSend(Symbol(), OP_BUYLIMIT, lot,  NormalizeDouble(price,Digits), Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 //----------------------------------------------------
// продажа
void OpenSellLIMIT(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) + Loss*Point;
   double TP = NormalizeDouble(price,Digits) - Target*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_SELLLIMIT, lot,  NormalizeDouble(price,Digits), Slippage,  SL, TP, NULL, STUPID, 0, Red);
}
 //----------------------------------------------------
// покупка
void OpenBuySTOP(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) - Loss*Point;
   double TP = NormalizeDouble(price,Digits) + Target*Point-MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_BUYSTOP, lot,  NormalizeDouble(price,Digits), Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 //----------------------------------------------------
// продажа
void OpenSellSTOP(double lot, double price){
  double   SL = NormalizeDouble(price,Digits) + Loss*Point;
  double TP = NormalizeDouble(price,Digits) - Target*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_SELLSTOP, lot,  NormalizeDouble(price,Digits), Slippage,  SL, TP, NULL, STUPID, 0, Red);
}
Dossiers :
 
Parn25:

Les amis, aidez-moi un peu ! !!

J'essaie d'écrire un EA en utilisant la stratégie du canal du matin. L'essentiel est le suivant : à 6h01 sur la paire EURGBP, nous déterminons le canal du mouvement des prix de 0h à 6h. Nous définissons deux ordres en attente et si l'ordre en attente déclenché est fermé par un stoppeur, nous ouvrons un ordre dans la direction opposée. C'est la deuxième partie de la stratégie qui ne fonctionne pas. C'est-à-dire que si un stop s'est déclenché, nous ne pouvons pas ouvrir un ordre dans la direction opposée.
L'exemple avec un ordre en attente est approximativement le suivant.
Dossiers :
 
costy_:
L'exemple avec le pendule ressemble à ceci.
OK merci, je vais essayer ! !!
 

Bonjour.

Aujourd'hui c'est le week-end, donc je n'ai que le testeur visuel qui fonctionne :) Je lance dans le Strategy Tester le script pour décharger les valeurs de l'indicateur dans un fichier mais il décharge à partir de la date réelle actuelle (28 octobre 23:55).

Comment transférer la valeur (temps) de la dernière barre du testeur visuel vers le script ?

int start =iBarShift(NULL,0,Time[2200+EndB-1]);
int end   =iBarShift(NULL,0,Time[EndB]);

Comment passer et calculer dans le script EndB - la valeur de la dernière barre dans le testeur ?

P.S. En dernier recours, je mettrai tout le code du script dans le conseiller expert, etc.

 

Bonjour !

J'étudie le manuel, si je peux poser une question sur le matériel d'étude. S'il existe un sujet distinct pour ces questions, je vous serais reconnaissant de m'en fournir le lien.

J'essaie de comprendre l'indicateur ROC (le code est dans le fichier joint).

Si je comprends bien, la logique de l'indicateur est la suivante :

dans le graphique du courant, on prend la référence MA, à partir de laquelle on dessine la ligne de changement de vitesse V,

en outre, la MA du TF suivant (plus grand) est calculée, mais n'est pas affichée ; la ligne V suivante est calculée à partir de celle-ci.

Il en va de même pour l'horizon temporel suivant.

Question : Je ne comprends pas l'enregistrement donné

extern int Bars_V =13; // Nombre de barres pour le calcul de la vitesse
Les explications du code de l'indicateur indiquent que la vitesse est calculée comme une différence de 2 barres.

Et plus encore .....

J'ai téléchargé le code de cet indicateur sur MT4, sur H4 ce n'est pas sur la barre actuelle mais il y a environ 9-10 jours selon l'historique.

Sur d'autres périodes, c'est correct. Pourquoi en est-il ainsi ?

Merci d'avance pour votre aide, Salutations Olga

Dossiers :
my_roc.mq4  8 kb
 

Bonne journée !

Toutes les positions ouvertes doivent être fermées après l'intervalle de temps spécifié, c'est-à-dire que la durée de vie de la position ouverte doit correspondre à l'intervalle sélectionné.

Question. Existe-t-il d'autres solutions que la méthode OrderOpenTime() ?

 
Zar:

Bonjour.

Aujourd'hui c'est le week-end, cela signifie que seul le testeur visuel fonctionne :) Je lance le script dans le testeur pour décharger les valeurs des indicateurs dans un fichier et il décharge à partir de la date réelle actuelle (28 octobre 23:55).

Comment transférer la valeur (temps) de la dernière barre du testeur visuel vers le script ?

Comment passer et calculer dans le script EndB - valeur de la dernière barre dans le testeur ?

P.S. En dernier recours, je mettrai tout le code du script dans le conseiller expert, etc.

Le script ne trouvera pas le temps du testeur aussi facilement (l'indicateur le fera, cependant), vous pouvez l'attacher au début du test.EA

int start()
{
GlobalVariableSet( "Time_test", Time[0]) ;
.....................

et dans le script

datetime time_start=GlobalVariableGet( "Time_test");

rapidement et de manière fiable ...

 
Operr:

Bonne journée !

Toutes les positions ouvertes doivent être fermées après l'intervalle de temps spécifié, c'est-à-dire que la durée de vie de la position ouverte doit correspondre à l'intervalle sélectionné.

Question. Y a-t-il d'autres solutions, à part OrderOpenTime() ?

Il y a beaucoup d'options, par exemple nous pouvons écrire le temps ouvert dans le fichier, mais il serait plus facile de faire défiler les ordres ouverts et de comparer le temps restant.

En général, reformulez... "Toutes les positions ouvertes doivent être fermées après l'intervalle de temps spécifié" pour chaque position individuelle (c'est ainsi que j'ai compris la question).

 
LOA:

Bonjour !

J'étudie le manuel, si je peux poser une question sur le matériel d'étude. S'il existe un sujet distinct pour ces questions, je vous serais reconnaissant de m'en fournir le lien.

J'étudie l'indicateur ROC (le code est dans le fichier joint).

Si je comprends bien, la logique de l'indicateur est la suivante :

dans le graphique du courant, on prend la référence MA, à partir de laquelle est tracée la ligne de changement de vitesse V,

en outre, la MA du TF suivant (plus grand) est calculée, mais n'est pas affichée ; la ligne V suivante est calculée à partir de celle-ci.

Il en va de même pour l'horizon temporel suivant.

Question : Je ne comprends pas cet enregistrement

extern int Bars_V =13; // Nombre de barres pour le calcul de la vélocité
Les explications du code de l'indicateur indiquent que la vitesse est calculée comme une différence entre les valeurs de 2 barres.

Et plus encore.....

J'ai chargé ce code d'indicateur dans MT4, sur H4 il n'est pas sur la barre actuelle mais il y a environ 9-10 jours selon l'historique.

Sur d'autres périodes, tout va bien. Pourquoi en est-il ainsi ?

Je vous remercie d'avance de votre aide.

"larger TF" - non, la même MA mais les données sont prises avec un décalage Sh_1 re Sh_1=Bars_V ; // La période de vitesse mesurée (bars)

"Semblable pour la période suivante" - non, il y a un changement au début (pour chaque période, les coefficients sont différents K2, K3).

    switch(Period())                 // Расчёт коэффициентов для..
     {                             // .. различных ТФ
      case     1: K2=5;K3=15; break;// Таймфрейм М1
      case     5: K2=3;K3= 6; break;// Таймфрейм М5
      case    15: K2=2;K3= 4; break;// Таймфрейм М15
      case    30: K2=2;K3= 8; break;// Таймфрейм М30
....
Period_MA_2 =K2*Period_MA_1;   // Расчётн.период МА для ближ. ТФ
Period_MA_3 =K3*Period_MA_1;   // Расчётн.период МА для след. ТФ

La définition "Calculé la période MA pour la prochaine TF" n'est pas vraie, les erreurs sont toujours présentes dans les manuels (surtout les "histoires" sont très semblables).

"Question : Je ne comprends pas l'entrée suivante

extern int Bars_V =13 ; // Nombre de barres pour le calcul de la vitesse" recherche plus loin par le code Bars_V ...

   Sh_1=Bars_V;                   // Период измерен скорости (баров)

alors qu'est Sh_1, cette valeur est un décalage MA 1 ligne de vitesse, etc.

// Предназначен для использования в качестве примера в учебнике MQL4.
ce n'est pas un bon exemple, lisez quelque chose de plus simple à partir des indicateurs standards...
Raison: