Profitov: Ha surgido la pregunta, ¿es posible escribir un Asesor Experto o script, que sería lograr por ejemplo una pérdida del 2% en el día cerraría todas las transacciones?
Ayuda -- me he comprado un nuevo portátil con vin.8 instalado -- me he descargado el terminal de alpari actualizado por última vez -- cargo los indicadores con los que trabajaba antes, en la carpeta MQL4-indicators, aparecen ahí -- pero en el propio terminal en los usuarios no los veo, el servicio de atención al cliente no dice nada claro - ¿qué hacer?
galinka: Ayuda -- me he comprado un nuevo portátil con vin.8 instalado -- me he descargado el terminal de alpari actualizado por última vez -- cargo los indicadores con los que trabajaba antes, en la carpeta MQL4-indicators, aparecen ahí -- pero en el propio terminal en los usuarios no los veo, el servicio de atención al cliente no dice nada claro - ¿qué hacer?
El menú del sistema "Archivo" tiene un nuevo elemento "Abrir carpeta de datos". Ahí es donde tienes que ponerlo ahora.
Debo haber entendido mal lo que hay que hacer - archivos de programa - tengo Alpari - abro ---- hay carpetas ---- MQL4- indikators - los pongo - aparecen - cierro - abro el terminal - no están en los archivos de usuario
Sólo cierra un par de gráficos en los que la posición está activada. en otros se cierra un error 4107. He intentado cambiar en extern bool Buy = false; //borrar/cerrar la dirección de las órdenes de compra
extern bool Sell = false; //borrar/cerrar la dirección de la orden de venta. en true . no funcionó. pero si por ejemplo lo ponemos en un gráfico sin posición abierta, no se cierra ninguna y se ve el error 4107.
Profitov: Ha surgido la pregunta, ¿es posible escribir un Asesor Experto o script, que sería lograr por ejemplo una pérdida del 2% en el día cerraría todas las transacciones?
Por lo tanto, Ticket todavía se utiliza en alguna parte de la versión antigua. Tenemos que limpiar el código...
Hecho de la siguiente manera:
Symb=Symbol(); // Название фин.инстр.
Total=0; // Количество ордеровint order[7];//буффер для семи ордеровint ord;//количество ордеровArrayInitialize(order,0);//обнуляем количество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symb)continue; // Не наш фин. инструмif (OrderType()>1){Alert("Обнаружен отложенный ордер. Эксперт не работает.");return;}
Total++; // Счётчик рыночн. ордif (Total>7){Alert("Более 7 ордеров. Эксперт не работает.");return;}
Ticket=OrderTicket(); // Номер выбранн. орд.
Tip =OrderType(); // Тип выбранного орд.order [OrderType()]++; // ПОЛУЧАЕМ КОЛИЧЕСТВО ОРДЕРОВ
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
ord=order [OrderType()];while(true) // Цикл закрытия орд.
{
if (Tip==0 && Cls_B==true) // Открыт ордер Buy..
{ //и есть критерий закрAlert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
RefreshRates(); // Обновление данных
Ans=OrderClose(Ticket,Lot,Bid,2); // Закрытие Buyif (Ans==true){Alert ("Закрыт ордер Buy ",Ticket);if (ord ==0){Alert ("Закрыты все ордера ",ord);break;}}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
Las posiciones se cierran completamente. Es cierto que sale el error cero, pero los muelles dicen que significa que no hay errores. Y no encuentro el mensaje"Todos los pedidos cerrados" en el registro.
He puesto en negrita las líneas que he cambiado. Parece que funciona, aún no lo he comprobado a fondo.
No entiendo muy bien cómo funcionan los bucles. Supongamos que tengo código por encima y por debajo y en medio del bucle. Si las condiciones del bucle coinciden, el código se ejecuta sólo dentro del bucle y no deja que se ejecuten las líneas de código por debajo del bucle? Considerando este ejemplo, ¿el operadorbreak interrumpe el bucle? ¿Permite que se ejecuten las líneas por debajo del bucle, o el programa empieza a calcular desde el principio?
Corrígeme si me equivoco: break interrumpe el bucle en el que se encuentra, mientras quecontinue realiza la evaluación del operador que está por encima de él, por lo que no queda claro si hay un segundo operador: ¿se interrumpirá su evaluación ocontinue interrumpe todo el código y manda al programa a ejecutarlo primero?
Ha surgido la pregunta, ¿es posible escribir un Asesor Experto o script, que sería lograr por ejemplo una pérdida del 2% en el día cerraría todas las transacciones?
Es posible.
Ayuda -- me he comprado un nuevo portátil con vin.8 instalado -- me he descargado el terminal de alpari actualizado por última vez -- cargo los indicadores con los que trabajaba antes, en la carpeta MQL4-indicators, aparecen ahí -- pero en el propio terminal en los usuarios no los veo, el servicio de atención al cliente no dice nada claro - ¿qué hacer?
Debo haber entendido mal lo que hay que hacer - archivos de programa - tengo Alpari - abro ---- hay carpetas ---- MQL4- indikators - los pongo - aparecen - cierro - abro el terminal - no están en los archivos de usuario
Gracias, me ha servido de ayuda.
Debajo del último extern:
extern int slippage = 2; // deslizamiento del precio al cerrar posiciones de mercado
inserte otro:
extern bool total_symb = true; // en todos los pares
y en cada línea:
if ((OrderSymbol() == Symbol()))
y
if(OrderSymbol() == Symbol())
sustituya esto:
if(OrderSymbol() == Symbol() || total_symb)
en teoría debería funcionar, compruébelo.
Sólo cierra un par de gráficos en los que la posición está activada. en otros se cierra un error 4107. He intentado cambiar en extern bool Buy = false; //borrar/cerrar la dirección de las órdenes de compra
Ha surgido la pregunta, ¿es posible escribir un Asesor Experto o script, que sería lograr por ejemplo una pérdida del 2% en el día cerraría todas las transacciones?
Por lo tanto, Ticket todavía se utiliza en alguna parte de la versión antigua. Tenemos que limpiar el código...
Hecho de la siguiente manera:
Las posiciones se cierran completamente. Es cierto que sale el error cero, pero los muelles dicen que significa que no hay errores. Y no encuentro el mensaje"Todos los pedidos cerrados" en el registro.
He puesto en negrita las líneas que he cambiado. Parece que funciona, aún no lo he comprobado a fondo.
No entiendo muy bien cómo funcionan los bucles. Supongamos que tengo código por encima y por debajo y en medio del bucle. Si las condiciones del bucle coinciden, el código se ejecuta sólo dentro del bucle y no deja que se ejecuten las líneas de código por debajo del bucle? Considerando este ejemplo, ¿el operadorbreak interrumpe el bucle? ¿Permite que se ejecuten las líneas por debajo del bucle, o el programa empieza a calcular desde el principio?
Corrígeme si me equivoco: break interrumpe el bucle en el que se encuentra, mientras quecontinue realiza la evaluación del operador que está por encima de él, por lo que no queda claro si hay un segundo operador: ¿se interrumpirá su evaluación ocontinue interrumpe todo el código y manda al programa a ejecutarlo primero?