Ciao
Ora ho risolto questo problema. Ho potuto compilare l'EA e ho provato a fare il backtest. Ma purtroppo non compra e non vende nulla!
A parte questo sembra funzionare, questo è il diario:
14:16:18 EL1 input: Lotti=0.1; Timeframe=240;
14:16:18 ELine GBPUSD,H4: rimosso
14:16:18 2005.11.14 00:00 ELine GBPUSD,H4: caricato con successo
E questo è il codice EA:
//+------------------------------------------------------------------+
//| T1.mq4
//|
//|
//+------------------------------------------------------------------+
extern double Lots = 0.1;
extern int Timeframe = 240;
stringa strDirCurrent="nessuno";
string strDirPrevious="nessuno";
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
// controlla la direzione corrente
if(iCustom(NULL,Timeframe, "ELine",0,0)>iCustom(NULL,Timeframe, "ELine",1,0))
strDirCurrent="lungo";
if(iCustom(NULL,Timeframe, "ELine",0,0)<iCustom(NULL,Timeframe, "ELine",1,0))
strDirCurrent="short";
// confronta con la direzione precedente e apri una posizione se c'è stato un cambiamento
if(strDirCurrent=="long" && strDirPrevious=="short")
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200, "EABuyOrder",16384,0,Green);
if(strDirCurrent=="short" && strDirPrevious=="long")
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200, "EASellOrder",16384,0,Rosso);
strDirPrevious=strDirCurrent;
}
// la fine.
Qualsiasi aiuto è molto gradito!
Grazie
Eric
Se guardi nel corso di sviluppo su questo forum, troverai "My_First_EA", un codind con le MA incrociate
Non ho potuto ottenere alcun risultato testando il tuo EA e sono anche molto nuovo su EA-Proramming. Scusa
Grazie balue. Lo spazio in NULL è solo dovuto al copia e incolla, nel mio codice è scritto correttamente. E si compila (la seconda versione).
Conosco il corso MQL (anche se non l'ho ancora finito tutto).
Ho scritto un EA simile per ADX da testare e lì funziona. Solo quando cerco di usare il mio indicatore personalizzato non fa trading.
Allega il tuo indicatore - così possiamo fare il backtesting
Ciao
Grande codice - mi piacerebbe fare il backtesting - per favore dacci il tuo icustom Eline.
Ho modificato ampiamente il tuo codice.
/*
* Created by SharpDevelop.
* User: CARDIO
* Date: 1/17/2006
* Time: 4:55 AM
*
*Todo: if there is an ope position - close it- then open in opposite direction.
*
*/
//+------------------------------------------------------------------+
//| T1.mq4
//|
//|
//+------------------------------------------------------------------+
#include
extern double Lots = 0.1;
extern int Timeframe = 240;
string strDirCurrent="none";
string strDirPrevious="none";
int cnt, magicEA;
bool isclosing = false;
double slippage = 3;
int init() {
return(0);
}
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
magicEA = 16384;
// check for current direction
if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))
{
strDirCurrent="long";
}
if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))
{strDirCurrent="short";
}
// compare to previous direction and open a position if there was a change
if(strDirCurrent=="long" && strDirPrevious=="short")
{
//firs close open positions
isclosing = true;
isclosing1();
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);
return(0);
}
if(strDirCurrent=="short" && strDirPrevious=="long")
{
isclosing = true;
isclosing1();
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);
return(0);
}
strDirPrevious=strDirCurrent;
return(0);
}
// the end.
void isclosing1(){
//Close all open orders
//todo: get a requote on the prices if error 138 occurs, use refreshrates
//todo: check if the last 3 closes where losers - if so stop the ea
int totalOrders = OrdersTotal();
int numPos = 0;
for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...
OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders
if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA
numPos++;
if(OrderType() == OP_BUY) { // Check for close signal for bought trade
if(isclosing) {
if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade
//writetofile("10","Closed buy", OrderTicket());
//prtAlert("Day Trading: Closing BUY order");
} else {
// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));
}
}
} else { // Check sold trade for close signal
if(isclosing) {
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);
//writetofile("10","Closed buy", OrderTicket());
// prtAlert("Day Trading: Closing SELL order");
}else {
//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));
}
}
}
}
}
Fisso, spero
Problemi risolti. Prova questo
Dobbiamo ancora lavorare sulla gestione del denaro, ecc.
Grazie, ora ottengo questo:
2006.01.17 18:59:10 2006.01.12 08:20 EL1: numero doppio non valido come parametro 7 per la funzione OrderSend
2006.01.17 18:59:10 2006.01.12 08:10 EL1: comment for OrderSend function must be a string
2006.01.17 18:59:09 EL1: caricato con successo
e l'errore si ripete circa un milione di volte ;-)
ma penso che questo sia facile da risolvere.
Sto ancora cercando di aggiustare - aspettate, ora posterò
Sto ancora sistemando
Risolto - si spera
Ti mancava solo un valore di take profit (tp) in realtà.
Non vuoi un tp e uno stoploss?
Buona fortuna
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Ciao
sto cercando di codificare un EA molto semplice, ma non sono un programmatore e non ho mai fatto un EA prima.
Ho preso il MACD Sample da MT4 e ho modificato alcune parti e cancellato tutto il resto che pensavo non mi servisse.
Sono sicuro che il mio codice è davvero orribile
Vorrei che l'EA funzionasse così:
Il mio indicatore personalizzato ELine ha due linee che si muovono a passi. A volte una è più alta dell'altra, a volte sono uguali.
Quando una linea incrocia l'altra vorrei che l'EA entrasse in una posizione lunga o corta, a seconda di quale linea incrocia in alto.
C'è sempre una posizione aperta, tranne che all'avvio dell'EA.
Quando provo a compilarlo dice "if" - punto e virgola previsto (20,7)
Poi nel passo successivo dovrebbe sempre chiudere una posizione già esistente quando ne apre una nuova, ma non sono riuscito a codificare questo finora.
Qualcuno potrebbe per favore correggere gli errori nel mio codice e magari dirmi come posso chiudere le posizioni ogni volta che l'EA ne inserisce una nuova?
Grazie mille!