Come codificare? - pagina 132

 

Aggiungere posizione in questo EA

Salve,

prima devo scusarmi perché l'inglese non è la mia lingua madre.

Come posso modificare questo EA per dirgli di aggiungere una posizione (comprare 0,1 lotti) alla chiusura della barra ogni volta che l'RSI è superiore a 67, e di vendere ogni volta che l'RSI è inferiore a 33?

Per esempio:

ora chiusura RSI

17:31 1.3855 69.3 ---> compra 0.1

17:32 1.3858 70.5 ---> compra 0.1

17:33 1.3849 66.8 ---> nessuna azione

17:34 1.3856 68.4 ---> compra 0.1

Posizione totale +0,03

Lo stesso per vendere allo scoperto.

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

//| Questo MQL è generato da Expert Advisor Builder

//| Expert Advisor Builder per MetaTrader 4 ||

//| |

//| In nessun caso l'autore sarà responsabile per qualsiasi danno. |

//| Usare a proprio rischio e pericolo. |

//| |

//+------------------- NON RIMUOVERE QUESTA INTESTAZIONE --------------------+

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#proprietà copyright "Expert Advisor Builder"

#proprietà link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = False;;

extern double Lots = 0.1;

extern int Slippage = 3;

extern bool UseStopLoss = False;

extern int StopLoss = 30;

extern bool UseTakeProfit = False;

extern int TakeProfit = 60;

extern bool UseTrailingStop = False; extern int TrailingStop = False;

extern int TrailingStop = 30;

int BarCount;

int Current;

bool TickCheck = False;

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

//| funzione di inizializzazione esperto |

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

int init() {

BarCount = Bars;

se (EachTickMode) Current = 0; altrimenti Current = 1;

return(0);

}

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

//| funzione di deinizializzazione esperto |

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

int deinit() {

return(0);

}

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

//| funzione di avvio esperto |

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

int start() {

int Ordine = SIGNAL_NONE;

int Total, Ticket;

doppio StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Totale = OrdiniTotali();

Ordine = SIGNAL_NONE;

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

//| Variabile Inizio |

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

double Buy1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);

double Buy1_2 = 67;

double Sell1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);

doppio Vendere1_2 = 33;

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

//| Fine della variabile |

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

//Controlla la posizione

bool IsTrade = Falso;

for (int i = 0; i < Totale; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Chiudere

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

//| Segnale Inizio(Esci Compra) |

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

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

//| Segnale Fine(Esci dall'Acquisto) |

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

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 = Falso;

continuare;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Punto * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continua;

}

}

}

} else {

//Chiudi

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

//| Segnale Inizio(Esci Vendi) |

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

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

//| Segnale Fine(Esci Vendi) |

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

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 = Falso;

continuare;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Punto * TrailingStop)) {

if((OrderStopLoss() > (Ask + Punto * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continuare;

}

}

}

}

}

}

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

//| Signal Begin(Entry) |

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

se (Buy1_1 > Buy1_2) Ordine = SIGNAL_BUY;

se (Sell1_1 < Sell1_2) Ordine = SIGNAL_SELL;

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

//| Fine del segnale |

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

//Compra

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Controlla il margine libero

if (AccountFreeMargin() < (1000 * Lotti)) {

Print("Non abbiamo soldi. Margine libero = ", ContoFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; altrimenti StopLossLevel = 0,0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; altrimenti TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

se(Biglietto > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Ordine BUY aperto : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Errore nell'apertura dell'ordine BUY: ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Vendere

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Controlla il margine libero

if (AccountFreeMargin() < (1000 * Lotti)) {

Print("Non abbiamo soldi. Margine libero = ", ContoFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; altrimenti StopLossLevel = 0,0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; altrimenti TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

se(Biglietto > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Ordine SELL aperto : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Errore nell'apertura dell'ordine SELL: ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

Grazie mille per il tuo aiuto

Panurgo

 

Come fermare il trading dopo il profitto ottenuto nel giorno corrente?

Ciao, ho un problema.

Ho un problema. Metto in codice un EA.

Quando un profitto di 20 PIP del giorno è preso così l'EA non dovrebbe aprire alcun ordine fino al giorno successivo.

Per favore aiutatemi.

Grazie

fxbeginner

 
fxbeginner:
Ciao.

Ho un problema. Metto in codice un EA.

Quando un profitto di 20 PIP del giorno è preso così l'EA non dovrebbe aprire alcun ordine fino al giorno successivo.

Per favore aiutatemi.

Un'idea sarebbe quella di non permettere il trading dopo il primo ordine del giorno. Dopo la funzione ordersend(), metti un "trade = false;"

Poi reimpostare il permesso di commercio ogni nuovo giorno:

if(timeprev!=iTime(Symbol(),PERIOD_D1,0)) { //---- Questo è un nuovo giorno

timeprev = iTime(Symbol(),PERIOD_D1,0);

trade = true; }

Poi quando controlli il tuo segnale

if(trade) { la tua condizione di trading qui }

Solo un esempio ...

FerruFx

 

Ordini nascosti

Come posso codificare un EA per nascondere tutti gli ordini di acquisto o vendita stop dagli occhi indiscreti dei broker. L'EA attuale ha ordini pendenti di Buy Stops e Sell Stops.

Grazie

LF

 
LazyForex:
Come faccio a codificare un EA per nascondere tutti gli ordini di acquisto o vendita stop dagli occhi indiscreti dei broker. L'EA attuale ha ordini pendenti Buy Stops e Sell Stops.

Grazie

LF

Registra il valore di buystop e sellstop all'interno dell'EA, una volta che il prezzo incrocia il livello di buystop, invia un ordine di acquisto, viceversa per sellstop.

 
Devil2000:
Registra il valore di buystop e sellstop all'interno dell'EA, una volta che il prezzo incrocia il livello di buystop, invia un ordine di acquisto, viceversa per il sellstop.

Grazie. Ti ho mandato un PM

 

Dire a EA di smettere di lavorare

Ciao a tutti,

Ho quasi finito il mio primo EA dopo quasi 7 giorni di tentativi ed errori e di taglia e incolla e ore di ricerca....

Qualcuno può per favore dirmi come emettere una funzione di uscita o di stop per un EA?

Voglio che l'EA cancelli tutte le operazioni in corso e in sospeso e che esca dopo aver raggiunto 10.000 di capitale. Qui sotto c'è la porzione di codice finora:

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

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

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

Come potete vedere, l'EA guarda l'Equity e poi imposta il valore bool della variabile StopTrade a true. L'EA riconosce il comando e non elabora nulla sotto StopTrade != true per un ciclo, ma poi il valore bool di StopTrade viene resettato e le operazioni continuano.

In primo luogo, c'è un modo per far sì che questo faccia ciò di cui ho bisogno nel modo in cui lo sto facendo?

In secondo luogo, c'è una funzione che posso usare per dire semplicemente all'EA di uscire?

Tutta l'assistenza è molto apprezzata.

 

Cosa c'è di sbagliato in questo codice?

Qualcuno può dirmi perché sto generando un errore con questo comando nel mio EA?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);
My pending order is placed and returns the ticket number as assigned to bTicket, but then bTicket doesn't work in my OrderSelect(). I get an error 0 returned. I tried referencing by SELECT_BY_POS and assigning the returned ticket number to bTicket and it worked fine, but there's no way of knowing what the position number of all of my orders will be just be running the script. Any help is greatly appreciated.
 

Spostare il mio post non ha aiutato.

Non posso usare il numero magico perché sto eseguendo lo stesso EA su 8 coppie diverse. Dov'è il mio post originale per poterlo seguire?

 

Cosa c'è di sbagliato in questo codice?

Qualcuno può dirmi perché sto generando un errore con questo comando nel mio EA?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);

Il mio ordine pendente viene piazzato e restituisce il numero del biglietto come assegnato a bTicket, ma poi bTicket non funziona nel mio OrderSelect(). Ottengo un errore 0 restituito. Ho provato a fare riferimento a SELECT_BY_POS e ad assegnare il numero di ticket restituito a bTicket e ha funzionato bene, ma non c'è modo di sapere quale sarà il numero di posizione di tutti i miei ordini solo per eseguire lo script. Qualsiasi aiuto è molto apprezzato.