[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 595
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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"?
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?
Sì
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);
}
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é?
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.
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...
:(
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
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
Hmm... non c'è modo di aggirare il cambiamento di orario?