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

 
Alexey Belyakov:


Isso também não funcionou.

O que um hobgoblin gosta de quilómetros de código...

O seu problema pode ser resolvido em SEIS linhas de código, tendo em conta a declaração das variáveis.

/************************Expert tick function************************/
void OnTick()
 {
  bool signal = true;
  datetime timeBar = iTime(_Symbol, PERIOD_CURRENT, 0);// период можно поставить по своему усмотрению
  datetime static timeOpen = 0;
  if(timeBar > timeOpen)
   {
    if(signal)
     {
      // открыть позицию
      timeOpen = timeBar;
     }
   }
 }/******************************************************************/

Espero que consiga descobrir a variável de sinal.

 

О! Está a funcionar! Obrigado, camaradas, pelas ideias!

Mas tive de a afinar um pouco. Tornou-se ainda mais fácil, sem (verdade). Embora não consiga explicar esta complicada lógica MQL).

Foi assim que eu a implementei:

datetime timeBar = iTime(_Symbol,PERIOD_CURRENT, 0);// период можно поставить по своему усмотрению
datetime static timeOpen = 0;

if((PositionsTotal()==0)&&(c0>h1)&&(rGENUP>0.30)&&(timeBar > timeOpen))    // Условие для открытия позиции.
     {
      MqlTradeRequest request;
      MqlTradeResult  result;
      request.action   =TRADE_ACTION_DEAL;                         // тип торговой операции
      request.symbol   =Symbol();                                 // символ
      request.volume   =1;                                       // объем в 1 лот
      request.type     =ORDER_TYPE_BUY;                         // тип ордера
      request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия
      request.deviation=3;
      request.sl    = NormalizeDouble(Ask-50*_Point,_Digits);
      request.tp    = NormalizeDouble(Ask+50*_Point,_Digits);    

      if(!OrderSend(request,result))
         PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
      //--- информация об операции
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      // допустимое отклонение от цены
timeOpen = timeBar;
}
Pergunto-me porque haverá um código tão grande na MQL5 para abertura de posição. Ao contrário da MQL4. Em 4 é apenas uma linha. Podemos cortá-la? Por exemplo, podemos remover o manipulador de erros?


Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Alexey Belyakov:

О! Está a funcionar! Obrigado, camaradas, pelas ideias!

Mas tive de a afinar um pouco. Tornou-se ainda mais fácil, sem (verdade). Embora não consiga explicar esta complicada lógica MQL).

Foi assim que eu a implementei:

Pergunto-me porque há tanto código na MQL5 para abrir uma posição. Ao contrário da MQL4. Em 4, é apenas uma linha. Mas aqui... Pode encurtá-lo? Por exemplo, podemos remover o manipulador de erros?


Usar classes de comércio. E o código será muito curto.

Exemplo:

//+------------------------------------------------------------------+
//|                                            Only_one_purchase.mq5 |
//+------------------------------------------------------------------+
#property version   "1.003"
#property script_show_inputs
#include <Trade\Trade.mqh>
CTrade         m_trade;          // trading object
//--- input parameters
input ENUM_POSITION_TYPE   InpPositionType   = POSITION_TYPE_BUY; // Position Type
input double               InpVolume         = 0.0;               // Volume
input ulong                m_magic           = 15489;             // magic number
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   m_trade.SetExpertMagicNumber(m_magic);
//--- open a position
   if(InpPositionType==POSITION_TYPE_BUY)
      m_trade.Buy(InpVolume);
   else
      m_trade.Sell(InpVolume);
  }
//+------------------------------------------------------------------+
 
Alexey Belyakov:

О! Está a funcionar! Obrigado, camaradas, pelas ideias!

Mas tive de a afinar um pouco. Tornou-se ainda mais fácil, sem (verdade). Embora não consiga explicar esta complicada lógica MQL).

Foi assim que eu a implementei:

Pergunto-me porque haverá um código tão grande na MQL5 para abertura de posição. Ao contrário da MQL4. Em 4, é apenas uma linha. Mas aqui... Pode ser encurtado? Por exemplo, podemos remover o manipulador de erros?


Portanto, se tiver no estado

if((PositionsTotal()==0)&&

porque é que precisa de mais verificações para um novo bar? Ou existe a opção de que a posição seja fechada no mesmo bar e a segunda abertura seja proibida?

 
Alexey Belyakov:

О! Está a funcionar! Obrigado, camaradas, pelas ideias!

Mas tive de a afinar um pouco. Tornou-se ainda mais fácil, sem (verdade). Embora não consiga explicar esta complicada lógica MQL).

Foi assim que eu a implementei:

Pergunto-me porque haverá um código tão grande na MQL5 para abrir uma posição. Ao contrário da MQL4. Em 4, é apenas uma linha. Mas aqui... Pode encurtá-lo? Por exemplo, podemos remover o manipulador de erros?


Sabe, há muito tempo, quando havia MQL4, as pessoas diziam indignadamente que não lhes tinha sido dado acesso de nível inferior - para que pudessem fazer algo à sua própria maneira.

Bem, fizeram-no - agora deram acesso à OrderSend() em MQL4 - por assim dizer, implantaram a sua lógica em MQL - por isso, façam o que quiserem. Mas não - agora tenho queixas de que é demasiado complicado.

Complicado? Não há problema - dá-me classes comerciais em SB - são quase as mesmas que nas funções comerciais padrão MQL4.
Na MQL4 tais classes são as funções comerciais. E em MQL5 - todos com acesso aberto.

Tire partido disso.

 
Artyom Trishkin:

Há muito tempo atrás, quando havia MQL4, as pessoas diziam indignadamente que não lhes davam acesso de nível inferior - para que pudessem fazer algo à sua própria maneira.

Bem, fizeram-no - agora deram acesso à OrderSend() em MQL4 - por assim dizer, implantaram a sua lógica em MQL - por isso, façam o que quiserem. Mas não - agora tenho queixas de que é demasiado complicado.

Complicado? Não há problema - dão-lhe classes de comércio em SB - são quase as mesmas que nas funções de comércio padrão MQL4.
Na MQL4 tais classes são as funções comerciais. E em MQL5 - todos com acesso aberto.

Tire partido disso.

Docente, e Docente. Porque estás tão zangado (hoje) ©

 
Alexey Viktorov:

Docent, ah Docent. Porque estás tão zangado (hoje) ©

Entre no buraco de gelo...

 
Alexey Viktorov:

Portanto, se tiver uma condição

Porque é que precisa de verificar um novo bar? Ou existe a opção de a posição fechar na mesma barra e devemos desactivar uma segunda abertura?

Exactamente certo - há uma opção para fechar a posição na mesma barra.

 

(Cortar na nova parede. ) A "parede" é chamada "breakeven".

Foi assim que foi implementado na MQL4:

(copiei-o num sítio de que não me lembro).

int BULevel=30;

   for(int i=0; i<OrdersTotal(); i++) 
      {
       if(OrderSelect(i, SELECT_BY_POS))
        {      
         if(OrderType()==OP_BUY) 
          {
           if(OrderOpenPrice()<=(Bid-BULevel*Point)&&OrderOpenPrice()>OrderStopLoss())
            {      
             int p=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-50*Point,OrderTakeProfit(),0,Green);
            }
           }       
 
         if(OrderType() == OP_SELL) 
           {
            if(OrderOpenPrice()>=(Ask+BULevel*Point)&&OrderOpenPrice()<OrderStopLoss()) 
             {
              p=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+50*Point,OrderTakeProfit(),0,Red);
             }
           } 
         }
       }

//------------------------------------------------------------------+

Mas aqui está como é implementado em 5-PC. Como é que o faço?

Olhei através das Classes de Negociação, não o vejo aí dentro. Mas a coisa é necessária. O que dizem os profissionais?

 

Como posso impedir que os comércios de outros gráficos apareçam no gráfico?

Apenas os ofícios do robô que está no gráfico dado.