Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1283

 
Youri Lazurenko:


Se non c'è un codice completo, non sarò in grado di aiutarvi. Si prega di allegare il codice completo (allegare utilizzando il pulsante Allega file)

 
Se in void OnTick(), appare così:
   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);
         }
      }  
   }
Cosa significa codice completo? L'intera EA? È abbastanza ingombrante, e il resto delle funzioni non ha nulla a che fare con la modifica. Capisco che possiamo impostare immediatamente SL e TP quando viene aperta una posizione, ma voglio farlo in questo modo, mi sto già chiedendo perché non funziona. In mql4 si fa come due dita... e qui è una rottura di palle.
 

E torniamo a disegnare la linea di tendenza. Se hai bisogno di un codice.

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);
   }
}
File:
1.png  82 kb
2.png  36 kb
 
Youri Lazurenko:

E torniamo a disegnare la linea di tendenza. Se avete bisogno di un codice.

Leggete la documentazione!!!

OBJ_TREND

Nota

Il modo di estensione della linea di tendenza a destra e/o a sinistra può essere specificato (proprietà OBJPROP_RAY_RIGHT e OBJPROP_RAY_LEFT rispettivamente).

Per impostazione predefinita, queste proprietà sono impostate su false.

Quindi la mia domanda è: perché cancellare l'oggetto e crearlo di nuovo? Non è più facile creare solo se non si trova un tale oggetto sul grafico? E anche se è necessario cambiare le coordinate di ancoraggio, non c'è bisogno di cancellare l'oggetto e crearlo di nuovo.

 
Youri Lazurenko:


Per la terza e ultima volta: allegare il codice completo.

 
Alexey Viktorov:

Leggete la documentazione!!!

Queste proprietà sono impostate su false per impostazione predefinita.

E domanda: perché cancellare un oggetto e crearlo di nuovo? Non è più facile creare solo se non si trova un tale oggetto sul grafico? E anche se è necessario cambiare le coordinate di ancoraggio, non c'è bisogno di cancellare l'oggetto e crearlo di nuovo.

Grazie, ora darò un'occhiata. E grazie per i preziosi commenti. Non sono un programmatore, solo per me stesso, spesso uso il lavoro di qualcun altro.

 
Vladimir Karputov:

Per favore, per la terza e ultima volta: allega il codice completo.

Già risolto il problema. Io modifico tramite Tisket, non Symbol. Non capisco cosa c'entri il codice completo, per esempio, cosa c'entra la condizione di apertura della posizione con la modifica?

E ora è così, forse qualcuno ne avrà bisogno.

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:


Studia l'aiuto - qual è la differenza tra selezionare una posizione per biglietto e per simbolo. Vi sarà utile per non commettere errori:

PositionSelect

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

Nota

Con la contabilità delle posizioni "netting" (ACCOUNT_MARGIN_MODE_RETAIL_NETTING eACCOUNT_MARGIN_MODE_EXCHANGE) può essere aperta solo unaposizione persimbolo in qualsiasi momento, che risulta da una o piùoperazioni. Le posizioni e gliordini pendenti attivi, che sono anche visualizzati nella scheda "Trade" del pannello "Toolbox", non devono essere confusi tra loro.

Se le posizioni sono visualizzate in modo indipendente (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), si possono aprire diverse posizioni per ogni simbolo simultaneamente. In questo caso, PositionSelect selezionerà la posizione con il tick più piccolo.

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

Leggete la documentazione!!!

Queste proprietà sono impostate su false per impostazione predefinita.

E domanda: perché cancellare un oggetto e crearlo di nuovo? Non è più facile creare solo se non si trova un tale oggetto sul grafico? E anche se è necessario cambiare le coordinate di ancoraggio, non c'è bisogno di cancellare l'oggetto e crearlo di nuovo.

Grazie ancora, ora la linea è come una linea, bello da vedere. Ma ho bisogno diObjectDelete(0, name); altrimenti la linea una volta disegnata non viene ridisegnata. Lo stesso in mql4, solo dimenticato.

 
Youri Lazurenko:

Grazie ancora, ora la linea è come una linea, bello da vedere. SoloObjectDelete(0, name);; è necessario, altrimenti una volta disegnata la linea non viene ridisegnata. Lo stesso in mql4, l'ho solo dimenticato.

Che idea assurda. L'oggetto grafico disegnato si muove in modo fluido. Un esempio è dato nell'aiuto per ogni oggetto (per la linea orizzontaleOBJ_HLINE).

Potete anche cambiare qualsiasi proprietà a un oggetto già disegnato: colore, stile, odore...
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
  • www.mql5.com
OBJ_HLINE - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5