Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1396

 
Tenimagalon:
Vedo che stiamo avendo una vera discussione. Alex, anche tu sei coinvolto:)) Bene, signor programmatore, hai un consenso? Guarda, la funzione principale è quella di chiudere gli ordini dello stesso tipo in base al profitto totale. 4 posizioni sono aperte, 2 di loro in EURUSD (comprare e vendere) e 2 di USDCHF (comprare e vendere).Se gli ordini di acquisto ottengono un profitto li chiude, lascia l'ordine di vendita o lascia l'ordine di vendita.

Cattura

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:
Vedo che stiamo avendo una vera discussione. Alex, sei coinvolto :))) Allora, signor programmatori, avete un consenso? Guarda, il problema è quello di chiudere gli ordini dello stesso tipo in totale profitto. 4 posizioni sono aperte, 2 di EURUSD (acquisto e vendita) e 2 di USDCHF (acquisto e vendita).Se gli ordini di acquisto ottengono un profitto li chiude, lascia l'ordine di vendita o lascia l'ordine di vendita.

come questo? :)

1

 
MakarFX:

Cattura

Ummm interessante. grazie mille :)
 
Taras Slobodyanik:

come questo? :)


Se hai 3 posizioni aperte a coppie diverse, cioè 2 Bai e un sit, allora sì, in questo caso il robot chiuderà le coppie quando il profitto totale è raggiunto. Se provate ad aprire 4 posizioni su 2 coppie, non otterrete mai il profitto totale in questo caso, l'esperto chiude le coppie di ordini, sia di acquisto che di vendita. Ma chiude l'acquisto di EURUSD e compra USDCHF o qualsiasi altra coppia selezionata.
 
Taras Slobodyanik:

come questo? :)


Hai fatto tu lafinestra di dialogo o l'SB?
 
Tenimagalon:
Se hai 3 posizioni aperte a coppie diverse, cioè 2 Bai e una Sell, allora sì, in questo caso il robot chiuderà le posizioni quando il profitto totale è raggiunto. Se provate ad aprire 4 posizioni su 2 coppie, non otterrete mai il profitto totale in questo caso, l'esperto chiude le coppie di ordini, sia di acquisto che di vendita. Ma chiude l'acquisto di EURUSD e compra USDCHF o qualsiasi altra coppia selezionata.

qui ci sono un sacco di baie e di sé)

2

 
MakarFX:
La finestra di dialogo l 'hai fatta tu o SB?

Ci sono dei pannelli?

ps. a meno che non ci siano degli oggetti se si fa

 
Taras Slobodyanik:

Ci sono dei pannelli?

Sì, è per questo che lo chiedo.

Se l'hai fatto da solo, per favore condividi il codice (collassa, espandi, sposta)

 
Taras Slobodyanik:

qui ci sono un sacco di baie e di sé)

Taras :) Dovresti aprire 4 posizioni una per uno su EUR, una per uno su CHF, poi altre due, una di vendita su EUR, una di vendita su CHF. E guarda quando buy e sell raggiungono il profitto comune il bot le chiuderà entrambe o no. E nelle vostre schermate vedo ordini per uno strumento che non dovrebbe essere a priori.
 
Tenimagalon:
Taras :) Dovresti aprire 4 posizioni in una fase. 1 long in EUR, una long in CHF, poi altre due, una sell in EUR, una sell in CHF. E guarda quando buy e buy raggiungono il profitto totale il bot le chiuderà entrambe o no. E nelle vostre schermate vedo ordini per uno strumento che non dovrebbe essere a priori.

raggruppare le coppie per comprare o vendere è sbagliato

Per esempio su una coppia (comprare) potrebbe esserci un acquisto del dollaro e sull'altra coppia (vendere) potrebbe esserci una vendita del dollaro.