Se il messaggio è già stato eseguito, è già stato cancellato dalla coda.
Ok, ho la seguente domanda.
#property indicator_chart_windowbool First = true;
int start(){
if(First){
int indexFirstLeftOnChart = WindowFirstVisibleBar();//иницилизируем под флагом, потому что в init() могут быть артефактыAlert("indexFirstLeftOnChart ", indexFirstLeftOnChart);
First = false;
}
if(WindowFirstVisibleBar() != indexFirstLeftOnChart){//проверяем на каждом тике, изменилось ли значениеAlert("first indexFirstLeftOnChart ", indexFirstLeftOnChart);
indexFirstLeftOnChart = WindowFirstVisibleBar();//если изменилось, записываем егоAlert("second indexFirstLeftOnChart ", indexFirstLeftOnChart);
}
return(0);
}
- Suona ad ogni tick, perché risulta che il primo indexFirstLeftOnChart è zero. Come posso combattere questo? Costruire 509.
Zhunko: Di solito lo intercettano prima dell'esecuzione. Altrimenti non capisco a cosa ti serve intercettare?
Non ci sono domande prima dell'esecuzione. Quindi non ha senso spostare il controllo di validità di AccountNumber() nella DLL. Implica che il numero di conto è già memorizzato in dll.
Ho qualcosa su un semplice punto, un mal di testa. C'è una funzione per cercare gli ordini.
t - contatore di tutti gli ordini.
p - contatore di ordini pendenti.
//+-------------------------------------------------------------------------------------+//| Поиск своих ордеров |//+-------------------------------------------------------------------------------------+void FindOrders(int& t, int& p)
{
int total = OrdersTotal() - 1;
t = 0;
p = 0;
for (int i=total; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderType() > 1)
{
p++;
}
t++;
pr ("FindOrders(): " + "t = " + t + " " + TimeToStr(TimeCurrent()));
pr ("FindOrders(): " + "p = " + p + " " + TimeToStr(TimeCurrent()));
}
}
Lo chiamo dall'inizio:
int start()
{
if (g_lastBarTime == Time[0]) // На текущем баре все необходимые действия..return (0); // ..уже были выполненыint oTotal = 0, oPending = 0;
FindOrders(oTotal, oPending);
int signal = GetGeneralSignal(oTotal);
if (signal != SIGNAL_NO)
{
if (!Trade(signal))
return(0);
}
else
Infatti, quando lo apriamo, anche quando non ci sono ordini, vediamo questo (anche quando non ci sono ordini, si stampa come se ci fossero...):
Buona sera a tutti. Ho deciso di padroneggiare MQL4 recentemente (ho studiato il tutorial di Sergey Kovalev). Ho deciso di fare un semplice script di apertura degli ordini oggi per fare pratica. Il codice è: int start() { OrderSend("EURUSD",OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point); Alert(GetLastError());
ritorno;
}
Lo script non funziona e viene mostrato l'errore 4109 (Trading not allowed). Quando si cerca di cambiare la situazione, appare anche l'errore 4016 (Uninitialised array). Vorrei sapere cosa provoca questi errori e come creare un semplice script di apertura di un'operazione dopo tutto. Ho appena copiato l'esempio dal tutorial https://book.mql4.com/ru/trading/ordersend (ho solo aggiunto la funzione GetLastError in esso) e ho ottenuto comunque l'errore 4109.
intstart()// Спец. функция start(){// Открытие BUYOrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
Alert(GetLastError());
return; // Выход из start()}
Кто может объяснить в чем проблема, буду очень признателен. Заранее спасибо.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
dirmi come trattare tali recinzioni nelle citazioni meta-quote)?
Dobbiamo intercettare i messaggi.
Se il messaggio è già stato eseguito, è già stato cancellato dalla coda.
Ok, ho la seguente domanda.
- Suona ad ogni tick, perché risulta che il primo indexFirstLeftOnChart è zero. Come posso combattere questo? Costruire 509.
Se un messaggio è già stato eseguito, è già stato cancellato dalla coda.
Di solito lo intercettano prima dell'esecuzione. Altrimenti non capisco a cosa ti serve intercettare?
Non ci sono domande prima dell'esecuzione. Quindi non ha senso spostare il controllo di validità di AccountNumber() nella DLL. Implica che il numero di conto è già memorizzato in dll.
Ho qualcosa su un semplice punto, un mal di testa. C'è una funzione per cercare gli ordini.
t - contatore di tutti gli ordini.
p - contatore di ordini pendenti.
Lo chiamo dall'inizio:
Infatti, quando lo apriamo, anche quando non ci sono ordini, vediamo questo (anche quando non ci sono ordini, si stampa come se ci fossero...):
Come è possibile?
int start()
{
OrderSend("EURUSD",OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
Alert(GetLastError());
ritorno;
}
Lo script non funziona e viene mostrato l'errore 4109 (Trading not allowed). Quando si cerca di cambiare la situazione, appare anche l'errore 4016 (Uninitialised array). Vorrei sapere cosa provoca questi errori e come creare un semplice script di apertura di un'operazione dopo tutto. Ho appena copiato l'esempio dal tutorial https://book.mql4.com/ru/trading/ordersend (ho solo aggiunto la funzione GetLastError in esso) e ho ottenuto comunque l'errore 4109.