Mi Asesor Experto abre tres órdenes en mi terminal, en algún momento debería cerrar las tres órdenes, pero por alguna razón sólo cierra dos, no da errores.
Aquí está esta pieza que debería cerrar las operaciones
No entiendo qué pasa y por qué sólo se cierran dos operaciones. Por favor, dígame quién sabe qué.
Sin embargo, esto tampoco ayudó. El hecho de no reordenar el bucle o sustituirlo por continue no ayudó, como si el EA no viera sus propias tres órdenes, y sólo borrara dos.
sss2019: A veces las cosas son tan incomprensibles, nada lógicas, que creo que hay errores en el propio entorno del terminal.
Para que parezca menos hay que empezar por estudiar un libro de texto y un manual. A continuación, trata de encontrar explicaciones sobre cuestiones similares en el foro.
¿Cómo se podría organizar mejor el drawdown máximo del EA, a partir del cual deja de funcionar, se puede establecer una variable estática que acumule la cantidad de pérdidas?
El Asesor Experto debería dejar de funcionar, pero volverá a hacerlo después de reiniciar o cambiar los parámetros.
Al inicializar un EA, puede guardar el saldo actual en una variable estática. Y en la función Inicio, puede comprobar cuántos porcentajes del saldo actual han disminuido respecto al inicial y si el porcentaje es superior al permitido - prohibir operar. Brevemente, sin ningún código. Después de reiniciar, el Asesor Experto recordará el nuevo saldo inicial...
Al inicializar el Asesor Experto, el saldo actual puede guardarse en una variable estática. Y en la función Inicio, comprueba cuánto se ha desviado el saldo actual del inicial, y si el porcentaje es superior al permitido, se prohíbe el comercio. Brevemente, sin ningún código. Después de reiniciar, el Asesor Experto recordará el nuevo saldo inicial.
1. Al inicializar el Asesor Experto, puede guardar el saldo actual en una variable estática. A continuación, la función Inicio comprueba en cuántos puntos porcentuales se ha alejado el saldo actual del inicial y, si el porcentaje es mayor, se prohibirá la operación. En resumen, sin ningún código.
2. Después de reiniciar, el evaluador recordará el nuevo saldo original...
1. Puedes hacerlo. Tengo esta opción (con código) - usted mismo inicializa las variables:
externint MaxLoss = 90; // Максимально допустимая просадка в процентах от балансаint orderIndex;
bool IsExpertFailed = false;
bool IsExpertStopped = false;
double lots; // вспомогательная переменная для расчета нового размера лота double Lots_New; // Количество лотов для новых ордеровint ticket; // Номер ордераdouble orderLots; // Lots double orderProfit; // Profitdouble Price; // Цена открытия рыночного ордераdouble SL; // Значение StopLoss ордераdouble TP; // Значение TakeProfit ордераstaticdatetime prevtime = 0; // по ценам открытияint start()
{
if (IsExpertStopped)
{
Comment("Не удалось инициализировать советник!");
return (0);
}
if (IsExpertFailed)
{
Comment("Критическая ошибка! Советник остановлен.");
return (0);
}
Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL );
int orderCount = 0;
// ------------------------------------------------Учет ордеров только ЭТОГО ЭКСПА---------------------------int orderType;
for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
{
if (!OrderSelect(orderIndex, SELECT_BY_POS)) continue;
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic)) continue;
orderType = OrderType();
if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;
ticket = OrderTicket( ); // Номер ордера
orderLots = OrderLots(); // Lots
orderProfit = OrderProfit() + OrderSwap(); // Profit
Price = OrderOpenPrice(); // Цена открытия рыночного ордера
SL = OrderStopLoss(); // Значение StopLoss ордера
TP = OrderTakeProfit(); // Значение TakeProfit ордераif (ticket>0) // Если позиция открылась
{
while(OrderSelect(ticket,SELECT_BY_TICKET)==false) // Если ордер выбран
{
Sleep(100);
}
double OpenPrice=OrderOpenPrice();
}
// Проверка на предельную просадку double loss = - ((orderProfit * 100.0) / AccountBalance());
if (loss > MaxLoss)
{
Print ("MaxLoss");
CloseAllOrders(magic);
IsExpertFailed = true;
return (0);
}
orderCount++; // считаем ордера (не больше i)
}
2. No. No recordará el nivel de equilibrio que había antes del inicio de este EXPERTO la primera vez. Sólo recordará el nivel actual de la variable
Buenas tardes, ya tenía una pregunta sobre la representación correcta de las comillas en Excel. Esta pregunta ha sido respondida gracias aCosty.Ahora tengo una pregunta, ¿es posible hacer (sin MQL5 y dll) los datos para más monedas a cargar? El esquema se muestra a continuación, en lugar de "..." los valores de la fecha correspondiente, los valores del precio de cierre y el período actual.
Supongo que la respuesta a la pregunta implicará posibles correcciones de mi código. Adjunto el código del Asesor Experto que escribe los valores de los precios de cierre para un instrumento financiero actual en el archivo.
#property copyright "S.I.Shlikov"#property link ""int init()
{
string Name=Symbol();
int h=FileOpen(Symbol()+"-"+Period()+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
if(h<1)
{
Print("Файл не найден : ", GetLastError());
return(false);
}
FileSeek(h, 0, SEEK_END);
FileWrite(h,"Date",Name,"Period",Period());
FileClose(h);
}
int start()
{
int h=FileOpen(Symbol()+"-"+Period()+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
if(h<1)
{
Print("Файл не найден : ", GetLastError());
return(false);
}
string Wtime=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
FileSeek(h, 0, SEEK_END);
FileWrite(h,Wtime,NormalizeDouble(Close[0], Digits));
FileClose(h);
return(0);
}
Mi Asesor Experto abre tres órdenes en mi terminal, en algún momento debería cerrar las tres órdenes, pero por alguna razón sólo cierra dos, no da errores.
Aquí está esta pieza que debería cerrar las operaciones
No entiendo qué pasa y por qué sólo se cierran dos operaciones. Por favor, dígame quién sabe qué.
Hacer el ciclo de forma diferente
Sin embargo, esto tampoco ayudó. El hecho de no reordenar el bucle o sustituirlo por continue no ayudó, como si el EA no viera sus propias tres órdenes, y sólo borrara dos.
A veces las cosas son tan incomprensibles, nada lógicas, que creo que hay errores en el propio entorno del terminal.
¿Cómo se podría organizar mejor el drawdown máximo del EA, a partir del cual deja de funcionar, se puede establecer una variable estática que acumule la cantidad de pérdidas?
El Asesor Experto debería dejar de funcionar, pero volverá a hacerlo después de reiniciar o cambiar los parámetros.
Al inicializar un EA, puede guardar el saldo actual en una variable estática. Y en la función Inicio, puede comprobar cuántos porcentajes del saldo actual han disminuido respecto al inicial y si el porcentaje es superior al permitido - prohibir operar. Brevemente, sin ningún código. Después de reiniciar, el Asesor Experto recordará el nuevo saldo inicial...
Al inicializar el Asesor Experto, el saldo actual puede guardarse en una variable estática. Y en la función Inicio, comprueba cuánto se ha desviado el saldo actual del inicial, y si el porcentaje es superior al permitido, se prohíbe el comercio. Brevemente, sin ningún código. Después de reiniciar, el Asesor Experto recordará el nuevo saldo inicial.
¿Ha entendido la pregunta?
1. Al inicializar el Asesor Experto, puede guardar el saldo actual en una variable estática. A continuación, la función Inicio comprueba en cuántos puntos porcentuales se ha alejado el saldo actual del inicial y, si el porcentaje es mayor, se prohibirá la operación. En resumen, sin ningún código.
2. Después de reiniciar, el evaluador recordará el nuevo saldo original...
1. Puedes hacerlo. Tengo esta opción (con código) - usted mismo inicializa las variables:
2. No. No recordará el nivel de equilibrio que había antes del inicio de este EXPERTO la primera vez. Sólo recordará el nivel actual de la variable
AccountBalance(). para esta cuenta.
Buenas tardes, ya tenía una pregunta sobre la representación correcta de las comillas en Excel. Esta pregunta ha sido respondida gracias aCosty .Ahora tengo una pregunta, ¿es posible hacer (sin MQL5 y dll) los datos para más monedas a cargar? El esquema se muestra a continuación, en lugar de "..." los valores de la fecha correspondiente, los valores del precio de cierre y el período actual.
Supongo que la respuesta a la pregunta implicará posibles correcciones de mi código. Adjunto el código del Asesor Experto que escribe los valores de los precios de cierre para un instrumento financiero actual en el archivo.