Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1918

 
Andrey Sokolov #:

¿Realmente no lo ves?

"¿Cómo lo escribo?" - donde dice 0,01 lote, hay que calcular el mínimo disponible.

Ya lo veo. Si lo pones a 0,02, se seleccionará la orden con el lote 0,02. He preguntado cómo configurarlo para que mire primero el lote 0,01, luego el 0,02 y así sucesivamente.

 
Sergey Gridnev #:
Se necesitan 2 ciclos: se averigua el volumen mínimo en el primero, y se cierra en el segundo. Y ten en cuenta que cuando cierras las órdenes se desplazan 1 posición, por lo que tienes que hacer el ciclo desde la posición máxima hasta la 0.

¿Cómo se pasa del máximo al 0?

 
Rustam Bikbulatov #:

Pregunto cómo hacer que se vea primero a 0,01, luego a 0,02 y así sucesivamente.

Ya se le ha dicho cómo dos veces.

 
Rustam Bikbulatov #:

Ya lo veo. Si lo pones a 0,02, seleccionará las órdenes con lote 0,02. Pregunto cómo configurarlo para que mire primero a 0,01, luego a 0,02 y así sucesivamente.

Agregue la matriz en una bidimensional, con los lotes en la primera dimensión y los billetes en la segunda. Ordena el array, y cierra mientras la primera dimensión tiene el lote más pequeño. O si necesita cerrar todo, pero a medida que aumenta el lote, cerrar hasta el final...

 
Sergey Gridnev #:
Se necesitan 2 ciclos: se averigua el volumen mínimo en el primero y se cierra en el segundo. Y ten en cuenta que cuando cierras las órdenes se desplazan 1 posición, por lo que tienes que hacer el ciclo desde la posición máxima hasta la 0.

no. Desde el más antiguo hasta el más reciente.

 

Sabía lo que decían. Bueno, tendré que aprender por ensayo y error como siempre.

 
Rustam Bikbulatov #:

Sabía lo que decían. Bueno, tendré que aprender por ensayo y error como siempre.

//+------------------------------------------------------------------+
//|                                                       Око_01.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include <GrosBuch.mqh>
#property script_show_inputs

//input double Max_loss=0; //
extern int N=6;           // Количество ордеров
input int SLpips=0;      // Количество пунктов
//Вычисляем возможное оставшееся количество лотов при N лоссов от оставшихся свободных средств
// Buch bi;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double PipValue = MarketInfo(NULL, MODE_TICKVALUE),
          min_lot = MarketInfo(NULL, MODE_MINLOT),
          lot_step = MarketInfo(NULL, MODE_LOTSTEP),
          Margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED),
          Max_loss=N*SLpips*PipValue*min_lot,                 //Вычисляем сумму совокупного возможного лосса
          M_m=DBL_MIN;
   double remains= AccountFreeMargin()-Max_loss;  //Значение свободных средств для открыти ордера Margin*Lots;
   while(remains>Margin*min_lot&&!IsStopped())   //если они больше,чем необходимо для открытия 1 лота
     {
      min_lot=NormalizeDouble(min_lot+lot_step,2);  //добавим минлот
      M_m=Margin*min_lot;                           //получим значени св средств при вычисленном лоте и размере стопа
      // Lots*=min_lot;
      Print("remains = ",remains," Margin =",Margin," PipValue =",PipValue," N =",N,"min_lot =",min_lot," Max_loss =",Max_loss," M-m =",M_m);
     }
  }
//+------------------------------------------------------------------+
 

¡Buenas noches, queridos expertos!

Por favor, ayúdame a entender una cosa. Estoy escribiendo el principio de una función y he decidido comprobar alguna parte de su código con un script:

//+------------------------------------------------------------------+
//|                                                            3.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   /* Создадим запрос на сервер и получим ответ с результатом */
   MqlTradeRequest request= {};
   MqlTradeResult result= {0};
   /* запустим цикл для перебора всех установленных отложенных ордеров */
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      /* определим параметры установленного ордера */
      string symbol=OrderGetString(ORDER_SYMBOL);                        // символ ордера
      int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);        // количество знаков после запятой
      double point=SymbolInfoDouble(symbol,SYMBOL_POINT);                // значение одного пункта
      ulong  ticket=OrderGetTicket(i);                                   // тикет ордера
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордера
      double volume=OrderGetDouble(ORDER_VOLUME_INITIAL);                // объём ордера
      ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // MagicNumber ордера
      double price_current=OrderGetDouble(ORDER_PRICE_CURRENT);          // текущая цена по символу ордера
      double price_order_open=OrderGetDouble(ORDER_PRICE_OPEN);          // цена открытия указанная в ордере
      double sl=OrderGetDouble(ORDER_SL);                                // стоп лосс ордера
      double tp=OrderGetDouble(ORDER_TP);                                // тейк профит ордера
      /* выведем информацию об установленных отложенных ордерах */
      PrintFormat("#%I64u %s  %s  %.2f price_current: %.5f price_order_open: %.5f sl: %.5f tp: %.5f magic: %d",
                  ticket,symbol,EnumToString(type),volume,price_current,price_order_open,sl,tp,magic);
     }
  }
//+------------------------------------------------------------------+


Pero el resultado que se imprime en la pestaña de Expertos es un poco desconcertante. La orden pendiente ORDER_TYPE_BUY_STOP tiene el símbolo, pero la ORDER_TYPE_SELL_STOP no lo tiene por alguna razón.

¿Con qué se puede relacionar? Saludos, Vladimir.



 
MrBrooklin #:

¡Buenas noches, queridos expertos!

Por favor, ayúdame a entender una cosa. Estoy escribiendo el principio de una función y he decidido comprobar alguna parte de su código con un script:


Sin embargo, el resultado que se imprime en la pestaña de Expertos es un poco desconcertante. La orden pendiente ORDER_TYPE_BUY_STOP tiene el símbolo, pero la ORDER_TYPE_SELL_STOP no lo tiene por alguna razón.

¿Con qué se puede relacionar? Saludos, Vladimir.



Esto se debe a que no ha seleccionado un billete, sino que está tratando de obtener sus características.
 
Sergey Gridnev #:
Tiene que ver con el hecho de que usted no ha seleccionado un billete, sino que está tratando de obtener sus características.

Gracias, Sergey, por tu respuesta. Su respuesta me dejó aún más perplejo. ¿Cómo puede ser? Cuando ejecuto el script, se interrogan todas las órdenes pendientes establecidas. Como podemos ver en la imagen, hay dos en el gráfico, y al mismo tiempo, un billete está seleccionado y el otro no? No está del todo claro.

¿Puede explicarlo con más detalle?

La pregunta no la hago por curiosidad, sino para continuar con el autoestudio.

Saludos, Vladimir.

Razón de la queja: