![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
L'EA non apre una contro posizione
Ho una domanda riguardante un bug nel mio EA. Sembra non aprire una posizione di controtendenza (vedi screenshot allegato).
Sta chiudendo il trade, ma non apre un nuovo trade per seguire la nuova direzione di trend data.
// Indicator HMA NMC
double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
//+------------------------------------------------------------------+
//| BUY |
//+------------------------------------------------------------------+
if(trendc!=trendp)
{
if(trendc==1) // code for buy
OpenBuy();
return(0);
}
//+------------------------------------------------------------------+
//| SELL |
//+------------------------------------------------------------------+
if(trendc==-1) // code for sell
{
OpenSell();
return(0);
}
}
[/CODE]
[CODE]
void CheckForClose()
{
RefreshRates();
double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
for(int i=0;i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!= MAGIC) continue;
if(OrderSymbol() != s_symbol) continue;
//+-------------------------------------------------------------------------------+
//| Close BUY |
//+-------------------------------------------------------------------------------+
if(trendc_c!=trendp_c) // Check trend
{
if(OrderType()==OP_BUY)
{
if(trendc_c==-1) //is buy?
{
bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy);
if(buyClose==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts == true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
//+--------------------------------------------------------------------------------+
//| Close SELL |
//+--------------------------------------------------------------------------------+
if(trendc_c!=trendp_c)
{
if(OrderType()==OP_SELL)
{
if(trendc_c==1) // SELL
{
bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell);
if(sellClose == false)
{
ErrorCode = GetLastError();
ErrDesc = ErrorDescription(ErrorCode);
ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
}
}
Grazie in anticipo!
Caro Mladen
È possibile 'aggiungere la banda' nell'indicatore allegato come in questo post: https: //www.mql5.com/en/forum/172894/page45
Quell'indicatore è della sezione elite, ma mi piace il modo in cui si aggiunge la banda su di esso![](https://c.mql5.com/forextsd/smiles/smile.png)
Grazie per qualsiasi aiuto
secretcodesecretcode
Ecco una versione con le bande aggiunte: ema_variation__filter_amp_bands_amp_mtf.ex4
secretcode Ecco una versione con bande aggiunte: ema_variation__filter_amp_bands_amp_mtf.ex4
Grazie Mladen
Apprezzo molto la tua competenza
Cordialmente
secretcode
Ho una domanda riguardante un bug nel mio EA. Sembra che non apra una posizione in controtendenza (vedi screenshot allegato).
Sta chiudendo il trade, ma non apre un nuovo trade per seguire la nuova direzione di trend data.
// Indicator HMA NMC
double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
//+------------------------------------------------------------------+
//| BUY |
//+------------------------------------------------------------------+
if(trendc!=trendp)
{
if(trendc==1) // code for buy
OpenBuy();
return(0);
}
//+------------------------------------------------------------------+
//| SELL |
//+------------------------------------------------------------------+
if(trendc==-1) // code for sell
{
OpenSell();
return(0);
}
}
[/CODE]
[CODE]
void CheckForClose()
{
RefreshRates();
double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
for(int i=0;i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!= MAGIC) continue;
if(OrderSymbol() != s_symbol) continue;
//+-------------------------------------------------------------------------------+
//| Close BUY |
//+-------------------------------------------------------------------------------+
if(trendc_c!=trendp_c) // Check trend
{
if(OrderType()==OP_BUY)
{
if(trendc_c==-1) //is buy?
{
bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy);
if(buyClose==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts == true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
//+--------------------------------------------------------------------------------+
//| Close SELL |
//+--------------------------------------------------------------------------------+
if(trendc_c!=trendp_c)
{
if(OrderType()==OP_SELL)
{
if(trendc_c==1) // SELL
{
bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell);
if(sellClose == false)
{
ErrorCode = GetLastError();
ErrDesc = ErrorDescription(ErrorCode);
ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
}
}
tfi_mercati
Prova a spostare entrambe le dichiarazioni di interruzione di una riga verso l'alto (per essere all'interno del "}" )
Ciao Mladen,
saresti così gentile da dirmi dove ho sbagliato con questo codice.
L'indicatore allegato All Pivots, l'ho rielaborato per mostrare anche la linea di apertura del giorno precedente, la linea di chiusura del giorno precedente e la linea di apertura del giorno corrente.
Ma l'indicatore è incoerente. Mostra sempre correttamente i pivot ma raramente, se non del tutto, mostra il mio codice aggiunto per le linee di apertura, chiusura e apertura del giorno precedente.
Non capisco perché, il codice sembra lo stesso del codice pivot quindi dovrebbe mostrare tutto e a volte lo fa ma non sempre. Ho fatto qualcosa di sbagliato ma non sono sicuro di cosa.
Molte grazie
PG
allpivots_daily.mq4
Ciao Mladen,
sareste così gentili da dirmi dove ho sbagliato con questo codice.
L'indicatore allegato All Pivots, l'ho rielaborato per mostrare anche la linea di apertura del giorno precedente, la linea di chiusura del giorno precedente e la linea di apertura del giorno corrente.
Ma l'indicatore è incoerente. Mostra sempre correttamente i pivot ma raramente, se non del tutto, mostra il mio codice aggiunto per le linee di apertura, chiusura e apertura del giorno precedente.
Non capisco perché, il codice sembra lo stesso del codice pivot quindi dovrebbe mostrare tutto e a volte lo fa ma non sempre. Ho fatto qualcosa di sbagliato ma non sono sicuro di cosa.
Molte grazie
PG
allpivots_daily.mq4PG
Funziona bene (vedi la lista degli oggetti creati). Controlla se ci sono prezzi sovrapposti (ciò potrebbe causare l'invisibilità di alcune linee)
Inoltre, non dimenticare di aggiungere le linee appena create anche nella funzione ObjectDel()
Grazie Mladen, ho continuato a controllare e sembra essere schizzinoso sui nomi delle linee dentro il "" che non è quello che mi aspetto.
Come sempre grazie per il tuo tempo e il tuo aiuto,
PG
PG
Funziona bene (vedi l'elenco degli oggetti creati). Controlla se ci sono prezzi sovrapposti (questo potrebbe causare l'invisibilità di alcune linee)
Grazie Mladen, ho continuato a controllare e sembra essere schizzinoso sui nomi delle linee all'interno del "" che non è quello che mi aspetto.
Come sempre grazie per il tuo tempo e il tuo aiuto,
PGI nomi degli oggetti devono sempre essere unici - ma per quanto ho visto te ne sei occupato
Per favore aiutatemi per questo https://www.mql5.com/en/forum/174385/page263
Grazie, Mladen,
Ho un problema ed è che :
il mio primo segnale di acquisto dopo l'ultima vendita, ho bisogno che sia dopo la barra chiusa sopra la resistenza o "srUp" del codice
lo stesso per la vendita, deve essere la barra chiusa sotto il supporto o "srDown".
Come potrei risolvere questo nel codice?
E in secondo luogo, era il numero uno precedentemente chiesto, è come potrei fissare nel mio codice per mostrare il primo segnale di acquisto dopo la vendita in colore diverso?
#proprietà strict
#proprietà indicator_chart_window
#proprietà indicatore_buffer 4
#proprietà indicatore_colore1 clrLime
#proprietà indicator_color2 clrRed
#proprietà indicatore_colore3 clrMagenta
#proprietà indicatore_colore4 clrCyan
#define COMPRA 1
#define VENDERE 2
doppio Buy[],
Vendere[],
FirstBuy[],
FirstSell[];
int OnInit() {
SetIndexBuffer(0,FirstBuy);
SetIndexBuffer(1,FirstSell);
SetIndexBuffer(2,Buy);
SetIndexBuffer(3,Vendere);
for(int i=0; i<4; i++) {
SetIndexStyle (i,DRAW_ARROW,STYLE_SOLID,2);}
SetIndexArrow (0,233);
SetIndexArrow (1,234);
SetIndexArrow (2,233);
SetIndexArrow (3,234);
return(INIT_SUCCEED);}
void OnDeinit(const int reason) {}
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[]
const double &open[], const double &high[], const double &low[]
const double &close[], const long &tick_volume[], const long &volume[],
const int &spread[]) {
int statico lastSignal=0;
for(int i=MathMin(rates_total-prev_calculated, rates_total-1); i>=0; i--) {
FirstBuy=FirstSell=Buy=Sell=EMPTY_VALUE;
datetime when=Time;
int w=iBarShift(NULL,PERIOD_H4, when),
x=iBarShift(NULL,PERIOD_H1, when),
y=iBarShift(NULL,PERIOD_M15, when),
z=iBarShift(NULL,PERIOD_M5, when);
double srUpH4 = iCustom(NULL,PERIOD_H4, "Supporto e Resistenza (Barry)",0,w),
srDownH4 = iCustom(NULL,PERIOD_H4, "Supporto e resistenza (Barry)",1,w),
MidH4 = (srUpH4+srDownH4)/2,
srUpH1 = iCustom(NULL,PERIOD_H1, "Supporto e Resistenza (Barry)",0,x),
srDownH1 = iCustom(NULL,PERIOD_H1, "Supporto e resistenza (Barry)",1,x),
MidH1 = (srUpH1+srDownH1)/2,
srUp15M = iCustom(NULL,PERIOD_M15, "Supporto e resistenza (Barry)",0,y),
srDown15M = iCustom(NULL,PERIOD_M15, "Supporto e resistenza (Barry)",1,y),
Mid15M = (srUp15M+srDown15M)/2,
srUp5M = iCustom(NULL,PERIOD_M5, "Supporto e resistenza (Barry)",0,z),
srDown5M = iCustom(NULL,PERIOD_M5, "Supporto e resistenza (Barry)",1,z),
Mid5M = (srUp5M+srDown5M)/2,
srUp = iCustom(NULL,0, "Supporto e Resistenza (Barry)",0,i),
srDown = iCustom(NULL,0, "Supporto e Resistenza (Barry)",1,i);
if(ClosesrUp) { // primo segnale buy
Buy=Low-_Point; }
altrimenti {
Buy=EMPTY_VALUE; }
if(Close>Mid5M && Close>srUp) { // secondo segnale buy
Compra=Basso_Punto; }
else {
Compra=EMPTY_VALUE; }
if(Close>MidH4 && Close>Mid15M && Close<srDown) { // primo segnale vendere
Sell=High+_Point; }
else {
Sell=EMPTY_VALUE; }
if(Close<Mid5M && Close<srDown) { // secondo segnale vendere
Vendere=Alto+_Punto; }
else {
Vendi=EMPTY_VALUE; }}
return(rates_total);}
questo è quello che ho per gli avvisi, devo usarlo o invece usare Alert( t("testo per il pop up"))?
void SoundAlert(datetime i, string dir) {
static datetime lastAlert=0;
if(lastAlert!=i) {
Alert(StringFormat("%s signal on %s at %s",dir,Symbol(),TimeToStr(i));
lastAlert=i;}}
grazie mladen