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

 
Wanderer1000:
Installato MetaTrader 4, aperto un conto demo. Ho provato ad aprire/chiudere gli ordini. Come posso fare in modo che il terminale stesso faccia scattare un ordine di vendita quando il prezzo sale e un ordine di acquisto quando scende, usando informazioni come "hai bisogno di una differenza di 2 candele per chiudere il vecchio ordine e aprirne uno nuovo"?
Scrivere un EA, forse)
 
nadya:

Buona sera. Domanda: Quando chiudo parte di un trade, l'EA apre una specie di nuovo trade con un nuovo ticket. La magia del nuovo ordine rimane la stessa?


 

QUALCUNO PUÒ SPIEGARE PERCHÉ TUTTI GLI SCAMBI SONO SOLO SU BUY? Non ho operazioni su SELL, l'indicatore di bandiera prima di if() su SELL è sempre 1 per qualche motivo, WHY???? è long&short nelle impostazioni.

VOGLIO ANCHE CHIEDERE PERCHÉ LASCIO CHE IL MIO EA PERDA ALCUNE POSIZIONI CHE POTREI APRIRE? NON POSSO ENTRARE!

Ecco il codice(la dichiarazione delle variabili è troncata):
double upfr,dnfr=0.0;//livelli degli ultimi frattali
int flag=0;

int start() //apre sulla pausa frattale e chiude dopo s candele
{
if(iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4)!=0)
{
upfr=iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4);
}
if(iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4)==0)
{
upfr=0;
}
if(iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4)!=0)
{
dnfr=iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4);
}
if(iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4)==0)
{
dnfr=0;
}
//OPENDER BY PROBIT
H=iHigh(Symbol(),PERIOD_H1,1);
L=iLow(Symbol(),PERIOD_H1,1);
tOpen=iTime(Symbol(),PERIOD_H1,1);
if(H>upfr && flag==0) //se il frattale è su e il livello del frattale è superato
{
tClose=tOpen+s*stime*60;
OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,NULL,NULL);
flag=1;
}
if(L<dnfr)
Print(L," -L dnfr- ",dnfr," flag- ",flag);
if(L<dnfr && flag==0)//se il frattale è giù e il livello del frattale è giù
{
tClose=tOpen+s*stime*60;
OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,NULL,NULL);
flag=1;
}
// CHIUDI ORDINI PER FINE TEMPO
if(Time[1]>=tClose && flag==1)// se il tempo designato è passato
{
Print("CLOSE FUNCTION");
OrClose();
flag=0;
upfr=0;
dnfr=0;
}
return(0);
}

File:
 

Mi sono imbattuto in questo...

Quando si cancella un EA, deve cancellare gli ordini in sospeso

Ci sono due varianti

1. Semplicemente cancella tutto...

int deinit()
{
int i;
//----
for(i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderType() == OP_BUYSTOP)
{
OrderDelete(OrderTicket());
}
if (OrderType() == OP_SELLSTOP)
{
OrderDelete(OrderTicket());
}
}
}


//----
return(0);
}

2. Selettivamente...

int deinit()
{

OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket1);
OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket2);

return(0);
}

Ora, il problema è che sulla demo, funziona bene in entrambi i casi... Ma nella vita reale... solo un lotto in sospeso viene rimosso per qualche motivo... Domanda: chi sa perché?

 
DOCTORS:

Mi sono imbattuto in questo...

Quando si cancella un EA, deve cancellare gli ordini in sospeso

Ci sono due varianti

1. Semplicemente cancella tutto...

int deinit()
{
int i;
//----
for(i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderType() == OP_BUYSTOP)
{
OrderDelete(OrderTicket());
}
if (OrderType() == OP_SELLSTOP)
{
OrderDelete(OrderTicket());
}
}
}


//----
return(0);
}

2. Selettivamente...

int deinit()
{

OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket1);
OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket2);

return(0);
}

Ora, il problema è che nella demo, funziona bene in entrambi i casi... Ma nella vita reale... solo un lotto in sospeso viene cancellato per qualche motivo... La domanda - chi sa perché?

IMHO "non ha abbastanza tempo":

Iltempo di esecuzione di una funzione speciale deinit() è limitato a 2,5 secondi. Se il codice di una funzione speciale deinit() viene eseguito più a lungo del tempo specificato, il terminale client terminerà forzatamente la funzione speciale deinit() e l'intero programma.

 
ilunga:

IMHO "non in tempo":

La funzione speciale deinit() ha un tempo di esecuzione di 2,5 secondi. Se il codice nella funzione speciale deinit() gira più a lungo di questo tempo, il terminale client terminerà forzatamente la funzione speciale deinit() e l'intero programma.

:(

Cioè non c'è speranza? Approssimativamente, cominciamo con l'usare lo script per chiudere gli ordini pendenti... E poi chiudiamo il gufo... Bello l'auto-trading...

Un'altra domanda - l'assistente ha impostato i ciondoli https://forum.mql4.com/ru/42300/page588

Quando cambio timeframe, gli ordini vengono cancellati per qualche motivo...

 
DOCTORS:

:(

Quindi non c'è speranza? Grosso modo, iniziamo con uno script per chiudere i ciondoli... e poi chiudiamo il gufo... Bello l'auto-trading...

Un'altra domanda - l'assistente ha impostato i ciondoli https://forum.mql4.com/ru/42300/page588

Quando cambiate timeframe, gli ordini vengono cancellati per qualche motivo...

O lo script o qualche altro modo per comandare all'EA di terminare la sua operazione (ad esempio, tramite una variabile globale)

cambio di timeframe = riavvio di Expert Advisor

 
ilunga:

o uno script, o qualche altro modo per ordinare all'EA di terminare (ad esempio, attraverso una variabile globale)

cambio di timeframe = riavvio di Expert Advisor

La variabile funziona - grazie mille!
Hmm... non c'è modo di aggirare il cambiamento di orario?
 
Membri del forum, per favore aiutate con le modifiche dell'ordine
 
Domanda: nella modalità di test visuale le linee dell'indicatore sono disegnate solo alla fine del test, è così per tutti o sto facendo qualcosa di sbagliato?
Motivazione: