Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1097

 
alvlaf:

El último código que diste es un paso adelante - no abre ninguna operación en absoluto (por lo que la prohibición está en vigor). Todavía no he entendido por qué ninguno. Adjunto una captura de pantalla del registro.

Al principio, la variable se llamaba ProfitableSerie y tenía una función opuesta. Y tengo algo más que añadir.

int OnInit()                     // abeiks && LRA: замечания приняты)))
{
   if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
   return(INIT_SUCCEEDED);
}

// OnDeinit больше не нужен

void OnTick()
{
   if (CountTrades() == 0) // Количество ордеров должно равняться нулю
   {
      if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
      // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) 
      // Если прибыль последней сделки равняется нулю, то открывается такая же
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder(), 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0)// Если последняя сделка прибыльная, то открывается ордер
      {
         if (GlobalVariableGet("AllowNewOrders") > 0) return;
         if (SignalBuy() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
         if (SignalSell() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
      }
      GlobalVariableSet("AllowNewOrders", 1);
   }
}

Inténtalo de esta manera. Tengo el presentimiento de que surgirá algo más...

 
Hola a todos, he empezado a leer el tutorial de MQL4 (quiero aprender a programar), pero es una versión antigua, ¿qué me aconsejáis que haga? ¿Leer el tutorial y luego la documentación?
 
LRA:
// ИХМО так нагляднее
De acuerdo.
 
linar:

Hola, he empezado a leer el tutorial de MQL4 (quiero aprender a programar), pero es una versión antigua, ¿qué me aconsejas hacer?

Si alguna vez has programado en C, es mejor que mires el código fuente de los indicadores gratuitos, los indicadores más sencillos y los Asesores Expertos y leas la ayuda.

Si no has programado nada, entonces... Si no sabes programar en absoluto, entonces lee la documentación. )))

También hay un tutorial en este foro: https://www.mql5.com/ru/forum/108883

 
A13ksandr:

Es que al principio la variable se llamaba ProfitableSerie y tenía la función contraria. Y hay algo más que añadir.

Inténtalo de esta manera. Tengo el presentimiento de que surgirá algo más...

Otro paso adelante - el bot abrió una operación, pero eso es todo. No se abre nada más y ni siquiera hay un mensaje en el registro sobre algún intento...
 
alvlaf:
Otro paso adelante: el bot abrió una operación, pero eso fue el final. El bot no abre nada más y no hay mensajes en el registro sobre ningún intento...

Quise poner sólo una parte del código correctamente, pero luego copié todo el código y no se solucionó el error. Debería ser así en la última condición.

         if (GlobalVariableGet("AllowNewOrders") == 0) return;

Pero en realidad no debería haber hecho ningún trato entonces. Algunas de las dos primeras condiciones no funcionan correctamente. Arreglar la condición por ahora, vamos a ver :)

Actualización: recuperar OnDeinit por si acaso.

void  OnDeInit()
{
   GlobalVariableSet("AllowNewOrders",1); 
} 
 
A13ksandr:

Maldita sea, quería insertar sólo una parte del código correcto originalmente, pero luego copié todo y no corregí este error. Debería ser así en la última condición

Pero en realidad no debería haber hecho ningún trato entonces. Algunas de las dos primeras condiciones no funcionan correctamente. Arreglar la condición por ahora, vamos a ver :)

Actualización: recuperar OnDeinit por si acaso.


Lo probé, después de un comercio en menos comenzó a abrir una posición en cada garrapata.
 
alvlaf:
Probado, después de un comercio en menos comenzó a abrir una posición en cada garrapata.

Ponga las dos primeras condiciones en la primera línea

if(GlobalVariableGet("AllowNewOrders") == 1) return;

Y haz la primera prueba con un par.

¿El corredor GrandCapital?

 
A13ksandr:

Ponga las dos primeras condiciones en la primera línea

if (GlobalVariableGet("AllowNewOrders") == 1) return;

Y haz la primera prueba con un par.

¿Broker GrandCapital?

//----------------------------------------------------------------------
int OnInit()
{
if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
return(INIT_SUCCEED);
}

//----------------------------------------------------------------------

void OnDeInit()
{
GlobalVariableSet("AllowNewOrders",1);
}
//----------------------------------------------------------------------

void OnTick()
{
if (GlobalVariableGet("AllowNewOrders") == 1) return;
{
if (CountTrades() == 0) // El número de órdenes debe ser igual a cero
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// Si la última operación es perdedora, se abre la misma, pero con un lote mayor
{
GlobalVariableSet("AllowNewOrders", 0);
Tipo = TypeLastHistOrder();
if (Type == OP_BUY) Precio = Ask;
if (Type == OP_SELL) Precio = Oferta;
Lote = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
volver;
}
if (GlobalVariableGet("AllowNewOrders") == 1) return;
{
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// si el beneficio de la última operación es igual a cero, se abrirá la misma operación
{
GlobalVariableSet("AllowNewOrders", 0);
Tipo = TypeLastHistOrder();
if (Type == OP_BUY) Precio = Ask;
if (Type == OP_SELL) Precio = Oferta;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
volver;
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// Si la última operación es rentable, se abre la orden
{
if (GlobalVariableGet("AllowNewOrders") == 0) return;
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
volver;
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
volver;
}
}
}
GlobalVariableSet("AllowNewOrders", 1);
}
}

}

Sí, Gran Capital. ¿Lo has puesto bien? Ha dejado de abrir operaciones de nuevo.

 

Chicos, ya me he devanado los sesos. ¿Cómo puedo hacer que el EA coloque órdenes pendientes en los máximos y mínimos, por ejemplo en 8 velas, con un take profit de 1/4?

Hago algo así:

double Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0);

double Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0);

doble TP=((Vhod1-Vhod2)/4)+Vhod1;


He intentado cambiar los parámetros, pero sigue obteniendo paradas erróneas o establece el precio en 7,00000; no está claro de dónde viene