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

 
Tenimagalon:
Ich sehe, dass wir eine echte Diskussion führen. Alex, du bist auch daran beteiligt:)) Nun, Herr Programmierer, haben Sie einen Konsens? Schauen Sie, die Hauptfunktion ist es, Aufträge des gleichen Typs auf der Grundlage des Gesamtgewinns zu schließen. 4 Positionen sind geöffnet, 2 von ihnen in EURUSD (Kauf und Verkauf) und 2 von USDCHF (Kauf und Verkauf).Wenn die Kaufaufträge einen Gewinn erzielen, werden sie geschlossen, die Verkaufsaufträge werden in Ruhe gelassen oder die Verkaufsaufträge werden in Ruhe gelassen.

Fangen

double MyProfit=1000; // уровень профита
//+--------------------------------------------------------------------------------------------------------------------+
//| Expert tick function                                                                                               |
//+--------------------------------------------------------------------------------------------------------------------+
void OnTick()
  {
//---
   if(Open_Pr("",0)>MyProfit)DelOrders("",0); // закрываем покупки
   if(Open_Pr("",1)>MyProfit)DelOrders("",1); // закрываем продажи
//---
  }
//+--------------------------------------------------------------------------------------------------------------------+
//|  Суммарный профит в валюте депозита открытых позиций                                                               |
//| or_ty=0 - ордера типа BUY                                                                                          |
//| or_ty=1 - ордера типа SELL                                                                                         |
//+--------------------------------------------------------------------------------------------------------------------+
double Open_Pr(string sy="", int or_ty=0)
  { double p = 0;
   if (sy == "0") sy = Symbol();
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS)==true)
        {
         if(OrderSymbol() == sy || sy == "")
           {
            if(OrderType()==or_ty) {p+=OrderProfit()+OrderSwap()+OrderCommission();}
           }
        }
     }
   return(p);
  }
//+--------------------------------------------------------------------------------------------------------------------+
//| Функция удаления и закрытия ордеров                                                                                |
//| or_ty=0 - ордера типа BUY                                                                                          |
//| or_ty=1 - ордера типа SELL                                                                                         |
//+--------------------------------------------------------------------------------------------------------------------+
void DelOrders(string sy="", int or_ty=0)
  {
   while(true)
     {
      bool find_order=false;
      //----
      if (sy == "0") sy = Symbol();
      for(int pos=OrdersTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS)==true)
      if(OrderSymbol() == sy || sy == "")
        {
         find_order=true;
         //----
         if(OrderType()==or_ty)
           {
            RefreshRates(); int slip=(int)(((Ask-Bid)/Point)*2);
            if(OrderClose(OrderTicket(),OrderLots(),Bid,slip,clrBlue)==false){}
           }
         //----
         if(OrderType()==or_ty)
           {
            RefreshRates(); slip=(int)(((Ask-Bid)/Point)*2);
            if(OrderClose(OrderTicket(),OrderLots(),Ask,slip,clrRed)==false){}
           }
         Alert("Все ордера закрыты!");
        } 
      if(find_order==false) Alert("Нет ордеров!");break;
     } 
  }
//+--------------------------------------------------------------------------------------------------------------------+
 
Tenimagalon:
Ich sehe, dass wir eine echte Diskussion haben. Alex, du bist beteiligt :)) Nun, Herr Programmierer, haben Sie einen Konsens? Schauen Sie, das Problem ist, um Aufträge des gleichen Typs für einen Gesamtgewinn zu schließen. 4 Positionen sind geöffnet, 2 von ihnen auf EURUSD (Kauf und Verkauf) und 2 von USDCHF (Kauf und Verkauf).Wenn die Kaufaufträge einen Gewinn erzielen, werden sie geschlossen, die Verkaufsaufträge werden in Ruhe gelassen oder die Verkaufsaufträge werden in Ruhe gelassen.

wie hier? :)

1

 
MakarFX:

Fangen

Ähm, interessant. Vielen Dank :)
 
Taras Slobodyanik:

wie hier? :)


Wenn Sie 3 Positionen bei verschiedenen Paaren geöffnet haben, d.h. 2 Bai und eine Sit, dann ja, in diesem Fall wird der Roboter die Paare schließen, wenn der Gesamtgewinn erreicht ist. Wenn Sie versuchen, 4 Positionen für 2 Paare zu eröffnen, werden Sie niemals den Gesamtgewinn erzielen, da der Experte die Auftragspaare schließt, entweder durch Kauf oder Verkauf. Aber er schließt den Kauf EURUSD und kaufen USDCHF oder ein anderes ausgewähltes Paar.
 
Taras Slobodyanik:

wie hier? :)


Haben Siedas Dialogfeld selbst erstellt oder die SB?
 
Tenimagalon:
Wenn Sie 3 Positionen bei verschiedenen Paaren eröffnet haben, d.h. 2 Bai und eine Sell, dann ja, in diesem Fall wird der Roboter die Positionen schließen, wenn der Gesamtgewinn erreicht ist. Wenn Sie versuchen, 4 Positionen für 2 Paare zu eröffnen, werden Sie niemals den Gesamtgewinn erzielen, da der Experte die Auftragspaare schließt, entweder durch Kauf oder Verkauf. Aber er schließt den Kauf EURUSD und kaufen USDCHF oder ein anderes ausgewähltes Paar.

hier sind viele Buchten und Selbst)

2

 
MakarFX:
Haben Sie das Dialogfeld selbst erstellt oder SB?

Gibt es irgendwelche Gremien?

ps. es sei denn, es gibt Objekte, wenn Sie das tun

 
Taras Slobodyanik:

Gibt es irgendwelche Gremien?

Ja, das ist der Grund, warum ich frage.

Wenn Sie es selbst gemacht haben, teilen Sie bitte den Code mit (einklappen, erweitern, verschieben)

 
Taras Slobodyanik:

hier sind viele Buchten und Selbst)

Taras :) Sie sollten 4 Positionen eröffnen, eine nach der anderen auf EUR, eine nach der anderen auf CHF, dann zwei weitere, eine auf EUR verkaufen, eine auf CHF verkaufen. Und schauen Sie, wenn Kauf und Verkauf den gemeinsamen Gewinn erreichen, wird der Bot beide schließen oder nicht. Und auf Ihren Bildschirmen sehe ich Aufträge für ein Instrument, das nicht a priori sein sollte.
 
Tenimagalon:
Taras :) Sie sollten 4 Positionen in einem Schritt eröffnen. 1 Long in EUR, eine Long in CHF, dann zwei weitere, eine Sell in EUR, eine Sell in CHF. Und schauen Sie, wenn Buy und Buy den Gesamtgewinn erreicht, wird der Bot beide schließen oder nicht. Und auf Ihren Bildschirmen sehe ich Aufträge für ein Instrument, das nicht a priori sein sollte.

Die Gruppierung von Paaren nach Kauf oder Verkauf ist falsch.

Zum Beispiel könnte auf einem Paar (Kauf) ein Kauf des Dollars und auf einem anderen Paar (Verkauf) ein Verkauf des Dollars erfolgen.