[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 203

 
Salve, potreste darmi un comando (se ce n'è uno) per selezionare casualmente un numero 0 o 1, grazie in anticipo?
 
hoz:


Per cominciare, abituatevi a mettere le staffe dove ne avete bisogno. Come questo:

E in generale, si dovrebbe avere un intervallo di tempo, non un valore fisso. La vostra logica non è affatto corretta. Non 1 ora O 3 ore, ma da 1 ora a 3 ore!!!
Grazie, ho sbagliato.
 
stater:
Ciao, potresti per favore darmi un comando (se ce n'è uno) per selezionare casualmente un numero o 0 o 1, grazie in anticipo?
int x =MathRand() % 2;
 

Durante il test dell'Expert Advisor ho trovato errori di esecuzione del codice:
- l'esecuzione del ciclo for(i=0;i<OrdersTotal();i++) viene interrotta con il prossimo tick (sotto in grassetto),
- Gli ordini di acquisto sono selezionati e chiusi in qualsiasi ordine.

Potete per favore dirmi come trovare la causa e risolverla?
Ecco il codice del programma e il rapporto del log del tester.

Codice programma.

//+------------------------------------------------------------------+
//|Poligono1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp.
//| Test dell'operatore di loop.|
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#proprietà link ""
//+------------------------------------------------------------------+
//Variabili dichiarate|
//+------------------------------------------------------------------+
int Mn=357;//numero magico
int i;//indice del contatore di iterazioni
doppio PriTP;//TP serie
int Tick;//contatore di tick
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto|
//+------------------------------------------------------------------+
int init()
{
//----Impostazione degli ordini
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Point,Ask+350*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE); //
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE); //
//----
PriTP=Bid;//PriTP
Print("Kc0:",OrdersTotal=",OrdersTotal());//
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperta|
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto|
//+------------------------------------------------------------------+
int start()
{
//----Contatore di tick
Tick++;//Tick
//----Close ordini BUY
for(i=0;i<OrdersTotal();i++)//inizializzare il ciclo
{
Stampa("Kc1:"," Tick=",Tick," i=",i);//Messaggio
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Seleziona l'ordine i
{
if(OrderSymbol()==Symbol())//Symbol
{
if(OrderMagicNumber()==Mn)//Numero di identificazione
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Il tipo di transazione dell'ordine attualmente selezionato
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Chiude la posizione
}/Closed if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}// Chiuso se(OrderMagicNumber()==Mn)
}// Chiuso se(OrderSymbol()==Symbol()
}// Chiuso se(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
}// Chiuso per(i=0;i<OrdersTotal();i++)
//----
ritorno(0);
}

Voci del diario di bordo del tester.

2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=0
2013.03.01 12:12:03 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=1
2013.03.01 12:12:03 2012.09.03 00:00 Poligon1 EURUSD,M15: chiudere #4 comprare 2,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 a 1,25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: chiudere #2 comprare 1.00 EURUSD a 1.25773 sl: 1.25516 tp: 1.26023 al prezzo 1.25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: chiudere #5 comprare 3,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 a 1,25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: chiudere #3 comprare 1,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 a 1,25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: chiudere #1 comprare 0,50 EURUSD a 1,25773 sl: 1,25416 tp: 1,26123 a 1,25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc0: OrdersTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: aprire #7 vendere stop 3.00 EURUSD a 1.25473 sl: 1.25916 tp: 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: aperto #6 comprare limite 1.00 EURUSD a 1.25623 sl: 1.25366 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: aperto #5 comprare 3,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: aperto #4 comprare 2,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: aperto #3 comprare 1,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: aperto #2 comprare 1.00 EURUSD a 1.25773 sl: 1.25516 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: aperto #1 comprare 0,50 EURUSD a 1,25773 sl: 1,25416 tp: 1,26123 ok
2013.03.01 12:11:21 PM Poligon1 test iniziato
2013.03.01 12:11:21 18 18:30 Poligon1 EURUSD, M15: caricato con successo

Saluti. Shurkin

 
Shurkin:

Durante il test dell'Expert Advisor, abbiamo rilevato alcuni errori nel codice:
- l'esecuzione dell'operatore del ciclo for(i=0;i<OrdersTotal();i++) è interrotta dal prossimo tick (mostrato in grassetto sotto),
- Gli ordini di acquisto sono selezionati e chiusi in ordine casuale.

Saluti. Shurkin


1. Gli ordini non possono essere aperti nella funzione init() (nello Strategy Tester, ma non funziona nella demo)

2. Quando chiudete gli ordini, contate dalla fine all'inizio, e non viceversa, come avete fatto voi.

 
Shurkin:

Durante il test di Expert Advisor, sono stati rilevati errori di esecuzione del codice:
- l'esecuzione dell'istruzione del ciclo for(i=0;i<OrdersTotal();i++) è interrotta dal prossimo tick (evidenziato in grassetto sotto),
- gli ordini di acquisto sono selezionati e chiusi in ordine casuale.

Potete per favore dirmi come trovare la causa e risolverla?
Vi fornisco il codice del programma e il rapporto del diario del tester.

Il codice del programma.

//+------------------------------------------------------------------+
//|Poligono1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| Test dell'operatore di loop.|
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link ""
//+------------------------------------------------------------------+
//|Variabili dichiarate|
//+------------------------------------------------------------------+
int Mn=357;//Numero magico
int i;//contatore di iterazioni
double PriTP;//serie TP
int Tick;//contatore di tick
//+------------------------------------------------------------------+
//| funzione di inizializzazione esperta |
//+------------------------------------------------------------------+
int init()
{
//----Set orders
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Point,Ask+350*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1..5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3..5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//----
PriTP=Bid;//PriTP
Print("Kc0:"," OrdersTotal=",OrdersTotal());//PriTP
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto|
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----Counter Tick
Tick++;//Tick
//----Close BUY Orders
for(i=0;i<OrdersTotal();i++)//initialise loop
{
Print("Kc1:"," Tick=",Tick," i=",i);//Invia messaggio
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Seleziona ordine i
{
if(OrderSymbol()==Symbol())//Symbol
{
if(OrderMagicNumber()==Mn)//Numero di identificazione
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Il tipo di operazione dell'ordine attualmente selezionato
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Chiude la posizione
}/Closed if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}/Closed if(OrderMagicNumber()==Mn)
}// Chiuso if(OrderSymbol()==Symbol()
}// Chiuso if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
}// Chiuso for(i=0;i<OrdersTotal();i++)
//----
return(0);
}

Voci di registro del tester.

2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=0
2013.03.01 12:12:09 2012.03 03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=1
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD a 1,25773 sl: 1,25516 tp: 1,26023 al prezzo 1,25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 al prezzo 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 at 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc0: OrdersTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.25473 sl: 1.25916 tp: 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.25623 sl: 1.25366 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: aperto #3 comprare 1,50 EURUSD a 1,25773 sl: 1,25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00:00 Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 ok
2013.03.01 12:11:21 Poligon1 test started
2013.03.01 12:11:21 Poligon1 EURUSD,M15: loaded successfully

Saluti. Shurkin

Non ho guardato tutto il tuo casino (devi usare il pulsante SRC sopra il campo di input per allegarlo) - non è bello grattare tutto il codice sulla pagina, ma la prima cosa che ha attirato la mia attenzione è stata una linea for(i=0; i<OrdersTotal() ; i++) . Per chiuderlo, dovreste usare il ciclo inverso: for(i=OrdersTotal()-1; i>=0; i -- )
 
Roger:
int x =MathRand() % 2;


Perché dovrebbe restituire 0 o 1 invece di un altro numero? Secondo l'aiuto,MathRand() restituisce un numero intero pseudocasuale tra 0 e 32767
 
hoz:

E perché dovrebbe restituire 0 o 1 invece di un altro numero? Dopo tutto, secondoMathRand() restituisce un intero pseudocasuale nell'intervallo da 0 a 32767.

Questo è il resto della divisione! Guarda nei passi dell'aritmetica e nella tua stampante!

Mettetelo dentro e vedrete solo due risultati alternati:

  int x =MathRand() % 2;
  Print("x =",x);
 
Saluti a tutti! Voglio sapere come fermare l'Expert Advisor, quando le condizioni per entrare nel mercato sono soddisfatte, inizia a scrivere nel file di log "Order triggered!" e lo fa diverse decine di volte al minuto, come risultato il file di log diventa cosmicamente enorme. Come posso fare in modo che scriva solo una volta, e non prima che la posizione sia chiusa, perché potrebbe bloccarsi per alcune ore...
 
Allis:
Saluti a tutti! Voglio sapere come fermare l'Expert Advisor, quando si verificano le condizioni per entrare nel mercato, inizia a scrivere nel file di log "Order triggered!" e lo fa alcune decine di volte al minuto, come risultato il file di log diventa cosmicamente enorme. Come faccio a farlo scrivere solo una volta, e non prima di chiudere la posizione, perché potrebbe bloccarsi per qualche ora...
Ciao, Allis! La stampa dovrebbe essere prescritta, dove non c'è la lettura da zecche! Ho messo nella stampa, se c'è un errore, e se si è aperto, e così sarà scritto nella rivista che ha aperto, e solo una volta!
Motivazione: