Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 38
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
A continuación, pasar el argumento a la función, ya que se proporciona. Aunque es mejor quitarlo, es una tautología.
Y no todos los pedidos del bucle se recalcularán.
El billete con sobreescritura, trabajando desde la última orden con un Martin.
y luego cómo eliminar la declaración global de 'count' hides en la línea...
es interesante hacer que funcione como debería.
Hasta ahora, el probador muestra resultados bastante buenos, y a veces "errores insuperables en el Asesor Experto".
Saludos.
Me encontré con una grabación en este formato:
Es decir, aquí se ha sustituido la sentencia condicional if por una función comercial de tipo bool en lugar de una expresión. ¿Entiendo correctamente que dicha escritura es igual a :
if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?
He buscado tanto en la Ayuda como en el tutorial, pero no he encontrado dicho formato.
¿Puedo utilizar este modo para escribir directamente funciones de otro tipo en lugar de una expresión? Y si es así, ¿cuál sería el algoritmo?
Lo arreglé, puse un argumento, lo puse en el ámbito global, ahora genera una advertencia de que este argumento ya se utiliza como entrada en otras funciones
Billete con sobreescritura, trabajo desde el último pedido con martin
y luego cómo eliminar la declaración de 'count' oculta la declaración global en la línea...
Es interesante hacer que funcione como debería.
Hasta ahora, el probador muestra resultados bastante buenos, y a veces "errores insuperables en el Asesor Experto".
Saludos.
Me encontré con una grabación en este formato:
Es decir, aquí se ha sustituido el operador condicional por una función comercial de tipo bool en lugar de una expresión. ¿Entiendo correctamente que dicha escritura es igual a :
if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?
He buscado tanto en la Ayuda como en el tutorial, pero no he encontrado dicho formato.
¿Puedo utilizar este modo para escribir directamente funciones de otro tipo en lugar de una expresión? Si es así, ¿cuál sería el algoritmo?
Asísi(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; no funcionará. La condición no debe ser lanzada fuera de los paréntesis.
Perosi(OrderSelect(ticket,SELECT_BY_TICKET)==true) {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; puede.
Asísi(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; no funcionará. La condición no debe ser lanzada fuera de los paréntesis.
Perosi(OrderSelect(ticket,SELECT_BY_TICKET)==true) {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; puede.
Por favor, muéstrame la versión corregida, porque sin el código es adivinar.
De acuerdo.
Terminé lo que pude. La descripción está hecha. El objetivo es entender por qué no funciona como quiero.
//| ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss = 1000; //Стоплосс ордера
extern double TakeProfit = 1500; //Тейкпрофит ордера
extern double TrailingStop = 1000; // трал
extern int Delta = 100; //Расстояние от цены для установки ордера
extern double LOT = 0.1; //Объём позиции
extern int Magic =200;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (TrailingStop!=0) Trailing();
//ИНДИКАТОР RSI
double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
int b,s,p,res;
double BuyPrice=Ask+Delta*Point;
double SellPrice=Bid-Delta*Point;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP) b++;
if (OrderType()==OP_SELLSTOP) s++;
}
}
double SL,TP;
//---- buy stop
if(RSI0>50&&RSI1<50)
{
res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
}
//---- sell stop
if(RSI0<50&&RSI1>50)
{
res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red );
}
//---- buy stop делете
if(RSI0<50&&RSI1>50)
{
OrderDelete( OrderTicket());
}
//---- sell stop делете
if(RSI0>50&&RSI1<50)
{
OrderDelete( OrderTicket());
}
//----
return(0);
}
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------
void Trailing()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()||OrderMagicNumber()==Magic)
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>TrailingStop)
{
if(OrderStopLoss()<Bid-TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
if(OrderType()==OP_SELL)
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>TrailingStop)
{
if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------+--------------------------------------------------------------------+
¿y cómo consiguió el billete para el pedido no abierto?
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP)
if (сигнал_bue) OrderDelete(OrderTicket());
else b++;
if (OrderType()==OP_SELLSTOP)
if (сигнал_sell) OrderDelete(OrderTicket());
else s++;
}
}
¿Verdad? No puedo meterlo ahí.
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP)
if (сигнал_bue) OrderDelete(OrderTicket());
else b++;
if (OrderType()==OP_SELLSTOP)
if (сигнал_sell) OrderDelete(OrderTicket());
else s++;
}
}