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

 
Youri Lazurenko:


Se não houver código completo, não serei capaz de o ajudar. Por favor anexar o código completo (anexar utilizando o botão Anexar ficheiro)

 
Se no vazio OnTick(), é o que parece:
   if(currentTime >= OpenTrade && currentTime < CloseTrade)
   {
      if(SignalBuy1() || SignalBuy2())
      { 
         if(timeBarInside != iTime(NULL, 0, 1))
         {
            OpenOrderBuy();
            PositionModifiBuy();
            CandleColor(ColorCandleBuy);
            timeBarInside = iTime(NULL, 0, 1);
         }
      }
      
      if(SignalSell1() || SignalSell2()) 
      {
         if(timeBarInside != iTime(NULL, 0, 1))
         {
            OpenOrderSell();
            PositionModifiSell();
            CandleColor(ColorCandleSell);
            timeBarInside = iTime(NULL, 0, 1);
         }
      }  
   }
O que significa código completo? A EA inteira? É bastante complicado, e o resto das funções não têm nada a ver com a modificação. Compreendo que podemos definir imediatamente SL e TP quando uma posição é aberta, mas quero fazê-lo dessa forma, já me pergunto porque é que não funciona. Em mql4 é feito como dois dedos... e aqui é uma dor de cabeça.
 

E de volta a traçar a linha de tendência. Se precisar de um código.

bool CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
{
   ObjectDelete(0, name);  
      
   if(ObjectCreate(0, name, OBJ_TREND, 0, time1, price1, time2, price2))
   {
      ObjectSetInteger(0, name, OBJPROP_COLOR, clr); 
      ObjectSetInteger(0, name, OBJPROP_STYLE, TrendStyle); 
      ObjectSetInteger(0, name, OBJPROP_WIDTH, TrendWidth); 
      
      ChartRedraw(); 
      Sleep(10);
      
      return(true);
   }
   else 
   {
      Print("Ошибка в создании линии"); 
      return (false);
   }
}
Arquivos anexados:
1.png  82 kb
2.png  36 kb
 
Youri Lazurenko:

E de volta a traçar a linha de tendência. Se precisar de código.

Leia a documentação!!!

OBJ_TREND

Nota

O modo de extensão da linha de tendência para a direita e/ou para a esquerda pode ser especificado (propriedades OBJPROP_RAY_RIGHT e OBJPROP_RAY_LEFT, respectivamente).

Por defeito, estas propriedades são definidas como falsas.

Então a minha pergunta é: Porquê apagar o objecto e criá-lo novamente? Não é mais fácil criar apenas se não for encontrado nenhum objecto deste tipo no gráfico? E mesmo que seja necessário alterar as coordenadas da âncora, não há necessidade de apagar o objecto e criá-lo novamente.

 
Youri Lazurenko:


Pela terceira e última vez: por favor anexar o código completo.

 
Alexey Viktorov:

Leia a documentação!!!

Estas propriedades são definidas como falsas por defeito.

E pergunta: Porquê apagar um objecto e criá-lo novamente? Não é mais fácil criar apenas se não for encontrado nenhum objecto deste tipo no gráfico? E mesmo que seja necessário alterar as coordenadas da âncora, não há necessidade de apagar o objecto e criá-lo novamente.

Obrigado, vou dar uma vista de olhos agora. E obrigado pelos valiosos comentários. Não sou um programador, só para mim, utilizo frequentemente o trabalho de outra pessoa.

 
Vladimir Karputov:

Por favor, pela terceira e última vez: anexar o código completo.

O problema já foi resolvido. Modifico via Tisket, não Symbol. Não compreendo o que é que o código completo tem a ver, por exemplo, com o que é que a condição de abertura de posição tem a ver com a modificação?

E agora parece que talvez alguém venha a precisar dele.

void PositionModifiSell()
{
   int    i;
   ulong  ticket;
   double sl    = 0; 
   double tp    = 0;  
   int    total = PositionsTotal();
   
   for(i = total-1; i >= 0; i--)
   {
      if(m_position.SelectByIndex(i))                            
      {
         if(m_position.Symbol() == Symbol() && m_position.Magic() == Magic)
         {
            if(m_position.PositionType() == POSITION_TYPE_SELL)
            {               
               if(m_position.StopLoss() == 0 && m_position.TakeProfit() == 0)
               {
                  ticket = m_position.Ticket();
                  
                  sl = NormalizeDouble(iHigh(NULL, 0, ExtrimUp()) + VS*_Point, _Digits);
                   
                  if(PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)*_Point)
                  {
                     tp = NormalizeDouble(PriceCurrentDw1() - PriceDwHigh(), _Digits);
                  }
                  else
                     tp = NormalizeDouble(bid - TP*_Point, _Digits);
                  }
                  
                  if(!m_trade.PositionModify(ticket, sl, tp))
                  {
                     Print("Метод PositionModify() потерпел поражение. Код возврата = ", m_trade.ResultRetcode(),
                           ". Описание кода: ", m_trade.ResultRetcodeDescription());
                  }
                  else
                  {
                     Print("Метод PositionModify() исполнен успешно. Код возврата = ", m_trade.ResultRetcode(),
                           " (", m_trade.ResultRetcodeDescription(),")");
                  }
               }
            }
         }
      }
   }
}
 
Youri Lazurenko:


Estudar a ajuda - qual é a diferença entre seleccionar uma posição por bilhete e por símbolo. Vai ser útil para não cometer erros:

PositionSelect

bool  PositionSelect(
   string  symbol     // имя инструмента
   );

Nota

Com a contabilidade da posição "netting" (ACCOUNT_MARGIN_MODE_RETAIL_NETTING eACCOUNT_MARGIN_MODE_EXCHANGE) apenas umaposição pode ser aberta porsímbolo em qualquer altura, o que resulta de uma ou maistransacções. As posições eordens pendentes activas, que também são exibidas no separador "Comércio" do painel "Caixa de ferramentas", não devem ser confundidas entre si.

Se as posições forem expostas independentemente (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), várias posições podem ser abertas para cada símbolo simultaneamente. Neste caso, PositionSelect seleccionará a posição com o menor tick.

Документация по MQL5: Торговые функции / PositionSelect
Документация по MQL5: Торговые функции / PositionSelect
  • www.mql5.com
PositionSelect - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:

Leia a documentação!!!

Estas propriedades são definidas como falsas por defeito.

E pergunta: Porquê apagar um objecto e criá-lo novamente? Não é mais fácil criar apenas se não for encontrado nenhum objecto deste tipo no gráfico? E mesmo que seja necessário alterar as coordenadas da âncora, não há necessidade de apagar o objecto e criá-lo novamente.

Mais uma vez obrigado, agora a linha é como uma linha, agradável de ver. Mas preciso deObjectDelete(0, nome); caso contrário a linha, uma vez desenhada, não é redesenhada. O mesmo em mql4, simplesmente esquecido.

 
Youri Lazurenko:

Mais uma vez obrigado, agora a linha é como uma linha, agradável de ver. ApenasObjectDelete(0, nome); é necessário, caso contrário uma vez desenhada a linha não é redesenhada. O mesmo em mql4, acabei de me esquecer.

Que ideia absurda. O objecto gráfico desenhado move-se suavemente. Um exemplo é dado na ajuda para cada objecto (para a linha horizontalOBJ_HLINE).

Pode também mudar qualquer propriedade para um objecto já desenhado: cor, estilo , cheiro ...
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
  • www.mql5.com
OBJ_HLINE - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Razão: