[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 620

 
lottamer:


sì è così che questo punto è ben noto a me...

per favore, scrivi un pezzo richiedendo il biglietto dell'ultima settimana dalla storia... e io ne prenderò la logica...



int fLastClosetPoz()
{
int Tot=OrdersHistoryTotal(),Ticket=-1; datetime time=0;
se(Tot>0)
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
se(OrderSymbol()==Symbol())
{
se(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket=OrderTicket();
}
}
}
altrimenti continuare;
}
}
return(Ticket);
}

 
lottamer:

MISTICA!!!

questo

-----------------------------------------------------------------------------


pp_sell=(-(PriceOpenLastClosePos()-PriceCloseLastPos())*100000); // per valute con dimensione EUR


Stampa (pp_sell);

------------------------------------------------------------------------------------

Stampa -10, come dovrebbe essere, dato che l'ultimo trade SELL ha un profitto di 10

ma se si inseriscono diversi TEMPI DIFFICILI TRA LA STAMPA E LA VARIABILE, per esempio

----------------------------------------------------------------------------


pp_sell=(-(PriceOpenLastClosePos()-PriceCloseLastPos())*100000); // per valute con dimensione EUR


se ( Ora()>=10 && Ora()<20)

{

se ( Stoch_1>Stoch_2) ritorno(0);

else {

se (OrdiniTotali()==0)

{ PlaySound("ok.wav");

if ( GetTypeLastClosePos()==1) Print (pp_sell);

}

Stampa("___");

}

}

ritorno(0);

}

------------------------------------------------------------------------------------

funziona, ma stampa -9 !!!!

qual è il segreto?


In questi casi, le imprecisioni di calcolo si accumulano e possono alla fine diventare significative. Pensate di inserirecondizioni chenon cambiano, in realtà costringete il computer a fare calcoli inutili e le vostre condizioninon cambiano.

E sei sicuro chePriceOpenLastClosePos() e PriceCloseLastPos() stiano impostando valori per la stessa posizione?

 
rigonich:


int fLastClosetPoz()

{
int Tot=OrdersHistoryTotal(),Ticket=-1; datetime time=0;
se(Tot>0)
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
se(OrderSymbol()==Symbol())
{
se(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket=OrderTicket();
}
}
}
altrimenti continuare;
}
}
return(Ticket);
}


a partire da if(OrderCloseTime()>time)... allora non è chiaro da dove viene... beh, non importa...

Stampa un biglietto, ma solo l'ultimo. E cosa fare con il penultimo? Non riesco proprio a capire come il secondo biglietto possa essere stampato?

prima scrivo solo Print LastClosetPoz()

prendere il 2° (i) ? OrderSelect(2,SELECT_BY_POS,MODE_HISTORY)....?

Print LastClosetPoz(2) ?? errore ovvio, ma sarebbe logico :)))

Ho provato a mettere altri parametri di una posizione chiusa(prezzi di chiusuradi una posizione di stop) invece di OrderTicket nella linea Ticket=OrderTicket(); - non funziona.

 
rigonich:

State lavorando con valorinon normalizzati come il doppio. In questi casi, le imprecisioni di calcolo si accumulano e possono diventare significative.


Non è grasso per un computer accumulare fino al 10% di errore in 4 righe? :))))))))))) (in grandi numeri meno del 10%)

1) cosa c'è da salvare se l'ordine chiuso è fisso e tutti i suoi parametri "non galleggiano"?

2) Le condizioni non erano in alcun modo legate al calcolo del parametro di uscita. Erano solo una barriera -lasciare andare-non lasciare andare...

3) E perché allora il risultato non galleggia all'interno del lavoro di un EA, ma galleggia da uno all'altro?

 
lottamer:


a partire da if(OrderCloseTime()>time)... allora non è chiaro da dove viene...ma va bene...

Stampa un biglietto, ma solo l'ultimo. E cosa fare con il penultimo? Non vedo come fare con il secondo biglietto?

prendere il 2° (i) ? OrderSelect(2,SELECT_BY_POS,MODE_HISTORY)....?

1. si prega di scrivere un pezzo con richiesta di biglietto dalla storia.-la tua domanda.

Per trovare il penultimo, dobbiamo memorizzare il biglietto dell'ultimo (per esempio nella variabile A), poi bisogna eseguire il ciclo un'altra volta e "saltare" questo ordine, cioè per esempio cambiare il

if(OrderSymbol()==Symbol()) aif(OrderSymbol()==Symbol()&& OrderTicket()!=A), o aggiungere una lineaif(Ticket()!=A)continua;

E ho già spiegato che l'indice dell'ordine non coinciderà sempre con quello chiuso nel conto, dato che gli ordini a mercato e quelli in sospeso vengono presi in considerazione insieme e questi ultimi non hanno un prezzo di chiusura, per questo tutti gli ordini vengono analizzati per trovare l'ultimo chiuso e l'ordine con il tempo di chiusura più lungo.

 
rigonich:

1. per favore, scrivi un pezzo chiedendo un biglietto per l'ultima settimana della storia...-la tua domanda.

Per trovare il penultimo, dovremmo memorizzare il biglietto dell'ultimo (per esempio nella variabile A), poi dovremmo eseguire il ciclo un'altra volta e "saltare" questo ordine, cioè cambiare la linea

if(OrderSymbol()==Symbol()) aif(OrderSymbol()==Symbol()&& OrderTicket()!=A), o aggiungere una lineaif(Ticket()!=A)continua;


domanda principale:

cosa for(int i=0;i<OrdersHistoryTotal();i++) abbiamo bisogno esattamente di OrdersHistoryTotal() quando, per esempio, ho bisogno solo di 2 scambi?

Che ne dici di questo

o(int i=0;i<2;i++) ? (controllato - biglietto =-1....) nda.....tuman...:))

 
lottamer:


domanda principale:

ma perché abbiamo bisogno della linea for(int i=0;i<OrdersHistoryTotal();i++) abbiamo bisogno esattamente di OrdersHistoryTotal() quando, per esempio, ho bisogno solo di 2 scambi?

Che ne dici di questo

o(int i=0;i<2;i++) ? (controllato - biglietto =-1....) nda.....tuman...:))


Ho finito il commento precedente, vedi. Inoltre, ti ho scritto un codice che cerca l'ultimo trade chiuso sullo strumento corrente.
 
Aiutatemi se decidessi di scrivere un robot in C/C++, per esempio. Non è un problema scriverne uno, ma come lo collego con metatrader? Come ottenere quotazioni e come inviare un segnale di acquisto/vendita?
 
Desead:
Aiutatemi se decidessi di scrivere un robot in C/C++, per esempio. Non è un problema scriverne uno, ma come lo collego con metatrader? Come ottenere quotazioni e come inviare un segnale di acquisto/vendita?

Non conosco altri linguaggi, ma potrebbe essere possibile scrivere il tuo codice come DLL e poi potrebbe essere possibile chiamare dai programmi MQL.
 
rigonich:

Ho finito il commento precedente, vedi.


Sì, ora capisco perché c'è un confronto per il tempo nel ciclo, e il tempo in general....

Capisco anche la LOGICA - segnare "A", poi escludere "A", ma prima, tutte le opzioni DOVE questa "A" può essere appuntata le ho provate - e ancora il consulente mi restituisce l'ultimo biglietto, non il penultimo.

.

Ho inserito 2 cicli (2 funzioni) - il primo originale, il secondo con l'eccezione di "A"... eseguite una dopo l'altra.

Stampa zero....

----------------------------------------------------------------------------------------------------

se ( Ora()>=10 && Ora()<20)

{

LastClosetPoz();Sec_LastClosetPoz();

Stampa ( biglietto2,biglietto);

}

ritorno(0);

}

//--------------------------------------------+

int LastClosetPoz()

{

int Tot=OrdersHistoryTotal(),Ticket=-1; datetime time=0;

se(Tot>0)

{

for(int i=0;i<OrdersHistoryTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

{

se(OrderSymbol()==Symbol())

{

se(OrderCloseTime()>time)

{

time=OrderCloseTime();Ticket=OrderTicket(); A=Ticket;

}

}

}

altrimenti continuare;

}

}

return(Ticket);

}


//--------------------------------------------

int Sec_LastClosetPoz()

{

int Tott=OrdersHistoryTotal(),Ticket2=-1; datetime time2=0;

se(Tott>0)

{

for(int i=0;i<OrdersHistoryTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

{

if(OrderSymbol()==Symbol()&&OrderTicket()!=A)

{

se(OrderCloseTime()>time2)

{

time2=OrderCloseTime();Ticket2=OrderTicket();

}

}

}

altrimenti continuare;

}

}

return(Ticket2);

}

Motivazione: