Comprare/vendere EAs e indicatori - pagina 4

 
cifox:
Ciao Masters ......, Potresti aiutarmi a realizzare un EA per l'open buy o l'open sell a tempo...

Ho spostato il tuo post qui.

Leggi questo thread dal primo post e troverai alcuni EA.

 

Aprire solo un acquisto e una vendita al giorno!

Ciao ragazzi,

Ho un piccolo problema con il mio EA. Si basa sul movimento dei prezzi e durante un giorno apre più di una posizione. Voglio limitare questo ma non ho capito come posso fare.

Quello che voglio fare è qualcosa del genere:

Se durante il giorno corrente avete già aperto una posizione di acquisto, non aprite altre posizioni di acquisto. Ma se trovate un segnale di vendita, aprite un segnale di vendita. In questo caso, se dopo questo trovate un altro segnale di vendita non aprite altre posizioni di vendita.

Non so come scrivere questo e qual è la posizione giusta. Potete aiutarmi?

Grazie mille!!!

Saluti,

Mauro

EDIT:

In un altro topic ho trovato questo codice ma non so dove e come allegarlo:

if(OrderSelect(1, SELECT_BY_POS)==true)

{

if(TimeToStr(OrderOpenTime(),TIME_DATE ) != TimeToStr(CurTime(),TIME_DATE ))

{

//open new order

}

}
 

In questo topic non c'è niente di quello che sto cercando... questo topic parla di comprare e vendere allo stesso tempo....Ma quello di cui sto parlando è che se ho già aperto un ordine di acquisto il mio EA durante il giorno non ha aperto un nuovo ordine di acquisto. La stessa cosa se ha già aperto un ordine di vendita.

Ma se apre un ordine di acquisto, durante il giorno può aprire solo un ordine di vendita...seguendo le regole scritte sopra.

Esempio:

L'ora è: oggi

L'EA apre un ordine di acquisto.

La posizione raggiunge il TakeProfit o lo StopLoss, quindi viene chiusa.

Ora, l'EA può vedere un altro segnale di acquisto, ma visto che ha già aperto un ORDINE DI ACQUISTO nella volta precedente, non apre questo ordine.

Ora l'EA vede un segnale di VENDITA, e visto che non ha ancora aperto un ORDINE DI VENDITA, apre una posizione di VENDITA.

La posizione raggiunge il TakeProfit o lo StopLoss, quindi viene chiusa.

Ora, l'EA può vedere un altro segnale di vendita ma visto che ha già aperto un ORDINE DI VENDITA nella volta precedente, non apre questo ordine.

Questo è quello che sto cercando....

 

In questo caso avete bisogno di questi 2 fili:

https://www.mql5.com/en/forum/176322

https://www.mql5.com/en/forum/173026

 

Ok, grazie per la tua risposta NewDigital. Ora, penso che il mio codice sia questo:

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

ticket=OrderSend(....

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

[/CODE]

So, can you check if I have added this code in the right way on my code?Here it is

[CODE]if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "MaxPower Buy Order", MagicNumber, 0, DodgerBlue);

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

Il codice di cui sopra è solo per le posizioni di acquisto, quindi in questo modo dovrebbe aprire solo una posizione di acquisto. Se faccio la stessa cosa per il codice su SELL, dovrebbe aprire solo una posizione di vendita, giusto?

Grazie per il vostro aiuto.

Mauro

 

MMM... il Metaeditor dice che c'è un errore...

'\end_of_program' - unbalanced left parenthesis (259, 1)
 

Significa che questo

{[/CODE]

and

[CODE]}

è sbilanciato.

Controlla nel codice.

Mi dispiace, non sono un codificatore quindi non posso aiutare molto.

 

Ciao newdigital...sì, lo so per i pharentesis....ma ho controllato tutto il codice e i pharentesis sono equilibrati...

mmm.... Non capisco dove sia il problema....Comunque, continuerò a controllare...spero di trovare una soluzione!

Grazie a tutti...

Mauro

 

Per esempio questo:

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());
 

Il debugging di MT4 è una rottura di palle, ma se sei paziente puoi capire il problema.

La prima cosa che direi è che dove MT4 ti dice che il problema è... non lo è! La prossima cosa che farei è iniziare a tagliare grossi pezzi di codice nella complicata istruzione IF che molto probabilmente sta causando i problemi.

Per esempio se ho...

if(){

//second if

if(){

//third if

if(){

}

}

}

Taglierei via gli if 2 e 3 e lascerei solo l'if 1. Prova a compilare. Se compila hai ristretto il campo. Poi incollate di nuovo 2 & 3, poi tagliate fuori 3. Testate di nuovo. Continua a fare questo per qualche minuto e alla fine troverai il problema.

Buona fortuna.

LUx

Motivazione: