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

 
teetrinker:

O Myexpert.Time(10) deve devolver a hora da décima barra no gráfico? E como escrevê-lo correctamente?

Obrigado

Em teoria, sim, deveria...

O método Tempo , de acordo com a documentação, obtém o valor do elemento Tempo através do índice especificado. É um método da classe CExpertBase, que é uma classe base para CExpert e todas as classes auxiliares de estratégias comerciais.

Caro sergeev diz-lhe correctamente... é melhor usar o Debugger para determinar o papel do método Time() na vida da sua EA...

 

Obrigado, Yedelkin !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

E EnumToString(prazo), função fixe!!! E EU SOU BARAN!!!!!!

 
Diga-me por favor, aqui está uma função
 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    ));   
      }

A função parece ter um ,,lado,,- request.symbol= Symbol(); Why Symbol()? Aqui o símbolo para o qual definimos TP e SL deve ser transferido. Então, podemos simplesmente remover a string request.symbol= Symbol();, como se nada fosse estúpido?

 

Aconselha-se a definir uma ordem de capotagem no nível de paragem da ordem principal aberta e depois apagá-la se a ordem principal for fechada em TP ?

Estabeleço as duas ordens no código ao mesmo tempo:

        
 // основной ордер +++++++++++++++++++++++++++++++++++++++      
        {
         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;
              }
           }        
       } } 
}

A ordem principal abre e fecha na TP, e a ordem de capotamento fica suspensa. Se a ordem principal tiver sido encerrada na paragem, não haveria qualquer problema )). Qual é a melhor função a fechar?

Devo analisar as ordens pendentes e eliminá-las dessa forma?

      {
         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);
Ou há uma maneira mais fácil?


	          
 
Crucian: A ordem principal abre e fecha em TP e a ordem de capotamento fica suspensa. Se a ordem principal tivesse sido encerrada em paragem, não teria havido quaisquer problemas ))). Que função seria melhor utilizar para a fechar? Devo passar pelas ordens pendentes e eliminá-las dessa forma? Ou há uma maneira mais fácil?

Assim, a questão resume-se a como eliminar uma ordem pendente que não é uma ordem SL ou TP quando certos eventos ocorrem (em particular, quando uma ordem TP dispara numa posição aberta).

Actualmente, tal ordem pendente só pode ser eliminada compulsoriamente através do envio do respectivo pedido "Delete Pending Order". Assim, temos de monitorizar no lado terminal a ocorrência de certos eventos e enviar um pedido. Mas ao contrário da sua variante, existem apenas dois campos a serem especificados no pedido, um dos quais é o pedido.ordem.

Na situação que menciona, as encomendas OCO ("One Cansels Other(s)") seriam úteis: no nível TP, seria colocada uma encomenda com um volume igual à posição aberta, no nível SL, seria colocada uma encomenda com o volume necessário para "inverter" a posição. Se uma destas ordens OCO fosse accionada, a segunda seria automaticamente removida do lado do servidor. Contudo, ao longo da vida deste fórum, os criadores da plataforma têm sido inflexíveis em não introduzir quaisquer tipos de encomendas adicionais, incluindo encomendas OCO.

 
Yedelkin:

Contudo, enquanto este fórum existir, os criadores da plataforma não concordaram categoricamente em introduzir quaisquer tipos de encomendas adicionais, incluindo encomendas OCO.

E porquê introduzi-los quando pode ser implementado de forma programática?
 
A100: Porquê inscrevê-los quando se pode fazê-lo de forma programática?
Tente digitar a palavra "OCO" em latim e cirílico numa pesquisa de fórum e leia-a.
 
Yedelkin:
Tente digitar a palavra "OCO" em latim e cirílico numa pesquisa de fórum e leia-a.
OCO não é um mandado autónomo e não há necessidade de o introduzir
 
A100: O CCA não é um mandato autónomo e não há necessidade de o introduzir
Estou a ver. Por isso, não leu nada. Mas está disposto a partilhar a sua opinião. OK, a sua opinião é aceite: não precisa deste tipo de encomenda.
 
Yedelkin:
Nãoé necessário este tipo de encomenda.
Algumas plataformas têm a capacidade de ligar 1 (às vezes 2) ordens CCA. Em MT4/5 implemento programmaticamente uma cadeia de ordens ligadas (por vezes bastante complexa) e considero esta uma opção mais conveniente