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

 
Roman.:

Les gars, pouvez-vous me dire pourquoi il pourrait y avoir une erreur concernant l'impossibilité d'ouvrir un indicateur dans un EA ?

Cette condition est remplie :

-Liste des paramètres (si nécessaire). Les paramètres transmis doivent correspondre à l'ordre de déclaration et au type des variables externes (extern) de l'indicateur personnalisé.


Vous devez vérifier le nom de l'indicateur. Cela pourrait être
 
Vinin:

Il faudrait que je vérifie le nom de l'indicateur. Je ne sais pas ce que ça peut être.


J'ai vérifié le nom. C'est bon. J'essaie de comprendre...

P.S. J'ai mis en place un terminal DC à cinq chiffres, j'y ai tout déplacé, j'ai tout revérifié, beaucoup d'éditions de code, cette erreur ne se produit plus.

 
O gourous de la programmation MQL, aidez un nouveau venu à résoudre un problème. Le programme ne fonctionne pas correctement, il ne fait pas ce qu'il est censé faire. Pouvez-vous me dire quelle est mon erreur ? Le programme a besoin :
1. Ouvrir un ordre et affecter la valeur du prix d'ouverture à la variable PriceBuy et afficher un message à ce sujet.
2. Ouvrir un nouvel ordre avec les mêmes conditions lorsque le TakeProfit est atteint.
Voici le code du programme :

extern double PriceBuy = 0 ;
extern bool Buy = true ;
extern bool number = false ;

int start()
{
if(Buy)
{
int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-100*Point,Bid+100*Point) ;
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)
PriceBuy=OrderOpenPrice() ;
Alert("Buy Price = ",PriceBuy) ;
Buy = false ;
number = true;}

if (Bid+100*Point<=PriceBuy && number)
{PriceBuy = 0 ;
number = false ;
Buy=true;}


return ;
}
Merci d'avance
 
OTPOK:

O gourous de la programmation MQL, aidez un nouveau venu à résoudre un problème. Le programme ne fonctionne pas correctement, il ne fait pas ce qu'il est censé faire. Pouvez-vous me dire quelle est mon erreur ? Le programme doit :
1. ouvrir un ordre et affecter la valeur du prix ouvert à la variable PriceBuy et afficher un message à ce sujet.
Pour ouvrir un nouvel ordre avec les mêmes conditions lorsque le TakeProfit est atteint.
Voici le code du programme :


externe double PriceBuy = 0 ;
extern bool Buy = true ;
extern bool number = false ;

int start()
{
si(Acheter)
{
int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point) ;
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
PriceBuy=OrderOpenPrice() ;
Alert("Prix d'achat = ",PriceBuy) ;
Acheter = faux ;
nombre = vrai;}

si(Bid+100*Point<=PriceBuy && nombre)
{PriceBuy = 0 ;
nombre = faux ;
Buy=true;}


retour ;
}
Merci d'avance

Enchère>=PrixBuy+100*Point
 

Je veux connecter la fonction CreateNamedPipe() de kernel32.dll. Je dois prescrire des drapeaux de type Dword.

Je le fais de cette façon :

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Naturellement, le compilateur jure sur le L à la fin. Tu me dirais quoi faire ?

 
Vinin:

Je dois vérifier le nom de l'indicateur. C'est possible.


Oui, vraiment, Victor, mon erreur est d'avoir essayé de l'aborder automatiquement... :-))) à l'indicateur via

...
string short_name;
...
short_name="NonLagMA";
IndicatorShortName(short_name);
...

... Par conséquent, les noms "court" et "normal" ne correspondent pas lors de l'adressage aux valeurs de l'indicateur par iCustom(), c'est-à-dire que lorsqu'ils ne coïncident pas, l'indicateur doit être adressé uniquement par son nom "normal".

Merci.

 

Bonjour.

Veuillez m'aider à trouver une erreur.

Le code est conçu pour fermer toutes les positions lorsque le prix franchit la ligne tracée sur le graphique. La plupart du temps, c'est le cas. Mais périodiquement, il y a 2 problèmes : 1. Le prix franchit la ligne, mais les positions ne sont pas fermées. 2. La ligne croise le niveau de prix actuel (à un angle), mais ne coïncide pas avec lui (n'affecte pas la bougie actuelle), alors que toutes les positions sont fermées (ce qui ne devrait pas arriver).

int start() {
//============== Закрытие по линии Close ========================================
   int bar1,bar2,bar3;
   if (Draw_Close && ObjectFind("LINES CLOSE")==-1)
   {
      bar3 = searcFR(0,1);bar2 = searcFR(bar3,-1);bar1 = searcFR(bar2,1);
      drawline("LINES CLOSE",Color_Close,Time[bar1],High[bar1]+15*Point,Time[bar3],High[bar3]+15*Point);
   }
   string order = checkapp();
   if (order=="LINES CLOSE")
   {DeleteAllOtlozh_b();
    CloseAll_b(DeleteOtlozh,Proskalz);
    ObjectDelete("LINES CLOSE");
    ObjectDelete("LINES CLOSE n");
    Draw_Close  = false;
    if(UseAlert){
    Alert("Уровень достигнут, заблокирован");
    } 
   } 
}     
//==================================================================================


//=========== Вычисление линии Close  =================================================================
int searcFR(int bar, int UP_DN)
{  while(true)//ищем 1 фрактал после bar
   {  bar++;
      if (Fractal(bar) == UP_DN) return(bar);} 
   return(0);  
}
//--------------------------------------------------------------------------
int Fractal(int br)
{  if (br <= 2) return(0);
   if (High[br] >= High[br+1] && High[br] > High[br+2] && High[br] >= High[br-1] && High[br] > High[br-2]) return( 1);
   if (Low [br] <= Low [br+1] && Low [br] < Low [br+2] && Low [br] <= Low [br-1] && Low [br] < Low [br-2]) return(-1);
   return(0);
}
//-------------------------------------------------------------------
int drawline(string Name, color col,int X1,double Y1,int X2,double Y2)
{
   if (ObjectFind(Name)==0)return; //Если обьект существует
   int X1g=Time[0];
   int X2g=Time[0]+Period()*1200;
   double Y1g=Y1+(Y2-Y1)*(X1g-X1)/(X2-X1);
   double Y2g=Y1+(Y2-Y1)*(X2g-X1)/(X2-X1);
   ObjectCreate(Name, OBJ_TREND, 0,X1g,Y1g,X2g,Y2g);
   ObjectSet   (Name, OBJPROP_COLOR, col);
   ObjectSet   (Name, OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet   (Name, OBJPROP_WIDTH, 2);
   ObjectSet   (Name, OBJPROP_BACK,  false);
   ObjectSet   (Name, OBJPROP_RAY,   false);
   return;
}
//----------------------------------------------------------------------- проверка всех линий
string checkapp()
{
   int X_1,X_2,X_3;
   double Y_1,Y_2,Y_3;
   double shift_Y = (WindowPriceMax()-WindowPriceMin()) / 50;
   color col;
   for(int n=ObjectsTotal()-1; n>=0; n--) 
   {
      string Obj_N=ObjectName(n);
      if (ObjectType(Obj_N)!=OBJ_TREND) continue;
      if (StringFind(Obj_N,"LINES ",0)!=-1)//найден обьект-тренд к которому вычисляется приближение
      {
         X_1 = ObjectGet(Obj_N, OBJPROP_TIME1); 
         X_2 = ObjectGet(Obj_N, OBJPROP_TIME2); 
         ObjectDelete (Obj_N+" n");
         if (X_1>X_2 ||  X_2<Time[0]) {continue;}//ObjectDelete(Obj_N);
         Y_1 = ObjectGet(Obj_N, OBJPROP_PRICE1);
         Y_2 = ObjectGet(Obj_N, OBJPROP_PRICE2);
         col= ObjectGet(Obj_N, OBJPROP_COLOR);
         ObjectCreate (Obj_N+" n", OBJ_TEXT,0,X_1-Period()*60,Y_1+shift_Y,0,0,0,0);
         ObjectSetText(Obj_N+" n",StringSubstr(Obj_N,6,5) ,7,"Arial");
         ObjectSet    (Obj_N+" n", OBJPROP_COLOR, col);
         if (X_1<=Time[0] && X_2>=Time[0])//попадает во временной диапазон
         {
            X_3=Time[0];Y_3=Y_1+(Y_2-Y_1)*(X_3-X_1)/(X_2-X_1);//уравнение прямой
            if (Y_3>=Bid&&Y_3<=Ask)
            { 
               return(Obj_N);
            }
         }
      }
   }
}

Je vous remercie d'avance.

 
nemo811:

Veuillez m'aider à trouver l'erreur.

Je retire la question, j'ai réglé le problème.

 
toropchin:

Je veux connecter la fonction CreateNamedPipe() de kernel32.dll. Je dois prescrire des drapeaux de type Dword.

Je le fais de cette façon :

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Naturellement, le compilateur jure sur le L à la fin. Des conseils sur ce qu'il faut faire ?

Zhunko:

Retirez le chiffre. Il ne peut y avoir que 8 bits. MQL4 ne fonctionne pas avec les gros.

Vous devez enlever un zéro supplémentaire. Essayez comme ceci : 0x1000000L


Ça ne marche pas comme ça. Le compilateur donne l'erreur '0x1000000L' - nombre invalide
 
toropchin:

Cela ne fonctionne pas comme ça. Le compilateur génère l'erreur '0x1000000L' - numéro invalide.

Je ne pense pas du tout la nuit... :-)) Un tel nombre n'existe pas dans le système à 16 bits. Il s'agit d'un identifiant d'un type constant.

L doit être supprimé :0x01000000