Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 215

 
AlGuru Veuillez me conseiller. Comment spécifier dans l'Expert Advisor de fermer sur la prochaine bougie ?
datetime Time[] - Tableau Timecontenant l'heure d'ouverture de chaque barre du graphique actuel.Time[0] - L'heure d'ouverture de la dernière barre. Si l'OrderOpenTime() est inférieur àTime[0] - cela signifie que l'ordre a été ouvert sur la dernière barre, et selon votre stratégie, il est temps de fermer cet ordre.
 
STARIJ:
datetime Time[] -Tableau de tempscontenant l'heure d'ouverture de chaque barre du graphique courant.Time[0] - L'heure d'ouverture de la dernière barre. Si l'OrderOpenTime () est ouvert à moins que Time[0]- cela signifie que l'ordre a été ouvert sur la dernière barre, et selon votre stratégie, il est temps de fermer cet ordre.
Ou bien, il a été oublié et a été ouvert il y a un an, par exemple ;)
 
STARIJ:
datetime Time[] - Tableau Série de temps, qui contient l'heure d'ouverture de chaque barre du graphique actuel.Time[0] - heure de la dernière barre ouverte . Si l'OrderOpenTime() est inférieur àTime[0] - cela signifie que l'ordre a été ouvert sur la dernière barre, et selon votre stratégie, il est temps de fermer cet ordre.


Merci ! Je viens de résoudre le problème avec la fonction iTime. Je ne suis pas encore très doué avec les tableaux ;)).

 
AlGuru:


Merci ! Je viens de résoudre le problème en utilisant la fonction iTime. Je ne suis pas encore très doué avec les tableaux ;)).

Montre-moi comment tu l'as résolu.

Il y a juste quelque chose que vous n'avez peut-être pas envisagé :

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Toutes les questions des débutants sur MQL4, l'aide et la discussion sur les algorithmes et les codes

Artyom Trishkin, 2017.05.25 19:43

STARIJ:
datetime Time[] -Tableau de temps, qui contient l'heure d'ouverture de chaque barre du graphique actuel.Time[0] - L'heure d'ouverture de la dernière barre. Si l'OrderOpenTime () estinférieur à Time[0]- cela signifie que l'ordre est ouvert sur la dernière barre, et selon votre stratégie, il est temps de fermer cet ordre.

Soit il a été oublié et a été découvert il y a un an, par exemple ;)

 
Artyom Trishkin:

Montre-moi comment tu l'as résolu.

Il y a des choses que vous n'avez peut-être pas envisagées :



OrderOpenTime() < iTime(Symbol(), 0, 0)
 
AlGuru:

OrderOpenTime() < iTime(Symbol(), 0, 0)

Et si l'heure d'ouverture de la commande était il y a une semaine ? Alors il n'est certainement pas sur la dernière bougie (si le graphique n'est pas hebdomadaire). Devrions-nous le fermer aussi ?

Bien sûr, tout dépend des exigences de votre TS, mais j'irais plutôt dans l'autre sens...

 
Artyom Trishkin:

Et si l'heure d'ouverture de la commande était il y a une semaine ? Alors il n'est certainement pas sur la dernière bougie (si le graphique n'est pas hebdomadaire). Devrions-nous le fermer aussi ?

Bien sûr, tout dépend des exigences de votre TS, mais j'irais plutôt dans l'autre sens...


Il s'agit d'une condition supplémentaire. Une position doit être fermée lorsque le prix atteint la ligne MA. Parfois, le prix s'ouvre juste sur la ligne et ouvre et ferme des positions à chaque tick. J'ai résolu ce problème en fermant une position au plus tôt à la bougie suivante.
 

Bonne journée à tous !

Veuillez indiquer comment coder l'action suivante dans le testeur de stratégie

Idée générale

1. ordre ouvert N -X (volume = 0.1)

2. si cet ordre est fermé sur SL, alors. pour compenser la perte, immédiatement au prix de clôture sur SL d'un ordre N X, ouvrez l'ordre N - X1 (volume = 0.3)

NOUS DEVONS FAIRE.

3 Si l'ordre (volume = 0.3) est fermé sur SL, seule la valeur de l'heure d' ouverture de l 'ordre N - X sera retenue pour compenser les pertes auxquelles il a été ouvert.

Je sais comment ouvrir les deux ordres, mais je n'arrive pas à trouver le chemin de la fin, comment mémoriser la valeur horaire pour un ordre fermé au SL avec un volume de 0,1 lot.

NOTE : Ceci est lié aux fermetures d'ordres sur le même tick.

Parfois, plus d'un ordre avec un volume de 0,1 et 0,3 sont fermés sur un tick.

Si 3 ordres de 0,1, par exemple, sont fermés sur un seul tick sur un SL, au lieu d'ouvrir 3 ordres de 0,3. - seulement 1 ordre de 0.3 lots est ouvert

Dans ce cas, si je ne ferme qu'un seul ordre de 0,3 lot sur le SL, je n'obtiendrai pas les valeurs de l'heure lorsque deux ordres de 0,1 lot sont ouverts qui compensent leurs pertes.

C'est-à-dire que j'ai besoin que 3 ordres de 0.3 lots soient ouverts dans ce cas, pas un seul.


Parfois, 3 ordres de 0,3 lot seront fermés par un SL sur un tick, malgré le fait que leurs ordres correspondants de 0,1 lot ont été ouverts sur différents ticks (mais juste à un prix).

Dans ce cas, le programme enregistre la bonne valeur uniquement pour un dernier ordre de 0,1 lot.

J'ai besoin que le programme sauvegarde la valeur horaire de chaque ordre (0.1 lot) fermé par SSL.


Voici mon code, que nous devons modifier.

Merci pour votre aide.

int  A2;
int A1;
int A;
int start()                                             
{                                               
int ot = OrdersTotal();                                         
int Ht = OrdersHistoryTotal();
                                                
                                                
if(Bid == iOpen(NULL,PERIOD_H1,0))
if ( A!= Hour() )
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
A = Hour();
}                                               
//**************************************************************************************
int Счет=0, Номер=OrdersHistoryTotal()-1;
//int A1=0;
  for( ; Номер>=0; Номер--)
  {
    if(!OrderSelect(Номер, SELECT_BY_POS, MODE_HISTORY)) continue;
    A1=OrderOpenTime();
    if(OrderProfit()>=0) break;
    Счет++;
    if(Счет ==1&&A2!=OrderOpenTime())
    {
    A2=OrderOpenTime();
     OrderSend(Symbol(),OP_SELL,0.3,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
    }
  }
//************************************************************************************** 
return;
}

Voici un exemple de situation où plusieurs ordres sont clôturés sur un seul tick

        08:51:38.906    2017.03.27 13:09:44  Tester: stop loss #200  at 1.08858 (1.08856 / 1.08858)
2       08:51:38.906    2017.03.27 13:09:44  1 = 1 = 1 = 1 EURUSD,M1: open #214  sell 0.30 EURUSD at 1.08856 sl: 1.09258 tp: 1.08658 ok
0       08:51:38.906    2017.03.27 13:10:28  Tester: stop loss #192  at 1.08879 (1.08877 / 1.08879)
0       08:51:38.906    2017.03.27 13:10:28  Tester: stop loss #193  at 1.08879 (1.08877 / 1.08879)
2       08:51:38.906    2017.03.27 13:10:28  1 = 1 = 1 = 1 EURUSD,M1: open #215  sell 0.30 EURUSD at 1.08877 sl: 1.09279 tp: 1.08679 ok
0       08:51:38.906    2017.03.27 13:10:29  Tester: stop loss #194  at 1.08880 (1.08878 / 1.08880)
 
AlGuru:

Il s'agit d'une condition supplémentaire. Une position est fermée lorsque le prix franchit la ligne МА. Parfois, le prix s'ouvre directement sur la ligne et ouvre et ferme une position à chaque tick. J'ai résolu le problème en fermant la position avant la prochaine bougie.

Un tel problème devrait être résolu en vérifiant s'il existe, ou a existé, une position ouverte et fermée sur cette même barre.

Sinon, vous allez tout empiler. La fonction de signal doit envoyer des signaux, tandis que la fonction de négociation doit déjà vérifier la validité du signal.

 

Bonjour. Pourquoi la paire de devises euro vs usdaffiche-t-elle 149.16325 au lieu de 1.0616 ?