[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 279

 
veti-k:
Hola, ¿pueden decirme cómo determinar cuántos pips tiene de beneficio una orden?
Si tiene una posición de compra, debe restar el precio de apertura del precio de oferta actual. Si se trata de una posición de venta, deberá restar el precio de venta actual del precio de apertura.
 
paladin80:
Si se abre una posición de compra, reste el precio de apertura del precio de oferta actual. Si la posición es de venta, reste el precio de venta actual del precio de apertura.

Los exploradores descubrieron que se puede utilizar OrderClosePrice() en lugar de Bid o Ask
 
Gracias))
 
Estimados usuarios del foro, ¿podrían decirme cómo poner una variable de iCustom en ArrayMaximum?
 
Alexandr24:
Estimados usuarios del foro, ¿podrían aconsejarme cómo poner una variable de iCustom en ArrayMaximum?
Para ello debes leer qué es el ArrayMaximum.

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Busca el elemento con el valor máximo. La función devuelve la posición del elemento máximo en la matriz.

La búsqueda es un proceso, no una variable. Es decir, puedes asignar un valor indicador a un elemento del array, y luego buscar en el array el elemento más grande con ArrayMaximum.
 
granit77:
Para ello deberías leer qué es el ArrayMaximum.

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Busca el elemento con el valor máximo. La función devuelve la posición del elemento máximo en la matriz.

La búsqueda es un proceso, no una variable. Es decir, se puede asignar un valor indicador a un elemento del array y luego buscar en el array el elemento máximo con ArrayMaximum.
¿Cómo encontrar el valor máximo del indicador de ayer? Encontré el primer valor y el valor máximo del indicador del día de ayer, pero no puedo encontrar el valor máximo del día de ayer, ArrayMaximum empieza a buscar en todo el gráfico, o puede ser que lo haga alguna otra función?
 

Buenas tardes a todos, estoy sentado frente a mi ordenador golpeando mi cabeza contra el teclado - no puedo arreglar un error en el código... por favor, ayude a un principiante.

Aquí está mi código de búho:

extern double Beneficio de la toma = 500;

extern double Lots = 0.1;

extern double Stoploss = 30;

extern double TrailingStop = 30;

extern string Indicador_1 = "SAR (SAR_STEP)";

extern double SAR_Step = 0.02;

extern double SAR_MaxStep =0.2;

extern double GeneralShift = 0; // 0 - barra no cerrada, 1 - cerrada.

// Estas son las variables que serán

// se muestra durante

// conexión del Asesor Experto con el gráfico


//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int inicio()

{

doble a;

int b;

int total, ticket, cnt;


//sólo variables a utilizar en el programa


si(Bares<100)

{

Print("barras menos de 100");

return(0);

}

// Esta condición comprueba si el historial del gráfico contiene más de 100 velas y si no, devuelve un error,

// se generará un error. Es necesario llamar su atención sobre el problema de

// falta de información


if(TakeProfit<5)

{

Print("TakeProfit menos de 5");

return(0);

}

// Esta condición comprueba el nivel de TakeProfit (una de las variables externas,

// que controla el nivel de toma de beneficios. Es necesario para comprobar si // ha establecido los niveles de Take Profit.

// Compruebe si ha establecido niveles de toma de beneficios en un nivel no permitido por su empresa de corretaje.

// No está permitido para su empresa de corretaje. Es sólo para que si su Asesor Experto falla, usted // sepa exactamente cuál es el error.

// donde se encuentra el error. Le recomiendo encarecidamente que lo ponga.


total=Total de pedidos();

if(total<1)

// Esta comprobación es necesaria para evitar que se abran varias posiciones idénticas a la vez. Si no está marcada, entonces, por ejemplo, si su EA se activa cuando el estocástico está en la zona de sobrecompra, entonces operará en cada tick hasta que haya utilizado todo el margen.

// Por lo tanto, para limitar el número de posiciones abiertas, este

// limitador. Si se establece, el Asesor no abrirá más de un determinado // número de

// número de posiciones <x

{

// no hay órdenes abiertas identificadas

if(AccountFreeMargin()<(1000*Lots))

{

Print("No tenemos dinero. Margen libre = ", AccountFreeMargin();

return(0);

}

// Otro trozo de código auxiliar. Si no hay suficiente dinero en la cuenta, se

// imprime un error. Esta pieza es completamente inútil si el Asesor Experto funciona

// tiempo real, pero es muy útil en las pruebas sobre el historial.


if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0]); // Abrir COMPRA

// Finalmente llegamos a la parte más interesante. En lugar de estas x, tenemos que insertar

// condición que desencadena una COMPRA.


{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-Stoploss*Point, Ask+TakeProfit*Point, "comment",16384,0,Green);


// Estas son las condiciones de compra. En principio, no hay nada que cambiar aquí, pero para ampliar //mis horizontes, amplío el alcance.

// Descifraré lo que dice aquí. Aquí dice que debemos comprar

// (OP_BUY) el símbolo actual (par de divisas, al gráfico del que se ha adjuntado este Asesor Experto),

// tamaño de la operación Lotes (variable que se establece al principio). Precio de mercado, con

// deslizamiento 3, y con un StopLoss y TakeProfit fijados en el

al // inicio, la operación se marcará con el comentario "comment", con el número determinante 0, y al

// en el punto de compra, en el gráfico, habrá un deslizador verde con el código determinante

// 16384


if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de compra abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden BUY : ",GetLastError());

return(0);

}


// Este bloque sólo es necesario para registrar si todo ha ido bien.

// O, en caso contrario, para registrar un error que ha hecho que algo falle.


// Ahora lo mismo con la apuesta de venta. En lugar de YYYYYY - condición

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)<Close[0])

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+Stoploss*Point,Bid-TakeProfit*Point, "macd sample",16384,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de venta abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de VENTA : ",GetLastError());

return(0);

}

return(0);

}


// Ahora la salida. Aquí tampoco ha cambiado nada, es sólo RRRRRR - condición

// cerrar una operación por COMPRA, ZZZZZZZZZZ - por VENTA


for(cnt=0;cnt

//durante un tiempo buscan entre todas las posiciones abiertas

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && // comprobar las posiciones abiertas

OrderSymbol()==Symbol()) // comprobar el símbolo

{

if(OrderType()==OP_BUY) // se abre la posición larga

{

// ¿se debe cerrar?

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)<Close[0]) //cerrar COMPRA.

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // cerrar posición

return(0); // salir

}

// comprobar el trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // Lo mismo con la posición corta

{

// ¿se debe cerrar?

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0])//cerrar SELL

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // cerrar posición

return(0); // salir

}

// comprobar el trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

}

return(0);

//--------

}

//-------- el final.

 

¡¡Un comerciante de automóviles novato no puede atrapar un bicho!! ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡POR FAVOR, AYÚDAME !!!!!!!!!!!!!!!!!!

'}' - paréntesis desequilibrados C:\NProgram Files (x86)\NForex4you MetaTrader 4\Nexperts\NSaurentios V101.mq4 (167, 1)

 
Ojalá no me hubiera golpeado la cabeza al formatear el código de esta manera. Lo arreglaré :)
 

Ha repetido el error varias veces:

Pones una condición if, luego escribes algo entre sus paréntesis, y luego pones un punto y coma detrás del paréntesis de cierre. así:

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0]); 

Eso no es correcto. Esto es correcto:

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0]){

}
Razón de la queja: