Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 982
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
Ayer escribí el código, parece que funciona como debería, pero sólo cuando llego al valor superior del array con el botón más, se reinicia al principio del array y vuelve a subirlo. ¿Qué puedo añadir o arreglar en el código, para que cuando se alcance el valor superior del array, los siguientes clics en el botón más se detengan en el índice superior y no se restablezca al fondo del array? ¿O se puede simplificar el código de alguna otra manera para implementar esta idea de pulsar el botón?
Probablemente sí.
Supongo que sí.
Probado también, funciona igual
Probado también, funciona igual
No me di cuenta de inmediato, ¿para qué es el ciclo?
No me di cuenta de inmediato, pero ¿para qué sirve el bucle?
¿Hay alguna forma de hacerlo sin él? No sé qué es lo mejor y sólo hago lo que me parece lógico.
¿Hay alguna forma de hacerlo sin él? Simplemente no sé qué es lo mejor y hago lo que me parece lógico.
La lógica debe ser diferente. Al pulsar el botón + se incrementa el índice de la matriz. Alcanzado el máximo, no aumenta, sino que se mantiene en el máximo. Pulsando el botón, el índice disminuye. Alcanzado el cero, no reacciona al pulsar, se queda en el índice 0.
¿O se le ocurrió alguna otra idea?
P.D.: ¿Y quién publicó el ejemplo de trabajo con banderas, en respuesta a esta pregunta y lo borró? ¿Por qué lo has borrado? Después de todo, es una buena solución para el hombre. ¿Por qué iba a necesitar un conjunto limitado?La lógica debe ser diferente. Al pulsar el botón + se incrementa el índice de la matriz. Alcanzado el máximo, no aumenta, sino que se mantiene en el máximo. Pulsando el botón, el índice disminuye. Llega a cero, no responde, se queda en el índice 0.
¿O se le ocurrió alguna otra idea?
P.D.: ¿Y quién publicó el ejemplo de trabajo con banderas, en respuesta a esta pregunta y lo borró? ¿Por qué lo has borrado? Después de todo, es una buena solución para el hombre. ¿Por qué iba a necesitar un conjunto limitado?No, esa era exactamente la idea. Realmente no sé cómo hacerlo correctamente, así que lo hice como lo conseguí. Pero me he dado cuenta de que cuando el bucle se ejecuta en el programa, mientras no haga clic en los botones del gráfico, todo lo demás no funciona. Es como si todo estuviera en pausa. No entiendo por qué sucede esto, si hay alguna variante para implementar la idea de manera diferente, lo agradecería...
Eso es todo. El problema está resuelto) sin arrays y otras cosas. Resultó ser mucho más sencillo))))
La segunda pregunta surgió. ¿Cómo puedo establecer el nivel de activación de la alerta en el código con la flecha de ajuste que aparece cuando la alerta se establece a través del menú contextual con el ratón?
Por favor, ayuda, plz, es posible añadir una función a este EA, para que el EA establecido en la ventana EURUSD abrirá un acuerdo con los mismos parámetros, al mismo tiempo, pero para GBPUSD, y EURUSD no se abrirá.
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| Desarrollador: Minaev Andrey |
//| Asesor Experto: Estocástico.mq4 |
|| Sitio web: safe-forex.|| Sitio web: safe-forex. |
//| Correo:minaev.work@mail.ru |
//| Skype: live:minaev.trabajo |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
#property copyright "Safe-Forex.ru"
#enlace de propiedad "https://safe-forex.ru"
#propiedad estricta
extern bool Usar_Símbolo1 = true;
cadena externa Symbol1 = "USDJPY";
input string settings = ""; // Configuración del Asesor Experto
input int magic = 111; // input magic
input double fixVolume = 0.01; // Volumen
input int takeProfit = 500; // Beneficio
input int stopLoss = 500; //Pérdida
input int buyLevel = 100; // input int buy Level
input int sellLevel = 0; // 75 Nivel de venta
extern int ADXperiod = 15; //Periodo ADX 15
extern int ADXLevel =1;
extern int MAperiod =360; //Periodo MA 80
extern int MAperiod_2 =360; //Periodo MA 80
input string stochSettings = ""; // Configuración del indicador Oscilador Estocástico
input int stochPeriodK = 5; //periodo %K
input int stochPeriodD = 3; //periodo %D
input int stochSlowing = 3; // Ralentización
input ENUM_STO_PRICE stochPrice = STO_LOWHIGH; // Precio
input ENUM_MA_METHOD stochMethod = MODE_SMA; // Método
datetime newCandle; // nueva vela en el gráfico actual
bool allowOpenBuy; // permiso para abrir la posición de compra
allowOpenSell; // permiso para abrir la posición de venta
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit(void)
{
return INIT_SUCCEED;
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OnTick(void)
{
if(newCandle!=Time[0]) CheckSignalExist(); newCandle=Time[0];
if(allowOpenBuy) OpenPosition(OP_BUY);
if(allowOpenSell) OpenPosition(OP_SELL);
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La función abre la posición al precio actual |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OpenPosition(int type)
{
doble precio=0,0;
if(type==OP_BUY) price=Pedir;
if(type==OP_SELL) price=Bid;
int ticket=EnviarOrden(_Símbolo,tipo,volumenfijo,precio,0,0,",magia,0);
// int ticket=OrderSend(,type,fixVolume,price,0,0,0,",magic,0);
Sleep(1000);
if(ticket>0)
{
if(type==OP_BUY)
{
Print("Posición de compra abierta, ticket: ",ticket);
allowOpenBuy=false;
// SetStopOrders(ticket);
}
if(type==OP_SELL)
{
Print("Posición de venta abierta, ticket: ",ticket);
allowOpenSell=false;
// SetStopOrders(ticket);
}
}
if(ticket<0)
{
if(type==OP_BUY) Print("La posición de compra no se abrió, error: ",GetLastError());
if(type==OP_SELL) Print("La posición de venta no se abrió, error: ",GetLastError());
}
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La función establece la orden de parada |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//void SetStopOrders(int ticket)
//{
// double stopLevel=MarketInfo(_Symbol,MODE_STOPLEVEL),
// spread =MarketInfo(_Symbol,MODE_SPREAD),
// tp =takeProfit,
// sl =stopLoss;
// stopLevel+=spread;
// if(tp<stopLevel)
// {
// tp=nivel de parada;
// Print("Distancia mínima para el conjunto de beneficios");
// }
// if(sl<stopLevel)
// {
// sl=nivel de parada;
// Print("Distancia mínima para el conjunto de pérdidas");
// }
// if(OrderSelect(ticket,SELECT_BY_TICKET))
// {
// int type=OrderType();
// double opp =OrderOpenPrice();
// if(type==OP_BUY) {tp=opp+tp*_Point; sl=opp-sl*_Point;}
// if(type==OP_SELL) {tp=topp-tp*_Point; sl=opp+sl*_Point;}
// if(OrderModify(ticket,opp,sl,tp,0))
// {
// if(type==OP_BUY) Print("Niveles de pérdidas y ganancias establecidos para la posición de compra, ticket: ",ticket);
// if(type==OP_SELL) Print("Se han establecido los niveles de pérdidas y ganancias para la posición de venta, ticket: ",ticket);
// }
// si no {
// if(type==OP_BUY) Print("No se han establecido los niveles de pérdidas y ganancias para la posición de compra, ticket: ",ticket," error: ",GetLastError());
// if(type==OP_SELL) Print("Los niveles de pérdidas y ganancias para la posición de venta no se han establecido; ticket: ",ticket," error: ",GetLastError();
// }
// }
//}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La función comprueba la presencia de la señal |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void CheckSignalExist(void)
{
double ADX1=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,1); ////////////////////////////
double ADX2=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,2);
double DPLUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_PLUSDI,1);
double DMINUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_MINUSDI,1);
double MA=iMA(Symbol(),Period(),MAperiod,0,MODE_SMA,0,1);
double MA_2=iMA(Symbol(),Period(),MAperiod_2,0,MODE_SMA,0,1);
//PERIOD_H1
double mainLine1=iStochastic(_Símbolo,PERIOD_CURRENTE,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,1),
mainLine2=iStochastic(_Símbolo,PERIOD_CURRENTE,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,2),
signLine1=iStochastic(_Símbolo,PERIOD_CURRENTE,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,1),
signLine2=iStochastic(_Símbolo,PERIOD_CURRENTE,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,2);
Comentario(" ", (Ask-Bid)/1,5," ",Bid-Close[1]," ", Ask-Close[1]);
// if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
//& iClose(Symbol(),Period(),1)>MA& iClose(Symbol(),Period(),1)>MA_2 && signLine1<buyLevel && signLine2<buyLevel
if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
//&Close[2]<MA& Close[2]<MA_2 && signLine1<buyLevel && signLine2<buyLevel
&&Close[10] > Close[1]-(Close[1]-Close[20])
&& Close[10]>Bid )
{
Print("Ha aparecido una señal para abrir una posición de compra");
if(GetPositionsNumber()==0)
{
// allowOpenSell=true;
{ allowOpenBuy=true;
Sleep(1000);
Print("Permitido abrir posición de compra");
}
}
// if(mainLine1<signLine1 && mainLine2>signLine2 && mainLine1>sellLevel && ADX1>ADXLevel&& mainLine2>sellLevel
//& iClose(Symbol(),Period(),1)<MA& iClose(Symbol(),Period(),1)<MA_2 && signLine1>sellLevel && signLine2>sellLevel
if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
//&Close[2]>MA& Close[2]>MA_2 && signLine1<buyLevel && signLine2<buyLevel
&&Close[10] < Close[1]+(Close[20]-Close[1])
&& Close[10]<Ask )
{
Print("Ha aparecido una señal para abrir una posición de venta");
if(GetPositionsNumber()==0)
{
// allowOpenBuy=true;
allowOpenSell=true;
Sleep(1000);
Print("Permitido abrir posición de venta");
}
}
}
/////////////////////////////////////////
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La función devuelve el número de posiciones abiertas |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
int GetPositionsNumber(void)
{
int número=0;
for(int i=0; i<TotalPedidos(); i++)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderSymbol()==_Symbol && OrderMagicNumber()==magic)
número++;
número de devolución;
}
//+---------------------------------------------------------------------------------------------------------------------------------
Ayuda, plz, es posible añadir una función a este EA, para que el EA instalado en la ventana de EURUSD abra una operación con los mismos parámetros de apertura, al mismo tiempo, pero en GBPUSD, y EURUSD no se abra.
Lo siento, ¿tu cabeza está bien? No sólo has insertado el código en un lugar, sino que además has dejado una gran cantidad de líneas vacías.
¿No crees que deberías tener algo de respeto por quien te pide ayuda?