Ho cambiato il tipo di selezione dell'ordine nella funzione scritta del conteggio di certi ordini da selezione dell'ordine a selezione per biglietto.
int BuyLimitCount(){ int count=0; for(int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicB){ if(OrderType()==OP_BUYLIMIT) count++;}}}return(count);}
int BuyLimitCount(){ int count=0; if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicB){ if(OrderType()==OP_BUYLIMIT) count++;}}return(count);}
Dopo di che, quando si eseguono alcune decine di candele, tutto funziona correttamente e dopo ci sono ripetuti errori nel log:
2016.12.17 17:44:31.609 2016.12.07 00:27 test3 EURUSD,M1: ticket 2 sconosciuto per la funzione OrderModify
int BuyLimitCount(){ int count=0; if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicB){ if(OrderType()==OP_BUYLIMIT) count++;}}return(count);}
int BuyCount(){ int count=0; if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicB){ if(OrderType()==OP_BUY) count++;}}return(count);}
int SellLimitCount(){ int count=0; if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicS){ if(OrderType()==OP_SELLLIMIT) count++;}}return(count);}
int SellCount(){ int count=0; if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicS){ if(OrderType()==OP_SELL) count++;}}return(count);}
E qui c'è un momento - dopo che ho cambiato la funzione di selezione, la funzione di modifica dell'ordine ha iniziato a generare un errore e solo dopo qualche tempo ditest, all'inizio tutto era normale.
Ho cambiato il tipo di selezione dell'ordine nella funzione scritta del conteggio di certi ordini da selezione per ordine a selezione per biglietto.
int BuyLimitCount(){ int count=0; for(int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicB){ if(OrderType()==OP_BUYLIMIT) count++;}}}return(count);}
int BuyLimitCount(){ int count=0; if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicB){ if(OrderType()==OP_BUYLIMIT) count++;}}return(count);}
Dopo di che, quando si eseguono alcune decine di candele, tutto funziona correttamente e dopo ci sono ripetuti errori nel log:
2016.12.17 17:44:31.609 2016.12.07 00:27 test3 EURUSD,M1: ticket 2 sconosciuto per la funzione OrderModify
int BuyLimitCount(){ int count=0; if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicB){ if(OrderType()==OP_BUYLIMIT) count++;}}return(count);}
int BuyCount(){ int count=0; if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicB){ if(OrderType()==OP_BUY) count++;}}return(count);}
int SellLimitCount(){ int count=0; if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicS){ if(OrderType()==OP_SELLLIMIT) count++;}}return(count);}
int SellCount(){ int count=0; if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){ if(OrderMagicNumber()==MagicS){ if(OrderType()==OP_SELL) count++;}}return(count);}
E qui c'è un momento - dopo che ho cambiato la funzione di selezione, la funzione di modifica dell'ordine ha iniziato a generare un errore e solo dopo qualche tempo ditest, all'inizio tutto era normale.
Perché succede questo e come affrontarlo?
Molto probabilmente, stai ricevendo questo errore perché stai cercando di modificare un ordine che è già stato attivato o cancellato. Dovresti cancellare le variabili in cui è memorizzato il ticket dell'ordine in sospeso, per esempio, quando l'ordine in sospeso è stato attivato.
Sergey Gritsay: Probabilmente ottieni questo errore perché stai cercando di modificare un ordine pendente che è già stato attivato o cancellato. Devi resettare le variabili in cui è memorizzato il biglietto pendente, per esempio, quando l'ordine pendente è stato attivato.
Sai come farlo correttamente? Non ho idea di come fare.
Ciao a tutti, aiutatemi a capire cosa c'è che non va.
il mio Expert Advisor apre ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0, "AV2",1111,0,Green);
chiudere МТ4, aprire МТ4 e controllare il lavoro precedente dell'EA
Domanda: dov'è l'errore, non c'è nessun controllo? Il corpo del ciclo è in Inite.
E dimostrare che è il loop che non entra nel loop. Inoltre, perché controllare TUTTI gli ordini, dall'inizio della vita dell'account, se vi servono gli ultimi?
Vitalie Postolache: E dimostrare che è il ciclo che non sta entrando. Inoltre, perché dovremmo controllare TUTTI gli ordini dall'inizio della vita dell'account se abbiamo bisogno degli ultimi?
Prova: Print("Previous PriceAsk-",PriceAsk); il registro è vuoto.
Inoltre, perché dovremmo controllare TUTTI gli ordini dall'inizio della vita dell'account, se abbiamo bisogno degli ultimi? - Come fare altrimenti, se ci sono 10 coppie di valute aperte?
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.
Ciao!
Per fissare l'indicatore, bisognava sostituire tutti i punti "." con un "" vuoto.
Saluti.
Ho cambiato il tipo di selezione dell'ordine nella funzione scritta del conteggio di certi ordini da selezione dell'ordine a selezione per biglietto.
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}}return(count);}
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
Dopo di che, quando si eseguono alcune decine di candele, tutto funziona correttamente e dopo ci sono ripetuti errori nel log:
2016.12.17 17:44:31.609 2016.12.07 00:27 test3 EURUSD,M1: ticket 2 sconosciuto per la funzione OrderModify
2016.12.17 17:44:31.608 2016.12.07 00:25 test3 EURUSD,M1: OrderModify error 4108 // Invalid ticket number.
Ecco il testo completo, l'ho cambiato in tutte e quattro le funzioni:
double slB, tpB, slS, tpS; double x=0, z=0; int ticketUP, ticketD;
void OnTick()
{
double maxpr1=-9999; double minpr1=9999;
for(int shift1=0; shift1<bars; shift1++)
{double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);
if (i>maxpr1){maxpr1=i;}}
for(int shiftA1=0; shiftA1<bars; shiftA1++)
{double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);
if (y<minpr1) {minpr1=y;}}
if (BuyLimitCount()==0 && BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);
if (ticketUP==-1) Print("ERROR OP_BUY"); else Print("OP_BUY OK");}
if (SellLimitCount()==0 && SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}
if (x!=maxpr1){x=maxpr1;
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
OrderModify(ticketD, maxpr1, slS, tpS, 0, Blue);}
if (z!=minpr1){z=minpr1;
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
OrderModify(ticketUP, minpr1, slB, tpB, 0, Red);}
double maxpr=-9999; double minpr=9999;
for(int shift=0; shift<bars; shift++)
{double e=iHigh(Symbol(), PERIOD_CURRENT, shift);
if (e>maxpr){maxpr=e;}}
for(int shiftA=0; shiftA<bars; shiftA++)
{double r=iLow(Symbol(), PERIOD_CURRENT, shiftA);
if (r<minpr) {minpr=r;}}
string a;
if(bars==1)a="bar: ";
else a= IntegerToString(bars,1) + " bar's: ";
Comment("Last ", a, "max ", DoubleToStr(maxpr, 5), ", min ", DoubleToStr(minpr, 5),".");
}
int BuyLimitCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
int BuyCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUY)
count++;}}return(count);}
int SellLimitCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELLLIMIT)
count++;}}return(count);}
int SellCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELL)
count++;}}return(count);}
E qui c'è un momento - dopo che ho cambiato la funzione di selezione, la funzione di modifica dell'ordine ha iniziato a generare un errore e solo dopo qualche tempo ditest, all'inizio tutto era normale.
Perché succede questo e come affrontarlo?
Saluti.
Ho cambiato il tipo di selezione dell'ordine nella funzione scritta del conteggio di certi ordini da selezione per ordine a selezione per biglietto.
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}}return(count);}
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
Dopo di che, quando si eseguono alcune decine di candele, tutto funziona correttamente e dopo ci sono ripetuti errori nel log:
2016.12.17 17:44:31.609 2016.12.07 00:27 test3 EURUSD,M1: ticket 2 sconosciuto per la funzione OrderModify
2016.12.17 17:44:31.608 2016.12.07 00:25 test3 EURUSD,M1: OrderModify error 4108 // Invalid ticket number.
Ecco il testo completo, l'ho cambiato in tutte e quattro le funzioni:
double slB, tpB, slS, tpS; double x=0, z=0; int ticketUP, ticketD;
void OnTick()
{
double maxpr1=-9999; double minpr1=9999;
for(int shift1=0; shift1<bars; shift1++)
{double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);
if (i>maxpr1){maxpr1=i;}}
for(int shiftA1=0; shiftA1<bars; shiftA1++)
{double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);
if (y<minpr1) {minpr1=y;}}
if (BuyLimitCount()==0 && BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);
if (ticketUP==-1) Print("ERROR OP_BUY"); else Print("OP_BUY OK");}
if (SellLimitCount()==0 && SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}
if (x!=maxpr1){x=maxpr1;
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
OrderModify(ticketD, maxpr1, slS, tpS, 0, Blue);}
if (z!=minpr1){z=minpr1;
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
OrderModify(ticketUP, minpr1, slB, tpB, 0, Red);}
double maxpr=-9999; double minpr=9999;
for(int shift=0; shift<bars; shift++)
{double e=iHigh(Symbol(), PERIOD_CURRENT, shift);
if (e>maxpr){maxpr=e;}}
for(int shiftA=0; shiftA<bars; shiftA++)
{double r=iLow(Symbol(), PERIOD_CURRENT, shiftA);
if (r<minpr) {minpr=r;}}
string a;
if(bars==1)a="bar: ";
else a= IntegerToString(bars,1) + " bar's: ";
Comment("Last ", a, "max ", DoubleToStr(maxpr, 5), ", min ", DoubleToStr(minpr, 5),".");
}
int BuyLimitCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}return(count);}
int BuyCount(){
int count=0;
if(OrderSelect(ticketUP, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUY)
count++;}}return(count);}
int SellLimitCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELLLIMIT)
count++;}}return(count);}
int SellCount(){
int count=0;
if(OrderSelect(ticketD, SELECT_BY_TICKET, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELL)
count++;}}return(count);}
E qui c'è un momento - dopo che ho cambiato la funzione di selezione, la funzione di modifica dell'ordine ha iniziato a generare un errore e solo dopo qualche tempo ditest, all'inizio tutto era normale.
Perché succede questo e come affrontarlo?
Probabilmente ottieni questo errore perché stai cercando di modificare un ordine pendente che è già stato attivato o cancellato. Devi resettare le variabili in cui è memorizzato il biglietto pendente, per esempio, quando l'ordine pendente è stato attivato.
Ciao a tutti, aiutatemi a capire cosa c'è che non va.
il mio Expert Advisor apre ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0, "AV2",1111,0,Green);
for(int prev=0; prev<OrdersTotal();prev++) //Controllo della precedente operazione EA
{
ViborOrdera=OrderSelect(prev,SELECT_BY_POS);
se(OrderSymbol()==Symbol())
//*************************************
//-------Controllare il ciclo di acquisto--------
if(OrderType()==OP_BUY && OrderMagicNumber()==1111)
{
PriceAsk=OrderOpenPrice();//prezzo aperto, necessario per l'ulteriore lavoro dell'EA
}
domanda, dov'è l'errore, non c'è nessun controllo? Il corpo del ciclo è nell'Inite.
Non c'è tempo per risolverlo..........
Cercate di leggere e mettere nei posti giusti.
boolRefreshRates();
Ciao a tutti, aiutatemi a capire cosa c'è che non va.
il mio Expert Advisor apre ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0, "AV2",1111,0,Green);
Domanda: dov'è l'errore, non c'è nessun controllo? Il corpo del ciclo è in Inite.
Non c'è tempo per risolverlo..........
Cercate di leggere e mettere nei posti giusti.
boolRefreshRates();
E dimostrare che è il ciclo che non sta entrando. Inoltre, perché dovremmo controllare TUTTI gli ordini dall'inizio della vita dell'account se abbiamo bisogno degli ultimi?
Prova: Print("Previous PriceAsk-",PriceAsk); il registro è vuoto.
Inoltre, perché dovremmo controllare TUTTI gli ordini dall'inizio della vita dell'account, se abbiamo bisogno degli ultimi? - Come fare altrimenti, se ci sono 10 coppie di valute aperte?
Tutto era OK fino a quando abbiamo cambiato ViborOrdera=OrderSelect(prev,SELECT_BY_POS) in MQL;
Prima eraOrderSelect(prev,SELECT_BY_POS);. È stato molto tempo fa), ma ha funzionato.