[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 403

 
mersi:
Téléchargez l'historique et la question disparaît

Comment le télécharger ?
 
kolyango:

Je comprends bien :

La mise en œuvre spécifique est très étroitement liée à vos conditions.

Un drapeau est simplement une variable dans laquelle l'état est stocké. En gros, elle peut être élevée ou abaissée. Construisez sur cette base et mettez en œuvre votre logique.

 
w_ersoc:

Pouvez-vous me conseiller sur la façon d'écrire une condition correcte pour que le conseiller expert se déclenche une fois avec l'ouverture d'une nouvelle barre à un cadre temporel spécifié ? :(

Vous pouvez imaginer différentes variantes, il utilise souvent ce genre de condition :

int start()
static datetime dtBar;
//.................
if(Time[0]==dtBar) return(0);//…проверим открытие новой свечи
dtBar=Time[0]; //(тот же Бар-возврат)(новый-продолжение...)
// 
 
splxgf:

La mise en œuvre spécifique est très étroitement liée à vos conditions.

Un drapeau est simplement une variable dans laquelle la condition est stockée. En gros, elle peut être élevée ou abaissée. Construisez sur cette base et mettez en œuvre votre logique.


Est-ce que j'ai bien compris ?

Je comprends bien :

1. si la condition1 est remplie, alors le drapeau_SSSR1 reçoit une valeur vraie et nous commençons immédiatement à vérifier la condition2.

2. si la condition2 est remplie, la valeur vraie est attribuée au drapeau Flag_CCP2 ; sinon, il s'agit d'un faux drapeau, et au tick suivant

nous ne vérifions plus la condition1, et passons directement à la condition2 et ainsi de suite, jusqu'à ce que la condition2 soit remplie et qu'elle prenne une valeur vraie.

3. puis nous vérifions la condition3 et Flag_USSR2 (et qu'est-ce qui est vérifié exactement dans USSR2 si c'est vrai ou faux, ou quoi ?)

Est-ce correct ? Il n'y a pas une seule transaction dans le testeur... Bien qu'il devrait y en avoir si c'est juste. Qu'est-ce qui ne va pas... ?

static bool Val_max, Cl_dn, Val_min; //static or global
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int
   i, j, total,
   cnt,
   OrderBuy,
   OrderSell,
   Magic,
   Ticket,                                      // Номер ордера
   Total=0,                                     // Количество ордеров в окне
   Tip=-1;                                      // Тип выбран. ордера (B=0,S=1)      
   double
   Open_0,
   ask,
   bid,
   Price,                                       // Цена выбранного ордера
   SL,                                          // SL выбранного ордера
   TP,                                          // TP выбранного ордера
   Lot;                                         // Колич. лотов в выбран.ордере
   Open_0=Open[0];                             // Цена откр. формирующегося бара
   ask=Ask;                                    // Текущая цена покупки
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb;                                        // Название финанс. инструмента
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1= Open[1];
double Close_1= Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max) Val_max=true;                  // 
if (Open_1 > Close_1) Cl_dn=true;
if (Val <= Value_min && Cl_dn==true) Val_min=true;
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }

   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

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

Salut !

Je me suis fixé comme objectif de limiter à 1 les positions ouvertes simultanées.

Avec la variable Niveau d'ouverture/fermeture = 3/2 multiplié par Point, placée dans les conditions de position d'ouverture/fermeture, j'ai essayé de résoudre cette tâche, mais sans succès.

Aidez-moi à trouver la solution :)

 
kolyango:


Est-ce que c'est la bonne chose à faire ? Il n'y a pas une seule transaction dans le testeur... Bien qu'il devrait y en avoir si c'est juste. Qu'est-ce qui ne va pas... ?

Maintenant, écrivez à nouveau les conditions complètes en langage normal et vous pourrez corriger le code... Ce qui est bien avec les signaux, c'est qu'ils doivent avoir une date d'expiration et une annulation.
 
skyjet:

Salut !

Je me suis fixé pour objectif de limiter à 1 les positions ouvertes simultanément.

si(OrdersTotal()>0) retour ;

Ou une variation avec le symbole et le rejet des ordres en attente.

 

c'est-à-dire que dans ma version

si(OrdersTotal()>1)return ;

?

 
splxgf:
Maintenant, écrivez à nouveau les conditions complètes en langage normal et vous pourrez corriger le code... Ce qui est bien avec les signaux, c'est qu'ils doivent avoir une période d'expiration et d'annulation.

Toutes ces conditions peuvent ne pas se suivre en même temps (peut-être après une heure ou deux ou trois), donc nous devons faire en sorte que dès que l'indicateur atteint 1.0000, cette condition ne soit pas vérifiée à chaque tick, et attendre qu'une barre se ferme avec une baisse, et après cela ces 2 conditions ne sont pas vérifiées à chaque tick, et attendre que l'indicateur atteigne 0.9980 ou moins. Dès que toutes les conditions sont remplies, nous ouvrons un ordre de marché pour vendre 0,1 lot avec un stop loss de 400p et un take profit de 400p.
 
skyjet:

c'est-à-dire que dans ma version

si(OrdersTotal()>1)return ;

?

Mieux encore la première option, placer avant de tenter d'ouvrir un ordre(OrderSend)