[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 116

 
Roman.:

Chicos, ¿podéis decirme por qué puede haber un error de no poder abrir un indicador en un EA?

Esta condición se cumple:

-Lista de parámetros (si es necesario). Los parámetros transmitidos deben coincidir con el orden de declaración y el tipo de variables externas (extern) del indicador personalizado.


Debe comprobar el nombre del indicador. Podría ser
 
Vinin:

Tendría que comprobar el nombre del indicador. No sé qué puede ser.


He comprobado el nombre. Está bien. Lo que se está calculando...

P.D. He creado un terminal DC de cinco dígitos, he movido todo allí, he vuelto a comprobar todo, he editado mucho código, y ya no se produce ese error.

 
O Los gurús de la programación MQL, ayudan a un novato a resolver un problema. El programa no funciona correctamente, no hace lo que se supone que debe hacer. ¿Podría decirme cuál es mi error? El programa necesita:
1. Abre una orden y asigna el valor del precio de apertura a la variable PriceBuy y muestra un mensaje al respecto.
2. Abrir una nueva orden con las mismas condiciones cuando se alcance el TakeProfit.
Este es el código del programa:

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;
}
Gracias de antemano
 
OTPOK:

O Los gurús de la programación MQL, ayudan a un novato a resolver un problema. El programa no funciona correctamente, no hace lo que se supone que debe hacer. ¿Podría decirme cuál es mi error? El programa necesita:
1. abrir una orden y asignar el valor del precio abierto a la variable PriceBuy y mostrar un mensaje al respecto.
Para abrir una nueva orden con las mismas condiciones cuando se alcance el TakeProfit.
Aquí está el código del programa:


extern double PrecioCompra = 0;
extern bool Comprar = true;
extern bool number = false;

int inicio()
{
si(Comprar)
{
int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point);
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
PrecioCompra=PrecioAbierto();
Alert("Precio de compra = ",Precio de compra);
Comprar = falso;
número = true;}

if(Oferta+100*Punto<=PrecioCompra && número)
{PrecioCompra = 0;
número = falso;
Buy=true;}


volver;
}
Gracias de antemano

Oferta>=PrecioCompra+100*Punto
 

Quiero conectar la función CreateNamedPipe() de kernel32.dll. Necesito prescribir banderas de tipo Dword.

Lo estoy haciendo de esta manera:

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Naturalmente, el compilador jura la L al final. ¿Podría decirme qué hacer?

 
Vinin:

Tengo que comprobar el nombre del indicador. Puede ser.


Sí, de verdad, Víctor, mi error fue que intenté abordarlo automáticamente... :-))) al indicador a través de

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

... No he encontrado los nombres "cortos" y "normales", al dirigirse a los valores del indicador a través de iCustom(), es decir, cuando no coinciden, el indicador debe dirigirse sólo por su nombre "normal".

Gracias.

 

Hola.

Por favor, ayúdenme a encontrar un error.

El código está diseñado para cerrar todas las posiciones cuando el precio cruza la línea dibujada en el gráfico. La mayoría de las veces sí. Pero periódicamente hay 2 fallos: 1. El precio cruza la línea, pero las posiciones no se cierran. 2. La línea cruza el nivel de precios actual (en un ángulo), pero no coincide con él (no afecta a la vela actual), mientras que todas las posiciones están cerradas (lo que no debería ocurrir).

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

Se lo agradezco de antemano.

 
nemo811:

Por favor, ayúdenme a encontrar el error.

Retirando la pregunta, lo he resuelto.

 
toropchin:

Quiero conectar la función CreateNamedPipe() de kernel32.dll. Necesito prescribir banderas de tipo Dword.

Lo hago de esta manera:

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Naturalmente, el compilador jura la L al final. ¿Algún consejo sobre qué hacer?

Zhunko:

Quita el dígito. Sólo puede haber 8 bits. MQL4 no funciona con los grandes.

Tienes que quitar un cero de más. Inténtalo así: 0x1000000L


No funciona así. El compilador da el error '0x1000000L' - número no válido
 
toropchin:

No funciona así. El compilador genera el error '0x1000000L' - número no válido

No pensar en absoluto por la noche... :-)) En el sistema de 16 bits no existe ese número. Es un identificador de tipo constante.

L debe ser eliminado:0x01000000