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

 
Alexey Belyakov:


Das hat auch nicht funktioniert.

Was ein Kobold an Kilometern von Code mag...

Ihr Problem kann in SECHS Codezeilen gelöst werden, wenn man die Deklaration der Variablen berücksichtigt.

/************************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;
     }
   }
 }/******************************************************************/

Ich hoffe, Sie können die Signalvariable herausfinden.

 

О! Es klappt! Danke, liebe Genossen, für die Ideen!

Aber ich musste sie ein wenig optimieren. Es wurde sogar einfacher, ohne (wahr). Obwohl ich diese komplizierte MQL-Logik nicht erklären kann).

So habe ich es umgesetzt:

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;
}
Ich frage mich, warum es in MQL5 einen so großen Code für die Positionseröffnung gibt. Im Gegensatz zu MQL4. In 4 ist es nur eine Zeile. Können wir sie abbauen? Können wir zum Beispiel den Error-Handler entfernen?


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

О! Es klappt! Danke, liebe Genossen, für die Ideen!

Aber ich musste sie ein wenig optimieren. Es wurde sogar einfacher, ohne (wahr). Obwohl ich diese komplizierte MQL-Logik nicht erklären kann).

So habe ich es umgesetzt:

Ich frage mich, warum es in MQL5 so viel Code gibt, um eine Position zu eröffnen. Im Gegensatz zu MQL4. In 4 ist es nur eine Zeile. Aber hier... Können Sie es kürzer machen? Können wir zum Beispiel den Error-Handler entfernen?


Verwenden Sie Handelsklassen. Und der Code wird sehr kurz sein.

Beispiel:

//+------------------------------------------------------------------+
//|                                            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:

О! Es klappt! Danke, liebe Genossen, für die Ideen!

Aber ich musste sie ein wenig optimieren. Es wurde sogar einfacher, ohne (wahr). Obwohl ich diese komplizierte MQL-Logik nicht erklären kann).

So habe ich es umgesetzt:

Ich frage mich, warum es in MQL5 einen so großen Code für die Positionseröffnung gibt. Im Gegensatz zu MQL4. In 4 ist es nur eine Zeile. Aber hier... Können Sie es kürzer machen? Können wir zum Beispiel den Error-Handler entfernen?


Wenn Sie also in dem Zustand sind

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

Warum brauchen Sie mehr Kontrollen für eine neue Bar? Oder gibt es eine Möglichkeit, dass die Position zum gleichen Zeitpunkt geschlossen wird und die zweite Eröffnung verboten wird?

 
Alexey Belyakov:

О! Es klappt! Danke, liebe Genossen, für die Ideen!

Aber ich musste sie ein wenig optimieren. Es wurde sogar einfacher, ohne (wahr). Obwohl ich diese komplizierte MQL-Logik nicht erklären kann).

So habe ich es umgesetzt:

Ich frage mich, warum es in MQL5 einen so großen Code für die Eröffnung einer Position gibt. Im Gegensatz zu MQL4. In 4 ist es nur eine Zeile. Aber hier... Kann sie gekürzt werden? Können wir zum Beispiel den Error-Handler entfernen?


Wissen Sie, vor langer Zeit, als es MQL4 gab, haben sich die Leute darüber empört, dass man ihnen keinen Zugang auf niedrigerer Ebene gegeben hat - damit sie etwas auf ihre eigene Art und Weise tun können.

Nun, das haben sie getan - jetzt haben sie den Zugriff auf OrderSend() in MQL4 ermöglicht - sozusagen haben sie die Logik in MQL implementiert - also machen Sie, was Sie wollen. Aber nein - jetzt habe ich Beschwerden bekommen, dass es zu kompliziert ist.

Kompliziert? Kein Problem - geben Sie Ihnen Handelsklassen in SB - sie sind fast die gleichen wie in MQL4 Standardhandelsfunktionen.
In MQL4 sind solche Klassen die Handelsfunktionen. Und in MQL5 - alles mit offenem Zugang.

Nutzen Sie es aus.

 
Artyom Trishkin:

Wissen Sie, vor langer Zeit, als es MQL4 gab, haben sich die Leute darüber empört, dass man ihnen keinen Zugang auf niedrigerer Ebene gegeben hat - damit sie etwas auf ihre eigene Art und Weise tun konnten.

Nun, das haben sie getan - jetzt haben sie den Zugriff auf OrderSend() in MQL4 ermöglicht - sozusagen haben sie die Logik in MQL implementiert - also machen Sie, was Sie wollen. Aber nein - jetzt habe ich Beschwerden bekommen, dass es zu kompliziert ist.

Kompliziert? Kein Problem - geben Sie mir Handelsklassen in SB - sie sind fast die gleichen wie in MQL4-Standardhandelsfunktionen.
In MQL4 sind solche Klassen die Handelsfunktionen. Und in MQL5 - alles mit offenem Zugang.

Nutzen Sie es aus.

Dozent und Dozentin. Warum bist du so wütend (heute) ©

 
Alexey Viktorov:

Docent, ah Docent. Warum bist du so wütend (heute) ©

Steig in das Eisloch...

 
Alexey Viktorov:

Wenn Sie also eine Bedingung haben

Warum müssen Sie eine neue Bar überprüfen? Oder gibt es eine Option, die besagt, dass die Position auf demselben Balken geschlossen wird und wir eine zweite Eröffnung deaktivieren sollten?

Genau richtig - es gibt eine Option, die Position auf demselben Balken zu schließen.

 

(In die neue Wand schneiden. ) Die "Mauer" wird Break-even genannt.

So wurde es in MQL4 implementiert:

(Ich habe es irgendwo kopiert, aber ich weiß es nicht mehr).

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);
             }
           } 
         }
       }

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

Aber hier ist, wie es in 5-PC umgesetzt wird. Wie kann ich das tun?

Ich habe mir die Handelsklassen angesehen, aber ich finde sie nicht. Aber die Sache ist notwendig. Was sagen die Profis?

 

Wie kann ich verhindern, dass Trades aus anderen Charts auf dem Chart angezeigt werden?

Nur die Trades des Roboters, die sich auf dem angegebenen Chart befinden.

Grund der Beschwerde: