Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 46
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
..........
ticket=OrderSend(.....);//приказ и запоминаем тикет ордера
if(ticket>0)//открылась
{
//действия с тикетом
}
Más exacto sería:
{
//действия с тикетом
}
OrderSend - "Devuelve el número de ticket asignado a la orden por el servidor comercial o -1 en caso de fallo ."
Aunque incluso en el probador el primer número de ticket es el 1, no el 0.
Más exactamente, lo será:
{
//действия с тикетом
}
OrderSend - "Devuelve el número de ticket asignado a la orden por el servidor comercial o -1 en caso de fallo ."
Aunque incluso en el probador el primer número de billete es el 1, no el 0.
Me alegro de ver a la desaparecida Oksana ))
Sí, los tickets comienzan con 1 en el probador y en el servidor de DC, pero nunca cogerá 1 en DC. Tu versión no funciona del todo, no es correcto comparar la desigualdad con -1. ¿Y si la cuenta real devuelve 1234567?
{
//действия с тикетом
}
// так верно
Así que en el probador un billete no puede ser inferior a uno, más aún en el mundo real
cero es menor que uno, ambas condiciones son correctas, sólo una para la comparación, la otra para la exclusión.
Aunque me acostumbré a hacerlo:
int ticketbuy = OrderSend(sy,OP_BUY,ll,MarketInfo(sy,MODE_ASK),Slippage,0,0,Comments,mn,0,BuyColor);
if(ticketbuy<0)
Print(sy," OpenPosition. OrderSend Buy fail #",GetLastError());
else
Print(sy," OpenPosition. OrderSend Buy successfully");
Pero considerando la mía, las condiciones son todas correctas, sólo la lógica es diferente)
{
bool ret;
int error=0;
double price=0.0;
int total=OrdersTotal();
if(!disabled(_Symbol))
{
Print(rezult);
return;
}
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderType()>1)continue;
if(OrderType()!=type)continue;
int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
if(OrderType()==OP_BUY)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_BID),digits);
if(OrderType()==OP_SELL)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK),digits);
if(NormalizeDouble(NormalizePrice(OrderSymbol(),price),digits)!=price)continue;
ret=OrderClose(OrderTicket(),OrderLots(),price,Slippage,clrLawnGreen);
if(!ret)
{
error=GetLastError();
rezult=StringConcatenate(OrderSymbol(),": error close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType())," №- ",error," ",ErrorDescription(error));
Print(rezult);
}
else
{
rezult=StringConcatenate(OrderSymbol(),": close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType()));
Print(rezult);
}
}
}
Le deseo un feliz año nuevo. ¿Podría decirme, por favor, qué es lo que falla en este código?
Aconsejo cambiar la lógica en la raíz
Es decir, es necesario llevar un registro de los pedidos abiertos: cuántos se venden y cuántos se abren
Y en base a estas consideraciones debemos gestionar las órdenes: abrirlas y cerrarlas
No sé por qué el EA abre muchas órdenes si la condición no debería ser la de abrir una posición pero después de abrirla se vuelve a abrir.
no puedo entender por qué mi EA abre un montón de órdenes si no quiero que abra una posición, pero se abre de nuevo después de abrirla, sospecho que algo está mal con el bucle, no entiendo muy bien los ciclos
for(int i=Total de Pedidos()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // si nuestro Magic
{
if(OrderType()==OP_BUY) sdel_b++; // cuenta bai
if(OrderType()==OP_SELL) sdel_s++; // Contar sels
if(OrderType()==OP_BUYSTOP) otl_b++; // Contar las paradas pendientes
if(OrderType()==OP_SELLSTOP) otl_s++; // Contar los sellstops pendientes
}
// Ahora los pedidos abiertos
if(Hora()==00 && Minuto()==01 && otl_b==0 && otl_s ==0); // Si es la hora y no hay órdenes pendientes
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // poner una orden pendiente
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
No sé por qué el EA abre muchas órdenes si la condición no debería ser la de abrir una posición pero después de abrirla se vuelve a abrir.
No entiendo por qué mi EA abre muchas órdenes, si no quiero que abra una posición pero vuelve a abrir después de abrir. Creo que puede estar mal el bucle, no entiendo muy bien los bucles
for(int i=TotalPedidos()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // si nuestro Magic
{
if(OrderType()==OP_BUY) sdel_b++; // cuenta bai
if(OrderType()==OP_SELL) sdel_s++; // Contar sels
if(OrderType()==OP_BUYSTOP) otl_b++; // Contar las paradas pendientes
if(OrderType()==OP_SELLSTOP) otl_s++; // Contar los sellstops pendientes
}
// Ahora los pedidos abiertos
if(Hora()==00 && Minuto()==01 && otl_b==0 && otl_s ==0); // Si es la hora y no hay órdenes pendientes
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //tomar una posición
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
Prueba esto
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
Prueba esto
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
Sigue abriendo muchos pedidos
Saludos. ¡Feliz Año Nuevo a todos!
Cuando intento optimizar un EA después de que se haya ejecutado, los resultados y el gráfico de optimización están en blanco y el registro se escribe en la bitácora:
Se hanrealizado 2pasesdurante la optimización, 2 resultados han sido descartados por ser insignificantes
Desmarcar"algoritmo genético" no ayuda. Entiendo que los resultados parezcan insignificantes para el probador, pero ¿cómo podemos ver lo que hay? Y esto es a pesar de que el Asesor Experto no pierde dinero para el mismo período (un año) durante las pruebas, pero es +/- 20%.