Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1283

 
Youri Lazurenko:


Wenn es keinen vollständigen Code gibt, kann ich Ihnen nicht helfen. Bitte fügen Sie den vollständigen Code an (fügen Sie ihn über die Schaltfläche Datei anhängen an )

 
Wenn in void OnTick(), sieht es wie folgt aus:
   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);
         }
      }  
   }
Was bedeutet "vollständiger Code"? Die gesamte EA? Es ist ziemlich umständlich, und die übrigen Funktionen haben nichts mit der Änderung zu tun. Ich verstehe, dass wir SL und TP sofort setzen können, wenn eine Position eröffnet wird, aber ich möchte es auf diese Weise tun, ich frage mich schon, warum es nicht funktioniert. In mql4 geht es wie mit zwei Fingern... und hier ist es eine Qual.
 

Und zurück zum Zeichnen der Trendlinie. Wenn Sie einen Code benötigen.

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

Und zurück zum Zeichnen der Trendlinie. Falls Sie einen Code benötigen.

Dokumentation lesen!!!

OBJ_TREND

Hinweis

Der Modus der Trendlinienverlängerung nach rechts und/oder nach links kann angegeben werden (Eigenschaften OBJPROP_RAY_RIGHT bzw. OBJPROP_RAY_LEFT).

Standardmäßig sind diese Eigenschaften auf false gesetzt.

Meine Frage ist also: Warum sollte man das Objekt löschen und neu anlegen? Ist es nicht einfacher, nur dann ein solches Objekt zu erstellen, wenn es in der Karte nicht vorhanden ist? Und selbst wenn es notwendig ist, die Ankerkoordinaten zu ändern, ist es nicht notwendig, das Objekt zu löschen und neu zu erstellen.

 
Youri Lazurenko:


Zum dritten und letzten Mal: Bitte fügen Sie den vollständigen Code bei.

 
Alexey Viktorov:

Lesen Sie die Dokumentation!!!

Diese Eigenschaften sind standardmäßig auf false gesetzt.

Und die Frage: Warum ein Objekt löschen und neu anlegen? Ist es nicht einfacher, nur dann ein solches Objekt zu erstellen, wenn es in der Karte nicht vorhanden ist? Und selbst wenn es notwendig ist, die Koordinaten des Ankers zu ändern, muss das Objekt nicht gelöscht und neu erstellt werden.

Danke, ich werde jetzt einen Blick darauf werfen. Und danke für die wertvollen Kommentare. Ich bin kein Programmierer, nur für mich selbst, ich benutze oft die Arbeit von jemand anderem.

 
Vladimir Karputov:

Zum dritten und letzten Mal: Bitte fügen Sie den vollständigen Code bei.

Das Problem ist bereits gelöst. Ich ändere über Tisket, nicht über Symbol. Ich verstehe nicht, was der vollständige Code zu tun hat, z. B. was hat die Bedingung der Positionseröffnung mit der Änderung zu tun?

Und jetzt sieht es so aus, vielleicht braucht es ja jemand.

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:


Studieren Sie die Hilfe - was ist der Unterschied zwischen der Auswahl einer Position nach Ticket und nach Symbol. Das ist sehr nützlich, damit Sie keine Fehler machen:

PositionSelect

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

Hinweis

Bei der "Netting"-Positionsabrechnung (ACCOUNT_MARGIN_MODE_RETAIL_NETTING undACCOUNT_MARGIN_MODE_EXCHANGE) kann zu einem bestimmten Zeitpunkt nur einePosition proSymbol eröffnet werden, die aus einem oder mehrerenGeschäften resultiert. Positionen und aktiveschwebende Aufträge, die auch in der Registerkarte "Handel" des "Toolbox"-Panels angezeigt werden, sind nicht miteinander zu verwechseln.

Wenn die Positionen unabhängig voneinander angezeigt werden (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), können für jedes Symbol mehrere Positionen gleichzeitig geöffnet werden. In diesem Fall wählt PositionSelect die Position mit dem kleinsten Häkchen aus.

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

Lesen Sie die Dokumentation!!!

Diese Eigenschaften sind standardmäßig auf false gesetzt.

Und die Frage: Warum ein Objekt löschen und neu anlegen? Ist es nicht einfacher, nur dann ein solches Objekt zu erstellen, wenn es in der Karte nicht vorhanden ist? Und selbst wenn es notwendig ist, die Ankerkoordinaten zu ändern, ist es nicht notwendig, das Objekt zu löschen und neu zu erstellen.

Nochmals vielen Dank, jetzt ist die Linie wie eine Linie, schön zu sehen. Aber ich braucheObjectDelete(0, name); sonst wird die einmal gezeichnete Linie nicht neu gezeichnet. Dasselbe in mql4, ich habe es nur vergessen.

 
Youri Lazurenko:

Nochmals vielen Dank, jetzt ist die Linie wie eine Linie, schön zu sehen. Es wird nurObjectDelete(0, name);; benötigt, da sonst die einmal gezeichnete Linie nicht erneut gezeichnet wird. Das gleiche in mql4, ich habe es nur vergessen.

Was für eine absurde Idee. Das gezeichnete grafische Objekt bewegt sich flüssig. Ein Beispiel ist in der Hilfe zu jedem Objekt angegeben (für die horizontale LinieOBJ_HLINE).

Sie können auch jede Eigenschaft eines bereits gezeichneten Objekts ändern: Farbe, Stil, Geruch ...
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
  • www.mql5.com
OBJ_HLINE - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Grund der Beschwerde: