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

 
Alexey Kozitsyn:

Utilice una variable de tipo de enumeración ENUM_TIMEFRAMES.

Gracias.
 
Alexey Kozitsyn:

Utilice una variable de tipo de enumeración ENUM_TIMEFRAMES.

¿Puedo dejar sólo algunos de todos los primos en la enumeración? De modo que al seleccionar en la configuración de parámetros sólo veo dos, por ejemplo.
 
barudkinarseniy:
¿Puedo dejar sólo algunos de todos los primos en la lista? Así, al seleccionar los parámetros en la configuración, sólo veré dos, por ejemplo.

Puedes, pero tienes que escribir tu propia enumeración

enum ENUM_ORDER_TYPE
{
   Buy  = ORDER_TYPE_BUY,
   Sell = ORDER_TYPE_SELL
};

input ENUM_ORDER_TYPE typeOrder; // Выбери тип ордера

Para mql4, en lugar de ORDER_TYPE_BUY, deberíamos escribir OP_BUY, respectivamente, para Sell

 
Alexey Viktorov:

Puedes, pero tienes que escribir tu propia enumeración

Para mql4, en lugar de ORDER_TYPE_BUY debe escribir OP_BUY, respectivamente, para Sell

Lo tengo, gracias))
 
OlegKirill:

Por favor, indíqueme cómo solucionar este error

Modificación de la orden #1506271459 comprar 0.11 EURJPY a 122.824 sl: 0.000 tp: 0.000 -> sl: 0.000 tp: 122.843 falló [S/L o T/P inválido].


 
Karputov Vladimir:
OlegKirill:

Por favor, indíqueme cómo solucionar este error

Solicitud de orden #1506271459 comprar 0.11 EURJPY a 122.824 sl: 0.000 tp: 0.000 -> sl: 0.000 tp: 122.843 falló [S/L o T/P inválido].


Depende de lo que sea, si el tope se pone menos que el mínimo y el terminal devuelve el tope cero, entonces es difícil. Si el problema es con el paso del precio, uso esta función.

double normalize(string symbol,double value)
  {
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   if(ts==0)return(value);
   return(NormalizeDouble(value/ts,0)*ts);
  }

ejemplo de uso al abrir una posición

   if(type==ORDER_TYPE_BUY)
     {
      double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      if(NormalizeDouble(normalize(_Symbol,ask),digits)!=NormalizeDouble(ask,digits))return;
      trade.Buy(volume,_Symbol,0,0,0,CommentOrder);
     }

ejemplo de uso al modificar

         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            sl=NormalizeDouble(normalize(symbol,bid-sl*point),digits);
            tp=PositionGetDouble(POSITION_TP);
            //Print(__FUNCTION__,": sl = ",sl," tp = ",tp);
            if(sl>0)trade.PositionModify(tiket,sl,tp);
           }

..

 
Gracias, lo probaré.
 
Sobre mql5. ¿Por qué, a diferencia de mql4, TimeLocal() sólo cambia con un nuevo tick / un nuevo desplazamiento del gráfico / un cambio de escala del gráfico, pero no de forma continua? Lo mismo con GetTickCount yGetMicrosecondCount. ¿Hay alguna manera de hacer que el "reloj" de TimeLocal se mueva de manera uniforme y continua sin "ticks"?
 
Sueño11:

Buenas tardes, este es el problema... hay una función de trailing stop...

   double tr=0,MATrall=0,op=0,sl=0,
   ask   = NormalizeDouble(Ask,Digits()),
   bid   = NormalizeDouble(Bid,Digits());
   tr = NormalizeDouble(TrailingStop*Point(),Digits());
   MATrall = iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,1);
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==Symbol())
           {
             if(OrderMagicNumber()==Magic)
              {
              op    = NormalizeDouble(OrderOpenPrice(),Digits());
              sl    = NormalizeDouble(OrderStopLoss(),Digits());
                 if(OrderType()==OP_BUY)
                 {
                 if((bid-op)>tr)
                 if((bid-sl)>tr)
                 if ((bid-tr)>MATrall)
                 if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MATrall,Digits()),OrderTakeProfit(),0,clrRed)==false)
                 printf("ERROR BUY Modifi");
                 }
                  if(OrderType()==OP_SELL)
                 {
                 if((op-ask)>tr)
                 if((sl-ask)>tr || sl==0)
                 if((ask+tr)<MATrall)
                 if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MATrall,Digits()),OrderTakeProfit(),0,clrRed)==false)
                 printf("ERROR SELL Modifi");
                 }
              }
           }
        }
     }

Cómo cambiarlo para que busque un número ilimitado de pedidos en lugar de uno ...


 
loleg1991:
Sobre mql5. ¿Por qué, a diferencia de mql4, TimeLocal() sólo cambia con un nuevo tick / un nuevo desplazamiento del gráfico / un cambio de escala del gráfico, pero no de forma continua? Lo mismo con GetTickCount yGetMicrosecondCount. ¿Quizás haya una manera de hacer que el "reloj" de TimeLocal se mueva de manera uniforme y continua sin "ticks"?
¿No es posible hacerlo con OnTimer()?