Come codificare? - pagina 58

 

Pensavo di aver risolto il problema, ma non è così.

Quello che sto cercando di fare è avere un commento sul grafico e nel diario che indichi quale condizione di entrata è stata usata per aprire la posizione corrente.

Questo è stato fatto prima e come si fa, perché ci sto provando da un po' ma senza fortuna e non è così facile come pensavo.

Di seguito il mio ultimo tentativo.

qualsiasi aiuto sarebbe grande

buysig = Long || Long2 || Long3 || Long4;

sellsig = Short || Short2 || Short3 || Short4;

closebuy=sellsig;

closesell=buysig;

se (curprof>=AccountEquity()*ProfitExit/100.0) {

exit=true;

}

if (last>0 && (Time[0]-last)/(Period()*60)>=CancelOrderBars) {

remorder=true;

}

}

void CheckForOpen() {

int res,tr;

//---- condizioni di vendita

co=CalculateCurrentOrders(Symbol());

if(sellsig && lastsig!=-1) {

if ( Short == true)Print(" Segnale short preso ");

if ( Short2 == true)Print(" Segnale Short2 preso ");

if ( Short3 == true)Print(" Segnale Short3 preso ");

if ( Short4 == true)Print(" Segnale Short4 preso ");

co=CalculateCurrentOrders(Symbol());

se (co==0) {

res = OpenStop(OP_SELLSTOP,LotsRisk(StopLoss), Low[shift]-OrderPipsDiff*Point, StopLoss, TakeProfit1);

}

lastsig=-1;

last=Time[0];

ritorno;

}

//---- condizioni di acquisto

co=CalculateCurrentOrders(Symbol());

if(buysig && lastsig!=1) {

if ( Long == true) Print(" Segnale Long preso ");

if ( Long2 == true)Print(" Segnale Long2 preso ");

if ( Long3 == true) Print(" Segnale Long3 preso ");

if ( Long4 == true)Print(" Segnale Long4 preso ");

co=CalculateCurrentOrders(Symbol());

se (co==0) {

res = OpenStop(OP_BUYSTOP,LotsRisk(StopLoss), High[shift]+OrderPipsDiff*Point, StopLoss, TakeProfit1);

}

last=Time[0];

lastsig=1;

ritorno;

}

}

bool CloseAtMarket(int ticket,double lot) {

//chiusura dell'ordine a mercato tollerante ai guasti

bool bres=false; int tr;

tries=0;

while (!bres && tries<OrderTriesNumber) {

RefreshRates();

bres=OrderClose(ticket,lot,OrderClosePrice(),slippage,White);

tries++;

tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }

}

if (!bres) Print("Errore nella chiusura dell'ordine: ",ErrorDescription(GetLastError());

}

int OpenStop(int mode,double lot, double prc, int SL, int TP) {

int res,tr,col;

stringa mail;

double openprice,sl,tp,stlev;

tries=0;

stlev=(1+MarketInfo(Symbol(),MODE_STOPLEVEL))*Point;

while (res<=0 && tries<OrderTriesNumber) {

tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }

RefreshRates();

se (mode==OP_SELLSTOP) {

if (prc<=Bid-stlev) openprice=prc;

altrimenti openprice=Bid-stlev;

se (SL>0) sl=openprice+SL*Point;

se (TP>0) tp=openprice-TP*Point;

col=Rosso;

} else

se (mode==OP_BUYSTOP) {

se (prc>=Ask+stlev) openprice=prc;

altrimenti openprice=Ask+stlev;

se (SL>0) sl=openprice-SL*Point;

se (TP>0) tp=openprice+TP*Point;

col=Blu;

} else return;

Print(Ask," ",Bid," ",Symbol()," ",mode," ",lot," ",openprice," ",sl," ",tp," ");

res=OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,EAName+"_"+ MagicNumber, MagicNumber,0,col);

try++;

}

if (res<=0) Print("Errore nell'apertura dell'ordine pendente: ",ErrorDescription(GetLastError());

return(res);

 

Questo EA non si compila nemmeno, lo stoploss dovrebbe essere l'ultima delle tue preoccupazioni. Ci sono 5 variabili che hanno spazi casuali o la prima lettera non è maiuscola!

 
jturns23:
Questo EA non si compila nemmeno, lo stoploss dovrebbe essere l'ultima delle vostre preoccupazioni. Ci sono 5 variabili che hanno spazi casuali o la prima lettera non è maiuscola!

Qui la versione corretta.

Ma questo ancora non può aprire alcuna posizione perché non c'è una logica nel codice per decidere come aprire posizioni lunghe / corte.

 
 

Aiuto con questo EA

Michel:
Chi è questo CHinGsMAroonCLK?

Come ricordo, questo EA non è altro che 10p3 di elCactus, ma forse mi sbaglio...

Controlla il suo thread, probabilmente troverai quello che stai cercando: https://www.mql5.com/en/forum/174975

Ok... quindi ora il problema è che non riesco a mettere uno stoploss per questo EA... qual è il codice? mi può aiutare? thanx

 

nessuna zona di trading - aiuto codice

Ciao a tutti,

Sto cercando di modificare un codice ma dopo molti sforzi non sono ancora riuscito a farlo bene... se a qualcuno di voi non dispiace, potete dare un'occhiata a questo... grazie...

L'idea è quella di fermare il prossimo commercio se l'intervallo di prezzo è nella stessa zona come il commercio precedente. Il commercio lungo controllerà la zona per l'ultima POSIZIONE APERTA commercio lungo, e il commercio breve controllerà la zona per l'ultima POSIZIONE APERTA commercio breve.

Cioè, se il primo LONG a 1,4000, allora il secondo LONG si innescherà solo se il prezzo esce dalla zona (zona di 20 pip) meno di 1,3990 && più di 1,4010

Grazie a tutti.

//+------------------------------------------------------------------------------------------------------------------------+

//| Filtro per il mercato laterale - impedisce scambi multipli in un range di prezzo simile e crea una no-trade zone

//+------------------------------------------------------------------------------------------------------------------------+

extern int Zone1 = -10; // (zona inferiore)

extern int Zone2 = 10; // (zona superiore)

// zona di non scambio tra -10 e +10 dalla negoziazione precedente

bool CheckZone(int type)

{

int cnt = OrdiniTotali();

for (int i=0; i < cnt; i++)

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continua;

se (OrderSymbol() != Symbol()) continua;

se (OrderMagicNumber() != Magic) continua;

se (OrderType() != tipo) continua;

se (tipo == OP_BUY)

{

if( (Bid - OrderOpenPrice()) > Zone1*Point && (Bid - OrderOpenPrice()) < Zone2*Point ) return(false);

}

se (tipo == OP_SELL)

{

if( (OrderOpenPrice()-Ask) > Zone1*Point && (OrderOpenPrice()-Ask) < Zone2*Point ) return(false);

}

}

return (true);

}

 

Risolvere il problema EA

Salve a tutti i programmatori MQL,

Per favore controllate il seguente codice e ditemi perché questo non sta piazzando i trade sul mio conto demo. Il suo buon EA su GJ 1m ma purtroppo non funziona. Qualcuno può correggerlo per favore e renderlo utilizzabile come un EA senza bug.

Sono grato in anticipo!

Cordiali saluti.

//+------------------------------------------------------------------+

extern int Length1 = 3;

extern int Length2 = 10;

extern int Length3 = 16;

double Histo[];

double MaHisto[]

double up[];

double dn[];

double upMode[]

doppio dnMode[];

int alertBar;

int init()

{

return(0);

}

int deinit()

{

return(0);

}

int start()

{

int limite;

int counted_bars=IndicatorCounted();

if(counted_bars<0) counted_bars=0;

se(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(int i = 0 ;i <= limite ;i++)Histo = iMA(Symbol(),0,Length1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(Symbol(),0,Length2,0,MODE_EMA,PRICE_CLOSE,i);

for(int j = 0 ;j <= limite ;j++)MaHisto[j] = iMAOnArray(Histo,0,Length3,0,MODE_EMA,j);

for(int m = 0 ;m <= limite ;m++)

{

if(MaHisto[m+1] 0)

{

up[m] = Open[m]-(5*Point);

if(Bars > alertBar && m == 0)

{

//Alert(Symbol()+" "+Period()+" KI LONG ",Ask);

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,25,15,0,0,0,0,Red);

alertBar = Bars;

}

}

else if(MaHisto[m+1] >= 0 && MaHisto[m]< 0)

{

dn[m] = Open[m]+(5*Point);

if(Bars > alertBar && m == 0)

{

OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,0,Red);

alertBar = Bars;

}

}

else

{

up[m] = EMPTY_VALUE;

dn[m] = EMPTY_VALUE;

}

if( MaHisto[m] > 0 )

{

upMode[m] = High[m];

dnMode[m] = Low[m];

}

else if( MaHisto[m] < 0 )

{

dnMode[m] = High[m];

upMode[m] = Low[m];

}

}

return(0);

}

//+------------------------------------------------------------------+

 
arsenic786:
Salve a tutti i programmatori MQL,

Per favore controllate il seguente codice e ditemi perché questo non piazza i trade sul mio conto demo. Il suo buon EA su GJ 1m ma purtroppo non funziona. Qualcuno può correggerlo per favore e renderlo utilizzabile come un EA senza bug.

Sono grato in anticipo!

Cordiali saluti.

//+------------------------------------------------------------------+

extern int Length1 = 3;

extern int Length2 = 10;

extern int Length3 = 16;

double Histo[];

double MaHisto[]

double up[];

double dn[];

double upMode[]

doppio dnMode[];

int alertBar;

int init()

{

return(0);

}

int deinit()

{

return(0);

}

int start()

{

int limite;

int counted_bars=IndicatorCounted();

if(counted_bars<0) counted_bars=0;

se(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(int i = 0 ;i <= limite ;i++)Histo = iMA(Symbol(),0,Length1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(Symbol(),0,Length2,0,MODE_EMA,PRICE_CLOSE,i);

for(int j = 0 ;j <= limite ;j++)MaHisto[j] = iMAOnArray(Histo,0,Length3,0,MODE_EMA,j);

for(int m = 0 ;m <= limite ;m++)

{

if(MaHisto[m+1] 0)

{

up[m] = Open[m]-(5*Point);

if(Bars > alertBar && m == 0)

{

//Alert(Symbol()+" "+Period()+" KI LONG ",Ask);

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,25,15,0,0,0,0,Red);

alertBar = Bars;

}

}

else if(MaHisto[m+1] >= 0 && MaHisto[m]< 0)

{

dn[m] = Open[m]+(5*Point);

if(Bars > alertBar && m == 0)

{

OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,0,Red);

alertBar = Bars;

}

}

else

{

up[m] = EMPTY_VALUE;

dn[m] = EMPTY_VALUE;

}

if( MaHisto[m] > 0 )

{

upMode[m] = High[m];

dnMode[m] = Low[m];

}

else if( MaHisto[m] < 0 )

{

dnMode[m] = High[m];

upMode[m] = Low[m];

}

}

return(0);

}

//+------------------------------------------------------------------+

"OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,R ed); "

Stai vendendo al prezzo Ask, dovrebbe essere Bid.

Il campo Commento dovrebbe essere "", non 0.

25 come SL dovrebbe essere Bid+25*Point.

15 come TP dovrebbe essere Bid-15*Point.

"R ed" non è un colore.

 
Michel:
"OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,R ed); "

Stai vendendo al prezzo Ask, dovrebbe essere Bid.

Il campo Commento dovrebbe essere "", non 0.

25 come SL dovrebbe essere Bid+25*Point.

15 come TP dovrebbe essere Bid-15*Point.

"R ed" non è un colore.

Grazie mille per il vostro supporto!

Ma, sto ancora affrontando problemi zero conoscenza di MQL. Puoi per favore copiare il codice nel file mq4 e testarlo sulla demo e poi dirmi se funziona bene. Il tuo supporto sarà contato come gentile aiuto Michel.

I migliori saluti,

Kashif.

 

No, mi dispiace, non ho abbastanza tempo per ora.

In poche ore prendo una barca per tornare alla mia famiglia per Natale... e niente più pc...