[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 116

 
Roman.:

Ragazzi, potete dirmi perché potrebbe esserci un errore sul fatto di non poter aprire un indicatore in un EA?

Questa condizione è soddisfatta:

-Elenco dei parametri (se necessario). I parametri trasmessi devono corrispondere all'ordine di dichiarazione e al tipo di variabili esterne (extern) dell'indicatore personalizzato.


Dovreste controllare il nome dell'indicatore. Potrebbe essere
 
Vinin:

Dovrei controllare il nome dell'indicatore. Non so cosa possa essere.


Ho controllato il nome. È tutto a posto. Capire...

P.S. Ho impostato un terminale DC a cinque cifre, ho spostato tutto lì, ho ricontrollato tutto di nuovo, molte modifiche al codice, questo errore non si verifica più.

 
O guru della programmazione MQL, aiutate un nuovo arrivato a risolvere un problema. Il programma non funziona correttamente, non fa quello che dovrebbe fare. Potresti per favore dirmi qual è il mio errore? Il programma ha bisogno:
1. Aprire un ordine e assegnare il valore del prezzo di apertura alla variabile PriceBuy e visualizzare un messaggio al riguardo.
2. Aprire un nuovo ordine con le stesse condizioni quando viene raggiunto il TakeProfit.
Ecco il codice del programma:

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;
}
Grazie in anticipo
 
OTPOK:

O guru della programmazione MQL, aiutate un nuovo arrivato a risolvere un problema. Il programma non funziona correttamente, non fa quello che dovrebbe fare. Potresti per favore dirmi qual è il mio errore? Il programma ha bisogno di:
1. aprire un ordine e assegnare il valore del prezzo aperto alla variabile PriceBuy e visualizzare un messaggio al riguardo.
Per aprire un nuovo ordine con le stesse condizioni quando viene raggiunto il TakeProfit.
Ecco il codice del programma:


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

int start()
{
se(Acquista)
{
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("Buy Price = ",PriceBuy);
Comprare = falso;
numero = vero;}

se(Bid+100*Point<=PriceBuy && numero)
{PriceBuy = 0;
numero = falso;
Buy=true;}


ritorno;
}
Grazie in anticipo

Bid>=PriceBuy+100*Point
 

Voglio collegare la funzione CreateNamedPipe() da kernel32.dll. Ho bisogno di prescrivere bandiere di tipo Dword.

Lo faccio in questo modo:

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Naturalmente, il compilatore giura sulla L alla fine. Mi diresti cosa fare?

 
Vinin:

Devo controllare il nome dell'indicatore. Può essere.


Sì, davvero, Victor, il mio errore è stato che ho cercato di affrontarlo automaticamente... :-))) all'indicatore tramite

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

... Di conseguenza, i nomi "breve" e "normale" non corrispondono quando ci si rivolge ai valori dell'indicatore attraverso iCustom(), cioè quando non coincidono, l'indicatore dovrebbe essere indirizzato solo dal suo nome "normale".

Grazie.

 

Salve.

Per favore aiutatemi a trovare un errore.

Il codice è progettato per chiudere tutte le posizioni quando il prezzo attraversa la linea disegnata sul grafico. Il più delle volte è così. Ma periodicamente ci sono 2 inconvenienti: 1. Il prezzo attraversa la linea, ma le posizioni non vengono chiuse. 2. La linea interseca il livello di prezzo corrente (ad angolo), ma non coincide con esso (non influenza la candela corrente), mentre tutte le posizioni sono chiuse (cosa che non dovrebbe accadere).

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);
            }
         }
      }
   }
}

Vi ringrazio in anticipo.

 
nemo811:

Per favore aiutatemi a trovare l'errore.

Ritirando la domanda, ho capito.

 
toropchin:

Voglio collegare la funzione CreateNamedPipe() da kernel32.dll. Ho bisogno di prescrivere bandiere di tipo Dword.

Lo faccio in questo modo:

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Naturalmente, il compilatore giura sulla L alla fine. Qualche consiglio su cosa fare?

Zhunko:

Rimuovere la cifra. Ci possono essere solo 8 bit. MQL4 non funziona con quelli grandi.

È necessario rimuovere uno zero in più. Prova così: 0x1000000L


Non funziona così. Il compilatore dà errore '0x1000000L' - numero non valido
 
toropchin:

Non funziona così. Il compilatore genera l'errore '0x1000000L' - numero non valido

Non pensare affatto di notte... :-)) Non esiste un numero simile nel sistema a 16 bit. È un identificatore di tipo costante.

L dovrebbe essere rimosso:0x01000000