Chiedete! - pagina 134

 
bakhul:
Potrebbe u qualcuno qui aiutarmi ad aggiungere un allarme a questo filtro, quando attraversa il livello 0 o cambia colore. Grazie`s per u che vuole aiutarmi...

Forse avresti più fortuna a postare qui: https://www.mql5.com/en/forum

 

Quanti ordini di acquisto e vendita attualmente aperti da EA

Ho appena esaminato 134 pagine sperando che qualcuno abbia già risposto a questa domanda. Ma sono stato sfortunato.

Dopo aver creato e messo a punto ogni tipo di cross over, e pivot point, e ATR range, e strategia di break out che posso concepire con le centinaia di indicatori diversi che ho. Mi sono reso conto che un EA automatico completo ha bisogno di tonnellate di variabili per le quali è necessario codificare. Così, invece, sto iniziando a creare consulenti esperti assistiti dall'utente. Bene, per le domande a portata di mano...

Quale codice può essere usato per contare quanti ordini di acquisto e quanti ordini di vendita aperti l'EA ha attualmente aperto nel mercato.

Non voglio che conti quanti ordini aperti ci sono in totale perché anch'io piazzerò ordini sullo stesso conto per compensare gli ordini attuali che l'EA ha piazzato.

Alla fine vorrei impostare dei filtri che modifichino il rapporto tra ordini di acquisto e di vendita per scopi di copertura.

 

Un piccolo aiuto per favore...

Ciao a tutti,

Ho originariamente postato questo come un nuovo thread, ma è stato spostato in un altro thread di programmazione (non ho obiezioni al suo spostamento BTW) e ora sembra essersi perso a causa della quantità di post in quel thread.

Forse qualcuno qui può aiutarmi?

Ho quasi finito il mio primo EA dopo quasi 7 giorni di tentativi ed errori e tagli e incollamenti e ore di ricerca....

Qualcuno può per favore dirmi come emettere una funzione di uscita o di stop per un EA?

Voglio che l'EA cancelli tutte le operazioni in corso e in sospeso e che esca dopo aver raggiunto 10.000 di capitale. Qui sotto c'è la parte di codice finora:

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

for (cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

Come potete vedere, l'EA guarda l'Equity e poi imposta il valore bool della variabile StopTrade a true. L'EA riconosce il comando e non elabora nulla sotto StopTrade != true per un ciclo, ma poi il valore bool di StopTrade viene resettato e le operazioni continuano.

In primo luogo, c'è un modo per far sì che questo faccia ciò di cui ho bisogno nel modo in cui lo sto facendo?

In secondo luogo, c'è una funzione che posso usare per dire semplicemente all'EA di uscire?

Tutta l'assistenza è molto apprezzata.

NB.

cutzpr - How Many Currently open Buy, and Sell Orders from EA

Penso che parte del mio codice possa aiutarti con quello che ti serve.

 

Beh, ho pensato che un ciclo che tirasse tutti gli ordini aperti sarebbe un inizio, ma non saprei cosa dire all'EA in modo che guardi solo gli ordini piazzati dall'EA e non tenga conto degli ordini che ho inserito manualmente. Grazie.

 

Numero magico

cutzpr - devi usare un numero magico e poi usare qualcosa come il seguente:

for (cnt=totale;cnt>=0;cnt--)

{

OrderSelect(0,SELECT_BY_POS,MODES_TRADES);

if (OrderMagicNumber()==yourmagicnumber)

{if(OrderType()==OP_BUY)

 

Beh, dando un'occhiata a quel codice, ho evocato questo pezzo di codice qui sotto. Non sono sicuro che sia stato codificato correttamente. Ho impostato

int MaxLong=5,MaxShort=5;

extern double Magic=10000;

extern int MaxOpenOrders=10;

quindi...

se (b<=MaxLong)

{trade

}

se (s<=MaxShort)

{trade

}

Ma l'EA sta ancora inviando il max buy e il max sell. Invece di contare quanti ordini ci sono di ciascuno e limitarsi al MaxLong e Short. So che ci deve essere qualcosa di sbagliato nel codice, ma non riesco a vederlo.

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber()==Magic)

{if(OrderType()==OP_BUY)

{

b++; // add order to Long Quantity

if(TP != 0)

{

if(b!= 0)

{

if(Bid >= ((OrderOpenPrice()+TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // Long position closed.

CMT=OrderCloseTime();

b--; // Long Order closed. Remove one order from total Longs

return(0);

}

}

}

}

if (OrderMagicNumber()==Magic)

{if(OrderType()==OP_SELL)

s++; // Add one to Short order Quantity

if (TP != 0)

{

if(s!= 0)

{

if(Ask <= ((OrderOpenPrice()-TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // Short position closed.

CMT=OrderCloseTime();

s--; // Short Order Closed. Remove one order from total shorts

return(0);

}

}

}

}

}
 
cutzpr:
Dando un'occhiata a quel codice, ho evocato questo pezzo di codice qui sotto. Non sono sicuro che sia stato codificato correttamente. Ho impostato

int MaxLong=5,MaxShort=5;

extern double Magic=10000;

extern int MaxOpenOrders=10;

quindi...

se (b<=MaxLong)

{trade

}

se (s<=MaxShort)

{trade

}

Ma l'EA sta ancora inviando il max buy e il max sell. Invece di contare quanti ordini ci sono di ciascuno e limitarsi al MaxLong e Short. So che ci deve essere qualcosa di sbagliato nel codice ma non riesco a vederlo.

Penso che tu stia complicando troppo le cose. Prova ad usare poche parti di codice più brevi invece di una grande funzione. Questo dovrebbe darti qualche suggerimento:

int totalOrders(int type)

{

int totalNumber = 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == type) totalNumber++;

}

return(totalNumber);

}

[/CODE]

AND HERE IS EXAMPLE HOW YOU CAN USE IT

[CODE]

int totalBuy = totalOrders(OP_BUY);

int totalSell = totalOrders(OP_SELL);

if( (totalBuy + totalSell) < MaxOpenOrders)/*TOTAL NUMBER OF ORDERS WASN'T REACHED*/

{

if(totalBuy <= MaxLongOrders)

{

//OPENING LONG IS PERMITED

}

if(totalSell <= MaxShortOrders)

{

//OPENING SHORT IS PERMITED

}

}

 

[Indicatore "SilverTrend_Signal"

Sono un principiante nel forex e nella programmazione di mql4. Ho un indicatore SilverTrend_Signal (che allego qui) e

voglio fare un EA da questo indicatore ma ho un problema con questo indicatore, il segnale può cambiare

nella stessa barra, come la freccia di segnale uptrend appaiono nel grafico poi può scomparire e forse

cambiare alla freccia del segnale di downtrend nella stessa barra. Qualcuno può aiutarmi a risolvere questo problema?

Uso questo indicatore nel periodo di tempo M1 e UE.

Grazie mille.

(Mi dispiace, il mio inglese non è abbastanza buono)

File:
 

La mia opinione personale è che dovresti stare lontano dall'uso di indicatori che ridipingono i segnali. Specialmente sul grafico M1. I segnali cambieranno troppo spesso. Stai solo chiedendo segnali non stabili e problemi. La storia passata sembra buona perché è il passato.

 
willya:
Sono un principiante nel forex e nella programmazione di mql4. Ho un indicatore SilverTrend_Signal (che allego qui) e

Voglio fare un EA da questo indicatore ma ho un problema con questo indicatore, il segnale può cambiare

nella stessa barra, come la freccia di segnale uptrend appaiono nel grafico poi può scomparire e forse

cambiare alla freccia del segnale di downtrend nella stessa barra. Qualcuno può aiutarmi a risolvere questo problema?

Uso questo indicatore nel periodo di tempo M1 e UE.

Grazie mille.

(Mi dispiace, il mio inglese non è abbastanza buono)

Non sono sicuro di come questo si ridisegni, ma se lo fa SOLO sulla barra corrente, allora usare il segnale alla chiusura della barra (confermata) andrà bene.

Se ridisegna più della barra corrente, allora puoi dimenticarti di usare il suo segnale per un EA.

FerruFx

Motivazione: