[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 262

 
Valdemar:

Signori, potete dirmi dove ho sbagliato quando ho inserito questa funzione di temporizzazione nel mio codice EA?

Il compilatore mi ha inondato di errori.



Nel luogo in cui avete dichiarato una funzione all'interno di un'altra funzione:

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {
 
Roll:

Vedere il decimo parametro della funzione specificata. Impostare su 0.

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

ha trovato questa linea e cosa cambiare lì?

 
Starting:

L'uso è semplice - eseguo lo script...

Che è quello che dovevi dimostrare. Cioè, avete bisogno di un codice che determini il giusto ordine. Ci sono dozzine di queste situazioni, e non si può salvare una funzione speciale per ognuna di esse per semplificare il codice. Deve essere scritto per ogni caso.
Potete trovare esempi di funzioni simili qui: Funzioni utili di KimIV.

Se quelli di serie non vanno bene, puoi costruirne uno tuo per analogia con quelli esistenti.
 
Bicus:

Qui il calcolo si basa sull'inerzia dei prezzi. Cioè lo stop loss del primo ordine è scattato, il secondo ordine è in profitto con un valore un po' inferiore alla perdita. Se il prezzo si muove ancora nella stessa direzione, allora sì, potremmo essere nel profitto totale.

Ma, imho, questa strategia non vale un morso.

Sì, come no! Indovinando se andrà qualche altro pip nella direzione redditizia :)
 
granit77:
Questo è esattamente ciò che dobbiamo dimostrare. In altre parole, avete bisogno di un codice che trovi l'ordine necessario. Ci sono dozzine di queste situazioni, e non possiamo fornire una funzione speciale per ciascuna di esse per semplificare il codice. Deve essere scritto per ogni caso.
Potete trovare esempi di funzioni simili qui: Funzioni utili di KimIV.

Se quelli di serie non vanno bene, puoi costruirne uno tuo per analogia con quelli esistenti.


Credo di non aver capito bene il punto.

Asserzione 1. Ogni codice, dopo l'attivazione dell'ordine pendente, quando accede alla data di apertura di questo ordine (che è diventato negoziabile al momento di tale attivazione), otterrà la data di apertura uguale alla data di immissione dell'ordine pendente - è così che funziona la funzione OrderOpenTime().

Asserzione 2: Non si può ricordare l'ora esatta dell'attivazione dell'ordine pendente, senza un Expert Advisor che monitorizza costantemente lo stato degli ordini sul conto.


Possibile soluzione 1. Possiamo provare a correre dalla data di impostazione dell'ordine pendente alla data attuale e notare il tempo del primo incrocio del prezzo aperto e il livello di trigger.

Questo sarà più o meno il tempo esatto, ma c'è un grande meno: lo spread. Dato che non registriamo lo spread nella storia (non sto prendendo la storia dei tick con lo spread preso da Dukas, per esempio, dato che non faccio trading in Dukas e dobbiamo raccoglierlo e registrarlo), l'ordine potrebbe essere scattato molto prima, quando il prezzo ha quasi toccato il livello aperto ma non lo ha attraversato, e l'ordine è stato aperto a causa dell'espansione dello spread, non dopo, quando abbiamo effettivamente visto il prezzo attraversare la linea di impostazione dell'ordine pendente.


La soluzione più probabile è creare un Expert Advisor, metterlo sul grafico e monitorare gli ordini nel conto. Non voglio farlo per alcune ragioni e ci sono anche svantaggi associati a possibili problemi durante le pause nell'operazione EA.


Le funzioni a cui avete fatto riferimento. Hai fornito un link alla funzione OrderOpenTime(). Per gli ordini ritardati sarà la data della loro creazione, e non della loro attivazione. Pertanto, le funzioni esistenti non sono adatte. E non c'è modo di combinarli, poiché fanno ancora riferimento a OrderOpenTime() per la data di apertura dell'ordine.

 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

ha trovato questa linea e cosa cambiare lì?

Stampare i parametri e vedere
 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

ha trovato questa linea e cosa cambiare lì?

Hai il decimo parametro "Newest", mentre il numero che ti serve è il tempo di scadenza dell'ordine
 

Ecco l'intera linea

if (!(AccountFreeMarginCheck(g_symbol_284, OP_BUY, Lots) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */)) g_ticket_352 = OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest RX-1", MediumBlue);
 
 
Pyxlik2009:

Ecco l'intera linea

Di nuovo:

Documentazione:

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Il tuo decimo parametro nella stringa "Newest" non è un numero. Ecco perché c'è un errore

 

PapaYozh
:


Dove avete dichiarato una funzione all'interno di un'altra funzione:

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {


Grazie per il tuo feedback, caro PapaYozh,ma ho inserito questa funzione in int start(), ma il risultato del compilatore non cambia comunque.

int start()
{
int H,M,Ticket;
double Max,Min,
Max1,Min1,
TP,
Total;

bool isTradeTimeInt(int hb=07,int mb=55,int he=23,int me=00) 
    {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
 

H=Hour();
M=Minute();
Total=OrdersTotal();
if(Total==0)
{
if(isTradeTimeInt==true)
{
   Max=High[iHighest(Symbol(),PERIOD_M5,MODE_HIGH,12,0)];
   Min=Low[iLowest(Symbol(),PERIOD_M5,MODE_LOW,12,0)];
Alla fine il compilatore mi ha mostrato questi errori, e penso che si riferisca alla definizione della variabile sbagliata?

Mi scuso per qualsiasi inconveniente, incomprensione, dopo tutto, solo cominciando a guadagnare esperienza in una materia non facile, e penso che grazie a questo forum e le persone che hanno risposto qui, continuano a sviluppare e migliorare le loro competenze, grazie.