Aiuto per la codifica - pagina 395

 

L'EA non apre una contro posizione

Ciao MQL Coders,

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!

 
secretcode:
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

Grazie per qualsiasi aiuto

secretcode

secretcode

Ecco una versione con le bande aggiunte: ema_variation__filter_amp_bands_amp_mtf.ex4

 
mladen:
secretcode Ecco una versione con bande aggiunte: ema_variation__filter_amp_bands_amp_mtf.ex4

Grazie Mladen Apprezzo molto la tua competenza

Cordialmente

secretcode

 
tfi_markets:
Ciao MQL Coders,

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;

}

}

}

}

Grazie in anticipo!

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

File:
 
pgtips:
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.mq4

PG

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()

File:
objects.gif  49 kb
 

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

mladen:
PG

Funziona bene (vedi l'elenco degli oggetti creati). Controlla se ci sono prezzi sovrapposti (questo potrebbe causare l'invisibilità di alcune linee)

 
pgtips:
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,

PG

I 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

File:
signals.png  31 kb