J'apprends à écrire un conseiller... - page 3

 
Il y a toujours 1 erreur OrderSend 130... De quoi dépend-il ?
 
paukas >> :

Téléchargez les bougies minutes (par exemple d'Alpari) et faites un test sur les bougies minutes.

Comment vais-je faire un test sur les minutes si j'ai un MTS pour H4... ?

Vous ne pouvez pas tester sur des chandeliers de 4 heures avec un stop de 5 pips.

Pourquoi pas ?
 

Dans l'article Championnat de trading automatisé 2007 : les erreurs communes aux experts
J'ai lu que l'erreur 130 de l'OrderSend (ERR_INVALID_STOPS) est due à des stops erronés ou trop proches.

J'ai appelé le DC, j'ai demandé à quelle distance minimale un arrêt peut être fixé - ils ont dit qu'il n'y avait pas de limite... Étrange !

Je ne comprends pas non plus une chose. Si j'ouvre manuellement un ordre, je ne peux pas réellement y fixer le stop et le profit... Alors comment fait OrderSend() ?

J'ai vérifié si je place manuellement un ordre puis un stop... Un minimum de 4 pips doit être fixé à partir du prix ouvert - c'est-à-dire le prix actuel...

Maintenant je dois m'amuser avec OrderModify(). Pourquoi avons-nous besoin d'un stoploss dans OrderSend() alors ?

 
ALex2008 >> :

Comment vais-je faire un test sur les minutes si j'ai un MTS pour H4... ?

Pourquoi pas ?

Le test sur la plus petite TF est effectué comme suit

Vous écrivez les appels comme ceci (par exemple)

   wpr[1] =   iWPR ( Symbol(), 10, PERIOD_H4, 1 );
   wpr[2] =   iWPR ( Symbol(), 20, PERIOD_H4, 1 );
   wpr[3] =   iWPR ( Symbol(), 40, PERIOD_H4, 1 );
   wpr[4] =   iWPR ( Symbol(), 60, PERIOD_H4, 1 );


Nous essayerons d'utiliser n'importe quel délai et ce sera le test le plus efficace et le plus correct sur les minutes !

il sera le plus correct !

---

Malheureusement, vous ne pouvez pas le faire sur les ticks, car il n'y a pas d'historique des ticks dans le testeur MT4.


---

Apprenez à écrire le TF tout de suite ! Et alors votre EA ne se souciera pas du TF sur lequel il a été exécuté !

il est raisonnable d'écrire des paramètres au lieu de constantes - pour un code plus simple et une perception plus claire je mets des constantes

 

Yuri) Je ne suis pas un pro en la matière...) Au moins, décrivez ce que cela signifie pour moi. wpr[1] = iWPR ( Symbol(), 10, PERIOD_H4, 1 ) ;

 
ALex2008 >> :

Yury) Je ne suis pas un pro dans ce domaine...) Décrivez au moins ce que cela signifie. wpr[1] = iWPR ( Symbol(), 10, PERIOD_H4, 1 ) ;

iWPR est un indicateur intégré

double iWPR( string symbol, int timeframe, int period, int shift)
Calcul de l'indicateur Percent Range de Larry Williams.
Paramètres :
symbol - Nom du symbole de l'instrument, sur les données duquel cet indicateur sera calculé. NULL signifie le symbole actuel.
délai - Période. Peut être l'une des périodes du graphique. 0 signifie la période du graphique actuel.
period - Période (nombre de barres) pour calculer l'indicateur.
shift - Index de la valeur reçue du tampon de l'indicateur (décalage par rapport à la barre actuelle en arrière d'un nombre de périodes spécifié).


Exemple :
if(iWPR(NULL,0,14,0)>iWPR(NULL,0,14,1)) return(0) ;

c'est décrit dans la FAQ, jetez-y un coup d'oeil.

wpr[...] est le tableau où sont résumés les résultats de chaque indicateur avec une période différente

( vous pouvez nommer le tableau comme vous le souhaitez)

double wpr[5] ;

wpr[1] = iWPR ( Symbol(), 10, PERIOD_H4, 1 ) ;
wpr[2] = iWPR ( Symbol(), 20, PERIOD_H4, 1 ) ;
wpr[3] = iWPR ( Symbol(), 40, PERIOD_H4, 1 ) ;
wpr[4] = iWPR ( Symbol(), 60, PERIOD_H4, 1 ) ;


Je viens de montrer un appel avec des périodes différentes...

L'idée était de mettre un point dans les indicateurs afin de pouvoir les tester sur n'importe quel TF.

 
Si l'idée était d'écrire une période dans les indicateurs en une seule fois ! pour pouvoir le tester sur n'importe quel TF, j'ai compris... -Le Conseiller Expert n'a pas d'indicateurs, il n'a que des bougies H4 (en tant qu'indicateur) -TF Je vais maintenant essayer de considérer partout dans le code et ensuite vous pourrez le tester sur n'importe quel TF)
 

J'ai décidé d'apporter une modification à une commande ouverte...

Juste après OrderSend

      if (OrderSelect(0,SELECT_BY_POS)==true)
        if (OrderType()==OP_BUY)
          OrderModify(OrderTicket(),OrderOpenPrice(), Stop, Take, colorBaySell);


Il y a une erreur dans le journal :

ticket invalide pour la fonction OrderModify
11:43:54 2005.01.26 13:12 EURUSD : Erreur OrderModify 4051
Veuillez me dire ce qui ne va pas.

 

Les nouvelles valeurs d'arrêt doivent être définies comme suit : :

OrderModify(OrderTicket(), OrderOpenPrice(), Bid- Stop*Point,.....
                                                    
où le nouveau stop est fixé - en pips (en nombres entiers)
 

La fonction MarketInfo() utilisée pour OrderClose est-elle nécessaire pour OrderModify ?

Raison: