Qualcuno può aiutarmi con questo EA?

 
//+------------------------------------------------------------------+
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property link "http://eatbuilder.com/"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.1;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 15;
extern bool UseTakeProfit = True;
extern int TakeProfit = 10;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
extern string Comments = "HLC_v2";

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;



if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;

//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+

double Var1 = iHigh(NULL, PERIOD_H1, Current + 1);
double Var2 = iLow(NULL, PERIOD_H1, Current + 1);
double Var3 = iClose(NULL, PERIOD_M15, Current + 0);
double Var4 = iOpen(NULL, PERIOD_M15, Current + 0);
double Var5 = iClose(NULL, PERIOD_M15, Current + 0);

double Buy1_1 = iHigh(NULL, PERIOD_H1, Current + 1); //(Buy1_1 < Buy1_2 && Buy2_1 < Buy2_2) Order = SIGNAL_BUY;
double Buy1_2 = iClose(NULL, PERIOD_M15, Current + 0);
double Buy2_1 = iOpen(NULL, PERIOD_M15, Current + 0);
double Buy2_2 = iClose(NULL, PERIOD_M15, Current + 0);

double Sell1_1 = iLow(NULL, PERIOD_H1, Current + 1);
double Sell1_2 = iClose(NULL, PERIOD_M15, Current + 0);
double Sell2_1 = iOpen(NULL, PERIOD_M15, Current + 0);
double Sell2_2 = iClose(NULL, PERIOD_M15, Current + 0);




//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+

//Check position
bool IsTrade = False;

for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}

//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+

if (Buy1_1 < Buy1_2 && Buy2_1 < Buy2_2) Order = SIGNAL_BUY;

if (Sell1_1 > Sell1_2 && Sell2_1 > Sell2_2) Order = SIGNAL_SELL;


//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+

//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (100 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (100 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

if (!EachTickMode) BarCount = Bars;

return(0);
}
//+------------------------------------------------------------------+
 

ho provato a metterlo in diretta ma non scambia...

qualcuno può risolverlo per me?

L'ho provato usando lo strategy tester e funziona.

Grazie in anticipo :)

 

ODIAMO IL COSTRUTTORE DI EA

 
dabbler:

ODIAMO IL COSTRUTTORE DI EA



???
 

EA builder crea cattivo codice che la persona che usa EA builder non può capire e quindi non può risolvere. E c'è un sacco di codice ed è difficile imparare da un sacco di codice cattivo.

Prova a cercare nel forum le discussioni recenti contenenti "EA builder".

 
17021978:

ho provato a metterlo in diretta ma non scambia...

qualcuno può risolverlo per me?

Ho provato usando strategy tester e funziona.

Grazie in anticipo :)


Se non fa trading allora devi guardare nel terminale journal/experts e leggere le linee all'interno di questo

Se poi non hai ancora idea, allora devi mettere nel tuo EA alcune linee di commento o di stampa per vedere cosa sta succedendo mentre il tuo EA è attaccato al grafico

e se questo non aiuta allora può essere che non hai permesso all'EA di fare trading....

Quindi cosa c'è che deve essere corretto?

A proposito, devi usare il tasto SRC per mettere le linee di programmazione nel tuo messaggio

e come dabbler

dire che odio EA Builder non si imparano le basi della programmazione è necessario avere.... Prenditi del tempo e studia le basi

 
ok grazie dabbler e deVries!
 

  1. Poiché non ci sono schiavi qui, ci sono solo due scelte: imparare a codificare o pagare qualcuno. Non abbiamo intenzione di codificare per voi. Siamo disposti ad AIUTARVI. Non abbiamo intenzione di fare il debug di 230 linee di codice.
  2. EA builder fa contare il cattivo codice durante la chiusura di ordini multipli.
  3. Il costruttore di EA fa un cattivo codice Le barre sono inaffidabili (barre massime sul grafico) il volume è inaffidabile (mancano i tick) Usa sempre il tempo
  4. Il costruttore di EA fa un cattivo codice che non si adatta ai broker a 4/5 cifre
  5. Il costruttore di EA fa un cattivo codice che non si adatta ai broker ECN.
  6. "Ho provato a metterlo live ma non fa trading..." Cosa dice il file di log?
 
WHRoeder:

  1. Dal momento che non ci sono schiavi qui, ci sono solo due scelte: imparare a codificare o pagare qualcuno. Non lo codificheremo PER voi. Siamo disposti ad AIUTARVI. Non abbiamo intenzione di fare il debug di 230 linee di codice.
  2. EA builder fa contare il cattivo codice durante la chiusura di ordini multipli.
  3. Il costruttore di EA fa un cattivo codice Le barre sono inaffidabili (barre massime sul grafico) il volume è inaffidabile (mancano i tick) Usa sempre il tempo
  4. Il costruttore di EA fa un cattivo codice che non si adatta ai broker a 4/5 cifre
  5. Il costruttore di EA fa un cattivo codice che non si adatta ai broker ECN.
  6. "Ho provato a metterlo live ma non fa trading..." Cosa dice il file di log?


Il file di log non mostra nulla... niente sul diario.

Di solito possiamo vedere l'errore dal diario, ma questo non lo è..

Grazie per aver risposto WHRoeder

 
WHRoeder:

  1. Il costruttore di EA fa cattivo codice Le barre sono inaffidabili (barre massime sul grafico) Il volume è inaffidabile (mancano i tick) Usa sempre il tempo

Quindi il grafico non può diventare più grande della dimensione del grafico specificata dall'opzione - si potrebbe pensare. Così ho scritto un piccolo EA per dimostrare quanto sia inutile usare Bars.

int barCount=-1;

int init(){
   barCount = Bars;
   Print("Starting number of bars is " + barCount );
}

int start(){
   if( barCount != Bars ){
       barCount  = Bars;
       Print("Bar count is now " + barCount);
   }

   return(0);
}

Funziona bene come previsto sul tester. Ho pensato che avrebbe fallito miseramente in un conto demo o live. La dimensione del mio grafico è impostata a 100.000 e c'erano più barre nel grafico di quello. Così ho cambiato il massimo di barre nel grafico a 10.000 e ho riavviato il programma. Sicuramente il primo tick che esegue l'EA mi ha dato una risposta quasi giusta, 10.005. Ma su un grafico M1 si aggiorna costantemente come ci si aspetterebbe se il limite del grafico fosse totalmente ignorato. È possibile che il limite del grafico si applichi solo quando si avvia il programma.

Ho finito per dimostrare che non so cosa ci si aspetta che faccia Bars :-(

 
17021978:

ho provato a metterlo in diretta ma non scambia...

qualcuno può risolverlo per me?

Ho provato con lo strategy tester e funziona.

Grazie in anticipo :)

Caro 17021978 - questo è vecchio,

Leggi l'intero thread su EA builder https://www.mql5.com/en/forum/139608

:(

Motivazione: