Je rédigerai un conseiller gratuitement - page 149

 
DDM77:
Après que le bot ait été testé, une commande officielle est possible

Magnifiquement dit :)

 
Александр:

quelques changements

Qu'est-ce qui a été modifié exactement ?

 

Bonjour, chers collègues.

Le sujet est-il toujours d'actualité ? Y a-t-il des mécènes qui sont prêts à développer le robot gratuitement ?

J'ai besoin d'un assistant qui soit un bon codeur .mq4.

Je suis moi-même programmeur, mais je ne suis pas très bon avec mq4. Il y a certains problèmes, que je ne sais pas comment décrire, ou qui ne fonctionnent pas.

J'ai une stratégie scalping simple (M15-M30) et un robot initialement écrit. Il doit être amélioré.

Je ne donnerai pas le lien vers mon site, il ne sera pas considéré comme ma publicité :

RVI 50

EMA 9

EMA 100

Conditions d'entrée pour une position longue :

EMA9 croise EMA100 de bas en haut, RVI doit également croiser la ligne de zéro de bas en haut ou être au-dessus de la ligne de zéro. Si ces conditions sont remplies, nous ouvrons une position d'achat. Nous plaçonsun stop loss de 2-3 points en dessous du minimum le plus proche. Le Take Profit est 1,5 à 2 fois plus élevé que le Stop Loss.

Conditions d'entrée pour une position courte :

L'EMA9 croise l'EMA100 de haut en bas, tandis que l'indicateur RVI doit également croiser la ligne de zéro de haut en bas ou être en dessous de la ligne de zéro. Si ces conditions sont remplies, nous ouvrons une position de vente. Un stop loss est placé juste au-dessus du maximum le plus proche. Le Take Profit est 1,5 à 2 fois plus élevé que le Stop Loss.


J'ai écrit un robot primitif mais il est en train de perdre parce que je dois réparer quelque chose qui ne fonctionne pas, et peut-être que quelqu'un a des idées pour filtrer les faux signaux ? (bien sûr qu'ils le font)...

Ce qui ne fonctionne pas et que nous devons réparer :

1. Le Stop Loss et le Take Profit sont fixés à 100 et 200 respectivement, ces niveaux ne sont pas suffisants. Nous devrions calculer un stop loss minimum/maximum à partir de l'ensemble des chandeliers des X dernières barres (définir X barres comme paramètre d'entrée) et prendre des bénéfices à partir de celui-ci. Je ne sais pas comment le faire moi-même. Le point le plus important, car le robot échoue exactement à cause de la fermeture sur le stop, même si le signal était correct et que le bénéfice aurait été plus important.

2. Le robot, pour une raison quelconque, ouvre (dans le testeur) plusieurs ordres sur la même barre à quelques ticks près, même s'il vérifie l'ouverture d'un ordre sur la même barre (emprunté à ce forum), mais cela ne fonctionne pas. Nous devons modifier le contrôle et voir pourquoi il ne fonctionne pas.

3. Compléter l'ajout d'un trailing stop (paramètres entrants du robot) lorsque la BU atteint un certain niveau, par exemple, 1/2 du TP calculé (il est également possible de spécifier le facteur BU dans les paramètres, par exemple, de 0,3 à 0,7). Le suivi séparé est décrit dans le robot (le code est tiré de ce forum), mais il ne tient pas compte de la BU. De plus, pour une raison quelconque, il ne fonctionne pas dans le testeur de stratégie, j'ai besoin de comprendre pourquoi.

4. Je veux ajouter la gestion de l'argent, mais je ne sais pas comment. Par exemple, l'interdiction d'ouvrir des ordres de plus de 5 dans une direction, s'ils sont actifs. Ou interdire les échanges lors du réglage du solde/des fonds propres du compte.

5. Martingale. Filtrage des signaux. (Facultatif).


C'est tout. Le fichier du robot est prêt à être soumis au personnel s'il est intéressé par une coopération. Si vous êtes intéressé, je suis prêt à partager le fichier du robot de trading dans un message personnel, si je suis intéressé. Je vais moi-même finir, puis rester seulement 1 point.

 

J'ai résolu le point 1. J'ai trouvé comment calculer le prix sur l'historique des barres en utilisant iLowest/iHighest )) pour le dernier semestre de l'historique l'indicateur de rentabilité a légèrement augmenté) sur l'ensemble de l'historique est perdant (

Je ne comprends toujours pas le point 2.

J'ai commencé à gérer le trailing, peut-être que je vais le "gagner" par moi-même) la rentabilité devrait augmenter un peu, parce qu'il y a des transactions avec de grosses prises que le prix n'atteint pas et que l'on ferme par le stop, bien qu'il puisse y avoir un certain profit.

 

sur le deuxième point :

datetime current, last=0;
int shift=1;

void OnTick()
   {
   current=iTime(symbol,frame,shift);
   //ограничение на торговлю вне начала бара
   if(last==current) return;
   last=current;

   }

sur le troisième point :

//трейлинг рыночных ордеров, стоплосс держится на расстоянии Distance от самой экстремальной тени из последних History баров 
int DoTrailOrder(int ePosition, int eMagicNumber, double eDistance, int eHistory, string eSymbol, int eTimeFrame)
   {
   if(!OrderSelect(ePosition,SELECT_BY_POS,MODE_TRADES)) return(1);
   int eType=OrderType();
   if(eType!=OP_BUY && eType!=OP_SELL) return(0);
   if(OrderMagicNumber()!=eMagicNumber) return(0);
   if(OrderSymbol()!=eSymbol) return(0);
   //наблюдаем начиная с бара следующим за баром открытия
   if(iBarShift(eSymbol,eTimeFrame,OrderOpenTime())==0) return(0);
   int eDigits=(int)MarketInfo(eSymbol,MODE_DIGITS);
   double ePoint=MarketInfo(eSymbol,MODE_POINT);
   double eSpread=MarketInfo(eSymbol,MODE_SPREAD);
   double eExtremum;
   if(eType==OP_BUY)
      {
      //стоп устанавливается на расстоянии eDistance от самой низкой тени бара из истории eHistory
      eExtremum=iLow(eSymbol,eTimeFrame,iLowest(eSymbol,eTimeFrame,MODE_LOW,eHistory,1));
      //расстояние от минимума до StopLoss должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderStopLoss(),eDigits)<=eDistance*ePoint) return(0);
      //расстояние от минимума до цены открытия должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderOpenPrice(),eDigits)<=eDistance*ePoint) return(0);
      //новый стоп должен быть не ближе к текущей цене, чем на два спреда
      if(NormalizeDouble(MarketInfo(eSymbol,MODE_BID)+eDistance*ePoint-eExtremum,eDigits)<=2*eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum-eDistance*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrBlue)) return(-1);
      }
   if(eType==OP_SELL)
      {
      //стоп устанавливается на расстоянии eDistance от самой высокой тени бара из истории eHistory
      eExtremum=iHigh(eSymbol,eTimeFrame,iHighest(eSymbol,eTimeFrame,MODE_HIGH,eHistory,1));
      if(NormalizeDouble(OrderStopLoss()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint && OrderStopLoss()!=0) return(0);
      if(NormalizeDouble(OrderOpenPrice()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint) return(0);
      //один спред между Ask и Bid сократился
      if(NormalizeDouble(eExtremum+eDistance*ePoint-MarketInfo(eSymbol,MODE_ASK),eDigits)<=eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum+(eDistance+eSpread)*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrRed)) return(-1);
      }
   return(0);
   }
 

Les trailing stops peuvent augmenter l'espérance, mais ils n'améliorent pas la rentabilité. Il y aura une sous-performance dans un marché bruyant, où le prix fait tomber un nouveau stop suivi, alors que sans lui, il y aurait eu plus de profit.

Il est préférable de penser à fermer délibérément le commerce. Vous cherchez des signaux pour ouvrir, alors pourquoi lancer la fermeture à l'arbitrage ?
 

Merci pour les conseils sur les points 2 et 3. Je vais les tester.

En ce qui concerne la fermeture, il est bien sûr possible de fermer lorsque le signal opposé se déclenche, mais je dois réfléchir à ce qui donnera plus d'effet...

je veux retirer quelque chose lorsqu'il atteint un certain niveau. ce sera un inconvénient mais je ne veux pas non plus avoir un gros drawdown. je dois y réfléchir)))

merci

 

Dimitri, à propos du suivi - il s'agit d'une information déjà testée par de nombreuses personnes plus d'une fois. Le code de queue ci-dessus est probablement le meilleur de tous. Mais elle n'est pas sans inconvénient.

Essayez-le, tout doit être essayé.

 
Ivan:

Qu'est-ce qui a été modifié exactement ?

Je l'ai déjà donné quelque part. En voici d'autres.

Dossiers :
 
Дмитрий Хлыстов:

Merci pour les conseils sur les points 2 et 3. Je vais les tester.

En ce qui concerne la fermeture, il est bien sûr possible de fermer lorsque le signal opposé se déclenche, mais je dois réfléchir à ce qui donnera plus d'effet...

je veux retirer quelque chose lorsqu'il atteint un certain niveau. ce sera un inconvénient mais je ne veux pas non plus avoir un gros drawdown. je dois y réfléchir)))

merci

Le marché n'évolue pas par points, c'est-à-dire qu'il n'est pas basé sur des points. Il se déplace de niveau en niveau. La distance se mesure mieux en temps de tendance. Peut-être en ticks, mais pas en pips.

Raison: