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
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.
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...
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.
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);
}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
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.
FerruFxGrazie 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.