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

 
ksbr:
Ich möchte eine Aktie (Futures) in MT5 setzen, um meine zu testen, wie?
Sie können nicht. Suchen Sie ein Brokerhaus mit den Futures
 
sergeev:
Auf keinen Fall. Suchen Sie nach einem Maklerhaus mit diesen Futures

%))) Es gibt keinen DC mit diesem Fuchs))) Es muss zusammengeklebt werden...

Schade, schade, es fing alles so schön an...

 

Grüße an alle!

Ich versuche, zwei Funktionen in meinem EA zu implementieren, die erste definiert den Gewinn des letzten Handels, die zweite definiert das Lot des letzten Handels.

Ich habe diese Seite von A bis Z durchforstet und mehrere Funktionen erstellt, wobei ich den Beispielen in Artikeln und anderen EAs gefolgt bin, aber kein Ergebnis - beide Funktionen geben immer 0,00 zurück.

Hier scheint mir die richtige Variante am nächsten zu sein, aber das Ergebnis ist immer 0:

double LossLastPos(){
// --- определение границ требуемой торговой истории
   datetime end=TimeCurrent();                 // текущее серверное время
   datetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   HistorySelect(start,end);
//--- получим количество ордеров в истории
   int history_orders=HistoryOrdersTotal();
//--- получим тикет ордера из истории, имеющего последний индекс в списке
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
   if(order_ticket>0) // получили в кэш исторический ордер, работаем с ним
     {
      //Получаем значение прибыли последнего ордера
      double  profit = HistoryDealGetDouble(order_ticket,DEAL_PROFIT);
      return(profit);
     }
}

Ich versuche, die Losgröße auf die gleiche Weise zu ermitteln:

double  volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
      return(volume);

Und nichts funktioniert, die Werte sind immer Null.

Ich selbst habe gerade mit der Umstellung von mql4 auf mql5 begonnen. Die Implementierung solcher Funktionen in mql4 war nicht sehr schwierig, aber hier gibt es eine Blockade.

Bitte nennen Sie mir eine echte, funktionierende Lösung.

 
karakos:

...

Bitte schlagen Sie eine echte, funktionierende Lösung vor.

Verwenden Sie HistoryDealGetTicket() und HistoryDealsTotal().

Und führen Sie die Validierung durch:

   if(HistorySelect(start,end))
     {
      // ...
     }
 

tol64 vielen Dank! Alles funktioniert.

Hier ist eine 100%ig funktionierende Lösung - die Funktion gibt den Gewinn der letzten geschlossenen Position im Terminalverlauf zurück:

//+------------------------------------------------------------------+       
//|Функция возвращает профит последней позиции                       |
//+------------------------------------------------------------------+
double ProfitLastPos()
  {
// --- определение границ требуемой торговой истории
   datetime end=TimeCurrent();                 // текущее серверное время
   datetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   if(HistorySelect(start,end))
     {
      //--- получим количество сделок в истории
      int history_orders=HistoryDealsTotal();
      //--- получим тикет сделки из истории, имеющей последний индекс в списке
      ulong order_ticket=HistoryDealGetTicket(history_orders-1);

      if(order_ticket>0) // получили в кэш историческую сделку, работаем с ней
        {
         profit=HistoryDealGetDouble(order_ticket,DEAL_PROFIT);
        }
     }
   return(profit);
  }

In Analogie dazu erhalten wir die Losgröße des letzten Geschäfts:

 Volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
 
karakos:

tol64 vielen Dank! Es funktioniert alles.

...

Und wenn Sie im Editor auch noch Strg+ drücken, erhalten Sie sauber formatierten Code. Besonders wichtig vor dem Hochladen des Beispiels ins Forum (bessere Lesbarkeit). ))
 
tol64:
Wenn Sie im Editor auch Strg+ drücken, erhalten Sie sauber formatierten Code. Dies ist besonders wichtig, bevor Sie das Beispiel ins Forum hochladen (bessere Lesbarkeit). ))
Ich habe den Code gestylt, nochmals vielen Dank!
 

Guten Tag, ich habe vor kurzem begonnen, MQL5 zu lernen. Ich habe ein Problem mit der Positionsschließung. Im Code: if(!m_Trade.PositionClose(_Symbol,100))//--- Position nach aktuellem Symbol schließen. Das Ergebnis ist, dass sich die Position umkehrt! Für einen Hinweis, wie ich eine Position schließen kann, wäre ich sehr dankbar.

 
//_____________________________________________________________________________________________________________________________________________
//--------  блок работы с длинной позицией  ---------------------------------------------------------------------------------------------------
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
                          
         if( p_close1 <  buy_stop_level   )// если бар 1 закрылся ниже уровня стоп
         {
          if(!m_Trade.PositionClose(_Symbol,100))//--- закрываем позицию по текущему символу
         {
      //--- сообщим о неудаче
      Print("Метод PositionClose() потерпел неудачу. Код возврата=",m_Trade.ResultRetcode(),
            ". Описание кода: ",m_Trade.ResultRetcodeDescription());
         }
   else
         {
       Print("Метод PositionClose() выполнен успешно. Код возврата=",m_Trade.ResultRetcode(),
            " (",m_Trade.ResultRetcodeDescription(),")");       
          }
    
     
           }          
            }
 

EA-Protokoll, nachdem der Balken unterhalb des Stopp-Levels geschlossen hat. Long-Position = 1 Lot, Short-Position = 1 Lot)

Grund der Beschwerde: