Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 823

 
Artyom Trishkin:

Es ist möglich, einen Bestellschein zu lesen.

Gibt es eine ähnliche Funktion

OrderGetTicket();

für mql4?

 
Seric29:

Gibt es eine ähnliche Funktion

für mql4?

Es gibt sie, nur nicht genau dieselbe. Nachdem Sie einen Auftrag ausgewählt haben, müssen Sie über weitere Funktionen die Auftragsart und das Ticket festlegen.

OrderSelect - Торговые функции - Справочник MQL4
OrderSelect - Торговые функции - Справочник MQL4
  • docs.mql4.com
Чтобы определить, из какого списка выбран ордер, необходимо проанализировать его время закрытия. Если время закрытия ордера равно 0, то ордер является открытым или отложенным и взят из списка открытых ордеров терминала. Отличить открытый ордер от отложенного ордера можно по типу ордера. Если время закрытия ордера не равно 0, то ордер является...
 

Guten Tag.

Es gibt eine Funktion zum Öffnen eines Rasters von Aufträgen mit um i erhöhtem Los,

Ich möchte, dass das Raster (Lose) nach Losen aufgebaut wird, d. h. Los1 = 0,01, Los2 = 0,02, Los3 = Los2 + Los 1. ,

Wie sollte dies in der Funktion fLots() beschrieben werden?

extern int Count       = 4;      //Количество устанавливаемых ордеров
\\


for(i=1;i<=Count;i++)
    {
     {         
      res=OrderSend(Symbol(),OP_BUYLIMIT,fLots()*i,fND(Ask-(Distance*Point+i*Step*Point)),3,fND(BuyPrice-StopLoss*Point), fND(Ask-(Distance*Point+i*Step*Point))+TakeProfit*Point,"",MAGIC,expiration,Blue);    
  
      Sleep(3000);
      if(res<0) 
         {
            Print("ОШИБКА: ",GetLastError()); 
         } else {
            RefreshRates();
         }    
     }
    }
 

Ich möchte prüfen, ob in onInit offene Positionen vorhanden sind, aber aus irgendeinem Grund kann ich sie nicht auswählen:


   for(int i=PositionsTotal(); i>0; i--)
      {
      smbol = PositionSelect(PositionGetSymbol(i));
      tickett = PositionGetTicket(i);
      
      Print("ticket(",i,") = ", tickett);
      Print(smbol);

      }
   Print("Position Total = ", PositionsTotal());

Ich verstehe:


2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) ticket(1) = 0

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) false

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) Position Total = 1



 
psyman:

Ich möchte prüfen, ob in onInit offene Positionen vorhanden sind, aber aus irgendeinem Grund kann ich sie nicht auswählen:


Ich verstehe:


2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) ticket(1) = 0

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) false

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) Position Total = 1



Sie fällt mir sofort ins Auge:

for(int i=PositionsTotal(); i>0; i--)

Ich habe nicht weiter nachgeschaut, weil es in einem umgekehrten Zyklus so sein sollte:

for(int i=PositionsTotal()-1; i>=0; i--)
 
Artyom Trishkin:

Das ist mir sofort aufgefallen:

Ich habe nicht weiter nachgeschaut, denn so sollte es im Rückwärtsgang sein:

Ich bevorzuge diese Schreibweise

for(int i = PositionsTotal(); i-- > 0;)
 
Alexey Viktorov:

Ich bevorzuge diesen Eintrag

Na ja... Ich habe ein verständliches Beispiel für Anfänger gezeigt ;)

 

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   | //+----------------------------------------------------------------------------+ //|  Версия   : 19.02.2008                                                     | //|  Описание : Возвращает суммарный профит в валюте депозита                  | //|             закрытых с определённой даты позиций                           | //+----------------------------------------------------------------------------+ //|  Параметры:                                                                | //|    sy - наименование инструмента             (""   - любой символ,         | //|                                               NULL - текущий символ)       | //|    op - операция                             (-1   - любая позиция)        | //|    mn - MagicNumber                          (-1   - любой магик)          | //|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     | //+----------------------------------------------------------------------------+ double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0) {   double p=0;   int    i, k=OrdersHistoryTotal();   if (sy=="0") sy=Symbol();   for (i=0; i<k; i++) {     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {       if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {           if (mn<0 || OrderMagicNumber()==mn) {             if (dt<OrderCloseTime()) {               p+=OrderProfit()+OrderCommission()+OrderSwap();             }           }         }       }     }   }   return(p); } // код Кима изменил на это и теперь от считает профит за сегодня и обнуляется в полночь double GetProfitFromDateInCurrency1(string sy="0", int op=-1, int mn=-1) {   double p=0;   int    i, k=OrdersHistoryTotal();   datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));   if (sy=="0") sy=Symbol();   for (i=0; i<k; i++) {     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {       if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {           if (mn<0 || OrderMagicNumber()==mn) {             if (dt<OrderCloseTime()) {               p+=OrderProfit()+OrderCommission()+OrderSwap();             }           }         }       }     }   }   return(p); }

Hallo. Bitte helfen Sie mir bei der Berechnung des Gewinns der gestern und vorgestern abgeschlossenen Geschäfte usw. Ich möchte den Gewinn für heute, den Gewinn für gestern und den Gewinn für vorgestern berechnen.

Ich habe den Code/ für die heutige Gewinnberechnung kopiert.

oder wie man den heutigen Gewinn setzt, um diesen Wert auf den gestrigen Gewinn und dann auf den Gewinn des Vortages zu verschieben
Dateien:
 
Lomonosov1991:

Hallo. Bitte helfen Sie mir bei der Berechnung des Gewinns der gestern und vorgestern abgeschlossenen Geschäfte usw. Ich möchte den Gewinn für heute, den Gewinn für gestern und den Gewinn für vorgestern berechnen.

Um den Gewinn für heute zu berechnen, kopieren Sie code/.

oder wie man den Wert vom heutigen Gewinn auf den gestrigen Gewinn und dann auf den Gewinn von vorgestern senken kann

Fügen Sie der Funktionsbeschreibung einen weiteren Parameter hinzu und ändern Sie die Prüfbedingung:

double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dtstart, datetime dtstop)
....
if (OrderCloseTime()>=dtstart &&  dtstop<=OrderCloseTime()) {
 
Dank an Igor Makan. Ich habe die Funktion gestern wie folgt erstellt
double GetProfitFromDateInCurrency2(string sy="0", int op=-1, int mn=-1)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60;
  datetime dtstart=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
               if (dt<OrderCloseTime() && OrderCloseTime()<=dtstart) {              
                  p+=OrderProfit()+OrderCommission()+OrderSwap();
                 
            }
          }
        }
      }
    }
  }
  return(p);
}
Ich habe die Funktion vorgestern so gemacht
double GetProfitFromDateInCurrency3(string sy="0", int op=-1, int mn=-1)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60*2;
  datetime dtstart=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
               if (dt<OrderCloseTime() && OrderCloseTime()<=dtstart) {              
                  p+=OrderProfit()+OrderCommission()+OrderSwap();
                 
            }
          }
        }
      }
    }
  }
  return(p);
}
Und man kann sie an Wochenenden nicht auf Null zurücksetzen? d.h. Montag gestern war Freitag. d.h. Wochenenden irgendwie entfernen?
Dateien:
Screenshot_2.png  844 kb
Grund der Beschwerde: