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

 
dimon74:
Cela pourrait être utile !!! Essayez de le baser sur un seul prix : dites Enchère. Le prix d'ouverture pour OP_SELLSTOP sera Bid , et pour OP_BUYSTOP - Bid+87*Point (ou ce dont vous avez besoin).
Je vois l'idée, merci !
 
Vinin:

Maintenant un magicien, les paramètres sont fixés à

Jetez un coup d'œil au message personnel...
 

Aidez-moi, s'il vous plaît. Peut-être que quelqu'un sait comment implémenter une fonction dans le code, qui compare l'avant-dernière valeur de l'historique avec la dernière (nous parlons de positions fermées) quelle que soit la valeur (par exemple OrderCloseTime()), et si elles sont différentes (dans ce cas l'avant-dernière est inférieure à la dernière) - faire un BLA-BLA-BLA. Si possible, affinez mon code, ou écrivez le vôtre si vous l'avez pris dans la mauvaise direction.

double C_T_L_C_P() {

datetime t;

double r=0;

int i, k=OrdersHistoryTotal(), q=0;

if (q==0)

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (t<OrderCloseTime()) {r=OrderCloseTime();}

}}}

return (r);}

MERCI D'AVANCE !!!

 

Aide à la vérification.

Après l'apparition de la première unité dans le cycle, vérifiez si cette unité tiendra pendant le temps t+t1 (vérification toutes les delta secondes). Si elle se maintient, nous l'achetons, et si à un moment donné elle ne se maintient pas, nous sortons de la boucle. En d'autres termes, le signal est valide, s'il a été vérifié à chaque intervalle delta et s'il était toujours égal à un.

Est-ce que je pense correctement ?

if(sign0==1) //проверка начинаертя только после появления 1 
     {
      t=TimeCurrent();                                     //фиксируем время
                                                           //в цикле от t до t+t1 через каждые дельта секунд
       while(t<t+t1)                                       //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
         {
            if(sign0==1)                                   //еще паз проверка наличия  1
              sign1=1;                                    //новой переменой присваиваем 1
            else
              {sign1=0;break;}                             // если нет присваиваем 0 и заканчиваем цикл
            t=t+delta;                                     //проверяем через каждые дельта секунд
         }
      if(sign1==1) op="BUY";
            return;
     }
 
gince:

Aide à la vérification.

Après l'apparition de la première unité dans le cycle, vérifiez si cette unité tiendra pendant le temps t+t1 (vérification toutes les delta secondes). Si elle se maintient, nous achetons, et si à un moment donné elle ne se maintient pas, nous sortons de la boucle.

Est-ce que je pense correctement ?


Le résultat est une boucle while infinie (t est toujours <t+t1, seulement si t1=0). Dans la boucle, sign1 toujours =1
 
abolk:

Le résultat est une boucle while infinie (t est toujours <t+t1, seulement si t1=0). Dans la boucle, sign1 toujours =1

Comment corriger l'erreur ?
 
gince:

Comment corriger une erreur ?

Pour corriger une erreur, il faut détailler l'algorithme (pas le code, mais l'algorithme). Et ensuite superposer le code sur l'algorithme
 
abolk:

Pour corriger l'erreur, l'algorithme doit être détaillé

Un signal binaire 0 ou 1 est reçu. Si un 1 est reçu, alors à partir de ce moment nous commençons à vérifier s'il tiendra pendant 10 min (600 sec) en vérifiant toutes les 60 sec. Si toutes les 10 minutes il y avait un 1, alors Achetez, et si au moins une fois il n'y avait pas de 1, alors terminez la vérification et considérez qu'il n'y a pas de signal pour ouvrir.
 
gince:

Un signal binaire 0 ou 1 est reçu. Si un 1 est reçu, alors à partir de ce moment, nous commençons à vérifier si elle tiendra pendant 10 minutes (600 secondes) en vérifiant toutes les 60 secondes. Si toutes les 10 minutes étaient égales à un - Achetez, et si au moins une fois n'était pas égale à un, terminez la vérification et considérez qu'il n'y a pas de signal d'ouverture.

Il n'est pas clair dans le code comment le signal discret sign0 change. Dans le code présenté, le signal ne change pas. Il y a eu une tentative infructueuse de travailler avec la t
 
void CheckForOpen()
  {
   
   int    res;
   datetime t;
   int sign=0;
//---- go trading only for first tiks of new bar


  
  double tr0=iCustom(NULL,0,"trd",0,0);
  double tr1=iCustom(NULL,0,"trd",1,0); 
//---- sell conditions
   if(tr1==1)  
     {
      t=TimeCurrent();
       while(t<t+tim)
         {
            if(tr1==1)
              sign=-1;
            else
              {sign=0;break;}
            t=t+delta;
         }
      if(sign==-1) 
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
Ceci est extrait de Moving Average.mq4
Raison: