Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 302

 
mavar:

¡Salud! ¡Hoy he lanzado mi primer EA en MT5!

¡¡¡Llegó la situación adecuada en el mercado y el Asesor Experto empezó a comprar y comprar!!! Al menos he conseguido reaccionar a tiempo. ¿Puede decirme qué es lo que falla en el código? Pensé que debería comprar sólo un lote y establecer inmediatamente un Stop Loss y Take Profit. Tan pronto como compró algo, la variable Bye_opened debería hacerse verdadera y no debería permitirle realizar una operación posterior hasta que se activen los stops. Además, ¿cómo puedo saber el precio de la última operación para poner stops?


Pero parece que he hecho algo mal. Por favor, señale mi error.

Los ticks pueden llegar más rápido de lo que la posición está en la lista de posiciones abiertas. Entonces, su cheque

if(PositionSelect(_Symbol)==true)

no funcionará durante un tiempo, y durante ese tiempo pasarán varias entradas. Se supone que el fragmento de código anterior se encuentra en el manejador de ticks.

 
pako:

poner este script en la carpeta de scripts, abrir este script en unitor, compilarlo

Cuando se abra la bolsa, arrastre este script al gráfico

Gracias por la ayuda, lo resolví yo mismo, todo funcionó.
 
Buenas noches a todos, compartan el código de la red de arrastre. Gracias.
 
PokrovMT5:
Buenas noches a todos, por favor, compartid el código de la red de arrastre. Gracias.

Utilice la búsqueda del sitio, no es difícil:https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

 
barabashkakvn:

Utilice la búsqueda del sitio, no es difícil:https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

Gracias.
 
Dima_S:

Los ticks pueden llegar más rápido de lo que la posición está en la lista de abiertos. Entonces, su cheque

no funcionará durante algún tiempo, y durante este tiempo habrá múltiples entradas. Se supone que el fragmento de código anterior se encuentra en el manejador de ticks.

Dima, el código está en el bloque de procesamiento de ticks. ¿Cuál es la forma correcta de resolver este problema? Yo tenía el mismo problema en QuickBooks, el robot suele comprar más de lo que debería. Lo puse en su segundo retraso y simplemente añadí una variable separada que cambia cuando se cumplen las condiciones, pero también tuvo algunos problemas allí. A veces la orden era rechazada por la bolsa y la variable ya tenía el valor "deal" y el robot no operaba.


¿Cómo resolver correctamente el problema en MQL5 para que el robot compre un número determinado de lotes en una condición determinada y no compre más que el número especificado de lotes hasta que haya vendido todos los lotes que ha comprado?

 

¿Debemos hacer una pausa después de comprar para esperar una respuesta de la bolsa con seguridad?

Sleep(1000); //¿Has hecho una pausa?

 

El stop loss no se mueve

escribe:

-Modificar orden -> precio open:1.3111 BID :1.3121 sl 1.3109
falló la modificación de la orden #3 comprar límite 1.00 a 1.31110 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [paradas inválidas].

-Modificar orden <- resultado:10016

¿Por qué?

void MoveStopLoss()
{
   ulong  ticket     = OrderGetTicket(0);
   double price      = OrderGetDouble(ORDER_PRICE_OPEN);
   double slossPrev  = OrderGetDouble(ORDER_SL);
   double sloss      = SymbolInfoDouble(_SYMBOL, SYMBOL_ASK) - SymbolInfoDouble(_SYMBOL, SYMBOL_POINT)*15;

      if (slossPrev < sloss)
      {
         MqlTradeRequest request={0};
         MqlTradeResult  result={0};
         request.action       = TRADE_ACTION_MODIFY;        // Тип выполняемого действия
         request.order        = ticket;                     // Тикет ордера (для модификации ордеров)
         request.price        = price;                      // Цена 
         request.sl           = sloss;                      // Уровень Stop Loss ордера
         request.tp           = 0;                          // Уровень Stop Loss ордера
         request.type_time    = ORDER_TIME_DAY;             // Тип ордера по времени действия
   
         Print ("--Modify order -> ", " price open:", price, " BID :", SymbolInfoDouble(_SYMBOL, SYMBOL_BID), " sl ", request.sl);
         bool ret = OrderSend (request, result);
         Print ("--Modify order <- результат:", result.retcode);      
      }
}
 
mq35:

El stop loss no se mueve

escribe:

-Modificar orden -> precio open:1.3111 BID :1.3121 sl 1.3109
falló la modificación de la orden #3 comprar límite 1.00 a 1.31110 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [paradas inválidas].

-Modificar orden <- resultado:10016

¿Por qué?

Intenta normalizar la SL.
 

Normalizar no ayuda. Lo mismo, la pérdida de sop no se levanta

-Crear orden -> ASK:1.3121 price:1.3111 sl 1.3106

límite de compra 1,00 EURUSD a 1,3111 (1,3121) sl: 1,3106 (1,3118 / 1,3121 / 1,3118)
-Crear orden <- resultado:10009

-Modificar orden -> precio open:1.3111 BID :1.3119 sl 1.3107
orden modificada [#3 límite de compra 1,00 EURUSD a 1,3111]

-Modificar orden <- resultado:10009

-Modificar orden -> precio open:1.3111 BID :1.312 sl 1.3108
orden modificada [#3 límite de compra 1,00 EURUSD a 1,3111]

-Modificar orden <- resultado:10009

-Modificar orden -> precio open:1.3111 BID :1.3121 sl 1.3109
falló la modificación de la orden #3 comprar límite 1.00 a 1.31110 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [paradas inválidas].
-Modificar orden <- resultado:10016