CIAO,
Ieri ho provato a scambiare le notizie NZD sul grafico a 5 minuti con il mio EA, ma ho ricevuto un errore che dice: Order Sell 0.6 NZDUSD opening at 0.00000 fallito [Off quotes]
Di solito questo non accade.
Ho controllato i grafici e ho visto che c'era un divario di prezzo insolitamente ampio tra la candela attuale e quella precedente con cui veniva aperto il mio ordine.
Questo potrebbe essere il motivo per cui l'ordine veniva aperto a 0.00000 perché il broker non inviava momentaneamente alcun prezzo. È come una forma di slittamento.
Ma il mio EA avrebbe dovuto aprire le negoziazioni tra le 22:00 e le 22:30 GMT 1.
Non ha aperto più scambi dopo aver ricevuto quell'errore.
Perchè è così?
Potrebbe essere dovuto alla parte OrderSend del codice?
// ----------------------------------------------- -------------------
//| Questo MQL è generato da Expert Advisor Builder |
//|
http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/|
//| |
//| In nessun caso l'autore sarà responsabile per eventuali danni. |
//| Utilizzare a proprio rischio. |
//| |
// ------------------- NON RIMUOVERE QUESTA INTESTAZIONE --------------------
#define SEGNALE_NESSUNO 0
#define SIGNAL_ACQUISTA 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#propertycopyright Expert Advisor Builder
#collegamento proprietà http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern doppio lotti = 0,6;
extern int Slittamento = 1000;
extern bool UseStopLoss = False;
extern int StopLoss = 30;
extern bool UseTakeProfit = Falso;
extern int TakeProfit = 60;
extern bool UseTrailingStop = Falso;
extern int TrailingStop = 30;
int BarCount;
int Corrente;
bool TickCheck = Falso;
bool buyFlag = falso, sellFlag = falso;
data e ora barraInizio = 0;
doppio stop loss;
bool InTrade = falso;
// ----------------------------------------------- -------------------
//| funzione di inizializzazione esperto |
// ----------------------------------------------- -------------------
intero init() {
BarCount = Bar;
if (EachTickMode) Corrente = 0; altrimenti Corrente = 1;
ritorno(0);
}
// ----------------------------------------------- -------------------
//| funzione di deinizializzazione esperta |
// ----------------------------------------------- -------------------
int deinit() {
ritorno(0);
}
// ----------------------------------------------- -------------------
//| funzione di avvio esperto |
// ----------------------------------------------- -------------------
int inizio() {
int Ordine = SIGNAL_NONE;
int Totale, Biglietto;
doppio StopLossLevel, TakeProfitLevel;
if (EachTickMode Bars != BarCount) TickCheck = False;
Totale = TotaleOrdini();
Ordine = SIGNAL_NONE;
// ----------------------------------------------- -------------------
//| Inizio variabile |
// ----------------------------------------------- -------------------
bool TradingTime = falso;
doppia Durata = 35*60;
//Ricorda di aumentare i numeri di StartTime*, StopTime* e StartTime* Durata!
datetime StartTime = StrToTime(2010.7.28 22:00);
datetime StopTime = StartTime Durata;
datetime StartTime2 = StrToTime();
datetime StopTime2 = StartTime2 Durata;
datetime StartTime3 = StrToTime();
datetime StopTime3 = StartTime3 Durata;
double Upper1 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, Current 1);
double Lower1 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, Current 1);
double Middle1 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, Current 1);
double Open1 = iOpen(NULL, 0, Current 1);
double Close1 = iClose(NULL, 0, Current 1);
double High1 = iHigh(NULL, 0, Current 1);
double Basso1 = iBasso(NULL, 0, Corrente 1);
//Acquistare
//Chiudi1 gt; Aperto1 Alto1 gt; Superiore1
//Vendere
//Chiudi1 lt; Aperto1 Basso1 lt; Inferiore1
//ChiudiAcquista
//Chiudi1 lt; Apre1 Chiude1 lt; Medio1
//ChiudiVendi
//Chiudi1 gt; Apri1 Chiudi1 gt; Medio1
// ----------------------------------------------- -------------------
//| Fine variabile |
// ----------------------------------------------- -------------------
if (barStart lt; Time[0])/inizio di una nuova battuta
{
barInizio = Tempo[0];
buyFlag = falso;
sellFlag = falso;
if(StartTime lt; StopTime TimeCurrent() gt;= StartTime TimeCurrent() lt; StopTime)
{
TradingTime = vero;
}
if(StartTime2 lt; StopTime2 TimeCurrent() gt;= StartTime2 TimeCurrent() lt; StopTime2)
{
}
if(StartTime3 lt; StopTime3 TimeCurrent() gt;= StartTime3 TimeCurrent() lt; StopTime3)
{
}
}
//Controlla la posizione
bool IsTrade = Falso;
for (int i = 0; i lt; Totale; i ) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(TipoOrdine() lt;= OP_SELL SimboloOrdine() == Simbolo()) {
IsTrade = Vero;
if(TipoOrdine() == OP_ACQUISTA) {
//Vicino
// ----------------------------------------------- -------------------
//| Segnale Inizio(Esci Acquista) |
// ----------------------------------------------- -------------------
if (buyFlag == false Close1 lt; Open1 Close1 lt; Middle1)
{
InTrade = falso;
Ordine = SIGNAL_CLOSEBUY;
}
if (buyFlag == false Close1 lt; stoploss)
{
InTrade = falso;
Ordine = SIGNAL_CLOSEBUY;
}
// ----------------------------------------------- -------------------
//| Fine del segnale (Exit Buy) |
// ----------------------------------------------- -------------------
if (Ordine == 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;
Continua;
}
//Trailing stop
if(UsaTrailingStop TrailingStop gt; 0) {
if(Bid - OrderOpenPrice() gt; Punto * TrailingStop) {
if(OrderStopLoss() lt; Offerta - Punto * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
Continua;
}
}
}
} altro {
//Vicino
// ----------------------------------------------- -------------------
//| Segnale Inizio(Uscita Vendita) |
// ----------------------------------------------- -------------------
if (sellFlag == false Close1 gt; Open1 Close1 gt; Middle1)
{
InTrade = falso;
Ordine = SIGNAL_CLOSESELL;
}
if (sellFlag == false Close1 gt; stoploss)
{
InTrade = falso;
Ordine = SIGNAL_CLOSESELL;
}
// ----------------------------------------------- -------------------
//| Fine del segnale (vendita in uscita) |
// ----------------------------------------------- -------------------
if (Ordine == 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;
Continua;
}
//Trailing stop
if(UsaTrailingStop TrailingStop gt; 0) {
if((OrderOpenPrice() - Ask) gt; (Punto * TrailingStop)) {
if((OrderStopLoss() gt; (Ask Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
Continua;
}
}
}
}
}
}
// ----------------------------------------------- -------------------
//| Segnale Inizio(Entrata) |
// ----------------------------------------------- -------------------
if (TradingTime == true InTrade == false Close1 gt; Open1 Close1 gt; Upper1)
{
Ordine = SIGNAL_BUY;
stoploss = Open1;
InTrade = vero;
buyFlag = vero;
}
if (TradingTime == true InTrade == false Close1 lt; Open1 Close1 lt; Lower1)
{
Ordine = SIGNAL_SELL;
stoploss = Open1;
InTrade = vero;
sellFlag = vero;
}
// ----------------------------------------------- -------------------
//| Segnale Fine |
// ----------------------------------------------- -------------------
//Acquistare
if (Ordine == SIGNAL_BUY ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
if(!IsTrade) {
//Controlla il margine libero
if (AccountFreeMargin() lt; (1000 * Lotti)) {
Print(Non abbiamo soldi. Free Margin = , AccountFreeMargin());
ritorno(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Punto; 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);
if(Ticket gt; 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print(ordine ACQUISTA aperto : , OrderOpenPrice());
if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Ask, Digits) Open Buy);
} altro {
Print(Errore nell'apertura dell'ordine ACQUISTA: , GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
ritorno(0);
}
}
//Vendere
if (Ordine == SIGNAL_SELL ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
if(!IsTrade) {
//Controlla il margine libero
if (AccountFreeMargin() lt; (1000 * Lotti)) {
Print(Non abbiamo soldi. Free Margin = , AccountFreeMargin());
ritorno(0);
}
if (UseStopLoss) StopLossLevel = Offerta StopLoss * Punto; altrimenti StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Offerta - TakeProfit * Punto; altrimenti TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, Sell(# MagicNumber ), MagicNumber, 0, DeepPink);
if(Ticket gt; 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print(ordine di VENDITA aperto : , OrderOpenPrice());
if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Bid, Digits) Open Sell);
} altro {
Print(Errore nell'apertura dell'ordine di VENDITA: , GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
ritorno(0);
}
}
if (!EachTickMode) BarCount = Bars;
ritorno(0);
}
// ----------------------------------------------- -------------------