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

 
teetrinker:

¿Debe Myexpert.Time(10) devolver el tiempo de la décima barra del gráfico? ¿Y cómo se escribe correctamente?

Gracias

En teoría, sí, debería...

El método Time , según la documentación, obtiene el valor del elemento Time por el índice especificado. Es un método de la clase CExpertBase, que es una clase base para CExpert y todas las clases auxiliares de las estrategias de negociación.

Estimado sergeev le dice correctamente... lo mejor es utilizar el depurador para determinar el papel del método Time() en la vida de su EA...

 

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Gracias, Yedelkin !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Y EnumToString(timeframe), ¡¡¡función genial!!! ¡¡¡¡¡¡Y YO SOY BARAN!!!!!!

 
Dígame por favor, aquí hay una función
 bool  PositionModify( ulong  PositionTicket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
      {  MqlTradeRequest request  = {0};
         MqlTradeResult result = {0};
        request.action= TRADE_ACTION_SLTP; 
        request.order= PositionTicket; 
        request.price= price;
        request.symbol= Symbol();
        request.sl= stoploss;
        request.tp= takeprofit;
        return (OrderSend( request,   result    ));   
      }

La función parece tener un ,,lado,,- request.symbol= Symbol(); ¿Por qué Symbol()? Aquí es donde se debe transferir el símbolo para el que fijamos el TP y el SL. Entonces, ¿podemos eliminar la cadena request.symbol= Symbol();, como si fuera una tontería?

 

Por favor, indíquenos cómo establecer una orden rollover en el nivel de stop de la orden principal abierta y luego eliminarla si la orden principal se cierra en TP?

He puesto las dos órdenes en el código a la vez:

        
 // основной ордер +++++++++++++++++++++++++++++++++++++++      
        {
         request.action = TRADE_ACTION_PENDING;
         request.magic=magic_number;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = NormalizeDouble(volume()/1,2);
         request.price=NormalizeDouble(Ask+StopLevel*_Point,_Digits);
         request.sl = NormalizeDouble(request.price - SL*_Point,_Digits);
         request.tp = NormalizeDouble(request.price + TP*_Point,_Digits);
         request.deviation=0;
         request.type=ORDER_TYPE_BUY_STOP;
         request.type_filling=ORDER_FILLING_FOK;
         
           {
            OrderSend(request,result);
            if(result.retcode==10009 || result.retcode==10008)
               Print("Установлен ордер BuyStop");
            else
              {
               Print(ResultRetcodeDescription(result.retcode));
                           
              }
           }      
 // переворотный ордер +++++++++++++++++++++++++++++++++++++++
        
         request.action = TRADE_ACTION_PENDING;
         request.magic=magic_number1;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = NormalizeDouble(volume()/2,2);
         request.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits);
         request.sl = NormalizeDouble(request.price + SL*_Point,_Digits);
         request.tp = NormalizeDouble(request.price - (TP-900)*_Point,_Digits);
         request.deviation=0;
         request.type=ORDER_TYPE_SELL_STOP;
         request.type_filling=ORDER_FILLING_FOK;
         
           {
            OrderSend(request,result);
            if(result.retcode==10009 || result.retcode==10008)
               Print("Установлен ордер SellStop");
            else
              {
               Print(ResultRetcodeDescription(result.retcode));
               return;
              }
           }        
       } } 
}

La orden principal se abre y se cierra en TP, y la orden de reversión se cuelga. Si la orden principal se ha cerrado en el stop, no habría ningún problema )). ¿Cuál es la mejor función para cerrar?

¿Debo revisar los pedidos pendientes y eliminarlos de esa manera?

      {
         request.action = TRADE_ACTION_REMOVE;
         request.magic=magic_number1;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = 0;
         request.price=0;
         request.sl = 0;
         request.tp =0;
         request.deviation=0;
         request.type=0;
         request.type_filling=0;
         
           {
            OrderSend(request,result);
¿O hay una manera más fácil?


	          
 
Crucian: La orden principal se abre y se cierra en el TP y la orden rollover se cuelga. Si la orden principal se hubiera cerrado en la parada, no habría habido ningún problema )). ¿Qué función sería mejor utilizar para cerrarla? ¿Debo ir a través de las órdenes pendientes y eliminarlas de esa manera? ¿O hay una manera más fácil?

Así que la pregunta se reduce a cómo eliminar una orden pendiente que no es una orden SL o TP cuando ocurren ciertos eventos (en particular, cuando una orden TP se dispara en una posición abierta).

En la actualidad, una orden pendiente de este tipo sólo puede eliminarse obligatoriamente enviando la correspondiente solicitud de "Eliminar orden pendiente". Así que tenemos que controlar en el lado del terminal la ocurrencia de ciertos eventos y enviar una solicitud. Pero a diferencia de su variante, sólo hay dos campos que se especifican en la solicitud, uno de los cuales es la solicitud.orden.

En la situación que mencionas, las órdenes OCO ("One Cansels Other(s)") serían útiles: en el nivel TP, se colocaría una orden con un volumen igual a la posición abierta, en el nivel SL, se colocaría una orden con el volumen necesario para "invertir" la posición. Si una de estas órdenes OCO se activara, la segunda se eliminaría automáticamente en el lado del servidor. Sin embargo, a lo largo de la vida de este foro, los desarrolladores de la plataforma se han mantenido firmes en no introducir ningún tipo de orden adicional, incluidas las órdenes OCO.

 
Yedelkin:

Sin embargo, desde que existe este foro, los desarrolladores de la plataforma no han aceptado categóricamente introducir ningún tipo de orden adicional, incluidas las órdenes OCO.

¿Y por qué introducirlas cuando se pueden implementar de forma programada?
 
A100: ¿Por qué introducirlos cuando se puede hacer de forma programada?
Intente escribir la palabra "OCO" en latín y cirílico en una búsqueda del foro y léala.
 
Yedelkin:
Intente escribir la palabra "OCO" en latín y cirílico en una búsqueda del foro y léala.
La OCO no es una orden independiente y no es necesario introducirla
 
A100: La CCA no es una orden independiente y no es necesario introducirla
Ya veo. Así que no has leído nada. Pero usted está dispuesto a compartir su opinión. De acuerdo, se acepta su opinión: no necesita este tipo de orden.
 
Yedelkin:
No necesita este tipo de orden.
Algunas plataformas tienen la capacidad de vincular 1 (a veces 2) órdenes CCA. En MT4/5 implemento programáticamente una cadena de órdenes enlazadas (a veces bastante complejas) y encuentro esta opción más conveniente