[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 634

 
artmedia70:

Encore une chose...

Lors du test, j'ai supprimé de la fenêtre graphique toutes les indulgences qui sont automatiquement chargées à partir du modèle (le modèle porte le nom d'un EA et est automatiquement chargé lors du test).

Dans le journal du testeur, il est constamment écrit que le chargement de l'indulgence de l'utilisateur a réussi et il est immédiatement suivi d'un enregistrement de sa suppression. Et ainsi de suite pendant toute la durée du test...

Est-ce normal ou est-ce une mauvaise chose ?

Comment puis-je le réparer ?


Je réponds peut-être tardivement, mais j'ai moi-même été confronté à une telle situation. Ce n'est pas bon :)

J'ai de tels enregistrements dans le magazine, lorsque j'ai appelé un indicateur personnalisé via iCustom(), j'ai oublié de passer un des paramètres par erreur. Le compilateur ne suit pas ces erreurs, même pendant le test puisque le nom de l'indicateur est correct, MT écrit que tout est chargé avec succès, mais le nombre de paramètres n'est pas vérifié, et puisque les paramètres sont spécifiés incorrectement, une erreur se produit dans l'indicateur et il est déchargé immédiatement. J'ai remarqué que le test s'exécute lentement et que le journal est le même :

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15 : chargé avec succès

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15 : enlevé

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15 : chargé avec succès

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15 : enlevé

J'ai commencé à me pencher sur la question et j'ai trouvé un tel problème à cause de mon inattention, j'ai essayé de mettre/supprimer un indicateur "à la volée", je n'ai vu aucune "animation" dans le journal à cette occasion, le problème venait de iCustom(), donc vérifiez-le au cas où :)

 

ToLik_SRGV:

tout le problème était avec iCustom(), donc vérifiez juste au cas où :)

C'est exact. C'est dû au mauvais nombre d'arguments.
 

Donnez des conseils sur la façon de définir la date d'expiration d'un ordre en attente.

D'une manière ou d'une autre, il ne semble pas vouloir fonctionner pour moi, et il n'y a pas beaucoup d'informations à ce sujet dans le manuel.

Si vous pouvez me donner un exemple.

Merci d'avance.

 
ToLik_SRGV:

Réponse tardive, probablement, mais j'ai rencontré ce problème moi-même. Ce n'est pas bon :)

J'ai de tels enregistrements dans le journal, lorsque j'appelle un indicateur personnalisé via iCustom(), j'ai oublié de passer un des paramètres par erreur. Le compilateur ne suit pas ces erreurs, même pendant le test puisque le nom de l'indicateur est correct, MT écrit que tout est chargé avec succès, mais le nombre de paramètres n'est pas vérifié, et puisque les paramètres sont spécifiés incorrectement, une erreur se produit dans l'indicateur et il est déchargé immédiatement. J'ai remarqué que le test s'exécute lentement et que le journal est le même :

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15 : chargé avec succès

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15 : enlevé

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15 : chargé avec succès

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15 : enlevé

J'ai commencé à me pencher sur la question et j'ai trouvé un tel problème à cause de mon inattention, j'ai essayé de mettre/supprimer un indicateur "à la volée", je n'ai pas vu d'"animation" dans le journal à cette occasion, le problème venait de iCustom(), donc vérifiez-le juste au cas où :)

Non, pas trop tard... C'est parfait, merci.
 
kwadrad:

Donnez des conseils sur la façon de définir la date d'expiration d'un ordre en attente.

D'une manière ou d'une autre, il ne semble pas vouloir fonctionner pour moi, et il n'y a pas beaucoup d'informations à ce sujet dans le manuel.

Si vous pouvez me donner un exemple.

Merci d'avance.

Ici. C'est ce que je fais...

   double   tp,PriceOpn,PriceTake;
   string   sy=Symbol();
   double pa=MarketInfo(sy, MODE_ASK);
   double pb=MarketInfo(sy, MODE_BID);
   double po=MarketInfo(sy, MODE_POINT);

   Magic=511;
   Lots_New=NormalizeLot(Lots/2, False, NULL);
         
   PriceOpn  = NormalizePrice(pa+DistORD*po, NULL);
   PriceTake = NormalizePrice(pa+(DistORD+tp)*po, NULL);
 //------------------------------------------------------------------
   SetOrder(NULL, OP_BUYSTOP, Lots_New, PriceOpn, 0, PriceTake, Magic, TimeCurrent()+12*60); // 12 часов срок его жизни...
 //------------------------------------------------------------------
//==============================================================================================

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.08.2008                                                     |
//|  Описание : Установка ордера.                                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    co - комментарий                                                        |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, string co="", datetime ex=0) {
  color    cl=IIFc(op==OP_BUYLIMIT || op==OP_BUYSTOP, clOpenBuy, clOpenSell);
  datetime ot;
  double   pa, pb, mp;
  int      err, it, ticket, msl;

  if (sy=="" || sy=="0") sy=Symbol();
  msl=MarketInfo(sy, MODE_STOPLEVEL);
  if (co=="") co=WindowExpertName()+" "+GetNameTF(Period());
  if (ex>0 && ex<TimeCurrent()) ex=0;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("SetOrder(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ot=TimeCurrent();
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, co, mn, ex, cl);
    if (ticket>0) {
      if (UseSound) PlaySound(SoundSuccess); break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66);
        if (ExistOrders(sy, op, mn, ot)) {
          if (UseSound) PlaySound(SoundSuccess); break;
        }
        Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
        continue;
      }
      if (UseSound) PlaySound(SoundError);
      mp=MarketInfo(sy, MODE_POINT);
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);
      if (pa==0 && pb==0) Message("SetOrder(): Проверьте в обзоре рынка наличие символа "+sy);
      Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa,"  Bid=",pb,"  sy=",sy,"  ll=",ll,"  op=",GetNameOP(op),
            "  pp=",pp,"  sl=",sl,"  tp=",tp,"  mn=",mn);
      // Неправильные стопы
      if (err==130) {
        // Корректировка ценовых уровней
        if (modeSetOrders==1) {
          Sleep(1000*5.3);
          switch (op) {
            case OP_BUYLIMIT:
              if (pp>pa-msl*mp) pp=pa-msl*mp;
              if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
              if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
              break;
            case OP_BUYSTOP:
              if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
              if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
              if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
              break;
            case OP_SELLLIMIT:
              if (pp<pb+msl*mp) pp=pb+msl*mp;
              if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
              if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
              break;
            case OP_SELLSTOP:
              if (pp>pb-msl*mp) pp=pb-msl*mp;
              if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
              if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
              break;
          }
          Print("SetOrder(): Скорректированы ценовые уровни");
          continue;
        }
        // Вход по текущим ценам
        if (modeSetOrders==2) {
          Print("SetOrder(): Вход по текущим ценам");
          if (op==OP_BUYLIMIT || op==OP_BUYSTOP) OpenPosition(sy, OP_BUY, ll, sl, tp, mn, co);
          if (op==OP_SELLLIMIT || op==OP_SELLSTOP) OpenPosition(sy, OP_SELL, ll, sl, tp, mn, co);
          break;
        }
      }
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      // Слишком частые запросы (8) или слишком много запросов (141)
      if (err==8 || err==141) Sleep(1000*100);
      if (err==139 || err==140 || err==148) break;
      // Ожидание освобождения подсистемы торговли
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      // Обнуление даты истечения
      if (err==147) {
        ex=0; continue;
      }
      if (err!=135 && err!=138) Sleep(1000*7.7);
    }
  }
}
 
artmedia70:

Ici. C'est ce que je fais...




О. Merci.

Vous devez comprendre que c'est le délai en minutes à partir de l'ouverture ?

 
kwadrad:


О. Merci.

Je dois comprendre qu'il s'agit du délai en minutes à partir de l'ouverture ?

Oui, dans l'exemple de la durée de vie de 12 heures... 12*60 minutes
 

Je sais qu'il peut sembler être OffTop, mais pour moi, en tant que nouveau venu dans l'écriture d'experts (et la programmation en général, sans considérer mon expérience de la programmation en assembleur pour Spectrum il y a vingt ans), ma question, mais plutôt..... Allez, c'est juste une question, ce serait juste sur le point :

En testant l'EA sur un historique de deux ans, j'ai remarqué des mois où il y a un très fort drawdown. Il s'agit d'une question pour les anciens : quelles sont les méthodes de gestion des drawdowns disponibles en tant que telles, quelles sont les plus efficaces selon vous ?

De mon propre point de vue, je vois deux méthodes jusqu'à présent :

1. Geler toutes les transactions dans le cas où le drawdown de l'équité dépasse un certain nombre de pourcent et
1.1 pour chaque position. Après son point d'équilibre, connecter un trailing stop et fixer le stop à une petite distance de l'Ask/Bid, sécurisant ainsi un petit profit et ensuite tirer les stops après le prix, fermant partiellement les positions (pour libérer les fonds) quand un certain nombre de points de gain est atteint.
1.2. Après que les capitaux propres aient augmenté d'un certain pourcentage, commencez lentement à négocier...

2. Au contraire, après avoir désactivé le trade principal, nous devons utiliser le demi-lot, mais avec un grand nombre d'ordres, en suivant strictement la tendance avec un petit stop suiveur après le seuil de rentabilité.

Je pense que la première méthode permet d'éviter une forte baisse des fonds propres mais il faut attendre longtemps que le marché se rapproche des ordres
. La deuxième méthode consomme de la marge mais dans le cas de positions à court terme, vous pouvez rapidement ajouter de l'argent à la position...

Jusqu'à présent, je ne vois que deux voies opposées.

Que conseillez-vous, mes camarades ? Toutes les idées et suggestions, même les plus insensées à première vue, sont les bienvenues...

Merci d'avance :)

 
Le testeur ne vous permet-il pas de tester sur plus que le quotidien ?
 
artmedia70:
Le testeur ne vous permet-il pas de tester sur plus que le quotidien ?


Ы

Préparez-vous un EA pour l'interbancaire ?

Raison: