EA N7S_AO_772012 - page 23

 

Maintenant, un petit mot sur les drapeaux qui ne sont pas inclus dans la fonction FLG comme eux-mêmes sont indépendants.

A) Flg est un flag d'initialisation, il est nécessaire pour éviter d'ouvrir la pose après une panne ou un début de fonctionnement, s'il y a un signal d'entrée (ce signal est de longue durée), car il peut être trop tard. La logique est la suivante : si VSR!=0, c'est-à-dire s'il y a un signal, alors Flg=faux ; dès que le signal disparaît, le drapeau est remis à zéro.

if (!Flg){if (VSR () ==0) {Flg=true ; return (0);}}

B) Flq - drapeau intéressant, interdisant d'ouvrir une seconde position sur la même barre. Au départ, je voulais interdire l'ouverture d'une position à perte sur une seule barre mais je l'implémenterai lorsque j'aurai terminé avec ma fonction BuSll qui rendra la chose plus facile. Pour l'instant, il existe une telle variante.

Il est fixé à la position d'ouverture

{if (Trd_Up_X && VSR() > 0 && bu <HM_Up_X ) {

si (MOS( 0, lots, sl, tp, WindowExpertName(), mn)>=1) {Flq=false;}}

if (Trd_Dn_Y && VSR() < 0 && sll<HM_Dn_Y ) {

si (MOS( 1, lots, sl, tp, WindowExpertName(), mn)>=1) {Flq=false;}}

Au fait, j'ai écrit plus tôt sur la correction de cette fonction.

Il se réinitialise toutes les 4 heures. Si vous pensez que c'est trop pour certaines paires, vous pouvez ajouter à la fonction H1() réinitialiser le drapeau toutes les heures pour toutes les paires sauf certaines if (Symbol()!="GBPJPY" || Symbol()!="USDCHF"){ Flq = true ; }

 
WitoHOH писал(а) >>

Quelque chose à propos de la dernière version ne fonctionne pas.

L'optimiseur n'ouvre même pas une seule transaction à la première étape.

Le testeur avec des paramètres optimisés pour l'EA précédent fonctionne de la même manière.

Avez-vous trouvé pourquoi il n'est pas optimisé ?

 
SHOOTER777 писал(а) >>

Avez-vous trouvé pourquoi il n'a pas été optimisé ?

Non.

Je n'ai pas eu beaucoup de temps.

La dernière fois, il y a eu un problème à cause de l'absence d'historique.

Je suis juste en train de remettre l'histoire en marche.

Je vous tiendrai au courant demain matin.

 
SHOOTER777 писал(а) >>

Avez-vous trouvé pourquoi il n'a pas été optimisé ?

Il ne veut pas optimiser.

La septième version est optimisée avec les mêmes données historiques.

Le dernier ne le fera pas.

Partout le résultat est 0.

 

Reposé l'expert. Probablement une version corrompue. Le forum était gelé.

Et faites attention à ces lignes dans Expert Advisor

le solde initial, le minimum et le maximum, lorsque le conseiller expert effectue des transactions.

//------------------------------------------------------------------//
bool TrBlnc = true ; int StrtBlnc = 3000 ; int DBlnc = 1500 ; int UBlnc = 4000 ;
//------------------------------------------------------------------//

L'interdiction est implémentée dans la fonction bool FLG (int cs )

Dossiers :
 

Un peu plus sur la logique du conseiller.

Il y a un problème - les lacunes fréquentes. Pendant les écarts, les paramètres optimisés et les conditions d'entrée sur le marché sont désynchronisés, car les valeurs des indicateurs et les prix se déchirent. Il faut du temps pour s'en remettre. Pour l'AO, j'ai défini 12 heures, et je considère un écart significatif comme une variation de prix de plus de 20 points standard (pour certaines paires, il peut et doit y avoir d'autres valeurs).

Ainsi, ce que nous avons fait :

Nous avons d'abord déterminé s'il y avait un vide

string dttm = StringConcatenate (Year(), ".",Month(), ".",Day()) ;
datetime smtm=StrToTime(dttm) ;
bool Gp ;
int shft = iBarShift(NULL,0,smtm) ;
double iOpn = iOpen (NULL,0,shft) ; double iCls = iClose (NULL,0,shft+1) ;
double dOC = MathAbs ((iOpn - iCls)/(Point*10)) ;
si (dOC>20) Gp = true ;

Si c'est le cas et que Gp = vrai, alors la condition pour l'interdiction est la suivante

((DayOfWeek( ) == 1 && Hour( ) <14) && Gp))

Bien que j'aie quelques doutes sur le fait que la fonction

iBarShift (NULL,0,smtm) ;

peut-être serait-il préférable de l'écrire de la manière suivante

iBarShift (NULL,60,smtm,true) ; mais non, le dernier paramètre par défaut est toujours faux ?

J'attends vos réflexions et vos suggestions.

 
SHOOTER777 >> :

Faites également attention à ces lignes dans l'EA

le solde initial, le minimum et le maximum, lorsque l'EA effectue des transactions.

//------------------------------------------------------------------//
bool TrBlnc = true ; int StrtBlnc = 3000 ; int DBlnc = 1500 ; int UBlnc = 4000 ;
//------------------------------------------------------------------//

Cette interdiction est mise en œuvre dans la fonction bool FLG (int cs )

Pourquoi avez-vous besoin de telles restrictions ?

 
capellini писал(а) >>

Pourquoi avez-vous besoin de telles restrictions ?

Si vous n'en avez pas besoin, ne l'utilisez pas ! Je prépare l'EA pour de vrai et comme un EA multi-devises. À l'avenir, il s'agira d'une bifurcation, où l'EA ne sera pas autorisé à trader depuis le bas, afin de ne pas tout perdre en cas de force majeure, ainsi que depuis le haut - un oiseau dans la main vaut mieux qu'une grue))). MM cependant

 

Et maintenant des nouvelles du terrain ou du front))

Le week-end dernier, je n'ai pas eu le temps de préparer les fichiers du set pour la version L9, j'ai fini de travailler dessus tard plus les vacances)))).

J'ai donc décidé de faire l'expérience. J'ai mis la version de L9 avec les sets de la semaine dernière et d'une autre version.

Ce que nous avons à la fin des deux jours : solde -70$ Capitaux propres +420$ Bon coup !

 
SHOOTER777 писал(а) >>

Ainsi, si vous effectuez des tests ou des optimisations, assurez-vous que les capitaux propres se situent dans la fourchette définie dans les paramètres.

bool TrBlnc = true ; int StrtBlnc = 3000 ; int DBlnc = 1500 ; int UBlnc = 4000 ;

ou ajouter à int init() ligne if ( IsOptimization( ) ) TrBlnc = false;//if ( IsTesting() ) TrBlnc = false ;

Ça a marché.

L'optimisation est en cours.

Peut-être ces variables devraient-elles être déplacées en dehors du code ?

Ce serait plus facile pendant l'optimisation et dans le travail réel, aussi.

Le conseiller expert ne devra pas être recompilé à chaque fois que la balance est modifiée.