Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 586

 
Alexey Kozitsyn:

Utilizar uma variável de enumeração do tipo ENUM_TIMEFRAMES.

Obrigado!
 
Alexey Kozitsyn:

Utilizar uma variável de enumeração do tipo ENUM_TIMEFRAMES.

Posso deixar apenas alguns de todos os primes na enumeração? De modo que ao seleccionar nas definições dos parâmetros só vejo dois, por exemplo.
 
barudkinarseniy:
Posso deixar apenas alguns de todos os primes da lista? Assim, ao seleccionar parâmetros em definições, verei apenas dois, por exemplo.

Pode, mas tem de escrever a sua própria enumeração

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

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

Para mql4, em vez de ORDER_TYPE_BUY, devemos escrever OP_BUY, respectivamente, para Sell

 
Alexey Viktorov:

Pode, mas tem de escrever a sua própria enumeração

Para mql4, em vez de ORDER_TYPE_BUY deve escrever OP_BUY, respectivamente, para Sell

Já está, obrigado))
 
OlegKirill:

Aconselhar como corrigir este erro

Modificação da encomenda #1506271459 comprar 0,11 EURJPY a 122,824 sl: 0,000 tp: 0,000 -> sl: 0,000 tp: 122,843 falhou [Inválido S/L ou T/P]


 
Karputov Vladimir:
OlegKirill:

Aconselhar como corrigir este erro

Pedido de encomenda #1506271459 comprar 0,11 EURJPY a 122,824 sl: 0,000 tp: 0,000 -> sl: 0,000 tp: 122,843 falhou [Inválido S/L ou T/P]


Depende do que for, se a paragem for inferior ao mínimo e o terminal devolver a paragem zero, então é difícil. Se o problema é com a etapa de preço, eu utilizo esta função.

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);
  }

exemplo de utilização ao abrir uma posição

   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);
     }

exemplo de utilização quando se modifica

         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);
           }

..

 
Obrigado, vou tentar.
 
Cerca de mql5. Porque é que, ao contrário do mql4, TimeLocal() muda apenas com um novo tick / novo deslocamento gráfico / mudança de escala gráfica, mas não continuamente? O mesmo com GetTickCount eGetMicrosecondCount. Existe alguma forma de fazer o "relógio" TimeLocal mover-se de forma uniforme e contínua sem "carrapatos"?
 
Sonho11:

Boa tarde, aqui está o problema... há uma função de paragem de reboque...

   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");
                 }
              }
           }
        }
     }

Como alterá-lo para arrastar um número ilimitado de ordens em vez de uma ...


 
loleg1991:
Cerca de mql5. Porque é que, ao contrário do mql4, TimeLocal() muda apenas com um novo tick / novo deslocamento gráfico / mudança de escala gráfica, mas não continuamente? O mesmo com GetTickCount eGetMicrosecondCount. Talvez haja uma maneira de fazer o "relógio" TimeLocal mover-se de forma uniforme e contínua sem "carrapatos"?
Não é possível fazê-lo com OnTimer()?