Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Guarda questo thread: https://www.mql5.com/en/forum/178677
Guarda questo thread: https://www.mql5.com/en/forum/178677
davvero grazie, per le istruzioni di apertura del file e il link di download
10punti3
PLEAASEEE, PROGRAMMATORI!
Abbiamo bisogno in 10points3 EA, che quando il terzo trade si apre, il primo si chiude, ci sto provando ma sta ancora chiudendo tutte le posizioni.
In realtà abbiamo:
if (PreviousOpenOrders>OpenOrders)
{
for(cnt=OrdiniTotali();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode=OrderType();
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
if (mode==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),slippage,Blue); }
se (mode==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),slippage,Red); }
return(0);
}
Stavo pensando di fare così
1. cambiare il numero magico per la prima operazione quando si apre la seconda, per esempio magicnumber+1
2. quando si apre il terzo trade, chiudere il primo, con il magicnumber+1 assegnato.
Ho ragione?
o in quale altro modo posso identificare il primo trade aperto per chiuderlo in seguito?
Se potete guidarmi o fare le modifiche, meglio perché non sono un programmatore, sto solo imparando.
Questa modifica sarebbe l'inizio del Santo Graal!!!
10punti3
Scusa, l'EA.
Ed è in questo thread:
https://www.mql5.com/en/forum/174975
Grazie!
aiuto di programmazione - operatore di ritorno
ciao
sono un principiante della programmazione mt4 e ora spesso cerco di trovare una soluzione per commettere le variabili da una funzione void al programma principale "start()".
qui sotto potete vedere un esempio e la domanda è, come posso commettere il valore dalla variabile "CountOpenSell", "CountOpenBuy", "ProfitSell " e "ProfitBuy" alla funzione start() - mainprogram.........
Ho aggiunto il mio suggerimento (ritorno in GRASSETTO) ma non so se è corretto e come è il codice giusto per il programma principale "start()"?
scusa per il mio cattivo inglese e per tutto l'aiuto
grazie mille
saluti
forex2006
void CallBuySellProfit()
{ ProfitBuy=0;
ProfitSell=0;
CountOpenSell=0;
CountOpenBuy=0;
for (i=OrdersTotal()-1;i>=0;i--)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderType()==OP_SELL) {ProfitSell = ProfitSell + OrderProfit();CountOpenSell++;}
if (OrderType()==OP_BUY) {ProfitBuy = ProfitBuy + OrderProfit();CountOpenBuy++;}
}
else Print("Errore durante la selezione dell'ordine", GetLastError());
}
return(CountOpenSell);
return(CountOpenBuy);
return(ProfitSell);
return(ProfitBuy);
}
aiuto programmazione forex2006 - operatore di ritorno
Ciao forex2006,
Se vuoi davvero imparare mql, ti consiglio di provare i tutorial di codersguru, è da lì che ho iniziato. Per quanto riguarda la tua domanda, una funzione void non può restituire un valore, se vuoi ottenere valori dalle funzioni void, devi usare le variabili globali. Il modo migliore per far uscire i valori è usare una funzione che restituisce un valore usato con parametri per indicare quali valori volete. C'è un semplice esempio qui sotto. Cercate di evitare di usare le variabili globali nelle funzioni perché questo potrebbe rendervi le cose difficili in seguito.
Spero che sia d'aiuto
int start()
{
double ProfitBuy = CallBuySellProfit(OP_BUY,false);
double ProfitSell = CallBuySellProfit(OP_SELL,false);
int CountOpenBuy = CallBuySellProfit(OP_BUY,true);
int CountOpenSell = CallBuySellProfit(OP_SELL,true);
Comment("ProfitBuy: "+DoubleToStr(ProfitBuy,2) +"\n "+
"ProfitSell: "+DoubleToStr(ProfitSell,2) +"\n "+
"CountOpenBuy: "+DoubleToStr(CountOpenBuy,2)+"\n "+
"CountOpenSell: "+DoubleToStr(CountOpenSell,2)+"\n "+
"");
ritorno;
}
double CallBuySellProfit(int iOrderType, bool bCount)
{
double dProfit = 0;
int iCount = 0;
for (int i=OrdiniTotali()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==iOrderType)
{
dProfit = dProfit + OrderProfit();
iCount++;
}
}
else
{
Print("Errore durante la selezione dell'ordine", GetLastError());
}
}//fine per
if(bCount)return(iCount);
else return(dProfit);
}//end CallBuySellProfit
Fermare il trading dell'EA sulla stessa barra
Ciao, c'è modo di mettere del codice in modo che l'EA controlli se i trade sono già stati piazzati su quella barra e poi non piazzi più trade fino ad una nuova barra?
Grazie per l'aiuto.
matrixebiz, hai considerato la possibilità che un trade si apra e si chiuda nella stessa candela prima che questa si sia chiusa? probabilmente dovresti controllare anche la lista della cronologia.
Ho sempre portato questa piccola funzione che ho scritto in tutti i miei EA, forse la puoi trovare utile anche tu.
bool DecideToOpenTrade()
{
int total = OrdersTotal();
if (total > 0)
{
for(int cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == EA_MAGIC_NUM)
{
return (false);
}
}
}
}
// in case trades has already opened and closed within the candle
int histotal = OrdersHistoryTotal();
if (histotal > 0)
{
for(cnt=0;cnt<histotal;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == EA_MAGIC_NUM)
{
if (Time[0] <= OrderOpenTime()) // don't open a new position if we're still on the same candle
{
return (false);
}
}
}
}
}
return (true);
}
int start()
{
// some time check codes first.. blah blah
// ...
// ...
// ...
// check signals
if (Should_Buy())
{
if (DecideToOpenTrade())
{
//... trade opening codes here
}
}
if (Should_Sell())
{
if (DecideToOpenTrade())
{
//... trade opening codes here
}
}
}
nota: questa funzione presuppone che tu abbia impostato un valore unico a EA_MAGIC_NUM. In questo modo il controllo non guarderà i trade aperti da altri EA.
Should_Buy() e Should_Sell() sono funzioni che creo in tutti i miei EA per determinare se si è verificato un segnale di acquisto o di vendita.
Spero che questo aiuti. Scrivimi un PM se hai bisogno di ulteriori chiarimenti.
saluti,
Zen
post aggiornato qui sotto...
Questo sembra funzionare per me Grazie
void DesideToOpen()
//----------------------------------------------------------------+
//----------------------------------------------------------------+
{
int total = OrdersTotal();
if (total > 0)
{
for(int cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS))
{
if(OrderComment() == EA_Name + MagicNumber) DecideToOpenTrade = false;
}
}
}
// in case trades has already opened and closed within the candle
int histotal = OrdersHistoryTotal();
if (histotal > 0)
{
for(cnt=0;cnt<histotal;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderComment() == EA_Name + MagicNumber)
{
if (Time[0] <= OrderOpenTime()) DecideToOpenTrade = false; // don't open a new position if we're still on the same candle
}
}
}
}
}