Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1134
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
Cari programmatori, per favore aiutate un principiante in questo settore.
L'EA apre ordini di acquisto e di vendita in modo sequenziale dopo un certo periodo di tempo. Voglio che modifichi tutti gli ordini precedenti (in particolare, tutti quelli precedenti dovrebbero essere chiusi da Take Profit dell'ultimo. Cioè se l'ultimo ordine di acquisto e il precedente ordine di vendita, allora lo stop loss dell'ordine precedente è impostato al livello di take profit dell'ultimo,
Se il precedente acquisto, allora il suo TakeProfit sarà impostato sul livello dell'ultimo TakeProfit. Il punto è che quando arriva il takeprofit dell'ultimo ordine, tutti gli ordini devono essere chiusi).
Spero di averlo spiegato chiaramente, anche se è difficile capire come dovrebbe essere implementato. Grazie in anticipo.
Capisco che possiamo passare attraverso tutti gli ordini aperti e modificarli, ma come possiamo saltare l'ultimo?
La cosa più importante in tutto questo è capire cosa dovrebbe succedere.
Cos'è l'"ultimo ordine"? È ultimo per l'orario di apertura? O per livello di prezzo di apertura?
Cosa succede se consideriamo "l'ultimo" ordine come "COMPRA", ma il prezzo andrà a puttane? O viceversa, l'ultimo ordine sarà SELL, ma il prezzo va a nord? Allora quale dovrebbe essere considerato l'ultimo? Questo è ciò che dobbiamo capire per realizzare la nostra idea.
Salve. Se non sapete in anticipo quanti elementi ci saranno nell'array, come dichiarate l'array in modo che l'array aumenti con ogni nuovo elemento?
Un esempio per renderlo più chiaro:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Salve. Se non sapete in anticipo quanti elementi ci saranno nell'array, come dichiarate l'array in modo che l'array aumenti con ogni nuovo elemento?
Un esempio per renderlo più chiaro:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Dovresti leggere più spesso la documentazione.
Ho letto e provato ma ottengo un errore "array out of range". Nell'esempio sembrava così:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Ho letto e provato ma ottengo un errore "array out of range". Sull'esempio sembrava così:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Quando la condizione A[i] < B[i] non è soddisfatta, la dimensione dell'array rimane invariata e il contatore del ciclo viene incrementato. Ecco perché è fuori portata.
Provate in questo modo.
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Quando la condizione A[i] < B[i] non è soddisfatta, la dimensione dell'array rimane invariata e il contatore del ciclo viene incrementato. Ecco perché è fuori dai limiti.
Prova in questo modo.
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Ho letto e provato ma ottengo un errore "array out of range". Nell'esempio sembrava così:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Beh, questo funzionerebbe più velocemente
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Beh, funzionerà più velocemente in questo modo
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Grazie, capisco! Sarà più veloce a causa dell'ArraySize, lo rallenta in qualche modo?
Non molto, ma è chiaro e a prova di errore.