[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 147

 

I professionisti non passano, hanno bisogno del tuo aiuto. Il bot sta aprendo una posizione di vendita, quindi questa posizione dovrebbe essere chiusa di seguito, vedere il codice e dove la posizione di vendita dovrebbe essere chiusa, la posizione di acquisto dovrebbe essere aperta, il numero di posizioni aperte dovrebbe essere 1 (OrdersTotal()). La domanda è, come fare qualcosa come una coda di esecuzione degli ordini: prima una posizione di vendita dovrebbe chiudersi e poi una posizione di acquisto dovrebbe aprirsi e il numero di posizioni aperte dovrebbe essere uguale a 1?

OrderSend(Symbol(),OP_BUY,Lots,Ask,4,0,0,"",0,0,Green);
    for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderType()==OP_SELL)   // long position is opened
           {
                 OrderClose(OrderTicket(),OrderLots(),Ask,4,Violet); // close position
                }
    }
 
bool flags
 
eddy:
Voglio dire che è impostato solo su un buffer e non su una variabile esterna

quindi usa questo indicatore_coloreN

 
eddy:
Voglio dire che è impostato solo su un buffer, non su una variabile esterna
Non si può fare con MQL. Ma se ne avete bisogno, naturalmente, potete farlo))))
 
alsu:
Non si può fare in MQL. Ma se è MOLTO, MOLTO necessario, allora certamente può essere fatto ))))

non sai nemmeno di cosa hai bisogno...

Sono sicuro che le esigenze di Eddy possono essere risolte con MQL

 
sergeev:

Non sai nemmeno di cosa hai bisogno...

Sono sicuro che i bisogni di eddy sono risolti da MQL

No, ho capito... ha bisogno di ottenere il colore del rendering dal buffer dell'indicatore nel codice dell'indicatore (giusto, Eddy?). Per quanto ne so, è impossibile in MQL.
 
alsu:
No, ho capito... ha bisogno di ottenere il colore di disegno dal buffer dell'indicatore programmaticamente nel codice dell'indicatore (giusto, Eddy?). Per quanto ne so, questo non è possibile in MQL.
è possibile.
basta usare il parametro indicator_colorN. Si può dire che è la stessa variabile.
 
sergeev:
forse.
basta usare il parametro indicator_colorN. Si può dire che questa è la stessa variabile.

noooooo.

Supponiamo di avere un indicatore che disegna una linea. Supponiamo di voler disegnare un cerchio con questo indicatore. Ma vogliamo renderlo verde se la linea dell'indicatore è verde, e rosso se è rosso.

 

Signori programmatori, per favore consigliate come chiudere correttamente tutti gli ordini. Di seguito il problema da risolvere e ciò che è stato consigliato di fare. Tutto sommato, tutto funziona, tranne gli ordini di chiusura e l'impostazione di bandiere per vietare il trading.

Sono sicuro che ci sono programmatori esperti tra di voi. Per favore aiutatemi a scrivere le seguenti condizioni nel mio Expert Advisor:
1) С+=Profitto sull'ordine(1)+Profitto sull'ordine(2)+...+Profitto sull'ordine(n) - profitto totale su tutti gli ordini aperti nel tempo corrente.
2) C-=(c+)perdita su ordine(1)+perdita su ordine(2)+...+perdita su ordine(n) - somma delle perdite su tutti gli ordini aperti al momento attuale.
3) X=(c+)/(c-) - l'attuale rapporto profitti/perdite
4) Se il capitale (S) moltiplicato per il rapporto profitti/perdite (X) è superiore al valore impostato specificato (K), sei pronto a fare trading. (Se S*X>K, OK)
5) Se l'Equity (S) moltiplicato per il rapporto Profit/Loss (X) è inferiore al Target definito (K), allora tutti gli ordini aperti alle quotazioni correnti saranno chiusi e l'Expert Advisor sarà disabilitato fino a quando non sarà abilitato di nuovo manualmente. (S*X<K, chiudere tutti gli ordini e via)

Mi sembra che questa sarebbe una buona protezione contro le perdite di denaro.

Sembra così. Creiamo due funzioni che contano profitti e perdite:
double CalculateProfitTotal()
{
double Result = 0;
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderProfit() > 0)
Result = Result + OrderProfit();
return(Result);
}

double CalculateLossTotal()
{
double Result = 0;
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderProfit() < 0)
Result = Result + MathAbs(OrderProfit());
return(Result);
}

Nella funzione start(), scrivete le vostre condizioni.
Per esempio:
X = CalculateProfitTotal() / CalculateLossTotal();
if(AccountEquity() * X < K)
{
//Chiude tutti gli ordini e
//imposta il flag che vieta il commercio
return(0);
}

 
alsu:

Supponiamo di voler disegnare un cerchio come indicatore. Ma vogliamo renderlo verde se la linea dell'indicatore è verde

quindi voglio creare un oggetto in blu)

sergeev, quindiindicator_color1 è una variabile di colore?