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

 
WindSW:
Todas las opciones están en la lista, excepto el cierre. Por eso pregunto.

ya te lo han dicho.

Yedelkin:

"Cerrar una posición" no es más que el resultado de una solicitud de operación, cuyas reglas son las mismas.

Es decir, tomar la solicitud "abierta" y cambiar el tipo de orden.

Rellene los campos obligatorios innecesarios con ceros.

 

Yedelkin:
Для каждого вида торгового запроса предусмотрены обязательные поля. Они должны быть заполнены. "Открытие позиции" или "Закрытие позиции" - это всего лишь результат выполнения конкретного торгового запроса, правила заполнения которого - одни и те же. Т.е. берите свой работающий вариант запроса "на открытие" и меняйте тип ордера. Ненужные обязательные поля заполняйте нулями.

sargazo:

¡ya te han contestado!

Gracias.

Tengo una pregunta más: se envía la solicitud de abajo y se abre una posición, pero el stop y el beneficio no se establecen. Ya he probado diferentes configuraciones, pero nada ha servido. ¿Cuál es el problema, qué estoy haciendo mal?

   MqlTick latest_price;       // Будет использоваться для текущих котировок
   if(!SymbolInfoTick(_Symbol,latest_price)) return;        // получить текущее значение котировки в структуру типа MqlTick
   ...
   if(uBuy && opSell==false)    
     {
      if(opBuy) return;                                                // при наличии позиции не добавлять к открытой позиции на покупку
      mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
      mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // последняя цена ask
      mrequest.sl = NormalizeDouble(latest_price.ask - StopLoss*_Point,_Digits); // Stop Loss
      mrequest.tp = NormalizeDouble(latest_price.ask + TakeProfit*_Point,_Digits); // Take Profit
      mrequest.symbol = _Symbol;                                            // символ
      mrequest.volume = WorkLot;                                                // количество лотов для торговли
      mrequest.magic = EA_Magic;                                            // Magic Number
      mrequest.type = ORDER_TYPE_BUY;                                       // ордер на покупку
      mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
      mrequest.deviation=Slippage;                                               // проскальзывание от текущей цены
      OrderSend(mrequest,mresult);                                          // отсылаем ордер
      if(mresult.retcode==10009 || mresult.retcode==10008)                  //запрос выполнен или ордер успешно помещен
        {
         Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
        }
      else
        {
         return;
        }
     }
 

¿Cómo se suman los 3 últimos valores de ZigZag?

        double summ=0;//переменная, в которую все суммируется
        int w=0;//счетчик 3 удачных сумирований
        int count_for_buf=0;//Счетчик переходов по буферу ZigZag
        while (w<=3)
         {
         summ=summ+ZigzagBuffer[rates_total-count_for_buf];
         count_for_buf++;
         if (ZigzagBuffer[rates_total-count_for_buf]!=0)//Увеличиваем счетчик, если используемое значение индикатора не равно нулю
          {
          w++;
          }
         }
De esta manera por alguna razón se cuelga o sucede algo más
 
WindSW: Se envía la solicitud de abajo y se abre una posición, pero no se coloca ningún stop o beneficio. Ya he probado diferentes configuraciones, pero nada ha servido. ¿Cuál es el problema, qué estoy haciendo mal?

¿Recuerda que las solicitudes de comercio "para abrir una posición" tienen varias opciones para rellenar? Algunas de estas opciones implican sl/tp, otras no. En otras palabras, ¿qué modo de negociación tiene su corredor?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
Yedelkin:

¿Recuerda que las solicitudes de comercio "para abrir una posición" tienen varias opciones para rellenar? Algunas de estas opciones implican sl/tp, otras no. En otras palabras, ¿cuál es el modo de operar de su corredor?

El corredor Alpari. En el modo manual sólo se coloca una nueva orden en la ejecución de la bolsa. No hay otra opción para entrar en el mercado. Entiendo que se trata de una solicitud de Ejecución de Intercambio. Gracias, lo he solucionado. ¿Me pueden decir por qué el compilador procesa el siguiente código?

if(CopyBuffer(ema,0,0,3,emaVal)<0) return; // copiar los nuevos valores de los buffers de los indicadores en arrays

и

IndicadorLiberación(ema);

Aparece un aviso de "posible pérdida de datos debido a la conversión de tipo". No puedo averiguar qué es lo que está mal aquí, no puedo arreglarlo desde ayer por la tarde.

 
WindSW: ¿Puedes decirme por qué el compilador jura las siguientes cadenas?

if(CopyBuffer(ema,0,0,3,emaVal)<0) return; // copiar los nuevos valores del buffer del indicador en las matrices

и

IndicadorLiberación(ema);

Aparece un aviso de "posible pérdida de datos debido a la conversión de tipo". No consigo averiguar qué es lo que falla aquí, no he conseguido arreglarlo desde ayer por la tarde.

¿Y qué tipo de variable ema?
 
Yedelkin:
¿Qué tipo de variable es la ema?
doble
 
WindSW doble
Lo tengo. Vea qué tipo de variable debe ser para almacenar las asas del indicador y emparéjelo.
 
Yedelkin:
Lo tengo. Vea qué tipo de variable debe usarse para almacenar las asas de los indicadores, y emparéjela.
Y ya no tengo la costumbre de escribir como en el 4. Gracias de nuevo por los consejos.
 
lazarev-d-m:

¿cómo se suman los 3 últimos valores de ZigZag?

De esta manera por alguna razón se cuelga o sucede algo más

Te daré mi sugerencia:

   double   summ=0;  //переменная, в которую все суммируется
   int      w=0;     //счетчик 3 удачных сумирований
   for(int i=0; i<rates_total; i++)
     {
      if(ZigzagBuffer[rates_total]!=0 && w<3)//Увеличиваем счетчик, если используемое значение индикатора не равно нулю
        {
         summ+=ZigzagBuffer[i];
         w++;
        }
      if(w>2) break;
     } 
Razón de la queja: