Chiedete! - pagina 135

 
Kalenzo:
Beh, penso che tu stia complicando troppo le cose. Prova ad usare poche parti di codice più corte invece di una grande funzione. Questo dovrebbe darti qualche suggerimento:

Grazie per il vostro aiuto. Ho provato ad aggiungere il codice che hai detto, ma per dirti onestamente mi sono perso. Dopo aver aggiunto il codice, l'EA mostra una serie di problemi. Ho esaminato la sintassi, ma mi sono perso.

Ho anche una domanda sull'uso di funzioni all'interno della funzione int start(). È permesso? Le variabili inizializzate all'interno di una funzione non possono essere viste da altre funzioni?

Così

int start()

{

funzione( int x)

{

// Fare qualcosa

return(x)

}

// Fare qualcosa ... "Si può chiamare x nella funzione start()?

return0;

}

Ho allegato il mio sorgente EA. Il tuo aiuto è molto apprezzato.

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

//| CCCCCCCCIEA.mq4 aka 8xCIEA.mq4 |

//| By CuTzPR |

//|------------------------------------------------------------------+

#property copyright "CuTzPR@Forex-TSD"

//---- input parameters

extern double Risk_Percent=10;

extern bool Turned_On=true;

extern bool Allow_Risk=false;

extern bool TimeFilter=false;

extern double FromHourTrade=0; //Adjust for Broker GMT Time

extern double ToHourTrade=23; //Adjust for Broker GMT Time

extern double TP=20; // Take Profit Level

extern int MaxLong=5,MaxShort=5;

extern int MaxOpenOrders=10;

extern double Magic=10000;

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

//| expert start function |

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

int start()

{

int ticket;

double Lots;

bool Canopen,BlockTrade;

double Poin; // This variable was included to solve the problem where some brokers use 6 digit quotes instead of 5

static datetime timeprev; // Portion of coded was added to alloy only one trade per bar.

datetime CMT; //Close time of last trade

int total=OrdersTotal();

double Spread=Ask-Bid;

//This portion of code was added to only allow one trade per bar.

if(timeprev==Time[0])

{

return(0); //only execute on new bar

}

else if (timeprev==0)

{

timeprev=Time[0]; // do nothing if freshly added to chart

return(0);

}

else

{

timeprev=Time[0];

}

// End of alllow one trade per bar code

//*****Following code was added to control the Risk per trade.

if (Allow_Risk==true)

Lots=MathCeil(AccountFreeMargin() * Risk_Percent / 10000) / 10;

else Lots=0.1;

//End of Risk Code

//The following code was also included to solve the 6 digit broker quoting

if (Point == 0.00001) Poin = 0.0001; //6 digits

else if (Point == 0.001) Poin = 0.01; //3 digits (for Yen based pairs)

else Poin = Point; //Normal

//End Point Code

// Custom Functions

double cci=iCCI(NULL,PERIOD_M5,5,PRICE_TYPICAL,0);

double SATL=iCustom(NULL,PERIOD_H1,"$SATL",0,1);

// End of Custom Function

//Start of total count of open Long and Short Orders.

int totalOrders (totalBuy)

{

int totalNumber= 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

totalNumber++;

}

return (totalNumber);

}

int totalOrders (totalSell)

{

int totalNumber = 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

totalNumber++;

}

return(totalNumber);

}

int totalBuy = totalOrders(totalBuy);

int totalSell = totalOrders(totalSell);

int EAopenOrders=totalBuy+totalSell;

//End of total Open Long and Short count code

// Time filter Code

if (TimeFilter==true)

{

if (!(Hour() >= FromHourTrade && Hour() <= ToHourTrade && Minute() <=2))

BlockTrade=true;

else BlockTrade=false;

}

//End of time Filter code

// Are trades allowed to be opened?

if(EAopenOrders<=MaxOpenOrders && BlockTrade==false && Turned_On==true)

Canopen=true;

else if(EAopenOrders>MaxOpenOrders || BlockTrade==true || Turned_On==false)

Canopen=false;

// End of Allow code

//*****Trade Open Order Functions

if(Canopen==true)

{

if (totalBuy<=MaxLong)

{

if (cci>-100 && SATL<Ask)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"CCI0",Magic,0,Blue);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print ("Error opening BUY order : ",GetLastError());

return (0);

}

}

else if (totalSell<=MaxShort)

{

if (cciBid)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"CCI",Magic,0,Red);

if (ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print ("Sell order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL Order : ",GetLastError());

return (0);

}

}

}// End of Trade Open Order Functions

//****Close Orders if they are profitable

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_BUY && TP != 0 && totalBuy!= 0)

{

if(Bid >= ((OrderOpenPrice()+TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // Long position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_SELL && TP != 0 && totalSell!=0 )

{

if(Ask <= ((OrderOpenPrice()-TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // Short position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

} // Close Profitable trades loop closed

}// End of Start function

Il tuo aiuto è molto apprezzato.

 
Limstylz:
Ciao a tutti,

Ho originariamente postato questo come un nuovo thread, ma è stato spostato in un altro thread di programmazione (non ho obiezioni al suo spostamento BTW) e ora sembra essersi perso a causa della quantità di poster in quel thread.

Forse qualcuno qui può aiutarmi?

Limstylz dai un'occhiata a questo thread Ask! pagina 39. Penso che ci potrebbero essere alcune informazioni che potrebbero aiutarti. Buona fortuna

 

Grazie amico...

cutzpr:
Limstylz dai un'occhiata a questo thread di Ask! a pagina 39. Penso che ci potrebbero essere alcune informazioni che potrebbero aiutarti. In bocca al lupo

Grazie cutzpr, ma sono già riuscito a risolverlo... la dannata connessione internet è stata fuori uso tutto il giorno e ho dovuto usare le mie cellule cerebrali per una volta

Comunque, per rispondere alla tua domanda sull'int start ()... Questo è il tuo corpo principale dell'EA e viene aggiornato continuamente, ogni tick (credo sia giusto).

Il tuo codice è un po' scombussolato... puoi spiegare dove stai riscontrando un problema? Potrei essere in grado di aiutarti se riesci a scomporre i problemi, anche se io stesso sto imparando solo ora MQL4.

 

Cosa c'è di sbagliato in questo?

Qualcuno potrebbe aiutarmi, se copio questo indicatore nel mio meta, ho bisogno di più di 5 minuti solo per aprire il mio meta, ma quando lo cancello e riapro il mio meta, diventa di nuovo normale.

File:
 

Grazie!!! è fantastico!

 

Tornare al tavolo da disegno

 

Indicatore personalizzato incorporato in un expert advisor

Ciao gente, qualcuno sa come aggiungere l'indicatore personalizzato qui sotto in un expert advisor? In modo che non abbiamo bisogno di usare l'icustom per chiamarlo dal file?

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

//| ARSI.mq4

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

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

for(i = limit; i >= 0; i--)

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}
 
yast77:
Ciao gente, qualcuno sa come aggiungere l'indicatore personalizzato qui sotto in un expert advisor? In modo che non abbiamo bisogno di usare l'icustom per chiamarlo dal file?
//+------------------------------------------------------------------+

//| ARSI.mq4

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

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

for(i = limit; i >= 0; i--)

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}

Devi usare la funzione iCustom nel tuo EA per chiamare questo indicatore:

iCustom(Symbol(),0, "ARSI",ARSIPeriod,0,0);

Il numero in rosso è la barra che vuoi guardare. Cambialo come ti serve.

FerruFx

 
FerruFx:
Devi usare la funzione iCustom nel tuo EA per chiamare questo indicatore:

iCustom(Symbol(),0, "ARSI",ARSIPeriod,0,0);

Il numero in rosso è la barra che vuoi guardare. Cambialo come ti serve.

FerruFx

Grazie per la tua risposta. Sì, so che possiamo usare la funzione icustom, ma come so, possiamo incorporare la funzione dell'indicatore inserendo la codifica dall'indicatore, il seguente sito web Indicatori che incorporano in Expert Advisors (alternativa iCustom) | www.metatrader.info che spiegato da codersguru descrivono circa quello, ma per l'indicatore ARSI, non sono sicuro come incorporarlo in un consigliere esperto. Grazie per qualsiasi raccomandazione!

 

miglioramento di 10points3

Ciao a tutti.

Stiamo cercando di migliorare 10points3. Abbiamo bisogno di cambiare il codice per chiudere l'ultimo terzo trade. Si prega di fare riferimento agli ultimi post qui:

https://www.mql5.com/en/forum/174975/page259.

Stiamo ottenendo buoni risultati qui.