[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 370

 
Bion >> :

J'ai fait ce que vous m'avez conseillé.

Vous devez utiliser la date LastTime ;
datetime Pause=3600 ;

int start()
{
si(TimeCurrent()<LastTime+Pause)return(0) ;

...

bool cl() {if(OrderSelect(0,SELECT_BY_POS)==true){ int t=OrderType() ;
double l=OrderLots() ;
int tik=OrderTicket();Alert("tik=", tik) ;
}
si (t==OP_BUY) OrderClose(tik,l,Bid,3,Red) ;
si (t==OP_SELL) OrderClose(tik,l,Ask,3,Green) ;
LastTime=TimeCurrent() ;
}

Mais dans le testeur de stratégie, l'ordre s'ouvre conformément aux conditions, mais il ne réagit pas au temps.

De plus, le testeur ne réagit pas au paramètre "temps d'existence de l'ordre en attente", c'est-à-dire qu'il n'est pas supprimé quand il est temps de le supprimer.

C'est censé être comme ça ?

Comment faire pour que le testeur prenne en compte le temps écoulé depuis la clôture de la commande ?


Deuxièmement, il n'est pas très agréable d'assigner une valeur à une variable globale dans une fonction obscure, il y a deux façons de s'en sortir, soit par référence, soit en assignant une valeur à une variable globale si la fonction renvoie une valeur de type booléen, bien sûr les variables pour le si aussi c'est alertant, mais c'est votre métier .... mais ce n'est qu'une expression))) Votre code n'indique pas clairement quand cette fonction est appelée et si elle est appelée tout court. Essayez de vérifier les résultats dans le fichier journal et vous comprendrez.
 

Voici le code complet, j'ai supprimé toutes les fonctions, déclaré les variables comme il se doit, mais le résultat est le même - en mode test, il ne réagit pas au temps, il place des ordres supplémentaires sur la même barre.

De quoi a-t-il besoin ?


double q0=0 ;
double q1=0 ;
double q2=0 ;
double q3=0 ;
datetime LastTime ;
datetime Pause=3600 ;
int typ, tik ;
double l ;

int start()
{

datetime t=Hour() ;

if (t==8) {q0=0 ; q1=0 ; q2=0 ; q3=0;}

if (t>=9) {

int i0=0 ;
while (q0==0) { q0=iCustom(NULL,0, "MorningFlat_V3",0,15,8,45,161.8,Turquoise,Red,Gold, Silver,0,i0) ; i0++ ; }

int i1=0 ;
while (q1==0) { q1=iCustom(NULL,0, "MorningFlat_V3",0,15,8,45,161.8,Turquoise,Red,Gold, Silver,1,i1) ; i1++ ; }

int i2=0 ;
while (q2==0) { q2=iCustom(NULL,0, "MorningFlat_V3",0,15,8,45,161.8,Turquoise,Red,Gold, Silver,2,i2) ; i2++ ; }

int i3=0 ;
while (q3==0) { q3=iCustom(NULL,0, "MorningFlat_V3",0,15,8,45,161.8,Turquoise,Red,Gold, Silver,3,i3) ; i3++ ; }


Comment("g0=",q0, "\n", "g1=",q1, "\n", "g2=",q2, "\n", "g3=",q3 ) ; }

double os0=iOsMA(NULL,0,5,26,9,4,0) ;

double os1=iOsMA(NULL,0,5,26,9,4,1) ;

// voir d'ici


if(TimeCurrent()<(LastTime+Pause))return(0) ;

if ( OrdersTotal()==0) { if (Bid>q0 && t>=9 && t<=20 && os1>0) OrderSend(Symbol(),OP_BUY,0.1,Ask,3,(Bid-30*Point),0,"__",555,0,Red );

si (Ask<q1 && t>=9 && t<=20 && os1<0) OrderSend(Symbol(),OP_SELL,0.1,Bid,3,(Ask+30*Point),0,"__",444,0,Green);}

if (OrdersTotal()==1) {OrderSelect(0,SELECT_BY_POS) ;
typ=OrderType() ;
tik=OrderTicket() ;
l=OrderLots() ;
if (typ==OP_BUY && os1<0) { LastTime=TimeCurrent() ; OrderClose(tik,l,Bid,3,Red);}
if (typ==OP_SELL && os1>0) { LastTime=TimeCurrent();OrderClose(tik,l,Ask,3,Green);}

}

return(0) ;
}
//+------------------------------------------------------------------+

 

Bonjour.

Question pour les experts

La situation est la suivante : l'Expert Advisor est suspendu sur le compte de démonstration, les cotations passent, les prix changent, mais l'Expert Advisor a arrêté de trader depuis un certain temps, une erreur est générée dans le log :


2009/12/30 16:46:06 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:06 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:07 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:07 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:08 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:09 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:09 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:10 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:10 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:11 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Pas de prix
2009.12.30 16:46:11 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Pas de prix
2009.12.30 16:46:12 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Pas de prix
2009.12.30 16:46:13 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Pas de prix

Paire - USDCAD


Démarré le 2009.12.30 16:46:06 et arrêté le 2009.12.30 16:46:06

2009.12.30 17:29:58 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 128. Le temps d'attente pour la transaction a expiré

D'accord, 43 minutes, c'est important, et pire encore, cela perturbe l'algorithme d'ekspert.

L'erreur qui apparaît lorsque j'essaie d'envoyer un ordre OP_BUYSTOP est encore plus intéressante :-0 (quel genre de cotation peut-il y avoir pour les ordres en attente ?).


136 PAS DE PRIX = PAS DE DEVIS :


Pourquoi n'y a-t-il pas de prix s'ils changent constamment à l'écran ?


La question a été soulevée ici https://www.mql5.com/ru/forum/105903/page2 par un goldtrader respecté, mais n'a pas été officiellement résolue (j'espère que cette question n'est pas une sorte de TABO dont nous ne voulons pas discuter au vu et au su de tous).


J'aimerais savoir "pourquoi" et "comment prévenir ou traiter ce type d'erreurs".


J'espère que ce n'est pas un TABOU que les gens ne veulent pas discuter en public). Merci d'avance pour la réponse.

 
AndBar >> :

Bonjour.

Question pour les experts -

La situation est la suivante : Expert Advisor sur un compte de démonstration, les cotations sont passées, les prix changent, mais l'Expert Advisor a arrêté de négocier pendant un certain temps, l'erreur est générée dans le journal :


2009.12.30 16:46:06 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:06 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:07 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:07 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:08 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:09 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:09 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:10 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:10 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:11 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:11 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:12 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Aucun prix
2009.12.30 16:46:13 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 136. Pas de prix

Paire - USDCAD


L'erreur a commencé le 2009.12.30 16:46:06 et s'est arrêtée le

2009.12.30 17:29:58 --- Fynktsia put_BUYSTOP_tsina_vhdn_par : pomulka vunuknyla pru vukonanni koda OrderSend() -- Code d'erreur = 128. Le temps d'attente pour la transaction a expiré

Vous devriez convenir que 43 minutes, c'est considérable et, qui plus est, cela gâche l'algorithme de l'expert.

Encore plus intéressant est l'erreur qui apparaît lorsqu'on essaie d'envoyer un ordre OP_BUYSTOP :-0 (quel genre de cotation peut-il y avoir pour les ordres en attente ?)


136 PAS DE PRIX = PAS DE DEVIS :


Pourquoi pas de prix si à l'écran ils changent constamment ?


Le problème a été soulevé ici https://www.mql5.com/ru/forum/105903/page2 par un négociant en or respecté, mais n'a pas été officiellement résolu (j'espère qu'il ne s'agit pas d'une sorte de problème TABU dont vous ne voulez pas discuter au vu et au su de tous)
.


J'aimerais savoir "pourquoi" et "comment prévenir ou traiter ce genre d'erreurs".

quelle est la révision de la plateforme ?

Il a été question plus d'une fois des différents flux de données. Pour le trading automatisé, le flux est fermé. Apparemment.

 
AndBar писал(а) >>

136 PAS DE PRIX = PAS DE DEVIS :

Cela se produit souvent avant que la nouvelle ne soit connue. Il n'y a rien à faire, à moins de passer un ordre à l'avance et de le tirer derrière le prix aussi longtemps que possible. 43 minutes, c'est trop long.

 
Bion писал(а) >>

Voici le code complet, j'ai supprimé toutes les fonctions, déclaré les variables nécessaires, mais le résultat est le même - en mode test, il ne réagit pas au temps, il passe des ordres supplémentaires sur la même barre.

La question portait sur une pause après la clôture. Il y aura une pause après la fermeture.

-

Il y a plusieurs ouvertures sur une barre. Après une ouverture, vous devez mémoriser l'heure de la barre et avant une ouverture, vous devez vérifier que l'heure de la barre n'est pas égale à l'heure de la dernière ouverture. Il est préférable d'utiliser GlobalVariable pour se souvenir de ce temps.

-

Dans tous les cas, il serait bon d'ajouter while (q0==0 && i<Bars).

-

LastTime=TimeCurrent() ; - il est préférable de le faire après avoir vérifié si l'ordre a vraiment été clôturé : if(OrderClose(...))LastTime=TimeCurrent() ;

 
Integer писал(а) >>

La question portait sur une pause après l'heure de fermeture. Il y aura une pause après la fermeture.

-

Ouvertures multiples sur le même bar. Après l'ouverture, vous devez vous rappeler l'heure du bar, et avant l'ouverture, vérifiez que l'heure du bar n'est pas égale à l'heure de la dernière ouverture. Il est préférable d'utiliser GlobalVariable pour se souvenir de ce temps.

-

Dans tous les cas, il serait bon d'ajouter while (q0==0 && i<Bars).

-

LastTime=TimeCurrent() ; - il est préférable de le faire après avoir vérifié si l'ordre a vraiment été clôturé : if(OrderClose(...))LastTime=TimeCurrent() ;

D'après le tutoriel, une variable GV ne peut avoir que le type double - comment devrions-nous y mettre le nombre de secondes alors ?

J'ai vérifié si un ordre a été fermé, mais cela échoue toujours et nous obtenons toujours une erreur.


si(Time[0]<(LastTime+Pause))return(0) ;

si ((OrdersTotal()==0) { if (Bid>q0 && t>=9 && t<=20 && os1>0) OrderSend(Symbol(),OP_BUY,0.1,Ask,3,(Bid-30*Point),0,"__",555,0,Red ) ;

si (Ask<q1 && t>=9 && t<=20 && os1<0) OrderSend(Symbol(),OP_SELL,0.1,Bid,3,(Ask+30*Point),0,"__",444,0,Green);}

if (OrdersTotal()==1) {OrderSelect(0,SELECT_BY_POS ;)
typ=OrderType() ;
tik=OrderTicket() ;
l=OrderLots() ;
si (typ==OP_BUY && os1<0) if (OrderClose(tik,l,Bid,3,Red)) LastTime=Time[0] ;
si (typ==OP_SELL && os1>0) if (OrderClose(tik,l,Ask,3,Green)) LastTime=Time[0] ;
}

Pourriez-vous nous donner un exemple ou un lien où la tâche consistant à retarder l'ouverture de la commande suivante d'une heure après la précédente a été mise en œuvre avec succès ?

 
Bion писал(а) >>

D'après le manuel, une variable GV ne peut avoir que le type double - alors comment y mettre le nombre de secondes ?

Ahhhh, alors oublie tout et passe une bonne année !

Bonne année à tous !

 
Je travaillais avec un indicateur, tout allait bien, puis quand j'ai changé d'horizon temporel, le terminal a commencé à se bloquer, j'ai réinstallé le windup, il se bloque toujours. Pourquoi(((((((((((((
 
Fosfalugel писал(а) >>
Je travaillais avec un indicateur, tout allait bien, puis lorsque j'ai changé d'horizon temporel, le terminal a commencé à se figer, j'ai réinstallé Windows, il se fige toujours. Pourquoi(((((((((((((

Le témoin lumineux devrait probablement être jeté. Ou demandez au Père Noël. C'est le réveillon du Nouvel An.