Caratteristiche utili da KimIV - pagina 120

 

Buon pomeriggio.

Ho modificato la funzione GetProfitOpenPosInCurrency() per restituire la peggiore posizione perdente. Potete per favore dire a quali funzioni sarebbero adatte a restituire il tempo di apertura di questa posizione (OrderOpenTime())?

double GetMaxLoseOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) 
            if(p > OrderProfit() + OrderSwap() + OrderCommission()){
            p=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(p);
}
 
abeiks:

Buon pomeriggio.

Ho modificato la funzione GetProfitOpenPosInCurrency() per restituire la peggiore posizione perdente. Potete per favore dire a quali funzioni sarebbero adatte a restituire il tempo di apertura di questa posizione (OrderOpenTime())?


Restituite il numero del biglietto e potete fare con le funzioni standard
 
Vinin:

Restituisci il numero del biglietto e puoi fare a meno delle funzioni standard

Grazie.
 

KimIV , ciao.Cercando - non riesco a trovare lo script - cancella tutti gli ordini pendenti sul simbolo - e trainasul simbolo, forse c'è - post........ non considerarlo impertinente.Grazie in anticipo.

 

Buon pomeriggio.

Sto usando la funzione isTradeTimeInt() di KimIV. Userò molti intervalli di tempo e per ogni intervallo assegnerò diverse variabili. Ho fatto questo codice per esso (2 intervalli finora). La domanda è: questa è la soluzione più corretta o dovrei affrontare il compito in modo diverso?

extern int OH1=9;extern int OM1=0;extern int CH1=12;extern int CM1=0;
extern int OH2=13;extern int OM2=0;extern int CH2=15;extern int CM2=0;

int HourOpenTime()
{
int trade = 0;
if(isTradeTimeInt(OH1,OM1,CH1,CM1))trade = 1;
if(isTradeTimeInt(OH2,OM2,CH2,CM2))trade = 2;
return (trade);
}
 
bestseich:

Caro Igor Kim, aiutami a scrivere una funzione come OrderCloseBy(), ma dovrebbe funzionare su diverse coppie e OrderProfit(), e non importa se gli ordini sono diversamente diretti o meno, come un OrderProfit() > un altro, un'altra coppia, di quanti punti ed entrambi, esattamente, solo questi due, chiudono contemporaneamente. La mia variante è così:

for (int i=OrdersTotal()-1;i>=0;i--)

{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()!=Symbol()||OrderSymbol()==Symbol())
{
if(OrderProfit()>=pr*Point)//pr è nei parametri, punti di profitto
int ot=OrderTicket(); double op=OrderProfit();
if(OrderProfit()<=pru*(-1)*Point)//pru-è nei parametri, punti di perdita
int otu=OrderTicket();double opu=OrderProfit();
if(op>opu*v*(-1)&&(OrderType()==OP_BUY||OrderType()==OP_SELL))
//v è un rapporto profitto/perdita, cioè 1,5
OrderClose(otu,OrderLots(),Bid,sleep,Blue);
OrderClose(ot,OrderLots(),Bid,sleep,Blue);
OrderClose(otu,OrderLots(),Ask,sleep,Blue);
OrderClose(ot,OrderLots(),Ask,sleep,Blue);

}}}

Funzionerà? Correggi o suggerisci la tua soluzione, se non ti dispiace.

 

Caro Igor!

Potreste per favore consigliarmi se avete una funzione per calcolare il volume dei lotti in funzione del saldo del conto dopo aver chiuso l'ultimo ordine e prima di aprire il prossimo?

Vi ringrazio in anticipo.

 
vasabu2012:

Caro Igor!

Potreste per favore consigliarmi se avete una funzione per calcolare il volume dei lotti in funzione del saldo del conto dopo aver chiuso l'ultimo ordine e prima di aprire il prossimo?

Vi ringrazio in anticipo.

Ecco la funzione di Igor.

File:
b-lots.mqh  3 kb
 

Nell'aggiornamento la funzione PriceOpenLastPos ha smesso di funzionare nelle condizioni, mi ha quasi rotto il cervello, dà valori nei commenti ma non funziona nelle condizioni, una piccola modifica ha risolto il problema.

double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
double r=0, r2=0;
int i, k=OrdersTotal();

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) {
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}

r2 = DoubleToStr(r, 4);

return(r2);
}


 
Per favore aiutate a ricompilare l'EA e-CloseByEquity.rar con modifiche di programmazione in MetaEditor
Motivazione: