![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Ciao codificatori,
Come codificare alcune linee extra in modo che un Esperto si fermi dopo un trade vincente?
I pip sono nella borsa, poi si ferma l'Esperto...
Grazie mille
Tomcat98Vedi sotto se hai qualche esperienza di codifica. Altrimenti, rivolgiti a un codificatore.
1) dopo ogni chiusura di trade, fate un ciclo in OrdersHistoryTotal() per controllare i trade.
2) controllare la chiusura dell'ultima operazione (OrderCloseTime()).
3) se l'ultima operazione, controllare OrderProfit() == profitto.
Se in profitto == true, impostare EndDayTrade == true && LastTradeDay == DayofYear().
Se in profitto == falso, impostare EndDayTrade == falso.
4) Quando il programma passa attraverso start(), dovrete inserire ==> if EndDayTrade == false prima di iniziare qualsiasi nuovo trade. Dato che è vero, allora non farà partire nuovi trade.
5) avrete bisogno di una funzione timer per controllare il nuovo giorno. (supponendo che il nuovo giorno sia quello che volete far scattare le nuove compravendite)
La forma più semplice sarebbe if (LastDay != DayofYear() ).
6) all'interno della funzione timer di cui sopra, impostare LastDay = DayofYear().
if ( LastTradeDay != DayofYear() && EndDayTrade == true)
impostare EndDayTrade == false, che ricomincia tutto da capo.
variabili definite dall'utente
bool EndDayTrade = false;
int LastTradeDay = 9999999;
int LastDay = 999999;
Spero che questa spiegazione sia abbastanza chiara.
Ciao,
Sto cercando di unire questi due codici ma ho dei problemi.
Ho bisogno che quando un ordine pendente è riempito l'altro deve essere cancellato.
Grazie per la vostra disponibilità
int pending =0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() !=Symbol()) continue;
if(OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
opened++;
else pending++;
}
if (opened>0 && pending>0)
{
for(i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() !=Symbol()) continue;
if(OrderMagicNumber()!=Magic) continue;
if(OrderType()!=OP_BUY && OrderType()!=OP_SELL)
OrderDelete(OrderTicket());
}
} [/PHP]
[PHP] extern int Magic = 68415;
extern int Orario_Inizio = 0;
extern int Orario_Fine = 6;
extern int Buffer = 0;
extern double Lotti = 0.1;
extern int TakeProfit = 10;
extern int StopLoss = 50;
double Massimo;
double Minimo;
int BarCount;
int BarStart;
int BarShift;
double MinLot;
double LotSize;
int i;
int ticket;
string Status;
string BuyStatus1;
string SellStatus1;
double Range;
string CommentoRange;
double pipMultiplier = 1;
int init()
{
}
int start()
{
if (Digits==3 || Digits==5)
{pipMultiplier = 10;}
else {pipMultiplier = 1; }
double TakeProfit1 = TakeProfit*Point*pipMultiplier;
double StopLoss1 = StopLoss*Point*pipMultiplier;
double Buffer1 = Buffer*Point*pipMultiplier;
double StopLossPrice = NormalizeDouble(StopLoss1,Digits);
double TakeProfitPrice = NormalizeDouble(TakeProfit1,Digits);
double BufferPrice = NormalizeDouble(Buffer1,Digits);
//CALCOLA LE BARRE DEL RANGE
if(Orario_Inizio>Orario_Fine)
{
BarCount=24+Orario_Fine-Orario_Inizio;
}
if(Orario_Inizio<Orario_Fine)
{
BarCount=Orario_Fine-Orario_Inizio;
}
//CALCOLA IL MASSIMO E IL MINIMO DEL RANGE
if(Hour()>=Orario_Fine)
{
BarStart=Hour()-Orario_Fine;
BarShift=BarStart+BarCount;
Minimo=iLow(NULL,PERIOD_H1,BarStart);
Massimo=0;
for(i=BarStart;i<=BarShift;i++)
{
Massimo=MathMax(Massimo,iHigh(NULL,PERIOD_H1,i));
Minimo=MathMin(Minimo,iLow(NULL,PERIOD_H1,i));
Range=(Massimo-Minimo)/Point;
}
}
else
{
Massimo=0;
Minimo=0;
return(0);
}
//CONTROLLA SE E' L'ORARIO PER POTER TRADARE
if(Hour()==Orario_Fine && OrdersTotal()<2)
{
//CONTROLLA SE IL MASSIMO E' STATO ROTTO. CONDIZIONE BUY
double OpenPriceBuy = NormalizeDouble((Massimo+BufferPrice),Digits);
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lotti,OpenPriceBuy,0,OpenPriceBuy-StopLossPrice,OpenPriceBuy+TakeProfitPrice,NULL,Magic,0,Blue);
//CONTROLLA SE IL MINIMO E' STATO ROTTO. CONDIZIONE SELL
double OpenPriceSell = NormalizeDouble((Minimo-BufferPrice),Digits);
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lotti,OpenPriceSell,0,OpenPriceSell+StopLossPrice,OpenPriceSell-TakeProfitPrice,NULL,Magic,0,Red);
if (ticket != -1)
return(0);
}
}Qualcuno può aiutare?![](https://c.mql5.com/forextsd/smiles/angel_smile.png)
dasio
Prova a mettere tutto quel codice all'inizio della procedura start(). Probabilmente dovrai filtrare un po' di più il modo in cui stai aprendo gli ordini pendenti, ma se metti quel codice all'inizio ripulirà gli ordini pendenti se qualcuno degli ordini pendenti aperti prima diventa un ordine "regolare".
Qualcuno può aiutare?
Ciao,
sto imparando molto da questo thread ed è per questo che continuo a fare domande.
Ora. Provo a farlo da solo ma non ho successo.
Premessa: voglio usare questo indicatore in un grafico renko offline.
Il mio scopo è di tracciare sopra o sotto la candela Quanto tempo ha fatto la costruzione.
Quindi so che nella specifica della candela c'è il tempo in cui si è aperta. Così se faccio il tempo della candela corrente meno la candela del precedente ho quello che ho bisogno.
Quindi come posso codificarlo?
Grazie mille
Non riesco a capire perché questo codice sta cercando di modificare gli ordini chiusi
Ho aggiunto OrderCloseTime() a entrambe le istruzioni if pensando che questo avrebbe messo fine a questo ticket non valido per l'errore della funzione ordermodify, ma ogni tanto il mio EA perderà il controllo di tutti gli ordini e in qualche modo si mischierà con un ordine chiuso e cercherà continuamente di modificarlo più e più volte creando enormi file di log e non continuerà il trading a meno che non riavvii l'MT4. Non sono esattamente sicuro di come stia raccogliendo un ordine chiuso, forse mentre sta modificando tutti gli ordini uno di essi si chiude in quel breve lasso di tempo e lo manda fuori strada? Come ho detto questo accadrà forse due volte su 30-50 operazioni al giorno.
Qualcuno ha qualche idea su come porre fine a questo?
if (flag_s3 == TRUE) {
for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {
OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);
//===
while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))
{Sleep(1000);RefreshRates();}
//===
NewOrdersPlaced_s3 = FALSE;
}
}Problemi di segnale
mladen
Per favore, voglio ospitare uno script che invierà avvisi di trading a più destinatari, come centinaia di loro, come posso farlo... Ci sono aziende che possono gestire questo che tu o qualcuno su questo forum conosce.
Mladen Grazie, ho guardato da vicino....Im ancora sperimentando il codice.
...
2 pensieri :
1. Se hai intenzione di inviarlo, allora penso che l'unico modo ragionevole sia l'invio di posta e in questo caso perché non usi semplicemente uno dei programmi di spamming e-mail che sono là fuori in libertà?
2. Inviare segnali ha troppi problemi (questa è la mia opinione, alcuni dei problemi dell'invio sono praticamente irrisolvibili). Quindi perché non invertire la logica: invece di inviare, fare un codice che sarà la lettura (con nome utente, pass, e così via ...) da una data posizione e in questo modo si hanno quasi tutti i problemi che l'invio non può risolvere, risolto (compresa la prevenzione di utilizzo da più IP allo stesso tempo)
Quindi, solo alcuni pensieri ...
mladen Grazie mille il codice ora funziona.L'avviso non si ripete più.Per favore voglio ospitare uno script che sarà l'invio di avvisi di trading a più destinatari, come centinaia di loro, come posso fare che ... Ci sono aziende che possono gestire che voi o qualcuno su questo forum sapere.
Provate qualcosa del genere:
#define PAUSE_BEFORE_RETRY 1000
#define NumberOfReTries 3
if (NewOrdersPlaced_s3 && flag_s3 == TRUE)
{
for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--)
{
if (!OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != MagicNumber_3) continue;
for (int retry=0; retry<NumberOfReTries; retry++)
{
OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);
int error = GetLastError();
switch (error)
{
case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
Sleep(PAUSE_BEFORE_RETRY);
continue;
case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
continue;
default:
retry=NumberOfReTries;
}
}
NewOrdersPlaced_s3 = FALSE;
}
}Ho aggiunto OrderCloseTime() a entrambe le istruzioni if pensando che questo avrebbe messo fine a questo ticket non valido per l'errore della funzione ordermodify, ma ogni tanto il mio EA perderà il controllo di tutti gli ordini e in qualche modo si mischierà con un ordine chiuso e cercherà continuamente di modificarlo più e più volte creando enormi file di log e non continuerà il trading a meno che non riavvii la MT4. Non sono esattamente sicuro di come stia raccogliendo un ordine chiuso, forse mentre è nel processo di modifica di tutti gli ordini uno di essi si chiude in quel breve tempo e lo manda fuori strada? Come ho detto questo accadrà forse due volte su 30-50 operazioni al giorno.
Qualcuno ha qualche idea su come porre fine a questo?
if (flag_s3 == TRUE) {
for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {
OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);
//===
while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))
{Sleep(1000);RefreshRates();}
//===
NewOrdersPlaced_s3 = FALSE;
}
}Soluzioni di allerta
Penso di aver bisogno di ulteriori spiegazioni su questo, puoi solo darmi un suggerimento su come scrivere e impostare un codice che mi aiuterà a inviare l'avviso a tutti i miei clienti allo stesso tempo.è memorizzando il loro indirizzo e-mail nel database..... ma come sarà il linguaggio del server, ad esempio, script php, raccogliere gli avvisi dalla piattaforma mt4 automaticamente? ......Penso che questo sia il problema, se ci può essere un modo, può essere inviato a più telefoni cellulari o indirizzo e-mail.il tuo consiglio, per favore?
2 pensieri :
1. Se hai intenzione di inviarlo, allora penso che l'unico modo ragionevole sia l'invio di posta e in questo caso perché non usi semplicemente uno dei programmi di spamming e-mail che sono là fuori in libertà?
2. Inviare segnali ha troppi problemi (questa è la mia opinione, alcuni dei problemi dell'invio sono praticamente irrisolvibili). Allora perché non invertire la logica: invece di inviare, fare un codice che sarà la lettura (con nome utente, pass, e così via ...) da una data posizione e in questo modo si hanno quasi tutti i problemi che l'invio non può risolvere, risolto (compresa la prevenzione di utilizzo da più IP allo stesso tempo)
Quindi, solo alcuni pensieri ...Mastercash
Prova a cercare su Google "inviare email di massa" e penso che troverai una risposta per questo
Per quanto riguarda la "raccolta degli avvisi": devi avere qualcosa che lo"esporti" in qualche formato leggibile che sarà poi riconosciuto da un software di tua scelta che distribuirà i segnali o permetterà l'accesso a quel segnale
PS: i servizi di segnalazione sono molto più complessi di quanto sembri a prima vista e, se hai intenzione di farne uno, puoi contare su costi sostanziali per farlo funzionare come dovrebbe
Penso di aver bisogno di più spiegazioni su questo, puoi solo darmi un suggerimento su come scrivere e impostare un codice che mi aiuterà a inviare l'avviso a tutti i miei clienti allo stesso tempo.è memorizzando il loro indirizzo e-mail nel database..... ma come sarà il linguaggio del server, ad esempio, script php, raccogliere gli avvisi dalla piattaforma mt4 automaticamente? ......Penso che questo sia il problema, se ci può essere un modo, può essere inviato a più telefoni cellulari o indirizzo e-mail.il tuo consiglio, per favore?