grazie per il tuo aiuto, ho rimosso il ciclo while e la pausa alla funzione start su ogni esecuzione dell'ordine, ho rimosso la funzione IsTesting (per ora) e il mio OrderSend sembra funzionare.
Eseguendolo ora, non importa dove ho una funzione Print() non appare nulla nel diario (o nel registro) l'ordine iniziale si apre bene e poi niente - anche se ho il mio ordine di stampa come prossima linea nel codice?
grazie per il vostro aiuto, ho rimosso il ciclo while e la pausa alla funzione start su ogni esecuzione dell'ordine, ho rimosso la funzione IsTesting (per ora) e il mio OrderSend sembra funzionare.
Eseguendolo ora, non importa dove ho una funzione Print(), nulla appare nel giornale (o nel registro), l'ordine iniziale si apre bene e poi niente - anche se ho il mio ordine di stampa come prossima linea nel codice?
Quando una funzione restituisce un int, come OrderSend(), possiamo usare un codice come questo per controllare che la funzione abbia funzionato e riportare un errore nei log se non ha funzionato.
Ho codificato gli errori di stampa, ma non viene stampato nulla sul giornale, quindi non riesco a capire quali errori si stanno verificando? Mi manca ancora qualcosa di ovvio? Ora sono tornato ad aprire una vendita e poi non essere in grado di chiudere...
//+------------------------------------------------------------------+//| SMA scripy.mq4 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"externint z=1234;
int total;
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int init()
{
//---- int i;
total=0;
if (OrdersTotal()!=0)
{
for (i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS))
{
if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
{
if ((OrderType()==OP_BUY)&&(iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0)<iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
}
if ((OrderType()==OP_SELL)&&(iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0)>iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
}
else
{
total++;
}
}
}
}
}
//----return;
}
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int start()
{
//----int ticket,i,L;
bool x;
if (AccountBalance()>50)
{
//-----double SMA6=iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0);
Print("SMA6 is ",SMA6);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA21 is ",SMA21);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
Print("RSI70 is ",RSI70);
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30;
Print("RSI30 is ",RSI30);
//----if (total==0)
{
if ((RSI70)&&(SMA6>SMA21))
{
ticket=OrderSend(Symbol(),OP_BUY,v(AccountBalance()),Ask,0,0,0,"",z,0,Red);
total+=1;
if (ticket<0)
{
Print("OrderSend Failed", GetLastError());
}
}
if ((RSI30)&&(SMA6<SMA21))
{
ticket=OrderSend(Symbol(),OP_SELL,v(AccountBalance()),Bid,0,0,0,"",z,0,Blue);
total+=1;
if (ticket<0)
{
Print("OrderSend Failed", GetLastError());
}
}
}
//---if (total!=0)
{
L=0;
for (i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS))
{
if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
{
if ((OrderType()==OP_BUY)&&(SMA6<SMA21))
{
x=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
if (x==false)
{
Print("Error is ", GetLastError());
}
else total+=-1;
break;
}
if ((OrderType()==OP_SELL)&&(SMA6>SMA21))
{
x=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
if (x==false)
{
Print("Error is ", GetLastError());
}
else
{
total+=-1;
}
break;
}
else
{
L++;
}
}
total=L;
}
}
}
//----
}
//----return;
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//-------------------------------------------------------------------+double v(double k)
{
double v=((k*0.015)/1000);
if (v<MarketInfo(Symbol(),MODE_MINLOT))
{
v=MarketInfo(Symbol(),MODE_MINLOT);
return(v);
}
else
{
return(v);
}
}
//-------------------------------------------------------------------+
duuuhhhh iRSI è doppio ma il confronto esce 1 - così ho sostituito RSI30 e RSI70 con solo RSI e ho fatto un confronto e tutto funziona ORO! A parte il fatto che quando cambio lo SMA6 in shift esce sempre SMA6=0? perché?
Grazie a tutti per l'aiuto! Spero di non infastidire così tanto la prossima volta!
Ho codificato gli errori di stampa, ma nulla viene stampato sul diario, quindi non riesco a capire quali errori si stanno verificando? Mi manca ancora qualcosa di ovvio? Ora sono tornato ad aprire una vendita e poi non essere in grado di chiudere...
non guardare solo nel diario del terminale ... guarda anche nel terminale esperti .....
cosa vedi lì stampato
Stampa ed esegue ora :) grazie per il tuo aiuto - stavo sbagliando a definire iRSI<70 come un doppio (dato che era un confronto) e stava causando problemi. Ora stampa e funziona come previsto, tranne che, se cambio lo spostamento SMA, stampa SMA=0?
Stampa ed esegue ora :) grazie per il tuo aiuto - ho sbagliato a definire iRSI<70 come un doppio (dato che era un confronto) e stava causando problemi. Ora stampa e funziona come previsto, tranne che, se cambio lo spostamento SMA, stampa SMA=0?
Metti una SMA con le stesse impostazioni sul grafico del tuo EA e vedi cosa hai fatto ...
grazie per il tuo aiuto, ho rimosso il ciclo while e la pausa alla funzione start su ogni esecuzione dell'ordine, ho rimosso la funzione IsTesting (per ora) e il mio OrderSend sembra funzionare.
Eseguendolo ora, non importa dove ho una funzione Print() non appare nulla nel diario (o nel registro) l'ordine iniziale si apre bene e poi niente - anche se ho il mio ordine di stampa come prossima linea nel codice?
grazie per il vostro aiuto, ho rimosso il ciclo while e la pausa alla funzione start su ogni esecuzione dell'ordine, ho rimosso la funzione IsTesting (per ora) e il mio OrderSend sembra funzionare.
Eseguendolo ora, non importa dove ho una funzione Print(), nulla appare nel giornale (o nel registro), l'ordine iniziale si apre bene e poi niente - anche se ho il mio ordine di stampa come prossima linea nel codice?
come appare ora il tuo codice?
double, int, string, bool, datetime, color, ........ cosa devo usare???....
Sono double ???
SEEEEEE Cosa sono i valori di ritorno delle funzioni? Come posso usarli? - MQL4 forum
grande spiegazione
Quando una funzione restituisce un int, come OrderSend(), possiamo usare un codice come questo per controllare che la funzione abbia funzionato e riportare un errore nei log se non ha funzionato.
. Guardate il link che avete dato da WHRoeder e trovate quello che ho nascosto qui con le stelle ......
usatelo anche per controllare la chiusura delle operazioni
Fate qualcosa del genere all'interno del vostro codice.... in questo modo quando ordersend fallisce sapete che tipo e da dove viene l'errore
.
cosa succede se orderclose fallisce.......?????
Sia l'RSI che la MA sono doppie, quindi anche le variabili devono esserlo, no?
https://docs.mql4.com/indicators/iRSI && https://docs.mql4.com/indicators/iMA
Ho codificato gli errori di stampa, ma non viene stampato nulla sul giornale, quindi non riesco a capire quali errori si stanno verificando? Mi manca ancora qualcosa di ovvio? Ora sono tornato ad aprire una vendita e poi non essere in grado di chiudere...
duuuhhhh iRSI è doppio ma il confronto esce 1 - così ho sostituito RSI30 e RSI70 con solo RSI e ho fatto un confronto e tutto funziona ORO! A parte il fatto che quando cambio lo SMA6 in shift esce sempre SMA6=0? perché?
Grazie a tutti per l'aiuto! Spero di non infastidire così tanto la prossima volta!
Sia l'RSI che la MA sono doppie, quindi anche le variabili devono esserlo, no?
https://docs.mql4.com/indicators/iRSI && https://docs.mql4.com/indicators/iMA
Ho codificato gli errori di stampa, ma nulla viene stampato sul diario, quindi non riesco a capire quali errori si stanno verificando? Mi manca ancora qualcosa di ovvio? Ora sono tornato ad aprire una vendita e poi non essere in grado di chiudere...
metti l'EA su un grafico di un conto demo
non guardare solo nel diario del terminale ...
guardate anche negli esperti del terminale .....
cosa vedi lì stampato
mettere l'EA su un grafico di un conto demo
non guardare solo nel diario del terminale ...
guarda anche nel terminale esperti .....
cosa vedi lì stampato
Stampa ed esegue ora :) grazie per il tuo aiuto - stavo sbagliando a definire iRSI<70 come un doppio (dato che era un confronto) e stava causando problemi. Ora stampa e funziona come previsto, tranne che, se cambio lo spostamento SMA, stampa SMA=0?
Stampa ed esegue ora :) grazie per il tuo aiuto - ho sbagliato a definire iRSI<70 come un doppio (dato che era un confronto) e stava causando problemi. Ora stampa e funziona come previsto, tranne che, se cambio lo spostamento SMA, stampa SMA=0?
Metti una SMA con le stesse impostazioni sul grafico del tuo EA e vedi cosa hai fatto ...
Perché il totale += 1;
in questo momento non so se ordersend ha successo
e se fallisce non vedo quale tipo di ordine ha cercato di aprire, potrebbe essere anche un'operazione di vendita che hai cercato di aprire